abreBanco(); $areaFile = fopen($areaFile_name, 'w'); fwrite($areaFile, "\n"); $margem=20; if (!(ceil($zoom)>0 && ceil($zoom)<20)) $zoom=3; // Define work space $xmax=20; $ymax=20; $n= $genopar->queryBanco("SELECT * FROM contig WHERE idMontagem='$mtg' AND id='$contig'"); if ($n != 1) die("
ORF Inválida
"); $lin= $genopar->getArray(); $compr_contig= $lin['tam']; if (!isset($li) || $li == 1) $li=0; if (!isset($lf)) { if ($compr_contig<=55000) $lf=$compr_contig; else $lf=50000; $lfm= $lf; } else { $lfm= $lf; if ($lf>$compr_contig) $lf=$compr_contig; } $im_width= ceil((($lf-$li)/$zoom)+(2*$margem)); if ($geraFrames) $im_height= 165; else $im_height= 45; $arrowWidth = 5; $annot=array(); $id_contig= substr("00".$contig, -3, 3); $n= $genopar->queryBanco(" SELECT o.id, o.start, o.end, o.length, o.frame, a.validation, a.orfName, a.product, a.function, a.COGid, a.frameshift, a.EC_number, a.EC_number2, a.note, a.relatorio, a.anotador, a.revisor, v.color as validationColor, v.status, g.color as COGcolor, r.position as RBSpos FROM orf o, anotacao a, validation v, groupsCOG g, rbs r WHERE o.idMontagem='$mtg' AND a.idMontagem='$mtg' AND r.idMontagem='$mtg' AND o.contigId=$contig AND o.id=a.id AND a.validation=v.code AND a.id = r.id AND g.code = SUBSTRING(a.function,1,1) ORDER BY o.id "); $ORF_page= "anotacaoORF.php?processa=Search&mtg=$mtg"; $tRNA_page= $genopar->url_padrao."/annotV1/tRNA.php?processa=Pesquisar"; if ($n<1){ ## CONTIG NAO POSSUE NENHUMA ORF if ($geraGraph){ $graph = new CanvasGraph(250,50); $graph->SetMargin(5,11,6,11); $graph->SetShadow(); $graph->SetMarginColor('darkblue'); $graph->InitFrame(); $t = new Text("Contig #$contig nao possue ORF",23,15); $t->SetFont(FF_VERDANA, FS_NORMAL,10); $t->SetColor('red'); $t->Stroke($graph->img); $gdImgHandler = $graph->Stroke(_IMG_HANDLER); // Stroke image to a file and browser // Default is PNG so use ".png" as suffix $graph->img->Stream($graph_name); } return $graph_name; } if ($n > 0){ if ($geraGraph){ $graph = new CanvasGraph($im_width,$im_height); $graph->SetMargin(1,1,1,1); // $graph->SetShadow(); $graph->SetMarginColor('black'); $graph->InitFrame(); // Create a new scale $scale = new CanvasScale($graph); $scale->Set(0,$xmax,0,$ymax); // The shape class is wrapper around the Imgae class which translates // the coordinates for us $shape = new Shape($graph,$scale); } $F3= 20; $F2= 40; $F1= 60; $centro= 80; $R1= 100; $R2= 120; $R3= 140; $array=array('centro', 'F1', 'F2', 'F3', 'R1', 'R2', 'R3'); if ($geraGraph){ if ($geraFrames) foreach ($array as $coord) { $graph->img-> SetColor(($coord != 'centro'?'lightyellow':'lightgray')); $graph->img-> Line($margem, $$coord, ceil($margem+($lf-$li)/$zoom), $$coord); } else{ $centro = 20; $graph->img-> SetColor('lightgray'); $graph->img-> Line($margem, $centro, ceil($margem+($lf-$li)/$zoom), $centro); } $graph->img-> SetColor('gray'); for ($i=$li; $i<$lf; $i+=1000) { $graph->img-> Line(ceil($margem+(($i-$li)/$zoom)), $centro-4, ceil($margem+(($i-$li)/$zoom)), $centro+4); $pos = $i/1000; if ($pos > 0) $pos .= "Kb"; $t = new Text("$pos",ceil((($i-$li)/$zoom)+2+$margem),$centro-5 ); $t->SetFont(FF_ARIAL, FS_BOLD,8); $t->SetColor('gray'); $t->Stroke($graph->img); } } while ($lin= $genopar->getArray()) { $frame= $lin['frame']; $orf= $lin['id']; $orfs[$orf]= $frame; $valid= $lin['validation']; $revisor= $lin['revisor']; $orf_name= $lin['orfName']; if ($valid < 0 and !$showInvalid) continue; if (isset($lin['RBSpos'])) $rbs= $lin['RBSpos']; else $rbs=0; if (substr($frame,0,1) == 'F') { $start= $lin['start']; $end= $lin['end']; if ($geraFrames) $coord= $$frame; else $coord= $centro; $x1= ceil($margem+(($start-$li)/$zoom)); $y1= $coord-5; $x2= ceil($margem+(($end-$li)/$zoom)); $y2= $coord+5; // 2 3 // 4 // 1 5 $vertices = array( $x1, $y1, # 1 $x1, $y2, # 2 $x2-$arrowWidth, $y2, # 3 $x2, ceil(($y1+$y2) / 2), # 4 $x2-$arrowWidth, $y1 # 5 ); $desloc = 0; } else { $start= $lin['end']; $end= $lin['start']; if ($geraFrames) $coord= $$frame; else $coord= $centro; $x1= ceil($margem+(($start-$li)/$zoom)); $y1= $coord-5; $x2= ceil($margem+(($end-$li)/$zoom)); $y2= $coord+5; // 2 3 // 1 // 5 4 $vertices = array( $x1, ceil(($y1+$y2) / 2), # 1 $x1+$arrowWidth, $y1, # 2 $x2, $y1, # 3 $x2, $y2, # 4 $x1+$arrowWidth, $y2 # 5 ); $desloc = 10; } if (!$use_cog){ $cor = "#".$lin['validationColor']; $graph->img->SetColor($cor); $graph->img->FilledPolygon($vertices, true); }else{ $cor = "#".$lin['COGcolor']; $graph->img->SetColor("$cor"); $graph->img->FilledPolygon($vertices, true); # true: unir o último ponto do poligono ao primeiro } if (substr($orf, 4, 4) == $orfNumber){ ## DESENHA RETANGULO EM VOLTA DA ORF ATIVA $graph->img->SetColor('#FFCCFF'); $graph->img->RoundedRectangle($x1-5,$y1-7,$x2+5,$y2+7,3); } $t = new Text(($orf_name==''?$orf:$orf_name),$x1+$desloc+2,$y1); $t->SetFont(FF_ARIAL, FS_BOLD,7); $t->SetColor("black"); $t->Stroke($graph->img); if (substr($orf, 4, 4) == $orfNumber) $link = "#"; else $link = "$ORF_page&id=$orf&zoom=$zoom&geraFrames=$geraFrames&showInvalid=$showInvalid&showQual=$showQual&showClones=$showClones&use_cog=$use_cog"; $info = ''; if ($valid>0){ $sizeNT = abs($lin['start'] - $lin['end'] + 1); $sizeAA = ceil($sizeNT/3); $status = $lin['status']; if ($lin['frameshift']) $status .= " - Frameshift"; $info = $orf_name."
"; $info .= "Region ".$lin['start'].':'.$lin['end']."
"; $info .= "Length ".$sizeNT."nt-".$sizeAA."aa
"; $info .= "Start Codon ".$annot[$orf]['codon']."
"; $info .= "Status ".$status."
"; $info .= "Product ".htmlspecialchars($lin['product'], ENT_QUOTES)."
"; $info .= "COG ".htmlspecialchars($lin['function'], ENT_QUOTES)."
"; } escreveAreaFile($areaFile, $link, $vertices, $orf, $info); # Imprime RBS if ($rbs>0){ $x1= ceil($margem+(($rbs-$li)/$zoom)); $y1= $coord+7; $x2= ceil($margem+(($rbs-$li)/$zoom)); $y2= $coord-7; $graph->img->SetColor((($valid>=0)?'red':'gray')); $graph->img->Line($x1--, $y1, $x2++, $y2); } } }#END if n_orfs > 0 #### #### tRNA #### $n= $genopar->queryBanco("SELECT * FROM tRNA WHERE idMontagem='$mtg' AND contigId=$contig"); if ($n>0) { $OK2go=0; while ($lin= $genopar->getArray()) { $prol= 10; #prolongamento da seta $alt= 4; if ($lin['begin'] < $lin['end']) { if ($lin['begin']>$li && $lin['end']<$lf) $OK2go=1; #fwrite($LOG, "\nbegin < end => ".$lin['begin'].' - '.$lin['end']." || $li:$lf - $OK2go"); $arrow= array( ceil($margem+(($lin['end']-$li)/$zoom)), $centro, ceil($margem+(($lin['end']-$li-$prol)/$zoom)), $centro-$alt, ceil($margem+(($lin['begin']-$li)/$zoom)), $centro-$alt, ceil($margem+(($lin['begin']-$li)/$zoom)), $centro+$alt, ceil($margem+(($lin['end']-$li-$prol)/$zoom)), $centro+$alt, ceil($margem+(($lin['end']-$li)/$zoom)), $centro); $xt= ceil($margem+(($lin['begin']-$li)/$zoom))+2; $start= $lin['begin']; $end= $lin['end']; } else { if ($lin['end']>$li && $lin['begin']<$lf) $OK2go=1; #fwrite($LOG, "\nbegin > end => ".$lin['begin'].' - '.$lin['end']." || $li:$lf - $OK2go"); $arrow= array( ceil($margem+(($lin['end']-$li)/$zoom)), $centro, ceil($margem+(($lin['end']-$li+$prol)/$zoom)), $centro-$alt, ceil($margem+(($lin['begin']-$li)/$zoom)), $centro-$alt, ceil($margem+(($lin['begin']-$li)/$zoom)), $centro+$alt, ceil($margem+(($lin['end']-$li+$prol)/$zoom)), $centro+$alt, ceil($margem+(($lin['end']-$li)/$zoom)), $centro); $xt= ceil($margem+(($lin['end']-$li)/$zoom))+($prol/2); $start= $lin['end']; $end= $lin['begin']; } if ($OK2go == 1) { $link = "$tRNA_page&contig=".substr($orf,0,3); $info = "tRNA-".$lin["type"]; $info .= "
Anticodon ".$lin["anticodon"]; if ($escreveArea) escreveAreaFile($areaFile, $link, $arrow, "", $info); if ($geraGraph){ $graph->img->SetColor('violet'); $graph->img->FilledPolygon($arrow, false); $t = new Text($lin['type'],$xt,$centro-3); $t->SetFont(FF_FONT2, FS_BOLD,6); $t->SetColor('black'); $t->Stroke($graph->img); } } } } $graph->img->SetColor('black'); $graph->img->FilledRectangle(0,$im_height,$im_width,$im_height-1); $graph->img->FilledRectangle($im_width,$im_height,$im_width-1,0); $t = new Text(strtoupper($genopar->rede_seq),4,2); $t->SetFont(FF_ARIAL, FS_NORMAL,6); $t->SetColor('black'); $t->Stroke($graph->img); if ($escreveArea){ fclose($areaFile); } $gdImgHandler = $graph->Stroke(_IMG_HANDLER); // Stroke image to a file and browser // Default is PNG so use ".png" as suffix $graph->img->Stream($graph_name); return $graph_name; } ########################### ######### FUNCOES ######### ########################### function escreveAreaFile($areaFile, $link, $poly, $id='', $info=''){ $tam = abs($fim - $ini); if ($id != '') $id = "ORF $id
"; $href = ''; if ($link != "#") $href = "HREF='$link'"; fwrite($areaFile, "\n"); } /** ########################## ########################## ########################## ########################## **/ function geraSingleGraphAnnot($mtg,$contig, $li, $lf, $orfNumber, $zoom, $geraFrames,$showInvalid=0, $showQual=0, $showClones=0, $kb,$use_cog=0){ require_once ("genopar.lib.php"); require_once ("jpgraph/jpgraph.php"); require_once ("jpgraph/jpgraph_canvtools.php"); require_once ("jpgraph/jpgraph_canvas.php"); $geraGraph = TRUE; $areaFile_name= "tmp/area.ctg$contig.$li.$lf.$zoom.$showInvalid"; $graph_name = "tmp/img.$annot.$li.$lf.$zoom.png"; $genopar= new Genopar(__FILE__); $genopar->abreBanco(); $margem=20; if (!(ceil($zoom)>0 && ceil($zoom)<20)) $zoom=3; // Define work space $xmax=20; $ymax=20; $n= $genopar->queryBanco("SELECT * FROM contig WHERE idMontagem='$mtg' AND id='$contig'"); if ($n != 1) die("
ORF Inválida
"); $lin= $genopar->getArray(); $compr_contig= $lin['tam']; if ($compr_contig < $li || ($lf > 0 && $lf < $li)) return ""; $areaFile = fopen($areaFile_name, 'w'); fwrite($areaFile, "\n"); if ($lf == 0) { $lf= $compr_contig; } else { if ($lf>$compr_contig) $lf=$compr_contig; elseif ($lf < $kb) $kb = 0; } if ($kb == 0 || $kb > $compr_contig) $kb = $compr_contig; $line_width = 1; $regions = ceil(($lf - $li + 1)/$kb); $repintar=1; if (($lf - $li +1) < $kb){ $im_width= ceil((($lf - $li +1)/$zoom)+(2*$margem)); $repintar=0; }else $im_width= ceil((($kb)/$zoom)+(2*$margem)); $arrowWidth=5; if ($geraFrames) $region_height = 165; else $region_height = 45; $im_height= $regions*$region_height; $n= $genopar->queryBanco(" SELECT o.id, o.start, o.end, o.length, o.frame, a.validation, a.orfName, a.product, a.function, a.COGid, a.frameshift, a.EC_number, a.EC_number2, a.note, a.relatorio, a.anotador, a.revisor, v.color as validationColor, v.status, g.color as COGcolor, r.position as RBSpos FROM orf o, anotacao a, validation v, groupsCOG g, rbs r WHERE o.idMontagem='$mtg' AND a.idMontagem='$mtg' AND r.idMontagem='$mtg' AND o.contigId=$contig AND o.id=a.id AND a.validation=v.code AND a.id = r.id AND ((o.start > $li AND o.start < $lf) OR (o.end > $li AND o.end < $lf)) AND g.code = SUBSTRING(a.function,1,1) ORDER BY o.id "); // echo " // SELECT // o.id, // o.start, // o.end, // o.length, // o.frame, // a.validation, // a.orfName, // a.product, // a.function, // a.COGid, // a.frameshift, // a.EC_number, // a.EC_number2, // a.note, // a.relatorio, // a.anotador, // a.revisor, // v.color as validationColor, // v.status, // g.color as COGcolor, // r.position as RBSpos // FROM // orf o, // anotacao a, // validation v, // groupsCOG g, // rbs r // WHERE // o.idMontagem='$mtg' AND // a.idMontagem='$mtg' AND // r.idMontagem='$mtg' AND // o.contigId=$contig AND // o.id=a.id AND // a.validation=v.code AND // a.id = r.id AND // ((o.start > $li AND // o.start < $lf) OR // (o.end > $li AND // o.end < $lf)) AND // g.code = SUBSTRING(a.function,1,1) // ORDER BY // o.id // "; $ORF_page= "anotacaoORF.php?processa=Search&mtg=$mtg"; $tRNA_page= $genopar->url_padrao."/annotV1/tRNA.php?processa=Pesquisar"; if ($n<1){ ## CONTIG NAO POSSUE NENHUMA ORF $graph = new CanvasGraph(250,50); $graph->SetMargin(5,11,6,11); $graph->SetShadow(); $graph->SetMarginColor('darkblue'); $graph->InitFrame(); $t = new Text("Contig #$contig nao possue ORF",23,15); $t->SetFont(FF_VERDANA, FS_NORMAL,10); $t->SetColor('red'); $t->Stroke($graph->img); $graph->img->Stream($graph_name); return $graph_name; } if ($n > 0) { // Setup a basic canvas $graph = new CanvasGraph($im_width,$im_height); $graph->SetMargin(1,1,1,1); $graph->SetMarginColor('black'); $graph->InitFrame(); // Create a new scale $scale = new CanvasScale($graph); $scale->Set(0,$xmax,0,$ymax); // The shape class is wrapper around the Imgae class which translates // the coordinates for us $shape = new Shape($graph,$scale); $region_end = $li; for($r=0; $r<$regions; $r++){ $region_start = $region_end; $region_end = $region_start + $kb; $F3[$r]= 20+$region_height*$r; $F2[$r]= 40+$region_height*$r; $F1[$r]= 60+$region_height*$r; $centro[$r]= 80+$region_height*$r; $R1[$r]= 100+$region_height*$r; $R2[$r]= 120+$region_height*$r; $R3[$r]= 140+$region_height*$r; $array=array('centro', 'F1', 'F2', 'F3', 'R1', 'R2', 'R3'); if ($geraFrames) foreach ($array as $coord) { $graph->img-> SetColor(($coord != 'centro'?'lightyellow':'lightgray')); $graph->img-> Line($margem, ${$coord}[$r], ceil($margem+($region_end-$region_start)/$zoom), ${$coord}[$r]); } else{ $centro[$r] = 20+$region_height*$r; $graph->img-> SetColor('lightgray'); $graph->img-> Line($margem, $centro[$r], ceil($margem+($region_end-$region_start)/$zoom), $centro[$r]); } $graph->img-> SetColor('gray'); for ($i=$region_start; $i<$region_end; $i+=1000) { $graph->img-> line(ceil($margem+(($i-$region_start)/$zoom)), $centro[$r]-4, ceil($margem+(($i-$region_start)/$zoom)), $centro[$r]+4); $pos = $i/1000; if ($pos > 0) $pos .= "Kb"; $t = new Text("$pos",ceil((($i-$region_start)/$zoom)+2+$margem),$centro[$r]-5 ); $t->SetFont(FF_ARIAL, FS_BOLD,8); $t->SetColor('gray'); $t->Stroke($graph->img); } if ($r + 1 < $regions){ $graph->img-> SetColor('darkblue'); if ($geraFrames) $graph->img-> Line($margem, $R3[$r]+22, ceil($margem+($region_end-$region_start)/$zoom), $R3[$r]+22); else $graph->img-> Line($margem, $centro[$r]+22, ceil($margem+($region_end-$region_start)/$zoom), $centro[$r]+22); } } while ($lin= $genopar->getArray()) { $frame= $lin['frame']; $orf= $lin['id']; $orfs[$orf]= $frame; $valid= $lin['validation']; $orf_name=$lin['orfName']; if ($valid < 0 and !$showInvalid) continue; if (isset($lin['RBSpos'])) $rbs= $lin['RBSpos']; else $rbs=0; $vertices = array(); if (substr($frame,0,1) == 'F') { $start= $lin['start']; $end= $lin['end']; $r = ceil(($start-$li)/$kb) - 1; do{ $region_start = $kb*$r + $li; $region_end = $region_start + $kb; if ($geraFrames) $coord= ${$frame}[$r]; else $coord= $centro[$r]; $x1= ceil($margem+(($start-$region_start)/$zoom)); if ($x1 < 0) $x1 = 0; $y1= $coord-5; $x2= ceil($margem+(($end-$region_start)/$zoom)); if ($x2 < 0) $x2 = 0; $y2= $coord+5; // 2 3 // 4 // 1 5 $vertices[$r] = array( $x1, $y1, # 1 $x1, $y2, # 2 $x2-$arrowWidth, $y2, # 3 $x2, ceil(($y1+$y2) / 2), # 4 $x2-$arrowWidth, $y1 # 5 ); // print_r($vertices); $desloc = 0; $r++; } while($end > $region_end && $end < $lf); $r = ceil(($start-$li)/$kb) - 1; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; if ($geraFrames) $coord= ${$frame}[$r]; else $coord= $centro[$r]; } else { $start= $lin['end']; $end= $lin['start']; $r = ceil(($start-$li)/$kb) - 1; do{ if ($r < 0) $r = 0; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; if ($geraFrames) $coord= ${$frame}[$r]; else $coord= $centro[$r]; $x1= ceil($margem+(($start-$region_start)/$zoom)); if ($x1 < 0) $x1 = 0; $y1= $coord-5; $x2= ceil($margem+(($end-$region_start)/$zoom)); if ($x2 < 0) $x2 = 0; $y2= $coord+5; // 2 3 // 1 // 5 4 $vertices[$r] = array( $x1, ceil(($y1+$y2) / 2), # 1 $x1+$arrowWidth, $y1, # 2 $x2, $y1, # 3 $x2, $y2, # 4 $x1+$arrowWidth, $y2 # 5 ); $r++; }while($end > $region_end && $end < $lf); // print_r($vertices); $r = ceil(($start-$li)/$kb) - 1; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; if ($geraFrames) $coord= ${$frame}[$r]; else $coord= $centro[$r]; $desloc = 10; } if (!$use_cog){ $cor = "#".$lin['validationColor']; $graph->img->SetColor($cor); foreach ($vertices as $rg => $v) $graph->img->FilledPolygon($v, true); # true: unir o último ponto do poligono ao primeiro }else{ $cor = "#".$lin['COGcolor']; // echo $cor;exit; $graph->img->SetColor("$cor"); foreach ($vertices as $rg => $v) $graph->img->FilledPolygon($v, true); # true: unir o último ponto do poligono ao primeiro } if ($orf == $orfNumber){ ## DESENHA RETANGULO EM VOLTA DA ORF ATIVA $graph->img->SetColor('#FFCCFF'); $graph->img->RoundedRectangle($x1-5,$y1-7,$x2+5,$y2+7,3); } $xText = ceil($margem+(($start-$region_start)/$zoom))+$desloc+2; $yText = $coord - 5; // echo "$xText:$yText ceil($margem+(($start-$region_start)/$zoom))+$desloc+2;
"; $t = new Text(($orf_name==''?$orf:$orf_name),$xText,$yText); $t->SetFont(FF_ARIAL, FS_BOLD,7); $t->SetColor("black"); $t->Stroke($graph->img); // fwrite($fMAP, "rect $ORF_page&id=$orf&showInvalid=$showInvalid $x1,$y1 $x2,$y2\n"); $link = "$ORF_page&id=$orf&zoom=$zoom&geraFrames=$geraFrames&use_cog=$use_cog"; $info = ''; if ($valid>0){ $sizeNT = abs($lin['start'] - $lin['end'] + 1); $sizeAA = ceil($sizeNT/3); $status = $lin['status']; if ($lin['frameshift']) $status .= " - Frameshift"; $info = $orf_name."
"; $info .= "Region ".$lin['start'].':'.$lin['end']."
"; $info .= "Length ".$sizeNT."nt-".$sizeAA."aa
"; $info .= "Start Codon ".$annot[$orf]['codon']."
"; $info .= "Status ".$status."
"; $info .= "Product ".htmlspecialchars($lin['product'], ENT_QUOTES)."
"; $info .= "COG ".htmlspecialchars($lin['function'], ENT_QUOTES)."
"; } escreveSingleAreaFile($areaFile, $link, $vertices, $orf, $info); if ($rbs>0){ $x1= ceil($margem+(($rbs-$region_start)/$zoom)); $y1= $coord+7; $x2= ceil($margem+(($rbs-$region_start)/$zoom)); $y2= $coord-7; $graph->img->SetColor((($valid>=0)?'red':'gray')); $graph->img->Line($x1--, $y1, $x2++, $y2); } } }#END if n_orfs > 0 #### #### tRNA #### $n= $genopar->queryBanco("SELECT * FROM tRNA WHERE idMontagem='$mtg' AND contigId=$contig"); if ($n>0) { while ($lin= $genopar->getArray()) { $prol= 10; #prolongamento da seta $alt= 4; if ($lin['begin'] < $lin['end']) { $r = ceil ($lin['begin'] / $kb) - 1; do{ $region_start = $r * $kb + $li; $region_end = $region_start + $kb; #fwrite($LOG, "\nbegin < end => ".$lin['begin'].' - '.$lin['end']." || $li:$lf - $OK2go"); $arrow[$r]= array( ceil($margem+(($lin['end']-$region_start)/$zoom)), $centro[$r], ceil($margem+(($lin['end']-$region_start-$prol)/$zoom)), $centro[$r]-$alt, ceil($margem+(($lin['begin']-$region_start)/$zoom)), $centro[$r]-$alt, ceil($margem+(($lin['begin']-$region_start)/$zoom)), $centro[$r]+$alt, ceil($margem+(($lin['end']-$region_start-$prol)/$zoom)), $centro[$r]+$alt, ceil($margem+(($lin['end']-$region_start)/$zoom)), $centro[$r]); $xt= ceil($margem+(($lin['begin']-$region_start)/$zoom))+2; $start= $lin['begin']; $end= $lin['end']; $graph->img->SetColor('violet'); $graph->img->FilledPolygon($arrow[$r], false); $t = new Text($lin['type'],$xt,$centro[$r]-3); $t->SetFont(FF_FONT2, FS_BOLD,6); $t->SetColor('black'); $t->Stroke($graph->img); $r++; } while($end > $region_end); } else { $r = ceil ($lin['end'] / $kb) - 1; do{ $region_start = $r * $kb +$li; $region_end = $region_start + $kb; #fwrite($LOG, "\nbegin > end => ".$lin['begin'].' - '.$lin['end']." || $li:$lf - $OK2go"); $arrow[$r]= array( ceil($margem+(($lin['end']-$region_start)/$zoom)), $centro[$r], ceil($margem+(($lin['end']-$region_start+$prol)/$zoom)), $centro[$r]-$alt, ceil($margem+(($lin['begin']-$region_start)/$zoom)), $centro[$r]-$alt, ceil($margem+(($lin['begin']-$region_start)/$zoom)), $centro[$r]+$alt, ceil($margem+(($lin['end']-$region_start+$prol)/$zoom)), $centro[$r]+$alt, ceil($margem+(($lin['end']-$region_start)/$zoom)), $centro[$r]); $xt= ceil($margem+(($lin['end']-$region_start)/$zoom))+($prol/2); $start= $lin['end']; $end= $lin['begin']; $graph->img->SetColor('violet'); $graph->img->FilledPolygon($arrow[$r], false); $t = new Text($lin['type'],$xt,$centro[$r]-3); $t->SetFont(FF_FONT2, FS_BOLD,6); $t->SetColor('black'); $t->Stroke($graph->img); $r++; } while($end > $region_end); } // echo $r; $link = "$tRNA_page&contig=".substr($orf,0,3); $info = "tRNA-".$lin["type"]; $info .= "
Anticodon ".$lin["anticodon"]; escreveSingleAreaFile($areaFile, $link, $arrow, "", $info); } } # Desenhar novamente inicio e final da figura p/ sobrepintar orfs fora dos limites ################################################################################## $graph->img->SetColor('white'); $graph->img->FilledRectangle(5,6,$margem-1,$im_height-11); $graph->img->SetColor('black'); $graph->img->FilledRectangle(0,0,0,$im_height); if ($geraFrames) for($r=0;$r<$regions;$r++) foreach ($array as $coord) { if ($coord != 'centro') { // echo "$coord = ".${$coord}[$r]."
"; $t = new Text($coord,8,${$coord}[$r]-3 ); $t->SetFont( FF_ARIAL, FS_BOLD,5); $t->SetColor('gray'); $t->Stroke($graph->img); } } $graph->img->SetColor('black'); $graph->img->FilledRectangle(0,$im_height,$im_width,$im_height-1); $t = new Text(strtoupper($genopar->rede_seq),4,2); $t->SetFont(FF_ARIAL, FS_NORMAL,6); $t->SetColor('black'); $t->Stroke($graph->img); if ($repintar){ for($r=0;$r<$regions;$r++){ $graph->img->SetColor('white'); $graph->img->FilledRectangle($im_width-$margem+2,6,$im_width,$im_height-11); $graph->img->SetColor('white'); $graph->img->FilledRectangle($im_width,1,ceil($margem+(($i-$region_start)/$zoom)),$im_height-11); $graph->img->SetColor('white'); $graph->img->FilledRectangle(1,1,4,$im_height-11); $graph->img->SetColor('black'); $graph->img->FilledRectangle($im_width-1,0,$im_width,$im_height); $graph->img-> Line(ceil($margem+($lf/$zoom)), ${centro}[$r]-4, ceil($margem+($lf/$zoom)), ${centro}[$r]+4); } $r = $regions - 1; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; $x1 = ceil($margem+(($lf - $region_start)/$zoom)); $y1 = $im_height-15; $x2 = ceil($margem+(($region_end - $region_start)/$zoom)); $y2 = $im_height-$region_height; $graph->img->SetColor('white'); $graph->img->FilledRectangle($x1,$y1,$x2,$y2); $graph->img-> SetColor('gray'); if ($lf < $region_end){ $graph->img-> line(ceil($margem+(($lf-$region_start)/$zoom)), $centro[$r]-10, ceil($margem+(($lf-$region_start)/$zoom)), $centro[$r]+10); $pos = $lf/1000; $t = new Text("$pos",ceil((($lf-$region_start)/$zoom)+2+$margem),$centro[$r] ); $t->SetFont(FF_ARIAL, FS_BOLD,10); $t->SetColor('gray'); $t->Stroke($graph->img); } } ################################################################################## if ($escreveArea){ fclose($areaFile); } $gdImgHandler = $graph->Stroke(_IMG_HANDLER); // Stroke image to a file and browser // Default is PNG so use ".png" as suffix $graph->img->Stream($graph_name); return $graph_name; } function escreveSingleAreaFile($areaFile, $link, $polys, $id='', $info=''){ $tam = abs($fim - $ini); if ($id != '') $id = "ORF $id
"; foreach ($polys as $k => $poly){/* print_r($poly);*/ fwrite($areaFile, "\n"); } } function geraNoScaleGraphAnnot($mtg,$contig, $ini, $fim, $width, $height){ require_once ("jpgraph/jpgraph.php"); require_once ("jpgraph/jpgraph_canvtools.php"); require_once ("jpgraph/jpgraph_canvas.php"); // echo "$contig, $ini, $fim, $width, $height"; $areaFile_name= "tmp/area.ctg$contig.$li.$lf.$zoom.$showInvalid"; $graph_name = "tmp/imgCtgNoScale.$contig.$ini.$fim.$width.$height.png"; $genopar= new Genopar(__FILE__); $genopar->abreBanco('annotV1'); // if ($escreveArea){ // $areaFile = fopen($areaFile_name, 'w'); // fwrite($areaFile, "\n"); // } $margem=20; $xmax=20; $ymax=20; $n= $genopar->queryBanco("SELECT * FROM contigs WHERE idMontagem='$mtg' AND contig_num='$contig'"); if ($n != 1) die("
ORF Inválida
"); $lin= $genopar->getArray(); $compr_contig= $lin['bp_untrim']; $genopar->queryBanco("SELECT * FROM validation"); while ($res = $genopar->getArray()) $validation[$res['val_cod']] = $res['status']; $genopar->queryBanco("SELECT code, color FROM genoma.COGfunc"); while ($res = $genopar->getArray()) $COGcolors[$res['code']] = $res['color']; $zoom=1; $im_height= $height+$margem; $arrowWidth = 5; $annot=array(); $id_contig= substr("00".$contig, -3, 3); $n= $genopar->queryBanco("SELECT * FROM annot WHERE idMontagem='$mtg' AND id like '$id_contig.%' ORDER BY id"); $ORF_page= $genopar->url_padrao."/annotV1/ORF_annot.php?processa=Search"; $tRNA_page= $genopar->url_padrao."/annotV1/tRNA.php?processa=Pesquisar"; // $fMAP_name= $genopar->dir_padrao."/annotV1/tmp/MAP$contig.$li.$lfm.$zoom.map"; // $fMAP = fopen($fMAP_name, 'w'); // fwrite($fMAP, "base referer\n"); if ($n<1){ ## CONTIG NAO POSSUE NENHUMA ORF if ($geraGraph){ $graph = new CanvasGraph(250,50); $graph->SetMargin(5,11,6,11); $graph->SetShadow(); $graph->SetMarginColor('darkblue'); $graph->InitFrame(); $t = new Text("Contig #$contig nao possue ORF",23,15); $t->SetFont(FF_VERDANA, FS_NORMAL,10); $t->SetColor('red'); $t->Stroke($graph->img); $graph->Stroke(); } return $graph_name; } while ($lin=$genopar->getArray()) { $annot[$lin['id']]['orf_name']=$lin['orf_name']; $annot[$lin['id']]['revisor']=$lin['revisor']; $annot[$lin['id']]['validation']=$lin['validation']; $annot[$lin['id']]['frameshift'] = $lin['frameshift']; $annot[$lin['id']]['product'] = $lin['product']; $annot[$lin['id']]['function'] = $lin['function']; } // $n= $genopar->queryBanco("SELECT distinct id, id_orf, frame, orf_start, gene_start, end, gene_score // FROM glimmer2 WHERE contig_num='$contig' ORDER BY id"); $n= $genopar->queryBanco("SELECT distinct g.id, g.id_orf, g.frame, g.gene_start, a.validation FROM glimmer2 g, annot a where g.id=a.id and g.contig_num=$contig and a.validation >=0 and g.gene_start <= $fim"); // return; $espaco=5; $x1=$margem; if ($n > 0){ $im_width= ceil($n*$width+2*$margem+$espaco*($n-1)); // Setup a basic canvas $graph = new CanvasGraph($im_width,$im_height); $graph->SetMargin(5,11,6,11); $graph->SetShadow(); $graph->SetMarginColor('darkblue'); $graph->InitFrame(); // Create a new scale $scale = new CanvasScale($graph); $scale->Set(0,$xmax,0,$ymax); // The shape class is wrapper around the Imgae class which translates // the coordinates for us $shape = new Shape($graph,$scale); $coord = ceil($im_height/2)-2; $graph->img-> SetColor('lightgray'); $graph->img-> Line(5, $coord, $im_width-11, $coord); while ($lin= $genopar->getArray()) { $orf= $lin['id']; //echo "
$n $orf"; $g2= $lin['id_orf']; $frame = $lin['frame']; $orfs[$orf]= $frame; $valid= $annot[$orf]['validation']; $revisor= $annot[$orf]['revisor']; $orf_name= $annot[$orf]['orf_name']; $words = preg_split("/\s+/",$annot[$orf]['function'],-1, PREG_SPLIT_NO_EMPTY); $words = preg_split("//",$words[0],-1, PREG_SPLIT_NO_EMPTY); $code = $words[0]; $COGcolor = $COGcolors[$code]; if (!$COGcolor){ // $code = substr($lin['function'], 0, 2); $words = preg_split("/;/",$code,-1, PREG_SPLIT_NO_EMPTY); $code = $words[0]; $COGcolor = $COGcolors[$code]; } if ($valid < 0 and !$showInvalid) continue; if (substr($frame,0,1) == 'F') { $y1= $coord-ceil($height/2); $x2= $x1+$width; $y2= $coord+ceil($height/2); // 2 3 // 4 // 1 5 $vertices = array( $x1, $y1, # 1 $x1, $y2, # 2 $x2-$arrowWidth, $y2, # 3 $x2, ceil(($y1+$y2) / 2), # 4 $x2-$arrowWidth, $y1 # 5 ); $desloc = 0; } else { $y1= $coord-ceil($height/2); $x2= $x1+$width; $y2= $coord+ceil($height/2); // 2 3 // 1 // 5 4 $vertices = array( $x1, ceil(($y1+$y2) / 2), # 1 $x1+$arrowWidth, $y1, # 2 $x2, $y1, # 3 $x2, $y2, # 4 $x1+$arrowWidth, $y2 # 5 ); $desloc = $arrowWidth; } // print_r($vertices); $cor= '#CCCCFF'; # Cor Padrao (unverified / não escolhida) if ($valid>0) { if ($valid==1) { $cor= '#0066CC'; } # Valido elseif ($valid==2) { $cor= '#FFCC66'; } # Hypotetical elseif ($valid==3) { $cor= '#CC9933'; } # Cons. Hyp. elseif ($valid==4) { $cor= '#FF3300'; } # Pending elseif ($valid==99) { $cor= '#33FF00'; } # Updated } elseif ($g2 != '') { $cor= '#66CCFF'; } # Escolhida G2 if (substr($orf, 4, 4) == $orfNumber){ ## DESENHA RETANGULO EM VOLTA DA ORF ATIVA $graph->img->SetColor('#FFCCFF'); $graph->img->RoundedRectangle($x1-5,$y1-7,$x2+5,$y2+7,3); } if ($valid==-2) { $graph->img->SetColor('#CCCCFF'); $graph->img->Polygon($vertices, true); # true: unir o último ponto do poligono ao primeiro } elseif ($valid<0) { $graph->img->SetColor('#CCCCCC'); $graph->img->Polygon($vertices, true); } else { $graph->img->SetColor($cor); $graph->img->FilledPolygon($vertices, true); } $t = new Text(($orf_name==''?$orf:$orf_name),$x1+$desloc+2,ceil($height/2 + 3)); $t->SetFont(FF_ARIAL, FS_BOLD,7); $t->Stroke($graph->img); $x1+=$width+$espaco; } } $gdImgHandler = $graph->Stroke(_IMG_HANDLER); // Stroke image to a file and browser // Default is PNG so use ".png" as suffix $graph->img->Stream($graph_name); return $graph_name; } ?>