// annxref.h
//
// --------------------------------------------------------
// XREF: generate image
// --------------------------------------------------------
function f_m2mImage( $F_M2M, $im_file, $aFS,$iFS, $aNumName, $seqname, $wid,$hei,
$wm, $SEQ_REF1, $SEQ_REF2, &$m2mMap, $opt="" ) {
$twoColLim = 40;
if( strlen($seqname) > 16 ) $seqname = substr( $seqname, 0, 16 );
//$wid = 600; $hei = 440; //+40;
//$wid = 1100; $hei = 900; //+40;
$k = imagecreate( $wid, $hei );
$white = imagecolorResolve($k,255,255,255);
imagefilledrectangle( $k, 0, 0, $wid, $hei, $white );
//+$dx1 = 50+16; $dx2 = 10+10;
$dx1 = 50+16+40; $dx2 = 10+10+10 + 5;
//if( $iFS < 20 ) $dx1 -= 30;
if( $iFS < $twoColLim ) $dx1 -= 30;
$dy1 = 20+10; $dy2 = 20+10;
$dx = ($wid - $dx1 - $dx2 ) / $iFS ;
$dy = ($hei - $dy1 - $dy2 ) / $iFS ;
$lgray = imagecolorResolve($k,222,222,222);
$brown = imagecolorResolve($k,102, 51, 0);
$green = imagecolorResolve($k, 0, 128, 0);
$blue = imagecolorResolve($k, 0, 0, 255);
f_imFrame( $k, $wid, $hei, $dx1, $dx2, $dy1, $dy2 );
imageString( $k, 3, 5, 3, $seqname, $green );
imageString( $k, 2, $wid - strlen($wm)*6 - 10, 3, $wm, $blue );
imageString( $k, 5, 150, 3,"CROSS-REFERENCE MAP OF THE FOUND SEQUENSES", $brown );
$keys = array_keys( $aFS );
$sfont = 2;
$sdy = $dy * 0.4;
if( $iFS > 19) {
//-if( $iFS >= $twoColLim) {
$sfont = 1;
$sdy = 0;
}
// Diagonal
for( $i = 0; $i < $iFS; $i++ ) {
$x = $dx1+$dx*$i;
$y = $dy1+$dy*$i;
imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $lgray );
//imageString( $k, 3, 5, $y + ($dy * 0.5), $keys[$i], $brown );
//+imageString( $k, 1, 5, $y + ($dy * 0.5), $aNumName[ $keys[$i] ], $brown );
//imageString( $k, 1, ( $i % 2 == 0 ? 5 : 45 ), $y + ($dy * 0.1),
// $aNumName[ $keys[$i] ], $brown );
if( $iFS > 39)
$iWk = ( $i % 2 == 0 ? 5 : 45 ) + 5;
else
$iWk = 5 + 5;
if( isset($aNumName[ $keys[$i] ]) ) {
$sn = $aNumName[ $keys[$i] ];
imageString( $k, $sfont, $iWk, $y + $sdy, $sn, $brown );
$ref = $SEQ_REF1 . $sn . $SEQ_REF2;
$wk = "";
$m2mMap[$i] = $wk;
//$wk = $SEQ_REF1 . $aSupName[ $i - 1 ] . $SEQ_REF2;
//echo( ""
} else
imageString( $k, $sfont, $iWk, $y + $sdy, "*" . $keys[$i], $brown );
//$dxx = 2; // only for 5 in Hor ?
//if( $i % 2 == 0 ) {
// $wk = " " . ($i+1);
//if( ($i+1) % 5 == 0 ) {
//+if( $iFS > 19 && (($i+1) % 5 != 0) ) continue;
// Skip last if prev has been displayed:
if( $iFS > 19 && (($i+1) % 5 == 1) && ($i == ($iFS - 1)) ) continue;
// Display only 1st and every 5th:
if( $iFS > 19 && (($i+1) % 5 != 0) && $i > 0 && ($i != ($iFS - 1)) ) continue;
$wk = " " . ($i+1);
if( $i < 99 ) $wk = " " . $wk;
if( $i < 9 ) $wk = " " . $wk;
//if( $i > 8 ) $dxx = 0;
// Vert:
//imageString( $k, 1, $dx1 - 24, $y + ($dy * 0.1), $wk, $brown ); // 0.1 0.2 0.5
imageString( $k, 1, $dx1 - 24, $y , $wk, $brown ); // 0.1 0.2 0.5
imageString( $k, 1, $wid - $dx2 +4, $y , $i+1, $brown ); // 0.1 0.2 0.5
// Skip last hor if also 2nd prev has been displayed:
if( $iFS > 19 && ((($i+1) % 5 == 1)||(($i+1) % 5 == 2))&& ($i == ($iFS - 1)) )
continue;
// Hor:
imageString( $k, 1, $x, $dy1 - 10 , $i+1, $brown ); // 0.1 0.2 0.5
imageString( $k, 1, $x, $hei - $dy2 + 2 , $i+1, $brown ); // 0.1 0.2 0.5
//}
}
$fmot = fopen( $F_M2M, "r" );
$i = 1;
/**
while( $buf = fgets( $fmot, 128 ) ) {
if( substr( $buf, 0,5 ) == "Super" ) {
f_smOut( $buf, $i++, "a" ); //echo $buf;
break;
}
}
**/
$i = 0;
while( $buf = fgets( $fmot, 128 ) ) {
if( substr( $buf, 0,5 ) == "Super" ) {
//f_smOut( $buf, $i++, "a" ); //echo $buf;
$parts = split( "[ ]+", $buf, 8 );
//$pos = strpos( $buf, ".dat" );
//$ix = $aFS[substr( $buf, $pos + 5, 6 )];
//$pos2 = strpos( $buf, ".dat", $pos + 10 );
//$iy = $aFS[substr( $buf, $pos2 + 5, 6 )];
//$power = substr( $buf, $pos2 + 12, 6 );
//+echo "part2=", $parts[2], "*
";
$ix = $aFS[ $parts[2] ];
$iy = $aFS[ $parts[4] ];
$power = $parts[5];
settype( $power, "double" );
if( $i == 0 ) {
$pmin = $power;
$pmax = $power;
} else {
if( $pmin > $power ) $pmin = $power;
if( $pmax < $power ) $pmax = $power;
//echo " pmm = ", $pmin, ",",$pmax, "
";
}
//echo "p = *", $power, "*
";
$i++;
// ? $wk = $ix . "," . $iy;
$wk = "$ix,$iy";
if( !isset( $aSS[$wk] ) ) {
$aSS[$wk] = $power;
} else {
$p = $aSS[$wk];
if( $power > $p )
$aSS[$wk] = $power;
}
//$x = $dx1+$dx*($ix - 1);
//$y = $dy1+$dy*($iy - 1);
//$ic = f_clr( $k, $power, 4, 15 );
//imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );
}
}
fclose( $fmot );
$keys = array_keys( $aSS );
$imedi = count( $keys ) * 0.5;
settype( $imedi, "integer" );
$pmedi = $pmax; // init
for( $i = 0; $i < count( $keys ); $i++ ) {
$xy = $keys[$i];
$power = $aSS[ $xy ];
if( $i == $imedi ) $pmedi = $power;
$pos = strpos( $xy, "," );
$ix = substr( $xy, 0, $pos );
$iy = substr( $xy, $pos + 1 );
settype( $ix, "integer" );
settype( $iy, "integer" );
$x = $dx1+$dx*($ix - 1);
$y = $dy1+$dy*($iy - 1);
$ic = f_clr( $k, $power, $pmax, $pmin );
//+imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );
//imageArc ( $k, $x + $dx * 0.5, $y + $dy * 0.5, $dx - 1, $dy - 1, 0, 360, $ic ); //$brown );
$xs = ($dx - 1) * $power / $pmax;
if( $xs < 3 ) $xs = 3;
$ys = ($dy - 1) * $power / $pmax;
if( $ys < 3 ) $ys = 3;
//+imageArc ( $k, $x + $dx * 0.5, $y + $dy * 0.5, $xs, $ys, 0, 360, $ic ); //$brown );
//+imageFill( $k, $x + $dx * 0.5, $y + $dy * 0.5, $ic );
// rect ?
imagefilledrectangle( $k, $x, $y, $x + $dx, $y + $dy, $ic ); //$brown );
}
// Lines:
for( $i = 0; $i < $iFS + 1; $i++ ) {
$x = $dx1+$dx*$i;
$y = $dy1+$dy*$i;
imageLine( $k, $dx1, $y , $wid - $dx2, $y , $lgray );
imageLine( $k, $x , $dy1, $x , $hei - $dy2 , $lgray );
//imageString( $k, 3, 5, $y + ($dy * 0.5), $keys[$i], $brown );
}
// Internal frame
ImageRectangle( $k, $dx1, $dy1, $wid - $dx2, $hei - $dy2, $brown);
// Legends:
$sp = 20; // leg.space
$yleg = $hei - 20;
ImageString( $k, 2, $dx1, $yleg, "Legends: ", $brown );
$xleg = $dx1 + 10*6; // + $sp;
$ic = f_clr( $k, $pmax, $pmax, $pmin );
imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic );
$xleg += (14 + 4);
ImageString( $k, 2, $xleg, $yleg, $pmax . " (max power)", $brown );
$xleg += (18 * 6 + $sp);
$ic = f_clr( $k, $pmedi, $pmax, $pmin );
imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic );
$xleg += (14 + 4);
ImageString( $k, 2, $xleg, $yleg, $pmedi, $brown );
$xleg += (6 * 6 + $sp);
$ic = f_clr( $k, $pmin, $pmax, $pmin );
imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + 14, $yleg + 13, $ic );
$xleg += (14 + 4);
ImageString( $k, 2, $xleg, $yleg, $pmin . " (min)", $brown );
// Opt Line:
ImageStringUp( $k, 1, $wid - 17, $hei - $dy2 - 2, $opt, $brown );
// *******************************************
//$er = imageGif( $k, $im_file ); // ************ Linux GIF
$er = imagePng( $k, $im_file );
// *******************************************
}
?>