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 (!isset($li) || $li == 1) $li=0; 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+1; $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 "); $ORF_page= "anotacaoORF.php?processa=Search&mtg=$mtg"; $tRNA_page= $genopar->url_padrao."/moduloAnotacao/tRNA.php?processa=Search&mtg=$mtg"; // 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; // echo "$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 ); $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); $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 = 5; } if ($use_cog != 1){ $cor = "#".$lin['validationColor']; foreach ($vertices as $rg => $v){ $graph->img->SetColor($cor); $graph->img->FilledPolygon($v, true); # true: unir o último ponto do poligono ao primeiro $graph->img->SetColor('#888888'); $graph->img->Polygon($v, true); # true: unir o último ponto do poligono ao primeiro } }else{ $cor = "#".$lin['COGcolor']; foreach ($vertices as $rg => $v){ $graph->img->SetColor($cor); $graph->img->FilledPolygon($v, true); # true: unir o último ponto do poligono ao primeiro $graph->img->SetColor('#888888'); $graph->img->Polygon($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); } // $r = ceil($start/($kb+$li)) - 1; // $region_start = $kb*$r + $li; // $region_end = $region_start + $kb; $xText = ceil($margem+(($start-$region_start)/$zoom))+$desloc+2; $yText = $coord - 5; // echo "$xText = 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); $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 ".$lin['product']."
"; $info .= "COG ".$lin['function']."
"; } 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); } } #### #### tRNA #### $trnaSQL = " SELECT * FROM tRNA WHERE idMontagem='$mtg' AND contigId=$contig AND begin > $li AND end < $lf"; $n= $genopar->queryBanco($trnaSQL); if ($n>0){ while ($lin= $genopar->getArray()){ $prol= 8; #prolongamento da seta $alt= 6; if ($lin['begin'] < $lin['end']) { $r = ceil(($lin['begin'] - $li)/$kb) - 1; do{ $region_start = $kb*$r + $li; $region_end = $region_start + $kb; $x1= ceil($margem+(($lin['begin']-$region_start)/$zoom)); if ($x1 < 0) $x1 = 0; $x2= ceil($margem+(($lin['end']-$region_start)/$zoom)); if ($x2 < 0) $x2 = 0; $arrow[$r]= array( $x1, $centro[$r]-$alt, $x1, $centro[$r]+$alt, $x2, $centro[$r]+$alt, $x2+$prol, $centro[$r], $x2, $centro[$r]-$alt); $xt= ceil($margem+(($lin['begin']-$region_start)/$zoom))+2; $start= $lin['begin']; $end= $lin['end']; $graph->img->SetColor('violet'); $graph->img->FilledPolygon($arrow[$r], true); $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); $r = ceil(($lin['begin'] - $li)/$kb) - 1; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; } else { $r = ceil(($lin['end'] - $li)/$kb) - 1; do{ $region_start = $kb*$r + $li; $region_end = $region_start + $kb; $x1= ceil($margem+(($lin['begin']-$region_start)/$zoom)); if ($x1 < 0) $x1 = 0; $x2= ceil($margem+(($lin['end']-$region_start)/$zoom)); if ($x2 < 0) $x2 = 0; $arrow[$r]= array( $x1, $centro[$r]-$alt, $x1, $centro[$r]+$alt, $x2, $centro[$r]+$alt, $x2-$prol, $centro[$r], $x2, $centro[$r]-$alt); $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); $r = ceil(($lin['end'] - $li)/$kb) - 1; $region_start = $kb*$r + $li; $region_end = $region_start + $kb; } $link = "$tRNA_page&contig=".substr($orf,0,4); $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); 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); } } $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); } } $graph->img->SetColor('black'); $graph->img->line(0,0,$im_width,0); #linha superior $graph->img->line(0,$im_height-1,$im_width,$im_height-1); #linha inferior $graph->img->line($im_width-1,0,$im_width-1,$im_height-1); #linha da direita $graph->img->line(0,0,0,$im_width); #linha da esquerda ################################################################################## if ($escreveArea){ fclose($areaFile); } $gdImgHandler = $graph->Stroke(_IMG_HANDLER); // Stroke image to a file and browser $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"); } } ?>