# annout_frag.h
#____________________________________________FT fragments & DR keywords
// get dr_ft.txt
/**
if( $Linux ) {
$F_FRAG = $res_file . ".inf"; // ************ Linux
} else {
//$mot_file = $F_MOT;
}
**/
//$finf = fopen( $F_PREF . ".inf", "r" );
$finf = fopen( $F_FRAG, "r" );
//++$fdrft = fopen( $F_PREF . ".drft", "wt" );
//++$fft = fopen( $F_PREF . ".ft", "wt" );
//+$aFT["*"] = "*";
//$bFTQ = true; //false; // "true" if key+qualify w/o weight
$bFTQ = false; // "true" if key+qualify w/o weight
// FT exceptions
$aFTskip["CONFLICT"] = 1;
$aFTskip["VARIANT"] = 1;
$aFTskip["INIT_MET"] = 1;
// DR exceptions
$aDRskip["ECO2DBASE"] = 1;
$aDRskip["PDB"] = 1;
$aDRskip["HSC-2DPAGE"] = 1;
$aDRskip["SWISS-2DPAGE"] = 1;
$aDRskip["PIR"] = 1;
$aDRskip["EMBL"] = 1;
$aDRskip["HSSP"] = 1;
// +
$aDRskip["WORMPEP"] = 1;
//$aDRskip[""] = 1;
//$aDRskip[""] = 1;
// ECO2DBASE, PDB, HSC-2DPAGE, SWISS-2DPAGE, PIR, EMBL, HSSP
// $aFr/ag/ = seqName =>{ FTkey =>{ p1 p2 1/0} }
// ? $FTseqName[1] = "*";
$bDomainPlus = false;
if( $DOMAINEXT == "ON" )
$bDomainPlus = true;
// **************************
//$bDomainPlus = false;
//$bDomainPlus = true;
// *************************
//$EXCLUFRAG[] = "CHAIN";
//$EXCLUFRAG[] = "HELIX";
//$EXCLUFRAG[] = "DOMAIN";
// - $excluFrag = "*,CHAIN,";
if( isset( $EXCLUFRAG[0] ) && $EXCLUFRAG[0] != "NONE" ) {
if( f_afind( $EXCLUFRAG, "CHAIN" ) > -1 ) {
$aExcluFrag[] = "CHAIN";
}
if( f_afind( $EXCLUFRAG, "HELIX" ) > -1 ) {
$aExcluFrag[] = "HELIX";
$aExcluFrag[] = "TURN";
$aExcluFrag[] = "STRAND";
}
if( f_afind( $EXCLUFRAG, "DOMAIN" ) > -1 ) {
$aExcluFrag[] = "DOMAIN";
$bDomainPlus = false;
}
}
while( $buf = fgets( $finf, 512 ) ) {
$sWk = substr( $buf, 0, 3 );
if( $sWk == "AC " ) {
//++fputs( $fdrft, "-------------------------------------------------\n" );
//++fputs( $fdrft, $buf );
// Add fragments of the previous seq
if( isset($FTseqName[1]) && isset( $aSeqFrag ) ) {
//$aFrag[ $FTseqName[1] ] = $aSeqFrag;
$aFr[ $FTseqName[1] ] = $aSeqFrag;
//+echo "===" . $FTseqName[1] . " " . (count($aSeqFrag)/4) ."
\n";
}
// Add DRs of the previous seq
if( isset($FTseqName[1]) && isset( $aSeqDR ) ) {
$aDR[ $FTseqName[1] ] = $aSeqDR;
//+echo "
===" . $FTseqName[1] . " " . (count($aSeqDR)) ."\n";
while( list( $key, $val ) = each( $aSeqDR ) ) {
//+echo "/" . $key . "/";
if( !isset( $aDRQ[ $key ] ) ) {
$aDRName[ $key ] = $val;
$aDRQ[ $key ] = 1;
} else {
++$aDRQ[ $key ];
if( strpos( "*" . $val, "_" ) > 0 ) {
$aDRName[ $key ] = $val; // with '_'
}
}
}
}
// get seq name
$FTseqName = split( "[ ;]+", $buf, 3 ); // [1] - 1st
// echo "===" . $FTseqName[1] . "
\n";
unset( $aSeqFrag );
$iFrag = 0;
unset( $aSeqDR );
// Skip 2nd and more AC lines (NB! or find seq name, if not found before...)
while( $buf = fgets( $finf, 512 ) ) {
$sWk = substr( $buf, 0, 3 );
if( $sWk != "AC " ) // DT line as a rule
break; // ---------------->
}
} else if( $sWk == "DR " || $sWk == "FT " ) {
//++fputs( $fdrft, $buf );
if( $sWk == "DR " ) { //&& substr( $buf, 0, 8 ) != "FT " ) {
$part = split( "[ ;\r\n]+", $buf, 5 );
if( isset( $part[3] ) && $part[3] != "-." && $part[3] != "-" ) {
if( !isset( $aDRskip[ $part[1] ] ) ) {
$wk = strtoupper( $part[3] );
if( substr( $wk, -1, 1 ) == "." )
$wk = substr( $wk, 0, strlen($wk) - 1 );
$wk2 = str_replace( "_", "", $wk );
if( strpos( "*" . $wk, "_" ) > 0 || !isset( $aSeqDR[ $wk2 ] ) ) {
$aSeqDR[ $wk2 ] = $wk; // maybe replace
} //else // already OK
}
}
}
if( $sWk == "FT " && substr( $buf, 0, 8 ) != "FT " ) {
$part = split( "[ ]+", $buf, 5 );
//-$part = split( "[ \r\n]+", $buf, 6 );
//echo $part[0]. "/". $part[1]. "/". $part[2]."/". $part[3]. "/". $part[4]. "
\n";
//break;
//if( $part[1] != "CONFLICT" && $part[1] != "VARIANT" && $part[1] != "INIT_MET" ) {
if( !isset($aFTskip[ $part[1] ]) ) {
$key = $part[1];
$iWk = $iFrag*4;
$aSeqFrag[$iWk] = $key;
// FT SIGNAL <1 20
if( substr( $part[2], 0,1 ) == "<" ) {
$aSeqFrag[$iWk+1] = intval(substr( $part[2], 1 ) );
} else {
$aSeqFrag[$iWk+1] = intval( $part[2] ); // intval -> MOD_RES ?1 ?1 BLOCKED
}
$aSeqFrag[$iWk+2] = intval( $part[3] );
/**
$aSeqFrag[$iWk+3] = 1;
if( isset( $part[4] ) && (strpos( "*". $part[4], "POTENTIAL" ) > 0) ) {
$aSeqFrag[$iWk+3] = 0;
}
**/
$aSeqFrag[$iWk+3] = "";
if( isset( $part[4] ) && $part[4] != "" ) {
// remove last "." and ",":
$part4 = split( "[\r\n]+", $part[4], 2 );
if( substr( $part4[0], -1, 1 ) == "." || substr( $part4[0], -1, 1 ) == "," ) {
//+$aSeqFrag[$iWk+3] = substr( $part4[0], 0, strlen($part4[0]) - 1 );
//echo "substr = " . substr( $part[4], 0, strlen($part[4]) - 1 ) . "
\n";
$part[4] = substr( $part4[0], 0, strlen($part4[0]) - 1 );
} else {
//+$aSeqFrag[$iWk+3] = $part4[0]; // to count qualifiers later...
$part[4] = $part4[0];
}
if( $bDomainPlus && $key == "DOMAIN" ) {
$wk = "";
if( strpos( "*". $part[4], "BY SIMILARITY" ) )
$wk = "BY SIMILARITY";
if( strpos( "*". $part[4], "POTENTIAL" ) )
$wk = "POTENTIAL";
if( strpos( "*". $part[4], "PROBABLE" ) )
$wk = "PROBABLE";
$part4_0 = $part[4]; // save
$part[4] = str_replace( "BY SIMILARITY", "", $part[4] );
$part[4] = str_replace( "POTENTIAL", "", $part[4] );
$part[4] = str_replace( "PROBABLE" , "", $part[4] );
$part[4] = str_replace( "()", "", $part[4] );
$part[4] = trim( $part[4] );
$aSeqFrag[$iWk] = $key . " " . $part[4];
//$aSeqFrag[$iWk+3] = $wk;
$aSeqFrag[$iWk+3] = $part4_0;
} else {
$aSeqFrag[$iWk+3] = $part[4]; // to count qualifiers later...
}
}
++$iFrag;
/***
// key + qualifier with weight
$qua = "";
if( isset( $part[4] ) && strlen( $part[4] ) > 2 ) {
$key2 = split( "[.\r\n]+", $part[4], 2 );
$qua = $key2[0];
echo "qua = " . $qua. "
\n";
}
if( !isset( $aFTQV[ $key ] ) ) {
unset( $aQV );
$aQV [ $qua ] = 1;
// isset
} else {
$aQV = $aFTQV[ $key ];
if( !isset( $aQV[ $qua ] ) ) {
$aQV[ $qua ] = 1;
} else {
++$aQV[ $qua ];
}
}
$aFTQV[ $key ] = $aQV;
***/
// key [+qualifier] without weight
if( $bFTQ && isset( $part[4] ) && strlen( $part[4] ) > 2 ) {
$part[4] = str_replace( "POTENTIAL", "", $part[4] );
$part[4] = str_replace( "()", "", $part[4] );
$key2 = split( "[.\r\n]+", $part[4], 2 );
//if( strlen( $key2[0] ) > 0 )
$key .= (" " . $key2[0]);
$key = trim( $key );
}
/**
if( !isset( $aFT[$key] ) ) {
$aFT[$key] = 1; //$key2[0];
//fputs( $fft, $key );
} else {
++$aFT[$key];
}
} else { //if( !isset( $part[4] ) ) {
**/
if( !isset( $aFT[$key] ) ) {
$aFT[$key] = 1;
} else {
++$aFT[$key];
}
//}
}
}
}
}
fclose( $finf );
//++fclose( $fdrft );
arsort( $aDRQ );
$i = 0;
// ******************************
$numDRmax = 10;
// *******************************
while( list($key, $val) = each( $aDRQ ) ) {
//+echo "-" . $aDRName[$key]. " = " . $val . "
\n";
if( $i < $numDRmax ) {
//$aDRQQ[ $key ] = $val;
$aDRN[ $key ] = $aDRName[$key];
}
++$i;
}
while( list($key, $val) = each( $aFT ) ) {
//++echo $key . " / " . $val . "
\n";
//++fputs( $fft, $key . " / " . $val );
}
//++fclose( $fft );
/**
echo "*** aFTQV:
\n";
reset( $aFTQV );
while( list($key, $aQV) = each( $aFTQV ) ) {
echo "--- " .$key . "
\n";
while( list( $qua, $nn ) = each( $aQV ) ) {
echo "-----------" . $qua. " " . $nn . "
\n";
}
}
**/
include "annfrag.h";
// Set fragment colors and frequencies:
$aClr = false;
$numClr = 0;
// ***********************************
$numClrMax = intval($FRAGMAX);
if( $numClrMax > 20 )
$numClrMax = 20; // upper bound
//$numClrMax = 14; //7; //9; //20;
// ***********************************
//$red = imagecolorallocate($k,255,0,0);
//$green = imagecolorallocate($k,0,128,0);
//$blue = imagecolorallocate($k,0,0,255);
for( $i=0; $i < $iSup; $i++) {
unset( $aQ );
unset( $aQQ );
if( isset($aFr[ $aSupName[ $i ] ]) ) {
$aFrag = $aFr[ $aSupName[ $i ] ];
$iFragLen = count( $aFrag ) / 4; //3;
//+echo "*seq = " . $aSupName[ $i ]. " len = $iFragLen
\n";
for( $j = 0; $j < $iFragLen; ++$j ) {
$jj = 4*$j; // 3*$j;
$begX = 0; $lenX = 0;
unset( $extra );
f_getFragPos( $aFrag[$jj+1], $aFrag[$jj+2], $beg[$i], $beg2[$i], $len[$i],
$begX, $lenX, $extra );
/**
if( $lenX > 0 && ($numClr < $numClrMax) ) {
if( !isset($aClr[ $aFrag[$jj] ] ) ) {
// *tst
$iWk = $numClr % 3;
$c = 0; //$red;
If( $iWk == 1 ) $c = 0; //$blue;
If( $iWk == 2 ) $c = 0; //$green;
$aClr[ $aFrag[$jj] ] = $c;
++$numClr;
}
}
**/
if( $lenX > 0 ) {
if( !isset($aQ[ $aFrag[$jj] ] ) ) {
$aQ[ $aFrag[$jj] ] = 1;
}
//+if( $aFrag[$jj+3] != "" )
//+ echo " * frag jj+3 = ". $aFrag[$jj+3] . "/". $aFrag[$jj]."
\n";
//+echo " * frag jj = ". $aFrag[$jj] . "/". $aSupName[ $i ]."
\n";
if( !isset($aQQ[ $aFrag[$jj] ] ) ) {
unset( $aV );
$aV[ $aFrag[$jj+3] ] = 1;
$aQQ[ $aFrag[$jj] ] = $aV;
} else {
$aV = $aQQ[ $aFrag[$jj] ];
$aV [ $aFrag[$jj+3] ] = 1;
$aQQ[ $aFrag[$jj] ] = $aV;
}
}
}
//+if( !isset( $aQQ["MUTAGEN"] ) )
//+ echo "?MUTAGEN IS SET * " ."
\n";
// only keys
if( isset( $aQ ) ) {
while( list( $key, $val ) = each( $aQ ) ) {
//++echo " ** aKeyQ = ". $key . "
\n";
if( !isset( $aKeyQ[ $key ] ) ) {
$aKeyQ[ $key ] = 1;
} else {
++$aKeyQ[$key];
}
}
}
// plus qualifiers
if( isset( $aQQ ) ) {
while( list( $key, $aV ) = each( $aQQ ) ) {
//echo " ** aKeyQ = ". $key . "
\n";
//+if( $key == "MUTAGEN" )
//+ echo "?MUTAGEN: " . "
\n";
if( !isset( $aKeyQQ[ $key ] ) ) {
$aKeyQQ[ $key ] = $aV;
} else {
$aV0 = $aKeyQQ[ $key ];
while( list( $v, $q ) = each( $aV ) ) {
//+if( $key == "MUTAGEN" )
//+ echo "?MUTA: " . $v. "
\n";
if( !isset( $aV0[ $v ] ) ) {
$aV0[ $v ] = 1;
} else {
//+echo "*aV0 = " . $v . "
\n";
++$aV0[$v];
}
}
$aKeyQQ[ $key ] = $aV0;
}
}
}
}
}
if( isset($aKeyQ) ) {
// Tune a litle before sort
while( list($key, $val) = each( $aKeyQ ) ) {
//$val *= 10;
if( $key == "DISULFID" || $key == "THIOLEST" || $key == "THIOETH" ) {
// ok $aKeyQ[$key] = ($val*10 - 1) * 0.1; // decrease a little
$aKeyQ[$key] = $val - 0.001; // decrease a little
//+echo "DIS = " . $aKeyQ[$key] . "
\n";
}
if( $key == "HELIX" || $key == "STRAND" || $key == "TURN" ) {
$aKeyQ[$key] = $val + 0.0002; // increase a little
}
if( strpos( "*". $key , "DOMAIN" ) == 1 ) {
$aKeyQ[$key] = $val + 0.001; // increase a little
}
}
arsort( $aKeyQ );
//while( list($key, $val) = each( $aKeyQ ) ) {
// echo "FT: = " . $aKeyQ[$key] . " " . $val . "
\n";
//}
}
// Translate part[4] to 0/1 weight
if( isset( $aFr ) ) {
reset( $aFr );
while( list( $seqName, $aFrag ) = each( $aFr )) {
//$aFrag = $aFr[ $aSupName[ $i ] ];
$iFragLen = count( $aFrag ) / 4; //3;
for( $j = 0; $j < $iFragLen; ++$j ) {
$jj = 4*$j; // 3*$j;
$v = $aFrag[$jj+3];
if( (strpos( "*". $v, "POTENTIAL" ) > 0) || (strpos( "*". $v, "POTENTIAL" ) > 0) ||
(strpos( "*". $v, "BY SIMILARITY" ) > 0) ) { // +PROB, BY SIM
$aFrag[$jj+3] = 0;
} else {
$aFrag[$jj+3] = 1;
}
}
$aFr2[ $seqName] = $aFrag;
}
$aFr = $aFr2;
}
$ft_file = $F_IM4 . $F_IMEXT; //"aft1_1.png";
$wid = $wid0;
//$hei = $hei0;
$key_size = 35; //40; //35;
if( !isset($aFr) )
$aFr = Array();
if( !isset($aKeyQ) )
$aKeyQ = Array();
unset( $kwMap );
if( !isset($aExcluFrag) )
$aExcluFrag = Array();
makeGrapFrag( $iSup, $beg, $beg2, $len, $seqLen, $power, $ft_file,
$bor, $size, $key_size, $wid, $hei,
$aSupName, $seqname, $MATR, $optline, $DX0, $DX1, $DX12,
$aKW01, $aPosName, $aST, $kwMap, $fttMap, $aExcluFrag, $aFr, $aKeyQ,$numClrMax,
$aDRN, $aDR ); //Clr );
echo "";
echo "FT Fragments and DR Keywords
";
//echo( "