// Revision history:
  //
  // 20.08.2001 - FT fragments & DR keywords. 
  //            - optional output: graphical alignment, FT fragments, etc.
  //            - file name settings at start.
  //
  // 25.05.2001 - Progress bar. (See annexe.h).
  //            - Matrix name included into the parm table. 
  //            - Corrected refs to the help in the parm table.
  //            - 10 min wait msg.
  // 10.05.2001 - Matrix removed ?? 
  // 07.05.2001 - Corrected internal refs: blank replaced by '_':
  //              in kwOut(): strtr( $kw, " ", "_" )
  // (10.05)      in stOut(): strtr( rtrim(substr( $s, 1, $pos - 4 ))," ","_" ). ">\n";
 ?>
 Processing your request...
 
  // --------------------- test flag
  //$test = TRUE;
  $test    = FALSE;
  if( !isset($email) ) $email   = "";    // if no 'email' field..
  // --------------------------------------------- Windows/Linux
  $Windows = FALSE;
  $Linux   = TRUE;
  if( strtoupper(substr(PHP_OS,0,3)) == "WIN" ) {
    $Windows = TRUE; $Linux=FALSE;
  }
if( $Linux ) {
//.......sasha .add to database.........
//require("/www/db/connect.php");
$GenebeeTaskID=10;
$SenderMail=$email;
$emailaddress;
//insert_message_to_db(GenebeeTaskID, $SenderMail);
//...............................
 }
  if( $test ) {
    echo 'Win=', $Windows, ', Linux=', $Linux, "
";
  }
  // Win File names:   
  if( $Windows ) {
    //+$a["a"] = 1;
    //+if( !isset($a["b"]) ) echo " a[b] = FALSE
";
 
    $title   = "Sample 44";
    $title   = "Sample P10318";
    //$title   = "Sample P14942";
    //-$seqname = ">P10318"; // ?
    //$SEQ = ">P10318
    //$SEQ = ">P14942
    //$SEQ = ">Sample 44
    $SEQ = ">P10318
MTEYKLVVVG AGGVGKSALT IQLIQNHFVD EYDPTIEDSY RKQVVIDGET CLLDILDTAG
QEEYSAMRDQ VFAINNSKSF ADINLYREQI KRVKDSDDVP MVLVGNKCDL PTRTVDTKQA
HELAKSYGIP GVEDAFYTLV REIRQYRMKK LNSSDDGTQG CMGLPCVVM
";
    $F_PREF= "e:\vnickolaev\annot\\" . "44\\" . "44";
    $F_PREF= "e:\vnickolaev\annot\\" . "p10318\\" . "p10318";
    //$F_PREF= "e:\vnickolaev\annot\\" . "p14942\\" . "p14942";
/**
    $F_PRE = $F_PREF . ".pre";
    $F_MOT = $F_PREF . ".mot";
    //$F_MOT = $F_PREF . ".mot18";
    //$F_MOT = $F_PREF . ".mot21";
    //$F_MOT = $F_PREF . ".mot38";
    //$F_MOT = $F_PREF . ".mot41";
    //$F_MOT = $F_PREF . ".mot58";
    //$F_MOT = $F_PREF . ".mot61";
    $F_PRN = $F_PREF . ".prn";
    $F_M2M = $F_PREF . ".m2m";
    //$F_STA = $F_PREF . ".sta";
    //$F_STA = $F_PREF . ".st2";
    $F_STA  = $F_PREF . ".sta";
    $F_FRAG = $F_PREF . ".inf";   
**/
            
    $F_IMPREF = "run\\" ;
    dl( "php_gd" );
  // Linux File names:    (except $inp_file, see annexe.h)
  } else {
    // from annexe.h
//    $indir  = "/hdisk1/g_mail/-m_in/";              // ************* Linux  indir
    $indir  = "/g_mail_in/-m_in/";              // ************* Linux  indir
    $outdir = "/g_mail_out/m_out/";                 // *************        outdir ?
    $pid    = getmypid();                 
    //$gif_file = "../trash/".$pid. $F_IM1 . $i . $F_IMEXT; // from annout_grali.h
    $F_IMPREF = "../trash/".$pid ;
    //++$res_file = $outdir.$pid."-.ht0";    // *** 10.05.2001
    //++$F_PRE = $res_file.".pre";           // ************ Linux
    //++$F_M2M = $res_file.".m2m";           // ************ Linux
    $F_PREF = $outdir.$pid."-.ht0"; 
  }
/**
  $F_IM1   = "run\amot31_";
  $F_IM2   = "run\am2m31_1";
  //$F_IM2   = "am2m26_3";
  $F_IM3   = "run\asta31_";
  $F_IM4   = "run\aft31_0";         // FT fragments + DR keywords  *** 07.22
**/
  $F_IM1   = $F_IMPREF. "amot32_";
  $F_IM2   = $F_IMPREF. "am2m32_1";
  $F_IM3   = $F_IMPREF. "asta32_";
  $F_IM4   = $F_IMPREF. "aft32_0";         // FT fragments + DR keywords  *** 07.22
/**
  if( $Linux ) {
    //$F_IMEXT = ".gif";               // ************ Linux GIF
    $F_IMEXT = ".png";                 // ************ Linux png
  } else {
    $F_IMEXT = ".png";
  }
**/
  $F_IMEXT  = ".png";
  $F_PRE = $F_PREF . ".pre";
  $F_MOT = $F_PREF . ".mot";
  //$F_MOT = $F_PREF . ".mot18";
  //$F_MOT = $F_PREF . ".mot21";
  //$F_MOT = $F_PREF . ".mot38";
  //$F_MOT = $F_PREF . ".mot41";
  //$F_MOT = $F_PREF . ".mot58";
  //$F_MOT = $F_PREF . ".mot61";
  $F_PRN = $F_PREF . ".prn";
  $F_M2M = $F_PREF . ".m2m";
  //$F_STA = $F_PREF . ".sta";
  //$F_STA = $F_PREF . ".st2";
  $F_STA  = $F_PREF . ".sta";
  $F_FRAG = $F_PREF . ".inf";               // new file (FT frag & DR kw)   *** 20.08.2001 
  $KW_REF   = "http://expasy.pku.edu.cn/cgi-bin/kwdef.pl?";
// sasha  
//$SEQ_REF1 = "http://www.genebee.msu.su/cgi-bin/nph-scr_keyw.pl?KEYW="; // . $seq_name .
  $SEQ_REF1 = "/cgi-bin/nph-scr_keyw.pl?KEYW="; // . $seq_name .
  $SEQ_REF2 = "&P_BANKS=SPR&FIELDS=AC";
  $EMAIL   = $email;
  $TITLE   = $title;
if( $test ) {
   if( $email != "" ) {
      echo "email = ", $email,"
";
   } else {
      echo "email = ","N/A
";
   }
   
  //$Windows=1;
  //$Linux=0;
  echo 'OS=', PHP_OS, '
';
  echo 'OS=', $HTTP_ENV_VARS['OS'], '
';
  //echo "length= ", $length, "
";
}
 // Advanced
 if( isset( $SP_SEQ ) ) {    // SP_SEQ - start position of seq
   // ...
 // Basic defaults
 } else {
   //+$SP_SEQ = 0;
   $FRAGMAX     = 15;
   $DOMAINEXT   = "ON";
   $EXCLUFRAG[] = "CHAIN";
 }
 $DOMAINEXT = strtoUpper( $DOMAINEXT );    // ?
#____________________________________ find 'k' in array 'aA = { k }'
function f_afind( $aA, $k ) {
   if( !isset( $aA ) )
            return -2;  // -------------------> array is unset
   for( $i = 0; $i < count( $aA ); $i++ ) {
     if( $aA[ $i ] == $k )
        return $i;
   }
   return -1; // not found
}
// ---------------------------------------
    
#--------------------------------------------------------SIMIL
#  Print parameter into resulting page. If ref != 0
#  is given parameter name if arranged as reference 
#--------------------------------------------------------
function  printPar( $name, $ref, $val )   {
   if( $ref == "" )
      //echo  "| $name | $val | 
";
      echo  "| $name | $val | 
";
   else
      //echo  "| $name | $val | 
";
      echo  "| $name | $val | 
";
   return   0;
}
# ------------------------------------------------------------------------------
#   Detect moleculare type for the given sequence.
#     //Returns:  1 - protein, 0 - nucleotide.               (simil.php3)
#     Returns:  0 - protein, 1 - nucleotide.               (like in C++ prog)*** 
#
#                   in seqbase.h: enum	{ MQ_PROTEIN, MQ_DNARNA, MQ_BOTH };  
# ------------------------------------------------------------------------------
$PROTEIN = 0; //1;    
$DNA     = 1; //0;
function  getMolType( $seq )    {
   $upseq = strtoupper( $seq );
   $len = strlen( $upseq );
   $nlet = 0;
   $nnuc = 0;
   for( $i = 0; $i < $len; $i++ )  {
      #echo  $seq[ $i ]."   ".intval( $seq[ $i ] )."
";
      #if( 64 < intval( $seq[ $i ] ) && intval( $seq[ $i ] ) < 91 )  {
         $nlet++;
         if( $seq[ $i ] == 'A' ||
             $seq[ $i ] == 'C' ||
             $seq[ $i ] == 'G' ||
             $seq[ $i ] == 'N' ||
             $seq[ $i ] == 'T' ||
             $seq[ $i ] == 'U'    )
            $nnuc++;
      #}
   }
   //                                   DNA  PROT
// $molType = ( 100*$nnuc > 80*$nlet ) ? 0 : 1;                // simil
   $molType = ( 100*$nnuc > 80*$nlet ) ? 1 : 0; 
   #echo    $nlet."   ".$nlet."   ".$len."  ".$molType."
";
   return  $molType;
}
// ----------------------------------------------------
// Get Base of a file name
// ----------------------------------------------------
function f_fileBase( $fName ) {
   
	$iL    = strlen ( $fName );
	$point = strrpos( $fName, '.' );
	if( $point < 1 )  $point = $iL;  // -> fName.end 
	$slash = strrpos ( $fName, '/' );
  if( $slash < 1 ) $slash = strrpos ( $fName, '\\' );
  if( $slash < 1 ) $slash = 0;                        // php3 & 4 ?
 
	$start = 0; //fName;
	if( $slash > 0 ) $start = $slash + 1;
  $len = $point - $start;
	//if( len > lenMax ) len = lenMax;
  return substr( $fName, $start, $len );
}
if( $test ) {
  echo " Base of /some/two/base.matr = ", f_fileBase( "/some/two/base.matr" ), "
";
}
 # --------------------------------------------------------
 #           Check some conditions.
 # --------------------------------------------------------
/*****/
 if( $SEQ == "" )  {
     echo  "I guess, you forgot to enter/paste your favorite sequence.
I can't read that guy out of your mind so far. Sorry...";
     exit;
 }
  // -------------------------------- split Fasta seq to: name, seq.
  //echo "SEQ = " , $seq, "
";
  echo '
';
  //$iPS  = strpos ($SEQ, '\n');
  //if( substr( $SEQ, $iPS, 1 ) == "\r" ) $iPS--;
  //$seqname = substr( $SEQ, 0, $iPS );
  //$seqbody = substr( $SEQ, $iPS + 1);
  $parts   = split( "[\r\n]+", $SEQ);
  $seqname = $parts[0];
if( $test ) {
  //echo "iPS = ", $iPS, "
";
  echo "SEQ name = " , $seqname, "*
";
  //echo "SEQ body = " , $seqbody, "*
";
}
/*****/
 # --------------------------------------------------------
 #           Creats lock-file for input file
 # --------------------------------------------------------
 $T = 0;
 //++$T = 5*( count( $P_BANKS ) + count( $N_BANKS ) );
 if( $T == 0 )
    $T = 10; //5;              // *** 25.05.2001
 //echo "Estimated time before completing your //request is approximately $T minutes...";
 //echo "Estimated time before completing your request is //approximately $T minutes...";
 echo "Estimated time before completing your request is approximately $T minutes...";
 flush();
 // -----------------------
 // Set default parameters 
 // -----------------------
  /**/
   // if( !isset() ) ...              OK basic/advanced 
   if( !isset( $ML_THRESH  ) ) $ML_THRESH  = 7;
   if( !isset( $MHP_THRESH ) ) $MHP_THRESH = 0.01;
   if( !isset( $C_RATIO    ) ) $C_RATIO    = 0.02;
   if( !isset( $W_WIDTH    ) ) $W_WIDTH    = 7;    // ** 5
   if( !isset( $NUM_COI    ) ) $NUM_COI    = 0;    // ** 4 ?
   if( !isset( $P_SIZE     ) ) $P_SIZE     = 100;
   if( !isset( $MN_SHIFTS  ) ) $MN_SHIFTS  = 20;
   if( !isset( $MN_ALIGN   ) ) $MN_ALIGN   = 100;
   if( !isset( $MN_PRINT   ) ) $MN_PRINT   = 10;     // Max supermotifs to print
   //if( !isset( $MN_PRINT2   ) ) $MN_PRINT2   = 15;
   if( !isset( $MN_KW      ) ) $MN_KW      = 12;     // Max keywords in gr.alignment
   if( !isset( $SP_SEQ     ) ) $SP_SEQ     = 0;
   if( !isset( $EP_SEQ     ) ) $EP_SEQ     = 100000;
   if( !isset( $GAP_PEN    ) ) $GAP_PEN    = 1.0;
   if( !isset( $DOTHELIX   ) ) $DOTHELIX   = "Y";
   if( !isset( $MFR        ) ) $MFR        = "Y";
   if( !isset( $TRANS      ) ) $TRANS      = "N";         // Strand
   //+$STRAND     = "N";
   if( !isset( $CLUSTER    ) ) $CLUSTER    = "f";
   if( !isset( $MP_THRESH  ) ) $MP_THRESH  = 4;
   if( !isset( $AP_THRESH  ) ) $AP_THRESH  = 6;
  /**/
/***
 $ML_THRESH        = 7;
 $MP_THRESH        = 4;
 $AP_THRESH        = 6;
 $MP_THRESH_BASIC  = 4;
 $MP_THRESH_MINOR  = 0;
 $MP_THRESH_SIGNI  = 6;
 $MHP_THRESH       = 0.005;  // homology
 $MFR              = 1;      // N;
 $NORM             = 0;      // N;
 $DH_ACCURATE      = 0;      // N;
 $MN_PRINT         = 20;
 $MN_PLOT          = 1000;      // 
 //$SEQTYPE          = "Auto";
 //$MULTI_PWMATRIX   = "BLOSUM";
 //$MULTI_DNAMATRIX  = "IUB";
 // File Names:
 $S1_FNAME         = "seq1.txt";
 $S2_FNAME         = "seq2.txt";
 $MAP_MSGS         = "map_msgs.txt";
 $MOT_LIST         = "motifs.txt";
 $IMAGE_PREF       = "mot12_";
 // TODO:
 //$WMATR            = "blos.wmt";
 //$PARMFILE         = "parm.txt";
 // -----------------------
 // Change defaults 
 // -----------------------
 if( !empty($nplot   ) ) $MN_PLOT          = $nplot;
 if( !empty($ntext   ) ) $MN_PRINT         = $ntext;
 if( !empty($length  ) ) $ML_THRESH        = $length;
 if( !empty($power   ) ) $MP_THRESH_BASIC  = $power;
 if( !empty($power0  ) ) $MP_THRESH_MINOR  = $power0;
 if( !empty($powerS  ) ) $MP_THRESH_SIGNI  = $powerS;
 if( !empty($accurate) ) $DH_ACCURATE      = ($accurate=="Off" ? 0 : 1);
 if( !empty($homology) ) $MHP_THRESH       = $homology;
 if( !empty($mfr     ) ) $MFR              = ($mfr=="Off" ? 0 : 1 );
 if( !empty($norm    ) ) $NORM             = ($norm=="Off" ? 0 : 1 );
 if( $MFR == 0 )         $NORN = 0;
 // ___________________________________________________ molType & matrix select
 //if( !empty($seqtype ) ) $SEQTYPE          = $seqtype;
 $MOLTYPE = getMolType( $seq1 );    // $seqtype == "Auto"
 if( $test )
   echo "AUTO MOLTYPE = ", $MOLTYPE, "
";
 if( $SEQTYPE == "DNA" ) {
   if( $MOLTYPE == $PROTEIN ) {
     echo "Warning: The sequences seem to be Protein, but you have selected DNA matrix.
";
   }
   $MOLTYPE = $DNA;  // 0
 }
 if( $SEQTYPE == "Protein" ) {
   if( $MOLTYPE == $DNA ) {
     echo "Warning: The sequences seem to be DNA, but you have selected Protein matrix.
";
   }
   $MOLTYPE = $PROTEIN;  // 0
 }
***/
include "annexe.h"; 
/**
 if( $Windows ) {
   //system( ...  );
 } else {
   //system( ...  );
 }
**/
 # -----------------------------------------------------------
 #     Output results. 
 # -----------------------------------------------------------
 #_________________________ Banner
 //echo "Screening by Similarity Results
";
 echo "
";
 echo "";
 echo " Genebee Predicted Annotation
";
 //if( $TITLE != "" ) echo "",$TITLE,"
";
 if( $TITLE != "" ) echo "",$TITLE,"
";
/*******
 // __________________________References:
 echo "References:
";
 echo "1. Leontovich A.M.,Brodsky L.I., Gorbalenya A.E., Construction of the full ";
 echo "local similarity map for two biopolymers, 1993, Biosystems, 30,57-63.";
 
 echo "2. Brodsky L.I., Ivanov V.V., Ya.L. Kalaydzidis,Leontovich A.M., Nikolaev V.K., "; 
 echo "Feranchuk S.I.,Drachev V.A., GeneBee-NET:Internet-based server for analyzing ";
 echo "biopolymers structure, 1995, Biochemistry, 60,8,923-928.
";
******/
 #_________________________ Content
 //echo  "
| ";
 echo  " ";
 fclose( $frel );
**/
 echo "| ";
 echo " Contents: |  |  |  | ";
/**
 #_________________________ Banks Version fron file 'banks.version'.
 $frel = fopen( "/www/services/banks.version", "r" );
 echo  "
 | ";
 while( $buf = fgets( $frel, 128 ) )
    echo  $buf;
 echo  " | 
 | 
";
 #_________________________ Parameters.
 echo " Parameters
";
 //++echo  " 
";
 // +echo  "";
 echo '  
';
 echo "| Name";      
 echo " | Value";    
 if( $TITLE != "" )  {
    printPar("Title","",$TITLE);
 }
 if( $EMAIL != "" )  {
    printPar("User Email Address","",$EMAIL);
 }
/***
 printPar( "Motif power threshold - DotHelix","help.html#mpower",$MP_THRESH);
 printPar( "Alignment power threshold - DotHelix","help.html#apower",$AP_THRESH);
 printPar( "Motif length threshold","help.html#length",$ML_THRESH );
 printPar( ". . .","","?" );
 printPar( ". . .","","?" );
 
 printPar( "Minimal homology ratio ","help.html#homology",$MHP_THRESH );
 printPar( "Accurate Dothelix","help.html#accurate",$DH_ACCURATE );
 printPar( "Motif frequences recalc","help.html#mfr",$MFR );
***/
    printPar("Motif's power threshold","help.html#mpower",$MP_THRESH);
    printPar("Alignment's power threshold","help.html#apower",$AP_THRESH);
    printPar( "Motif's length threshold","help.html#length",$ML_THRESH );
    printPar( "Coincidence ratio","help.html#cratio",$C_RATIO );
    printPar( "Maximum number of shifts","help.html#mn_shifts",$MN_SHIFTS );
    printPar( "Maximum  number of selected alignments","help.html#mn_align",$MN_ALIGN );
    printPar( "Start position of query sequence","help.html#seqpos",$SP_SEQ );
    printPar( "End position of query sequence","help.html#seqpos",$EP_SEQ );
    printPar( "Gap penalty","help.html#gap_pen",$GAP_PEN );
    $Strand  = ( $TRANS == "Y" ) ? "Both" : "Only forward";
    $Cluster = ( $CLUSTER == "f" ) ? "Each frame separately" : "Codirectional joinly";
    printPar( "Strand","help.html#strand", $Strand );
    printPar( "Clusterization type","help.html#cluster", $Cluster );
    printPar( "Threshold of motif's homology percentage","help.html#homology",$MHP_THRESH );
    printPar( "Accurate dothelix","help.html#accurate",$DOTHELIX );
    printPar( "Motif frequences recalc","help.html#mfr",$MFR );
    printPar( "Weight matrix","help.html#matrices",$MATR );              // *** 25.05.2001
    // FT fragment options
    printPar( "Max number of FT keywords","help.html#FRAGMAX",$FRAGMAX );
    if( !isset($EXCLUFRAG[0]) ) {
       $sWk = "None";
    } else {
      $sWk = $EXCLUFRAG[0];
      if( $sWk == "HELIX" ) {
          $sWk = "HELIX, TURN, STRAND";
      }
      for( $i = 1; $i < count( $EXCLUFRAG ); ++$i ) {
         $sWk .= (", " . $EXCLUFRAG[$i] ) ;
      }
    }
    printPar( "Excluded fragments","help.html#EXCLUFRAG",$sWk );
    printPar( "DOMAIN extension to qualifier","help.html#DOMAINEXT",$DOMAINEXT );
    // Opt Line:
    $optline = "ANum=" .$MN_ALIGN . ",MPower=" . $MP_THRESH . ",APower=" . $AP_THRESH;
    $optline.= ( ",Len=" . $ML_THRESH . ",Accu=" . $DOTHELIX . ",Freq=" . $MFR );
    $optline.= ( ",Homo=" . $MHP_THRESH . ",Coin=" . $C_RATIO . ",Gap=" . $GAP_PEN );
 echo " | 
";
/***              *** 10.05.2001 Matrix removed ???????????? 
 echo "
 ";
 echo " 
  ";
 //echo  "
| Aminoacid matrix";
 //                                                                *********
 //echo  " | ";
 echo  "| ";
/***
 if( $Linux ) {
   $fmat = fopen( "../data/".$MATR.".matrix", "r" );             // ************ Linux
 } else {
   //$fmat = fopen( $wmFile, "r" );
   $fmat = fopen( $MATR.".matrix", "r" );
 }
 while( $buf = fgets( $fmat, 128 ) )    {
    echo $buf;
 }
 fclose( $fmat );
***/
 
/***
 if( $Linux ) {
   $fmat = "../../data/".$MATR.".matrix";              // ************ Linux ***  07.05.2001
 } else {
   $fmat = $MATR.".matrix";
 }
 readfile( $fmat );
 echo  " |  | 
";
 
 echo  "
";
***/
/*****
 // --------------------------------------------------------
 // List of the mouse sensitive msgs - maps' polygons, etc.
 // --------------------------------------------------------
 $fmsg = fopen( $MAP_MSGS, "r" );
 while( $buf = fgets( $fmsg, 128 ) )    {
    echo $buf;
 }
 fclose( $fmsg );
 //echo "";
 //echo "";
*****/
 // --------------------------------------------------------
 // Predicted annotation.
 // --------------------------------------------------------
 function f_kwOut( $s, $xx, $KW_REF, &$aST ) {
    global $OUTPUT;
    //+$r  = strpos( $s, " ", 5 ); 
    //echo "r = ", $r, "
";
    //+$kw = substr( $s, 5, $r - 5 );
    $kw = rtrim(substr( $s, 5, 40 ));
    $r  = strlen( $kw ) + 5;
    //echo $xx, "   ", $kw, "";
    if( $xx == "KW" )
      echo $xx, "   ", $kw, "";
    else
      echo $xx, "   ", $kw, "";
    //echo substr( $s, $r, strlen( $s ) - $r - 1 ), " (stat)\n";
    //$sd = strpos( $s, " SD", 41 ) - 6;  // always found
    //echo substr( $s, $r, $sd - $r - 1 ), " ";
    //echo( substr( $s, $sd, 6 + 3 ) . "" . substr( $s, $sd + 6 + 3) );
    $sd   = strpos( $s, " SD", 41 );        // always found
    $prob = strpos( $s, " Prob", 41 ) + 1;  // always found
    
    //echo substr( $s, $r, $prob - $r - 1 ), " ";  // ***07.05.2001
    echo( substr( $s, $r, $prob - $r - 1 ) . " " );
    if( f_afind( $OUTPUT, "STAT" ) > -1 ) {
        echo( "" );
    }
    echo( substr( $s , $prob , $sd - $prob ) );
    if( f_afind( $OUTPUT, "STAT" ) > -1 )
        echo(  "" );
    echo( substr( $s, $sd ) );
/**/
    // KW Stats:
    $v = substr( $s, $sd, 6 );
    settype( $v, "double" );
    $tkw = $xx . ": " . $kw;
    if( isset($aST[ $tkw ]) ) {
        if( $aST[ $tkw ] < $v )
           $aST[ $tkw ] = $v;
    } else 
        $aST[ $tkw ] = $v;
/**/
    return $kw;
 }
 echo "
";
 echo " Predicted Annotation
";
 echo "";
/**                                                      see at start
 //$F_PRE = "e:\vnickolaev\annot\\" . "44\\" . "44.pre";
 if( $Linux ) {
      $res_file = $outdir.$pid."-.ht0";    // *** 10.05.2001
      $F_PRE = $res_file.".pre";           // ************ Linux
      $F_M2M = $res_file.".m2m";           // ************ Linux
 } 
**/
 $fpre = fopen( $F_PRE, "r" );
 $iKW  = -1;
 $kwPrev = "";
 $kwLine = "*,";                           // *** 20.01.01
 $seqLen = 0;
 while( $buf = fgets( $fpre, 128 ) )    {
    $xx = substr($buf,0,2);
    if( $xx == "DE" || $xx == "KW" || $xx == "FT" ) {
      $kw = f_kwOut( $buf, $xx, $KW_REF, $aST );
      
      if( $iKW >= ($MN_KW - 1) ) continue; // <-------- too many keywords *** 02.02.01
      $tKw = $xx . ": " . $kw;
      if( $xx != "FT" ) {
        $iKW++; 
        //$aKW[$iKW] = $xx . ": " . $kw;
        $aKW[$iKW] = $tKw;
        $kwLine .= ( $tKw . "," );
      } else {
        if( $kw != $kwPrev ) {
          $iKW++;
          $kwPrev = $kw;               // Same FT keywords must be groupped together !
          //$aKW[$iKW] = $xx . ": " . $kw;
          $aKW[$iKW] = $tKw;
          $kwLine .= ( $tKw . "," );
        }
      }
    } else {
      // get seqLen:
      if( $xx == "ID" ) {
        echo( $buf );
        $pos = strpos( $buf, " AA." );
        if( $pos > 0 ) {
          $str = rtrim( substr( $buf, 0, $pos ) );
          $bla = strrpos( $str, " " );
          $seqLen = substr( $str, $bla+1 );
          settype( $seqLen, "integer" );
          //+echo "seqlen=" . $seqLen . "
";
        }
      // Set seq ref: 
      } else if( $xx == "SQ" ) {
        echo(  "" );
        echo( $buf );
        echo(  "" );
      } else
        echo $buf;
    }
 }
 fclose( $fpre );
 echo "";
 
 // ***********************************************************
#--------------------------------------------------------
#   Get motifs information from Genebee motif file,
#          created by search program.
#--------------------------------------------------------
// $beg  - starts in source seq
// $beg2 - start of the found seq motif
//+function   getMotGen( &$iSup, &$beg, &$len, &$maxLen, &$power, $mot_file, &$aSN )  {
function   getMotGen( &$iSup, &$beg, &$len, &$maxLen, &$power, $mot_file, &$aSN, &$beg2 )  {
   if( file_exists( $mot_file ) )   {
      $fmot = fopen( $mot_file, "r" );
      $iSup = -1;
      while( $buf = fgets( $fmot, 1024 ) )    {
         if( ereg( "Supermot", $buf ) )  {
            $iMot = 0;
            $iSup++; 
            $parts = split( "[ ]+", $buf, 8 );
            $nMot = $parts[ 6 ];
            //+echo       " SN = *", $parts[ 4 ], "*
";
            $aSN[$iSup]     = $parts[ 4 ];
            $power[ $iSup ] = $parts[ 5 ];
         }
         else   {
            if( $iSup == -1 ) continue;     // < ------------------------ ***
            $parts = split( "[ ]+", $buf, 6 );
            $beg[ $iSup ][ $iMot ]  = $parts[ 2 ];
            $beg2[ $iSup ][ $iMot ] = $parts[ 3 ];   // *** 07.22
            $len[ $iSup ][ $iMot ]  = $parts[ 4 ];
            if( $iMot < $nMot )
               $iMot++;
         }
      }
      fclose( $fmot );
      $maxLen = 0;
      $iSup++;
      for( $i=0; $i < $iSup; $i++) {
         for( $j=0; $j < count( $beg[ $i ] ); $j++)   {
            $maxLen = max( $maxLen, ( $beg[ $i ][ $j ] + $len[ $i ][ $j ] ) );
         }
      }
      return  $iSup;
   }
   else
     return  0;
}
#--------------------------------------------------------
#        Create Graphic Alignment Image-file 
#--------------------------------------------------------
include "annali.h";
#--------------------------------------------------------
#   Make string for displaying during mouse moving
#   over the graphic alignment.
#--------------------------------------------------------
function  makeOneStr( $buf )   {
   $part1 = strchr( $buf, "[" );
   $len   = strcspn( $part1, "]" );
   $part2 = trim( strchr( $buf, "!" ) );
   $res = substr( $part1, 1, $len-1 ).substr( $part2, 3 );
   return  $res;
}
/***
function  noAns( $res_file )   {
   $sign = 0;
   $fr = fopen( $res_file, "r" );
   while( $buf = fgets( $fr, 1024 ) )   {
      #echo  $buf."
";
      if( ereg( "========", $buf ) )  {
         $sign = 1;
         break;
      }
   }
   if( $sign )   {
      echo  "
";
      echo  "";
      while( $buf = fgets( $fr, 1024 ) )   {
         #echo  $buf."
";
         if( ereg( "========", $buf ) )  {
            echo   "";
            break;
         }
         if( !ereg( "FONT", $buf ) )   {
            echo   $buf."
";
         }
      }
   }
   fclose( $fr );
   return  $sign;
}
 if( $Linux ) {
   $res_file = $outdir.$pid."-.ht0";         // ************ Linux
   if( file_exists( $res_file ) )  {
    if( noAns( $res_file ) )
       exit;                   // ----------------------->No reply ?
    }
   }
 }
***/
    # -----------------------------------------------------------
    #    Find out supermotifs information from GeneBee motif file
    #    Here: iSup     - number of supermotifs.
    #          beg[][]  - array of motifs beginnings
    #          len[][]  - array of motifs lengths
    #          power[]  - array of supermotif's powers
    # -----------------------------------------------------------
/**                                // *** 20.08.2001
 if( $Linux ) {
    $F_MOT = $res_file.".mot";               // ************ Linux
 } else {
    //$mot_file = $F_MOT;
    
    dl( "php_gd" );
 }
**/
    getMotGen( $iSup, $beg, $len, $maxLen, $power, $F_MOT, $aSN, $beg2 );  // +beg2  *** 07.22
    # -----------------------------------------------------------
    #   Create graphic alignment Image-file. (.png)
    # -----------------------------------------------------------
/***                                           ????????????????????????
 if( $Linux ) {
    //$gif_file = "../trash/".$pid.".gif";     // ************ Linux GIF ??
    $gif_file = "../trash/".$pid. $F_IM1 . "0" . $F_IMEXT;
    if( file_exists( $gif_file ) ) {
       unlink( $gif_file );
    }
 }
***/
    $size     = 3;
    $bor      = 5;
    $wid      = 600;
    $key_size = 33;
    $space    = 2; //3; // ***
    $xtra     = 1;
/**/    
    // Enlarge picture:
    //+if( $iSup  < 10 ) 
    if( $iSup  < 20 )                     // *** 02.02.01
       $size *= 3;
    //+else if( $iSup  < 20 )
    //++else if( $iSup  < 40 )
    else if( $iSup  < 60 )
       $size *= 2;
/**/
    // ---------------------------------------------------------
    // Get KW lines of 1&0.
    // kwLine - contains only significant KWs.
    // ---------------------------------------------------------
function f_getKW( $fsta, &$aKW01, $type, $kwLine ) {  // type = FT, DE, KW
    // skip till " ...;    1 1 ..."
    $pos = 0;
    while( $buf = fgets( $fsta, 512 ) )    {
      if( ($pos = strpos( $buf, ';' )) > 0 ) break;
    }
    do {
      $k  = trim( substr( $buf, 0, $pos ) );             // key
      $tk = $type . ": " . $k; 
      if( strpos( $kwLine, "," . $tk . "," ) < 1 ) continue;
      //echo " pos = ", $pos, ", k = ", $k, "
";
      //$n = strpos( $buf, '\n', $pos+4);
      $v = trim(substr( $buf, $pos+1, strlen( $buf) - 1 - $pos - 1 )); // value = "1 1 1 0 ..."
      //echo "*v = ", $v, ", buf = ", $buf," 
";
      //+$aKW01[ $type . ": " . $k ] = $v;
      $aKW01[ $tk ] = $v;
    } while ( ($buf = fgets( $fsta, 512 )) && ($pos = strpos( $buf, ";" )) > 0 );
    
    //+echo "Num of aKW01[] = " . count( $aKW01 ) . "
";
}
//  ---------------------------------
/**
    if( $Linux ) {
      //$F_STA = $res_file.".sta";           // ************ Linux
      $F_STA = $res_file.".sta";             // ************ Linux
    } 
**/
    $fsta = fopen( $F_STA, "r" );
    // Seq Num -> Name:                         $aNumName[]
    while( $buf = fgets( $fsta, 128 ) )    {
      if( ereg( "List", $buf ) )  break;
    }
    while( $buf = fgets( $fsta, 128 ) )    {
      if( strlen( $buf ) > 3 )  break;
    }
    $i = 0;
    do {
      //+echo "buf=", $buf,"
";
      $parts = split( "[ \r\n]+", $buf, 4 );
      //echo "parts: ", $parts[1], "*, ", $parts[0], "*
";
      //$aNumName[ settype( $parts[1], "string") ] = $parts[0];
      $aNumName[ $parts[1] ] = $parts[0];
      $aPosName[ $parts[0] ] = $i++;                           // *** 20.01.01
    } while( ($buf = fgets( $fsta, 128 )) && ( strlen( $buf ) > 3 ) );
    
    //+-echo "***aNumName[53802]=", $aNumName["53802"],"
";
    // Get 0/1's:
    $bFT  = FALSE;
    $bKW  = FALSE;
    $bDE  = FALSE;
    while( $buf = fgets( $fsta, 128 ) )    {
      $posFT = strpos( $buf,"=  FT  =" );
      $posDE = strpos( $buf,"=  DE  =" );
      $posKW = strpos( $buf,"=  KW  =" );
      if( $posDE  > 0 ) {
        $bDE = TRUE;
        f_getKW( $fsta, &$aKW01, "DE", $kwLine );
      } else  if( $posKW  > 0 ) {
        $bKW = TRUE; 
        f_getKW( $fsta, &$aKW01, "KW", $kwLine );
      } else  if( $posFT  > 0 ) {
        $bFT = TRUE; 
        f_getKW( $fsta, &$aKW01, "FT", $kwLine );
      } else {
        continue;
      }  
      if( $bFT && $bDE && $bKW )
        break;  // ----------------->
    }
    fclose( $fsta );
/**    
    // Test output: **********
    if( count( $aKW01 ) > 0 ) {
      $aWk = array_keys( $aKW01 );
      for( $i = 0; $i < count( $aKW01 ); $i++ ) {
        echo " key = *", $aWk[$i], "*, value = *", $aKW01[ $aWk[$i] ], "*
"; 
      }
    }
**/
 // --------------------------------------------------------
 // XREF: get found seq names & supermotif name
 // --------------------------------------------------------
 $fmot = fopen( $F_MOT, "r" );
 $i = 1;
 $iFS = 0;
 while( $buf = fgets( $fmot, 128 ) )    {
    if( substr( $buf, 0,5 ) == "Super" ) {
      //+$pos = strpos( $buf, ".dat" );
      //+$aFS[substr( $buf, $pos + 5, 6 )] = ++$iFS;
      $wk = split( "[ ]+", $buf, 6 );
      //echo "wk4=", $wk[4], "*
";
      $aFS[ $wk[4] ] = ++$iFS;
      $aSupName[]    = $aNumName[ $wk[4] ];
      
      
//+$iFS = 1;
      //-echo "FS ID = ", $wk[4], "*", $wk[0], "*", $wk[1], "*", $wk[2],"
";
      //+echo "FS ID = *", $aFS[0], "*","
";
      break;
    }
 }
 while( $buf = fgets( $fmot, 128 ) )    {
    if( substr( $buf, 0,5 ) == "Super" ) {
      //+$pos = strpos( $buf, ".dat" );
      //+if( !isset( $aFS[substr( $buf, $pos + 5, 6 )] ) ) {
      //+  $aFS[substr( $buf, $pos + 5, 6 )] = ++$iFS;
      $wk = split( "[ ]+", $buf, 6 );
      //echo "wk4=", $wk[4], "*
";
      if( !isset( $aFS[ $wk[4] ] ) ) {
        $aFS[ $wk[4] ] = ++$iFS;
      }
      if( isset($aNumName[ $wk[4] ]) ) {
        $aSupName[]    = $aNumName[ $wk[4] ];
      } else {
        $aSupName[]    = "*" . $wk[4];
      }
    }
 }
 //+echo "FS N = ", $iFS, "
";
 fclose( $fmot );
 // -------------------------------------------------------
      // maxLen must be seqLen !      *** 02.02.01
      if( $seqLen == 0 )
          $seqLen = $maxLen;
      $wid0 = $wid; //$hei0 = $hei;  // save *** 07.22
 #____________________________________________Graphical alignment display
 if( f_afind( $OUTPUT, "GRALI" ) > -1 ) {
   $section = "AGRAPH";
   include "annmline.h";
   include "annout_grali.h";
 }
 #____________________________________________FT fragments & DR keywords
 if( f_afind( $OUTPUT, "FRAG" ) > -1 ) {
   $section = "FRAG";
   include "annmline.h";
   include "annout_frag.h";
 }
/**
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 echo "*
\n";
 exit();
**/
 // **************
    //+$section = "XREF";
    //+include "annmline.h";
 // --------------------------------------------------------
 // XREF: generate image
 // --------------------------------------------------------
 if( f_afind( $OUTPUT, "XREF" ) > -1 ) {
    $section = "XREF";
    include "annmline.h";
    include "annxref.h";
/**
    if( $Linux ) {
      $m2m_file = "../trash/".$pid. $F_IM2 . $F_IMEXT; // ************ Linux ??
    } else {
      $m2m_file = $F_IM2 . $F_IMEXT; //"am2m1_1.png";
    }
**/
    $m2m_file = $F_IM2 . $F_IMEXT; //"am2m1_1.png";           // *** 20.08.2001
    $iw = 640; $ih = 500;
    f_m2mImage( $F_M2M, $m2m_file, $aFS, $iFS, $aNumName, $seqname, $iw, $ih,
              $MATR, $SEQ_REF1, $SEQ_REF2, &$m2mMap, $optline );
    //   $wk = $SEQ_REF1 . $aSupName[ $i - 1 ] . $SEQ_REF2;
    echo "
Cross-Reference Map of The Found Sequences
";
    //echo( " " );
     echo( "
" );
     echo( " " );
    /***/
    // m2m map:
    echo "";
} // end of XREF
 #____________________________________________Brief descr & first 10 supermotifs
 if( f_afind( $OUTPUT, "DESCR" ) > -1 ) {
   $section = "BRIEF";   // n/a
   include "annmline.h";
   include "annout_descr.h";
 }
 // --------------------------------------------------------
 // Statistics.
 // --------------------------------------------------------
  
/**/
 function f_stOut( $s, $pos ) {
    global $OUTPUT;
    //echo "\n";
    echo( "\n" ); // *** 07.05.2001
    echo( "
" );
    /***/
    // m2m map:
    echo "";
} // end of XREF
 #____________________________________________Brief descr & first 10 supermotifs
 if( f_afind( $OUTPUT, "DESCR" ) > -1 ) {
   $section = "BRIEF";   // n/a
   include "annmline.h";
   include "annout_descr.h";
 }
 // --------------------------------------------------------
 // Statistics.
 // --------------------------------------------------------
  
/**/
 function f_stOut( $s, $pos ) {
    global $OUTPUT;
    //echo "\n";
    echo( "\n" ); // *** 07.05.2001
    echo( "" . substr($s,0,strlen($s) - 2) . " [annotation]");
    if( f_afind( $OUTPUT, "GRALI" ) > -1 ) 
       echo( "[gr.alignment]" );
    echo( "\n
");
 }
/**/
 if( f_afind( $OUTPUT, "STAT" ) > -1 ) {
   $section = "STAT";
   include "annmline.h";
   include "annsta.h";
   echo "
 Statistics
";
   echo "";
   $fsta = fopen( $F_STA, "r" );
   $stat_on = FALSE;
   $i = 0;
   while( $buf = fgets( $fsta, 512 ) )    {
    if( ($pos = strpos( $buf,"_statist" )) > 4 ) {
      $i++; 
      //if( $i > 6 ) break;   // ------------>
      if( $i > 50 ) break;   // ------------>
      //if( $i > 15 ) break;   // ------------>
      //+$stat_on = TRUE;
      f_stOut( $buf, $pos );
      //+if( $i < 7 ) {   // 4
        $aBuf[0] = fgets( $fsta, 512 );
        $aBuf[1] = fgets( $fsta, 512 );
        $aBuf[2] = fgets( $fsta, 512 );
        $aBuf[3] = fgets( $fsta, 512 );
        $iw = 500; $ih = 250+10; // may be changed ?
/**
        if( $Linux ) {
          $sta_file = "../trash/".$pid. $F_IM3 . $i . $F_IMEXT; // ************ Linux ??
        } else {
          $sta_file = $F_IM3 . $i . $F_IMEXT; //"asta1_1.png";
        }
**/
        $sta_file = $F_IM3 . $i . $F_IMEXT; //"asta1_1.png";  // *** 20.08.2001
        f_staImage( $sta_file, $buf, $pos, $aBuf, $iw, $ih, $seqname, $MATR, $optline );
        echo( "
 " );
        echo( "
" );
        echo( "
" );
      //} else {
      //  if( $stat_on )
       
      //+}
      if( $test ) {
          echo $aBuf[0]; echo $aBuf[1];
          echo $aBuf[2]; echo $aBuf[3];
      }
      //}
    }
   } // end of while loop
   fclose( $fsta );
   echo "";
 } // end of stat
/***/
 
/***
 // test .prn
 echo " Test .prn
";
 echo "";
 $fsta = fopen( "P10318.prn", "r" );
 while( $buf = fgets( $fsta, 256 ) )    {
    //if( ($pos = strpos( $buf,"_statist" )) > 4 ) {
    //  f_stOut( $buf, $pos );
    //} else {
      echo $buf;
    //}
 }
 fclose( $fsta );
 echo "";
***/
 
?>
  /***
    echo( '
";
   ***/
    //- echo( "
" );  // no effect
    $section = "BOTTOM";
    include "annmline.h";
    #                             Delete all temporary files.
    if( $Linux ) {
      // system( "rm $F_PRE" );                  // ************ Linux
      // system( "rm $F_MOT" );
      // system( "rm $F_FRAG" );
      // system( "rm $F_M2M" );
      // system( "rm $F_PRN" );
      // system( "rm $F_STA" );
      //system( "rm $PARMFILE" );             // ? + images
    }
   /**/
?>
   Designed by Valeri Kazatchenko.
                  Last updated: September 7, 2001. 
   
Comments and bug-reports send to 
        Vladimir Nikolaev 
   
Created: .