// aligfun.inc - funcs for alig.php
#--------------------------------------------------------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 );
}
/**
$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";
**/
// -----------------------
// 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";
}
$numMatr = count( $wmList );
$WM_LINE = strToUpper( $WM_LINE );
// --------------------------> wmList, numMatr
*****/
#______________________________Auto height
function f_numSeq( $Align ) {
$aLi = split( "[\n]", $Align );
$iL = count( $aLi );
// Skip first non-seq ( starting with blank ):
for( $i = 0; $i < $iL; ++$i ) {
if( strpos( $aLi[$i], " " ) > 0 )
break;
}
$numSeq = 0;
for( ; $i < $iL; ++$i ) {
if( strpos( $aLi[$i], " " ) == 0 ) {
break;
}
$numSeq++;
}
return $numSeq;
}
// - - - - - - - - - - - - -
function f_setAlignOpt( $ALIGN, $ALGO, $PARMFILE, $hei0, $IMAGE_PREF ) { // $hei0 - maybe AUTO
global $WIDTH, $HEIGHT, $FILLING, $SPLIT, $TITLE;
global $auto_hei, $wid, $hei;
global $PICTURE, $PicType, $SELGROUP, $GROUPTYPE, $PicSelType, $ImageTail;
global $PicTitle, $sPicLine;
global $MATR, $ERRFILE; // *** 22.08.2001
//echo " *** hei0 = " . $hei0 . "
\n";
$auto_hei = FALSE;
//if( strtoupper($HEIGHT) == "AUTO" ) {
if( strtoupper($hei0) == "AUTO" ) {
$numSeq = f_numSeq( $ALIGN );
//+echo "
numSeq = " . $numSeq . "
\n";
$HEIGHT = $numSeq * 20 + 26 + 10 + 22 + 3*16 + 7;
if( $HEIGHT < 150 )
$HEIGHT = 150;
if( $HEIGHT > 6000 )
$HEIGHT = 6000;
$auto_hei = TRUE;
//echo " *** auto/hei = " . $HEIGHT . "
\n";
// *** 0 - AUTO inside C++ prog
$HEIGHT = 0;
}
##
## width & height
##
$wid = $WIDTH;
$hei = $HEIGHT;
if( empty($wid) ) { $wid = 800; } ## default
//if( empty($hei) ) { $hei = 480; } ## default
if( empty($hei) ) { $hei = 0; $auto_hei = TRUE; } ## default AUTO
if( $wid < 450 ) { $wid = 450; } ## min
if( $wid > 3000 ) { $wid = 3000; } ## max
//if( $hei < 240 ) { $hei = 240; } ## min
//if( $hei > 1500 ) { $hei = 1500; } ## max
if( $hei < 200 && !$auto_hei ) { $hei = 200; } ## min
if( $hei > 10000 ) { $hei = 10000; } ## max
//echo " *** wid/hei = " . $wid . "/" . $hei . "
\n";
#______________________________PARMFILE
$fp = fopen( $PARMFILE, "w" );
fputs( $fp, "-i". $IMAGE_PREF ."_\n" ); // OK "-irun\\\\\clu3_\n" -> -irun\\clu3_
//fputs( $fp, "-W". $WIDTH ."\n" );
//fputs( $fp, "-H". $HEIGHT ."\n" );
fputs( $fp, "-W". $wid ."\n" );
fputs( $fp, "-H". $hei ."\n" );
if( $ALGO != "" )
fputs( $fp, "-A". $ALGO ."\n" );
if( $TITLE != "" )
fputs( $fp, "-T". $TITLE ."\n" );
fputs( $fp, "-f". $FILLING ."\n" );
if( $SPLIT != "NONE" )
fputs( $fp, "-S". $SPLIT ."\n" );
// +Matrix file..
if( $GROUPTYPE == "AUTO" ) {
// *nothing: see C++ prog
} else if( $GROUPTYPE == "PROTEIN" ) {
if( !isset( $MATR ) )
fputs( $fp, "-m". "blosum62.matrix" ."\n" );
fputs( $fp, "-g". "color10.def" ."\n" );
} else if( $GROUPTYPE == "DNARNA" ) {
if( !isset( $MATR ) )
fputs( $fp, "-m". "dnarna.matrix" ."\n" );
fputs( $fp, "-g". "color5.def" ."\n" );
}
if( isset( $MATR ) ) {
fputs( $fp, "-m". $MATR . ".matrix" ."\n" );
// if...
}
fputs( $fp, "-E". $ERRFILE ."\n" ); // error file name
$numPic = count($PICTURE);
$PicType = Array (
"ALLGROUPS" => "0",
"MAXATCOL" => "1",
"SELGROUPS" => "2",
"STAT1" => "11",
"STAT2" => "12",
"STAT99" => "0"
);
$PicSelType = "11";
$PicTitle = Array (
"ALLGROUPS" => "All groups",
"MAXATCOL" => "Max group at column",
"SELGROUPS" => "Selected groups",
"STAT1" => "Column values",
"STAT2" => "Column values (best-to-worst)",
"STAT99" => "0"
);
$ImageTail = Array (
"ALLGROUPS" => "a",
"MAXATCOL" => "m",
"SELGROUPS" => "se",
"STAT1" => "s1",
"STAT2" => "s2",
"STAT99" => "0"
);
$sPicLine = "";
if( isset( $PICTURE[0] ) && $PICTURE[0] != "NONE" ) {
for( $i = 0; $i < $numPic; $i++ ) {
fputs( $fp, "-t". $PicType[ $PICTURE[$i] ] ."\n" );
if( $i == 0 ) {
$sPicLine = $PicTitle[ $PICTURE[$i] ];
} else {
$sPicLine = $sPicLine . ",
" .$PicTitle[ $PICTURE[$i] ];
}
}
}
$numSel = count( $SELGROUP );
//+echo "numSel = " . $numSel . "
";
if( isset( $SELGROUP[0] ) && $SELGROUP[0] != "UNSELECTED" ) {
$selTit = $PicTitle["SELGROUPS"] . ": ";
if( $sPicLine == "" ) {
$sPicLine = "Selected groups: ";
} else {
$sPicLine = $sPicLine . ",
Selected groups: ";
}
$dlm = " ";
// Only gaps
if( $SELGROUP[0] == "99" ) {
$sPicLine = $sPicLine . " only gaps";
$selTit = $selTit . " only gaps";
fputs( $fp, "-s". $SELGROUP[ 0 ] ."\n" );
} else {
for( $i = 0; $i < $numSel; $i++ ) {
// Remove 99 from selected group. 99 maybe just the last selection.
if( $SELGROUP[ $i ] == "99" )
break;
fputs( $fp, "-s". $SELGROUP[ $i ] ."\n" );
//$iWk =
$sPicLine = $sPicLine . $dlm . (($SELGROUP[ $i ]) + 1);
$selTit = $selTit . $dlm . (($SELGROUP[ $i ]) + 1);
$dlm = ", ";
}
}
$PicTitle["SELGROUPS"] = $selTit;
}
//$PicTitle["SELGROUPS"] = $selTit;
fclose( $fp );
} // eof f_setAlignOpt()
function f_exeAlignProg( $ALIGN, $PROG, $PARMFILE, $ALIGNFILE, $PROTOCOL ) {
$fp = fopen( $ALIGNFILE, "w" ); //
fputs( $fp, $ALIGN );
fclose( $fp );
#________________________________________________C++ CALL
system( "$PROG $PARMFILE $ALIGNFILE > $PROTOCOL" );
}
function f_outAlignSpecopt() {
global $WIDTH, $HEIGHT, $FILLING, $SPLIT, $GROUPTYPE, $sPicLine, $auto_hei; //$TITLE;
global $wid, $hei;
global $MATR; // *** 22.08.2001
if( $WIDTH == $wid ) {
printPar( "Alignment picture width" , "help.html#WIDTH", $WIDTH );
} else {
printPar( "Alignment picture width" , "help.html#WIDTH", $WIDTH . " (adjusted to ".$wid.")" );
}
if( $auto_hei ) {
//printPar( "Alignment picture height", "help.html#HEIGHT", "AUTO: " . $hei ); //$HEIGHT );
printPar( "Alignment picture height", "help.html#HEIGHT", "AUTO" ); //$HEIGHT );
} else {
if( $HEIGHT == $hei ) {
printPar( "Alignment picture height", "help.html#HEIGHT", $HEIGHT );
} else {
printPar( "Alignment picture height", "help.html#HEIGHT", $HEIGHT . " (adjusted to ".$hei.")" );
}
}
$sWk = "Even";
if( $FILLING == "6" ) $sWk = "Sparse";
if( $FILLING == "7" ) $sWk = "Very sparse";
printPar( "Coloring mode" , "help.html#FILLING", $sWk );
//if( $SPLIT == "NONE" )
printPar( "Splitting block size" , "help.html#SPLIT", $SPLIT );
//else
// printPar( "Splitting block size" , "help.html#SPLIT", $SPLIT . " (reserved).
" .
// "Sorry this option is not implemented yet." );
if( isset( $MATR ) ) {
printPar( "Weight matrix" , "help.html#matrices", $MATR );
}
$MT_ERR = "";
if( isset( $MATR ) && $GROUPTYPE != "AUTO" ) {
if( ($GROUPTYPE == "DNARNA" && $MATR != "dnarna" ) ||
($GROUPTYPE != "DNARNA" && $MATR == "dnarna" ) ) {
$MT_ERR = "
WARNING:
You selected " .( $MATR == "dnarna" ? "nucleotide" : " protein") . " matrix and " .( $MATR != "dnarna" ? "nucleotide" : " protein") . " groups.
Result may be inconsistent.";
}
}
printPar( "Color group type" , "help.html#GROUPS", $GROUPTYPE . $MT_ERR );
printPar( "Alignment picture types" , "help.html#PICTURE", $sPicLine );
//printPar( "Normalize weight matrix","help.html#mfr",( $NORM == 1 ) ? "ON" : "OFF" );
//printPar( "Weight matrices","help.html#type",$WM_LINE );
} // end of f_outAlignSpecOpt()
##
## Picture (Form)
##
function f_outAlignImages( $pref1, $pref2, $IMAGE_PREF ) { // "pic_", "gali_im"
global $PICTURE, $PicType, $SELGROUP, $PicSelType, $ImageTail;
global $wid, $hei, $PicTitle;
$fn = $IMAGE_PREF;
$numPic = count($PICTURE);
## Load Images
## (not the case - needed for rolling pictures - if any, some other day...)
print "\n";
// Tags
for( $i = 0; $i < $numPic; $i++ ){
$ty = $PicType [ $PICTURE[$i] ];
if( $ty > 10 )
continue;
$tail = $ImageTail[ $PICTURE[$i] ];
print "". $PicTitle[$PICTURE[$i]] . "
\n";
//print "
\n";
}
for( $i = 0; $i < $numPic; $i++ ){
$ty = $PicType [ $PICTURE[$i] ];
if( $ty <= 10 )
continue;
$tail = $ImageTail[ $PICTURE[$i] ];
print "". $PicTitle[$PICTURE[$i]] . "
\n";
//print "
\n";
}
} // eof f_outAlignImages()
?>