Processing your request...
"; if( isset( $protein[0] ) ) echo "protein[0] = ", $protein[0], "
"; //- if( isset( $matr["dayhoff"] ) ) //- echo "matr[dayhoff] = ", $matr["dayhoff"], "
"; if( isset( $protein[1] ) ) echo "protein[1] = ", $protein[1], "
"; if( isset( $protein ) ) echo "protein is set", "
"; if( isset( $wmatr ) ) { for( $i=0; $i < count( $wmatr ); $i++ ) { $s = $i . ". matr=" . $wmatr[$i] . "
"; echo $s; } } $wk = " tit = $" . "title"; $wk2 = $wk; echo $wk2, "
"; 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 "seqtype = " , $seqtype, "
"; //echo "multi_pwmatrix = " , $multi_pwmatrix, "
"; echo "ntext = ", $ntext, "
"; echo "nplot = ", $nplot, "
"; echo "length= ", $length, "
"; } // --------------------------------------------- Windows/Linux if( strtoupper(substr(PHP_OS,0,3)) == "WIN" ) { $Windows = TRUE; $Linux=FALSE; } if( $test ) { echo 'Win=', $Windows, ', Linux=', $Linux, "
"; } #--------------------------------------------------------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. # Returns: 0 - protein, 1 - nucleotide. (like in C++ prog)*** # -------------------------------------------------------- $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; $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 seq //echo "SEQ = " , $seq, "
"; echo '
'; $iP2 = strrpos ($seq, '>'); //if( $iP2 < ?5 ) ...format ? $seq1 = substr( $seq, 0, $iP2 - 1); $seq2 = substr( $seq, $iP2 ); if( $test ) { echo "iP2 = ", $iP2, "
"; echo "SEQ1 = " , $seq1, "
"; echo "SEQ2 = " , $seq2, "
"; } # -------------------------------------------------------- # Creats lock-file for input file # -------------------------------------------------------- $T = 0; //++$T = 5*( count( $P_BANKS ) + count( $N_BANKS ) ); if( $T == 0 ) $T = 5; //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 // ----------------------- /** $ML_THRESH = 7; $MHP_THRESH = 0.01; $C_RATIO = 0.02; $W_WIDTH = 7; $NUM_COI = 0; $P_SIZE = 100; $MN_SHIFTS = 20; $MN_ALIGN = 100; $SP_SEQ = 0; $EP_SEQ = 100000; $GAP_PEN = 1.0; $DOTHELIX = Y; $MFR = Y; $TRANS = N; $CLUSTER = f; **/ $ML_THRESH = 7; $MP_THRESH_BASIC = 4; $MP_THRESH_MINOR = 0; $MP_THRESH_SIGNI = 6; $MHP_THRESH = 0.005; // homology $MFR = 1; // Y; $NORM = 1; // Y; $DH_ACCURATE = 1; // N?; $MN_PRINT = 20; $MN_PLOT = 1000; // //+$SEQTYPE = "Auto"; //+$MULTI_PWMATRIX = "BLOSUM"; //+$MULTI_DNAMATRIX = "IUB"; // File Names: if( $Windows ) $TMP = "dhm"; else $TMP = tempnam( "/tmp/", "dhm" ); $S1_FNAME = $TMP.".seq1"; $S2_FNAME = $TMP.".seq2"; $MAP_MSGS = $TMP.".msgs"; $MOT_LIST = $TMP.".motifs"; if( $Windows ) $IMAGE_PREF = "dhm"; else $IMAGE_PREF = tempnam( "../../trash/", "dhm" ); $DHM_PROGRAM = "/www/services/dhm/dhm"; $DHM_PROTOCOL = $TMP.".txt"; /** $WM = Array ( "BLOSUM" => Array ("blosum30.matrix","blosum50.matrix","blosum62.matrix"), "PAM" => Array ("dayhoff.matrix"), "GONNET" => Array ("johnson.matrix"), "ID" => Array ("dnarna.matrix"), "IUB" => Array ("dnarna.matrix"), "CLUSTALW" => Array ("dnarna.matrix") ); **/ /** //$PROTEIN = Array ( "dayhoff.matrix" $wmPROTEIN[0] = "dayhoff"; $wmPROTEIN[1] = "johnson"; $wmPROTEIN[2] = "blosum30"; $wmPROTEIN[3] = "blosum50"; $wmPROTEIN[4] = "blosum62"; $wmPROTEIN[5] = "reserved"; $wmPROTEIN[6] = "pam60"; $wmPROTEIN[7] = "pam120"; $wmPROTEIN[8] = "pam250"; $wmPROTEIN[9] = "gon120"; $wmPROTEIN[10] = "gon250"; $wmPROTEIN[11] = "gon350"; $wmDNARNA = "dnarna"; **/ // TODO: //+$WMATR = "blos.wmt"; $PARMFILE = $TMP.".parm"; // ----------------------- // 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( isset( $dnarna ) ) { // if( $MOLTYPE == $PROTEIN ) { if( isset( $wmatr ) ) { if( $MOLTYPE == $PROTEIN && ($wmatr[0] == "dnarna") ) { // *** echo "

Warning: The sequences seem to be Protein, but you have selected DNA matrix.


"; } //+$MOLTYPE = $DNA; // 0 } //if( isset( $protein ) ) { // if( $MOLTYPE == $DNA ) { if( isset( $wmatr ) ) { if( $MOLTYPE == $DNA && ($wmatr[0] != "dnarna" || count($wmatr) > 1) ) { // *** echo "

Warning: The sequences seem to be DNA, but you have selected Protein matrix.


"; } //+$MOLTYPE = $PROTEIN; // 0 } // Default matrix: //if( !isset( $dnarna ) && !isset( $protein ) ) { if( !isset( $wmatr ) ) { if( $MOLTYPE == $PROTEIN ) { //$wmatr[0] = "blosum30"; // *** $wmatr[0] = "dayhoff"; // *** } else { $wmatr[0] = "dnarna"; // *** } } //+if( !empty( $multi_pwmatrix ) ) $MULTI_PWMATRIX = $multi_pwmatrix; //+if( !empty( $multi_dnamatrix ) ) $MULTI_DNAMATRIX = $multi_dnamatrix; // ____________________________________________________ matrix Line /** if( $MOLTYPE == $PROTEIN ) $wmList = $WM[$MULTI_PWMATRIX]; else $wmList = $WM[$MULTI_DNAMATRIX]; $WM_LINE = f_fileBase( $wmList[0] ); if( $test ) echo " start WM_LINE = ", $WM_LINE, "
"; $numMatr = sizeof($wmList); for( $i = 1; $i < $numMatr; $i++ ){ $wm_ = f_fileBase($wmList[$i]); $WM_LINE = "$WM_LINE, $wm_"; } **/ //$iL = sizeof( $wmPROTEIN ); $iL = count( $wmatr ); for( $i = 0; $i < $iL; $i++ ){ //if( !isset( $protein[ $i ] ) ) continue; // <------ //$wm_ = $wmPROTEIN[ $i ]; $wm_ = $wmatr[ $i ]; if( isset( $WM_LINE ) ) { $WM_LINE = "$WM_LINE, $wm_"; } else { $WM_LINE = $wm_; } $wmList[] = $wm_ . ".matrix"; } /** if( isset( $dnarna ) ) { if( isset( $WM_LINE ) ) { $WM_LINE = "$WM_LINE, $wmDNARNA"; } else { $WM_LINE = $wmDNARNA; } $wmList[] = $wmDNARNA . ".matrix"; } **/ $numMatr = count( $wmList ); $WM_LINE = strToUpper( $WM_LINE ); // --------------------------> wmList, numMatr //echo "ML_THRESH = ", $ML_THRESH, "
"; //if( $Windows ) { $fp = fopen( $PARMFILE, "w" ); fputs( $fp, "Plot $MN_PLOT\n" ); fputs( $fp, "Print $MN_PRINT\n" ); //+fputs( $fp, "PowerSigni $MP_THRESH_SIGNI\n" ); fputs( $fp, "PowerSigni 0\n" ); fputs( $fp, "NoiseUpperBound $MP_THRESH_BASIC\n" ); fputs( $fp, "PowerLow $MP_THRESH_MINOR\n" ); fputs( $fp, "Length $ML_THRESH\n" ); fputs( $fp, "Accurate $DH_ACCURATE\n" ); fputs( $fp, "Homology $MHP_THRESH\n" ); fputs( $fp, "Frequency $MFR\n" ); fputs( $fp, "Normalize $NORM\n" ); fputs( $fp, "Moltype $MOLTYPE\n" ); fputs( $fp, "Seq1 $S1_FNAME\n" ); fputs( $fp, "Seq2 $S2_FNAME\n" ); fputs( $fp, "Map msg file $MAP_MSGS\n" ); fputs( $fp, "Motifs file $MOT_LIST\n" ); fputs( $fp, "PNG name pref $IMAGE_PREF\n" ); //$MAP_MSGS = "map_msgs.txt"; //$MOT_LIST = "motifs.txt"; //$IMAGE_PREF = "mot12_"; for( $i = 0; $i < $numMatr; $i++ ) { fputs( $fp, "Matrix $wmList[$i]\n" ); } fclose( $fp ); //} /** $indir = "/hdisk1/g_mail/-m_in/"; $outdir = "/g_mail_out/m_out/"; $pid = getmypid(); $sem_name = $indir.$pid.".lok"; $fp = fopen( $sem_name, "w" ); fclose( $fp ); # -------------------------------------------------------- # Creates input file # -------------------------------------------------------- $inp_file = $indir.$pid; $fp = fopen( $inp_file, "w" ); fputs( $fp, "From: " ); fputs( $fp, $EMAIL."\n" ); fputs( $fp, "\n[addrfrom]\n" ); fputs( $fp, "from: WWW to: GeneBee (MOSAIC)\n" ); if( $TYPE != "SIM_KEY" ) fputs( $fp, "Screening by similarity\n" ); else fputs( $fp, "Keyword -> Similarity\n" ); fputs( $fp, "\n[receive]\n" ); fputs( $fp, "Receive Sequence= $RCV_SEQ\n" ); fputs( $fp, "3D_COORDINATE= $D_COORD\n" ); if( $SEQ_ALIGN == "SEQUENCE" || $TYPE == "SIM_KEY" ) { $molType = getMolType( $SEQ ); fputs( $fp, "[sequence]\n" ); if( $SEQ_NAME == "" ) fputs( $fp, ">Unnamed\n" ); else fputs( $fp, ">".$SEQ_NAME."\n" ); } else fputs( $fp, "[align]\n" ); fputs( $fp, $SEQ ); if( $MATR == "" ) { if( $molType == 1 ) $MATR = "blosum62"; else $MATR = "dnarna"; } fputs( $fp, "\n\n[matrix]\n" ); $fmat = fopen( "../data/".$MATR.".matrix", "r" ); while( $buf = fgets( $fmat, 128 ) ) { fputs( $fp, $buf ); } fclose( $fmat ); fputs( $fp, "\n\n[banks]\n" ); $numP = count( $P_BANKS ); $numN = count( $N_BANKS ); $numG = count( $G_BANKS ); if( $numP + $numN + $numG == 0 ) { if( $molType == 1 ) { $P_BANKS[ 0 ] = "SPR"; $numP = 1; } else { $N_BANKS[ 0 ] = "HUM"; $numN = 1; } } for( $i = 0; $i < $numP; $i++ ) fputs( $fp, $P_BANKS[ $i ]." " ); for( $i = 0; $i < $numN; $i++ ) fputs( $fp, $N_BANKS[ $i ]." " ); for( $i = 0; $i < $numG; $i++ ) fputs( $fp, $G_BANKS[ $i ]." " ); if( $TYPE == "SIM_RED" || $TYPE == "SIM_KEY" ) { // Set default parameters if REDUCE was choosen $ML_THRESH = 7; $MHP_THRESH = 0.01; $C_RATIO = 0.02; $W_WIDTH = 7; $NUM_COI = 0; $P_SIZE = 100; $MN_SHIFTS = 20; $MN_ALIGN = 100; $SP_SEQ = 0; $EP_SEQ = 100000; $GAP_PEN = 1.0; $DOTHELIX = Y; $MFR = Y; $TRANS = N; $CLUSTER = f; if( $molType == 1 ) { // The case protein $C_RATIO = 0.02; $W_WIDTH = 7; $NUM_COI = 0; $DOTHELIX = Y; } else { $C_RATIO = 0.05; $W_WIDTH = 5; $NUM_COI = 4; $DOTHELIX = N; } } fputs( $fp, "\n\n[params]\n" ); fputs( $fp, "Length threshold $ML_THRESH\n" ); fputs( $fp, "Power threshold $MP_THRESH\n" ); fputs( $fp, "Subalign. power $AP_THRESH\n" ); fputs( $fp, "Min. homology ratio $MHP_THRESH\n" ); fputs( $fp, "Coincidence ratio $C_RATIO\n" ); fputs( $fp, "Window width $W_WIDTH\n" ); fputs( $fp, "Number of coincide $NUM_COI\n" ); fputs( $fp, "Part size $P_SIZE\n" ); fputs( $fp, "Max. number of shifts $MN_SHIFTS\n" ); fputs( $fp, "Max. number of supermotifs $MN_ALIGN\n" ); fputs( $fp, "Start position $SP_SEQ\n" ); fputs( $fp, "End position $EP_SEQ\n" ); fputs( $fp, "Gap penalty $GAP_PEN\n" ); fputs( $fp, "Accurate Dothelix $DOTHELIX\n" ); fputs( $fp, "Motif frequences recalc. $MFR\n" ); fputs( $fp, "Reverse $TRANS\n" ); fputs( $fp, "Clusterization $CLUSTER\n" ); if( $TYPE == "SIM_KEY" ) { fputs( $fp, "\n\n[keyword]\n" ); fputs( $fp, "$KEYW\n" ); fputs( $fp, "\n\n[fields]\n" ); for( $i = 0; $i < count( $FIELDS ); $i++ ) { fputs( $fp, $FIELDS[ $i ]." " ); } } fclose( $fp ); chmod( $inp_file, 0666 ); unlink( $sem_name ); # ----------------------------------------------------------- # Wait while query will be ready # ----------------------------------------------------------- while( file_exists( $inp_file ) ) { sleep( 1 ); clearstatcache(); } ***/ /**/ $fp = fopen( $S1_FNAME, "w" ); //'seq1.txt', "w" ); fputs( $fp, $seq1 ); fclose( $fp ); $fp = fopen( $S2_FNAME, "w" ); //'seq2.txt', "w" ); fputs( $fp, $seq2 ); fclose( $fp ); //++$fseqName = tempnam( "temp", "dh_" ); //++echo " Temp name = " , $fseqName , "
"; //$fseq = fopen( $fseqName, "w" ); //fclose( $fseqName ); //-mkdir( $fseqName, 0700 ); //$output = `dir *.* >mmap_dir.txt`; //echo "
$output
"; if( $Windows ) { system( "e:\kvi\projects\dh\debug\dh.exe $PARMFILE >dhm.txt" ); } else { system( "$DHM_PROGRAM $PARMFILE > $DHM_PROTOCOL" ); } //- exec( 'dir *.* >mmap_dir.txt'); /**/ # ----------------------------------------------------------- # Output results. # ----------------------------------------------------------- #_________________________ Banner //echo "

Screening by Similarity Results


"; echo "

"; echo ""; echo "

DotHelix: Motifs' Collection Map Results

"; 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 "
"; echo ""; /** #_________________________ Banks Version fron file 'banks.version'. $frel = fopen( "/www/services/banks.version", "r" ); echo "
"; echo "

Contents:


"; while( $buf = fgets( $frel, 128 ) ) echo $buf; echo "
"; fclose( $frel ); **/ echo "
"; #_________________________ Parameters. echo "

Parameters

"; //++echo "

"; // +echo ""; echo '

'; echo " "; echo " "; if( $TITLE != "" ) { printPar("Title","",$TITLE); } if( $EMAIL != "" ) { printPar("User Email Address","",$EMAIL); } printPar("Motif's power threshold - DotHelix","help.html#power0",$MP_THRESH_MINOR); //+printPar("Motif's power threshold - significant", "help.html#powerS", //+ $MP_THRESH_SIGNI); printPar("Motif's power threshold - noise upper bound", "help.html#power", $MP_THRESH_BASIC); printPar( "Motif's length threshold","help.html#length",$ML_THRESH ); //? printPar( "Coincidence ratio","hlp/req1hlp.html#TAG51",$C_RATIO ); printPar( "Maximum number of motifs to plot","help.html#nplot",$MN_PLOT ); printPar( "Maximum number of motifs to output","help.html#ntext",$MN_PRINT ); //$Strand = ( $TRANS == "Y" ) ? "Both" : "Only forward"; //$Cluster = ( $CLUSTER == "f" ) ? "Each frame separately" : "Codirectional joinly"; //printPar( "Strand","hlp/req1hlp.html#TAG65", $Strand ); //printPar( "Clusterization type","hlp/req1hlp.html#TAG67", $Cluster ); printPar( "Threshold of motif's homology percentage_","help.html#homology",$MHP_THRESH ); //+printPar( "Accurate Dothelix","help.html#accurate",$DH_ACCURATE ); printPar( "Accurate Dothelix","help.html#accurate",( $DH_ACCURATE == 1) ? "ON" : "OFF" ); printPar( "Motif frequences recalc","help.html#mfr",( $MFR == 1 ) ? "ON" : "OFF" ); printPar( "Normalize weight matrix","help.html#mfr",( $NORM == 1 ) ? "ON" : "OFF" ); printPar( "Weight matrices","help.html#type",$WM_LINE ); echo "
Name Value
"; #_________________________ Sequences. echo "

Sequences

"; $iP = strpos( $seq1, "\n" ); // TODO: check iP ? echo "

", substr($seq1,0, $iP), "\n

";
 echo substr( $seq1, $iP ),"
";; $iP = strpos( $seq2, "\n" ); // TODO: check iP ? echo "

", substr($seq2,0, $iP), "\n

";
 echo substr( $seq2, $iP ),"
"; // -------------------------------------------------------- // 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 ""; $fmot = fopen( $MOT_LIST, "r" ); #_________________________ Loop on Matrices. for( $i = 0; $i < $numMatr; $i++ ) { $wm_ = strToUpper( f_fileBase( $wmList[$i] ) ); $wmFile = $wmList[$i]; echo "

Weight Matrix of $wm_

"; echo "

"; //echo ""; // ********* //echo ""; echo ""; echo "
Aminoacid matrix
";
 echo  "
";
 //$fmat = fopen( "../data/".$MATR.".matrix", "r" );
 //+$fmat = fopen( $WMATR, "r" );
 $fmat = fopen( $wmFile, "r" );
 while( $buf = fgets( $fmat, 128 ) )    {
    echo $buf;
 }
 fclose( $fmat );
 //echo  "
"; echo "



"; ?>

>

: Graphic of the Pairwise Motifs' Collection of DotHelix

align=center >
_1 size=80 align=center> _2 size=80 align=center>
_3 size=80 align=center value="Put mouse over a motif in the map." >
>

$wm_: List of Motifs

";

 //+$fmot = fopen( $MOT_LIST, "r" );
 while( $buf = fgets( $fmot, 128 ) )    {
    //-if( !( $buf = fgets( $fmot, 128 ) ) ) break;

    if( substr($buf,0,5) == "*next" ) 
      //echo "***Next motif collection";
      break;
    else
      echo $buf;
 }
 //+fclose( $fmot );

 //echo "
"; ?> Top"; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
ParametersSequences Matrix of $wm_Collection MapMotifs
"; } // end Loop on WM fclose( $fmot ); # Delete all temporary files. if( $Linux ) { system( "rm $S1_FNAME" ); system( "rm $S2_FNAME" ); system( "rm $MAP_MSGS" ); system( "rm $MOT_LIST" ); system( "rm $PARMFILE" ); // ? + images for( $i = 0; $i < $numMatr; $i++ ) { //system( "rm ".$IMAGE_PREF.$i.".png" ); } } echo "

"; ?>
Designed by Valeri Kazatchenko
Comments and bug-reports send to: nik@genebee.msu.su
Generated: . Program last updated: February 24, 2001.