"; if( $iL / $n > $nmax ) { $r[0] = $n * 5; $r[1] = 2; //$n * 10; //every 2nd $r[2] = 2; //4; //$n * 20; } else { $r[0] = $n; $r[1] = 5; //$n * 5; // every 5th $r[2] = 5; if( $iL / $n > 500 ) $r[2] = 10; //$n * 10; if( $iL / $n < 20 ) $r[2] = 2; if( $iL / $n < 10 ) $r[2] = 1; } return $r; } // ------------------------------------------------------ // f_clr - color index as func( power ) // ----------------------------------------------------- function f_clr( $im, $x, $pMin, $pMax ) { // P1 < x < P2 : min/max // Colors: 450 -> 450/4 //int xP; //double iR, iG,iB, dP; // Note: Here iR, iG, iB - double ! //int ddY; //int iC; $dP = 450. / ($pMax - $pMin); // Colors per power unit $iR=0.; $iG=0.; $iB =0.; $xP = $dP * ($x - $pMin); // int $xP -= ($xP % 4 ); // Reduce colors to 450/4 $ddY = $xP; if( $ddY < 200 ) { $iR = $ddY * 0.5; $iR+= 155.; if( $iR < 0 ) $iR = 0.; } else { if( $ddY <= 455 ) { $iG = $ddY - 200; $iR = 255.; } } $iC = imageColorResolve( $im , $iR, $iG, $iB ); return $iC; } // ------------------------------------------------------ // f_imFrame - shadow border around... // ----------------------------------------------------- function f_imFrame( $im_out, $iW, $iH, $dX1, $dX2, $dY1, $dY2 ) { $white = ImageColorResolve($im_out, 255, 255, 255); $black = ImageColorResolve($im_out, 0, 0, 0); $gray = ImageColorResolve($im_out, 200, 200, 200); for( $i = 0; $i < 5; $i++ ) { //iWk = 41 - i*5; // 0 = lgray 31 $iWk = 50 - $i*5; // 0 = lgray 31 $iC = ImageColorResolve($im_out, 255 - $iWk, 255 - $iWk, 255 - $iWk); ImageLine($im_out, 1+$i, 1+$i, $iW - $i, 1+$i, $iC); ImageLine($im_out, 1+$i, 1+$i, 1+$i , $iH - $i, $iC); } ImageFilledRectangle($im_out, 1+$i, 1+$i, $iW - $i, $dY1 - 1, $iC ); ImageFilledRectangle($im_out, 1+$i, 1+$i, $dX1 - 1, $iH - $i, $iC ); $iC2 = $iC; // Light gray at right-lower: ImageLine($im_out, $iW - 1, $iH - 1, $iW - 1, 1 , $gray); ImageLine($im_out, $iW - 1, $iH - 1, 1 , $iH - 1, $gray); ImageFilledRectangle($im_out, $iW - $dX2 + 1, $dY1, $iW - $i, $iH - $i, $iC2); ImageFilledRectangle($im_out, $dX1 , $iH - $dY2 + 1 , $iW - $i, $iH - $i, $iC2); // White lines: (..dark lines see below) ImageLine($im_out, $dX1 - 1 , $dY1 - 1 , $iW - $dX2 + 1, $dY1 - 1 , $white); ImageLine($im_out, $dX1 - 1 , $dY1 - 1 , $dX1 - 1 , $iH - $dY2 + 1, $white); ImageLine($im_out, $dX1 - 2 , $dY1 - 2 , $iW - $dX2 + 2, $dY1 - 2 , $white); ImageLine($im_out, $dX1 - 2 , $dY1 - 2 , $dX1 - 2 , $iH - $dY2 + 2, $white); ImageLine($im_out, $dX1 - 3 , $dY1 - 2 , $dX1 - 3 , $iH - $dY2 + 2, $white); // Left-upper black frame: ImageLine($im_out, 0, 0, $iW - 1, 0, $black); ImageLine($im_out, 0, 0, 0 , $iH - 1, $black); } function makeGrapAli( $iSup, $beg, $len, $maxLen, $power, $gif_file, $bor, $size, $key_size, &$wid, &$hei, $aSN, $seqname, $wm, $opt, &$DX0, &$DX1, &$DX12, $aKW01, $aPosName, $aST, &$kwMap, $exclu = "") { global $OUTPUT; //+echo "maxLen=" . $maxLen . "
"; //$dx1 = 50+16+40; $dx2 = 10+10+10 + 5; $dx1 = 50+40 - 4; $dx2 = 10+10 + 5; $twoColLim = 20; //+if( $iSup < 10 ) { if( $iSup < $twoColLim ) { // *** 02.02.01 $dx1 -= 30; $DX0 = 0; } else $DX0 = 45; // See below "Seq name: " $DX1 = $dx1; // return dx1 //$dy1 = 20+10; $dy2 = 20+10; $dy1 = $bor + $key_size; $dy2 = 20+5 - 4; // Set height: //+$hei = $size*( 2*$iSup ) + 5*$bor + $key_size; $space = 2; //3; $hei = $size*( 1*$iSup ) +$space*$iSup + 5*$bor + $key_size + $size; // *0.5; $hei += $dy2; // *** if( $hei < 220 ) $hei = 220; // Set width: $key_dx = 16; //20; $iWk = count( $aKW01 ) * $key_dx; $dx12 = $dx1 + $bor + $iWk + $bor; $wid += ($bor + $iWk + $bor); $DX12 = $dx12; # Header("Content-type: image/gif"); $k = imagecreate( $wid, $hei ); $white = imagecolorallocate($k,255,255,255); imagefilledrectangle( $k, 0, 0, $wid, $hei, $white ); // ??? $white = imagecolorallocate($k,255,255,255); $red = imagecolorallocate($k,255,0,0); $green = imagecolorallocate($k,0,128,0); //$lgreen= imagecolorallocate($k,0,196,0); $lgreen= imagecolorallocate($k,0,210,0); $lgreen2= imagecolorallocate($k,0,250,0); // Maybe not only FT, KW, DE - so only two colors: // cDE as 1st, cKW as 2nd //-$cFT = imagecolorallocate($k,0,203,245); //+$cFT = imagecolorallocate($k,223, 176, 240); // cFT - not used $cKW = imagecolorallocate($k,0, 220, 200); $cDE = imagecolorallocate($k,0,210,0); $magen = imagecolorallocate($k,128,0,128); $blue = imagecolorallocate($k,0,0,255); $lblue = imagecolorallocate($k, 145, 0, 255); $black = imagecolorallocate($k,0,0,0); $lgray = imagecolorallocate($k,222,222,222); $gray = imagecolorallocate($k,156,156,156); //$lgray = imagecolorallocate($k,222,222,222); //+$white2 = imagecolorallocate($k, 247, 240, 255); $white2 = imagecolorallocate($k, 240, 233, 255); //$lwhite = imagecolorallocate($k, 255, 240, 255); $lwhite2 = imagecolorallocate($k, 255, 247, 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 ); // Color keys: //-$key = imagecreatefromgif( "/www/col_key.gif" ); //-imagecopyresized( $k, $key, 0, 0, 0, 0, $wid, $key_size, $wid, $key_size ); $brown = imagecolorallocate($k,102, 51, 0); $wk = "Color Key for Alignment Powers"; //+$x = ($wid - strlen( $wk ) * 9 ) * 0.5; //+if( $x < 10 ) $x = 10; $x = $dx12 + 20; $y = 3; imageString( $k, 5, $x, $y, $wk , $brown ); $x = 2*$bor + $key_size; // ----------- // Source seq: // ----------- //+imagefilledrectangle( $k, $bor, $x, $wid - $bor, $x+$size, $red ); //+imagefilledrectangle( $k, $bor, $x, $wid - $bor, $x+$size, $green ); //+$x += $size + 2*$bor; //imagefilledrectangle( $k, $bor, $x, $wid - $bor, $x+$size + $size *0.5, $green ); //+imagefilledrectangle( $k, $dx12+$bor, $x, $wid - $bor - $dx2, //+ $x+$size + $size *0.5, $green ); imagefilledrectangle( $k, $dx12+$bor, $x - 2, $wid - $bor - $dx2, $x+$size + $size *0.5 - 2, $green ); $ySave = $x; //-$ySave++; $wk = "" ); $seqmap = $wk; /** imageString( $k, 1, $dx12+$bor - 1, $x+$size + $size *0.5 + 1,"1", $brown ); $wk = $maxLen; settype( $wk, "string" ); imageString( $k, 1, $wid - $bor - $dx2 - strlen($wk) * 5 + 2, $x+$size + $size *0.5+1, $wk, $brown ); **/ // X-Scale; //+$y = $ySave + 2; $y = $ySave + $size + $size *0.5 - 1; $r = f_scaleStep2( $maxLen, 50 ); //+ echo "r[0]=". $r[0] . "
"; /**/ $xScale = ( $wid - 2*$bor - $dx12-$dx2)/$maxLen; //+for( $n = $r[0], $i = 1; ($dx12 + $bor +$n*$xScale) < ($wid - $dx2 - $bor); //++for( $n = 0, $i = 0; ($dx12 + $bor +$n*$xScale) < ($wid - $dx2 - $bor); for( $n = 0, $i = 0; ($dx12 + $bor +$n*$xScale) < ($wid - $dx2 - $bor + 1 ); $n += $r[0], $i++ ) { $x = $dx12 + $bor + $n * $xScale; imageDashedLine( $k, $x, $y, $x, $hei - $dy2 - 2, $lgray ); $iC = $brown; //if( $n % $r[1] == 0 ) $iC = $green; if( $i % $r[1] == 0 ) { imageLine( $k, $x , $y, $x , $y + 2, $iC ); imageLine( $k, $x+1, $y, $x+1, $y + 2, $iC ); imageLine( $k, $x-1, $y, $x-1, $y + 2, $iC ); } else { //$iC = $green; imageLine( $k, $x , $y, $x , $y + 1, $iC ); } if( $i % $r[2] == 0 ) { // move left if outside. $nDig = log10( $n ); //-$wk = $nDig; settype( $nDig, "integer" ); //-if($wk > $nDig) $nDig++; $nWid = $nDig * 6; $nx = $x + 1; if( $nx > ($wid - $dx2 - $nWid - 1) ) { //$nx = $x - $nWid; // move left of dot if outside $nx = $wid - $dx2 - $nWid - 1; // move left of border if outside } //imageString( $k, 2, $x, $y+2 - 2, $n, $black); //$brown ); //+imageString( $k, 2, $x+1, $y+2 - 2, $n, $black); //$brown ); imageString( $k, 2, $nx, $y+2 - 2, $n, $black); //$brown ); } } /**/ $x = $ySave; $x += $size + 2*$bor + $size *0.5; $x++; // *** 02.02.01 // *** req. dyScale = 12 instead of 2*bor? // Y of the 1st supermotif/keyword: // *** $yk0 = $x; $imedi = $iSup * 0.5; settype( $imedi, "integer" ); $pmedi = $power[$iSup - 1]; //$pmax; // init $sfont = 2; $sdy = $bor * 0.6; //$dy * 0.6; //0; //$dy * 0.4; //+if( $iSup > 9) { if( $iSup >= $twoColLim ) { // *** 02.02.01 $sfont = 1; $sdy = 0; //$dy * 0.6; } for( $i=0; $i < $iSup; $i++) { if( $i == $imedi ) $pmedi = $power[$i]; /** if( $power[ $i ] > 20.0 ) { $color = $red; } else if( $power[ $i ] > 12.0 ) { $color = $green; } else if( $power[ $i ] > 8.0 ) { $color = $magen; } else if( $power[ $i ] > 6.0 ) { $color = $blue; } else $color = $black; **/ // Mark every 2nd line: //+$iC =( $i % 2 == 0 ? $lwhite2 : $white2 ); //+imagefilledrectangle( $k, $dx1+1, $x, $wid - $dx2 - 1, $x+$size - 1, $iC ); if( ($i+1) % 2 == 0 ) //imagefilledrectangle( $k, $dx1+1, $x - 1, $wid - $dx2 - 1, $x+$size, $white2 ); imagefilledrectangle( $k, $dx1 - 10, $x, $wid - $dx2 - 1, $x+$size - 1, $white2 ); //$color = f_clr( $k, $power[$i], $power[$iSup - 1], $power[0] ); $color = f_clr( $k, $power[$i], $power[0], $power[$iSup - 1] ); // Force "dummy" mot //+if( strpos( $exclu, "," . $aSN[$i] . "," ) > 0 ) $iC = $brown; if( ($i+1) % 2 == 0 ) $iC = $lblue; if( strpos( $exclu, "," . ($i+1) . "," ) > 0 ) { $color = $lgray; $iC = $gray; } for( $j=0; $j < count( $beg[ $i ] ); $j++) { //$b = $bor+$beg[ $i ][ $j ]*( $wid - 2*$bor )/$maxLen; //$e = $bor+($beg[ $i ][ $j ]+$len[ $i ][ $j ])*( $wid - 2*$bor )/$maxLen; $b = $dx12+$bor+$beg[ $i ][ $j ]*( $wid - 2*$bor - $dx12-$dx2)/$maxLen; $e = $dx12+$bor+($beg[ $i ][ $j ]+$len[ $i ][ $j ])*( $wid - 2*$bor - $dx12-$dx2)/$maxLen; imagefilledrectangle( $k, $b, $x, $e, $x+$size-1, $color ); } //$y = $dy1+$dy*$i; $y = $x - $space; // ? * 0.5; // Seq name: //+if( $iSup > 9) if( $iSup >= $twoColLim ) // *** 02.02.01 $iWk = ( $i % 2 == 0 ? 5 : 45 ) + 5; else $iWk = 5 + 5; //imageString( $k, $sfont, $iWk, $y + $sdy, $aSN[ $i ], $iC ); // $brown ); imageString( $k, $sfont, $iWk, $y , $aSN[ $i ], $iC ); // $brown ); //$x += 2*$size; $x += $size + $space; // Skip last if prev has been displayed: //if( $iSup > 9 && (($i+1) % 5 == 1) && ($i == ($iSup - 1)) ) continue; // <--- if( ($iSup >= $twoColLim) && (($i+1) % 5 == 1) && ($i == ($iSup - 1)) ) continue; // <--- // Display only 1st and every 5th: //if( $iSup > 9 && (($i+1) % 5 != 0) && $i > 0 && ($i != ($iSup - 1)) ) continue; if( ($iSup >= $twoColLim) && (($i+1) % 5 != 0) && $i > 0 && ($i != ($iSup - 1))) continue; //-if( $iSup > 9 && (($i+1) % 5 != 0) && $i > 0 ) continue; // Number imageString( $k, 1, $wid - $dx2 +4, $y + $sdy, $i+1, $brown ); //+if( $iSup > 9 && (($i+1) % 5 == 0) ) imageline ( $k, $wid - $dx2 +3 - $bor, $y + $sdy + 3, $wid - $dx2 , $y + $sdy + 3, $brown ); } // Kewords: --------------------------------------------- // get stat max: $stV = array_values( $aST ); $stMax = 0; for( $i = 1; $i < count( $stV ); $i++ ) { if( $stV[ $i ] > $stMax ) $stMax = $stV[ $i ]; } $aKW = array_keys( $aKW01 ); $kwLen = 0; $kwtPrev = ""; $iC = $cKW; for( $i = 0; $i < count( $aKW ); $i++ ) { $kwt = substr($aKW[$i], 0, 2); $kwl = strlen($aKW[$i]) - 4; if( $kwl > $kwLen ) $kwLen = $kwl; $li = $aKW01[ $aKW[$i] ]; //+ echo "li01=*" . $li . "*
"; $dxk = $dx1 + $bor + $key_dx * $i; $yk = $yk0; for( $j = 0; $j < $iSup; $j++ ) { $sn = $aSN[ $j ]; if( isset($aPosName[ $sn ]) ) { $pos = $aPosName[ $sn ]; if( substr( $li, $pos * 2, 1 ) != "0" ) { // Adjust high level to SD value: $ykh = $yk - 1; $dykh =0; /*** //imageRectangle( $k, $dxk, $yk - 1, $dxk+$key_dx - 3, $yk+$size-1, $lgreen ); //+$iC = $lgreen; $iC = $cKW; if( $kwt == "FT" ) $iC = $cFT; if( $kwt == "DE" ) $iC = $cDE; ***/ if( $kwtPrev != $kwt ) { // cFT - not used $kwtPrev = $kwt; if( $iC == $cKW ) $iC = $cDE; else $iC = $cKW; } /*** if( $size > 11 ) { if( $aST[ $aKW[ $i ] ] < ( $stMax * 0.75 ) ) $dykh = $size * 0.25; if( $aST[ $aKW[ $i ] ] < ( $stMax * 0.5 ) ) $dykh = $size * 0.5; if( $aST[ $aKW[ $i ] ] < ( $stMax * 0.25 ) ) $dykh = $size * 0.75; // When a lot of supermotifs: } else { if( $aST[ $aKW[ $i ] ] < ( $stMax * 0.5 ) ) { $dykh = $size - 2; $iC = $lgreen2; } } ***/ //+imageRectangle( $k, $dxk, $ykh + $dykh, $dxk + $key_dx - 3, imageRectangle( $k, $dxk+2, $ykh + $dykh, $dxk + $key_dx - 3 - 1, $yk + $size - 1, $iC ); //$lgreen ); } } $yk += ($size + $space); } // KW, DE, FT: imageString( $k, 1, $dxk+3, $yk0 - 10, $kwt, $brown ); // Vert lines: ImageDashedLine( $k, $dxk+$key_dx - 1, $dy1, $dxk+$key_dx - 1, $hei - $dy2, $lgray); // fill kwmap: //echo( "" ); $wk = " -1 ) { $wk .= ( " href=#" . $kwt . "_" . substr($aKW[$i], 4) ); } $wk .= ( " title='" . $aKW[$i] . "' >" ); $kwMap[$i] = $wk; } // Add seq map: $kwMap[count($kwMap)] = $seqmap; /**/ // Display KWs: // max num: $yk_space = 10; $yk = $yk0 + $kwLen * 5 + $yk_space; /** // Only two: $wk = ($hei - $dy2 - $yk0)* 0.5 - $kwLen * 5; // spaces in a half $yk_space = $wk * 0.6; settype( $yk_space, "integer" ); $yk = $yk0 + $kwLen * 5 + $yk_space; **/ /**/ // keywords in line: while( $yk < ($hei - $dy2 - 3) ) { for( $i = 0; $i < count( $aKW ); $i++ ) { $kwn = substr($aKW[$i], 4); $dxk = $dx1 + $bor + $key_dx * $i; imageStringUp( $k, 1, $dxk+3, $yk, $kwn, $black ); } $yk += ( $kwLen * 5 + $yk_space ); } /**/ /*** // keywords by stepwise: $yk1 = $yk0; $up = TRUE; while( $yk1 < ($hei - $dy2 - 5) ) { $yk = $yk1; for( $i = 0; $i < count( $aKW ); $i++ ) { $kwn_= substr($aKW[$i], 4); $kwn = $kwn_; $kwl_= strlen($aKW[$i]) - 4; $kwl = $kwl_; $kwlMax = ($hei - $dy2 - $yk - 5) * 0.2; // 5; settype( $kwlmax, "integer" ); if( $kwl > $kwlMax ) { $kwn = substr($aKW[$i], 4 + $kwl - $kwlMax ); $kwl = $kwlMax; } //+$yk += ($kwl*5); $yk += (8*5); if( $yk > ($hei - $dy2 - 5) ) continue; // break; $dxk = $dx1 + $bor + $key_dx * $i; imageStringUp( $k, 1, $dxk+3, $yk, $kwn, $black ); // upwards: if( $up ) { $upy = $yk - ( $kwLen * 5 * 2 + $yk_space ); while( $upy > ($yk0 + 5) ) { if( ($upy - $kwl_ * 5) > ($yk0 + 1) ) { imageStringUp( $k, 1, $dxk+3, $upy, $kwn_, $black ); } $upy -= ( $kwLen * 5 * 2 + $yk_space ); } } //$yk += ( $kwl_ * 5 + 1 ); $yk++; } $yk1 += ( $kwLen * 5 * 2 + $yk_space ); $up = FALSE; } ***/ // Internal frame ImageRectangle ( $k, $dx1 , $dy1, $wid - $dx2, $hei - $dy2, $brown); ImageDashedLine( $k, $dx12, $dy1, $dx12 , $hei - $dy2, $brown); //$lgray); // KW, DE, FT ? $kwl = 8 * 7; if( ($dx12 - $dx1) > $kwl ) { $wk = (($dx12 - $dx1) - $kwl ) *0.5; ImageString( $k, 3, $dx1 + $wk, $dy1 - 14 - 4, "Keywords", $brown ); } // Legends: $pmax = $power[0]; $pmin = $power[$iSup - 1]; $sp = 20; // leg.space $yleg = $dy1 - 15; //18; //20; //hei - 20; $lleg = 60; // size //ImageString( $k, 2, $dx1, $yleg, "Legends: ", $brown ); //$xleg = $dx1 + $bor + 40+20; //10*6; // + $sp; //+$xleg = 120; //$dx1 + $bor + 40+20; //10*6; // + $sp; $xleg = $dx12 + 20; // *** 20.01.01 $ic = f_clr( $k, $pmax, $pmax, $pmin ); //+imagefilledrectangle( $k, $xleg, $yleg+3, $xleg + $lleg, $yleg + 10, $ic ); imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + $lleg, $yleg + 7, $ic ); $xleg += ($lleg + 4); //ImageString( $k, 2, $xleg, $yleg, $pmax . " (max power)", $brown ); //+ImageString( $k, 1, $xleg, $yleg, $pmax . " (max)", $brown ); ImageString( $k, 2, $xleg, $yleg - 1, $pmax . " (max)", $brown ); $xleg += (12 * 6 + $sp); $ic = f_clr( $k, $pmedi, $pmax, $pmin ); //+imagefilledrectangle( $k, $xleg, $yleg+3, $xleg + $lleg, $yleg + 10, $ic ); imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + $lleg, $yleg + 7, $ic ); $xleg += ($lleg + 4); ImageString( $k, 2, $xleg, $yleg - 1, $pmedi, $brown ); $xleg += (6 * 6 + $sp); $ic = f_clr( $k, $pmin, $pmax, $pmin ); //+imagefilledrectangle( $k, $xleg, $yleg+3, $xleg + $lleg, $yleg + 10, $ic ); imagefilledrectangle( $k, $xleg, $yleg+2, $xleg + $lleg, $yleg + 7, $ic ); $xleg += ($lleg + 4); ImageString( $k, 2, $xleg, $yleg - 1, $pmin . " (min)", $brown ); // Opt Line: //ImageStringUp( $k, 1, $wid - 17, $hei - $dy2 - 2, $opt, $brown ); ImageString( $k, 1, $dx1, $hei - 16, $opt, $brown ); // ******************************************* //$er = imagegif( $k, $gif_file ); // ************ Linux GIF $er = imagePng( $k, $gif_file ); // ******************************************* } ?>