Bio-Graphics

 view release on metacpan or  search on metacpan

lib/Bio/Graphics/Glyph/fb_shmiggle.pm  view on Meta::CPAN

			my $x=  $screencoords[$xpos] + $xshift;
			my $visval;
			if( exists $SPEEDUP{$val} ) { $visval= $SPEEDUP{$val}; }
			else { $visval= int($val*$koeff); $SPEEDUP{$val}= $visval; }
			my $y= $yf2 - $yshift - $visval;
			push(@allx,$x);
			push(@ally,$y);
			push(@allvals,$visval);
			if( $xpos>0 ) {
    		$poly->addPt($x,$y+1);
				}
			($xold,$yold)= ($x,$y);
			$xpos++;
			}
    $poly->addPt($xf2+$xshift, $yf2-$yshift+1); 
  	$gd->filledPolygon($poly,$color) unless $profilen==0; # not on MAX predictor
		($xold,$yold)= ($allx[0],$ally[0]);
		for( my $en=1; $en<=$#allx; $en++ ) {
			my $x= $allx[$en];
			my $y= $ally[$en];
			$gd->line($xold,$yold,$x,$y,$edgecolor);
			($xold,$yold)= ($x,$y);
			} 
		if( $profilen==0 ) { # drawing mRNA (cutoff-based) predictor on MAX subset
			my($xxx,$yyy)= ($allx[1]-1,$yf2-$yw);
			$gd->line($xxx-4,$yyy,$xxx-2,$yyy,$black);
			$gd->string(GD::Font->Tiny,$xxx-12, $yyy-3,'0',$black);
			$gd->line($xxx-2,$yyy,$xxx-2,$yyy-50,$black);
			$gd->line($xxx-4,$yyy-47,$xxx-2,$yyy-50,$black);
			$gd->line($xxx,$yyy-47,$xxx-2,$yyy-50,$black);
			$gd->line($xxx-4,$yyy-44,$xxx-2,$yyy-44,$black);
			$gd->string(GD::Font->Tiny,$xxx-18, $yyy-47,$max_signal,$black);
			my($inexon,$exstart,$exend,$ymax)= (0,0,0,999);
			for( my $en=1; $en<=$#allx; $en++ ) {
				my $y= $ally[$en];
				$ymax= $y if $y < $ymax;
				if( $allvals[$en]>=$predictor_cutoff ) {
					my $x= $allx[$en];
					unless( $inexon ) { $inexon= 1; $exstart= $x; } # start exon
					$exend= $x; 
					}
				elsif( $inexon ) { # end exon and draw it
					$inexon= 0;
					$ymax -= 6;
					my $allowedymax= $yf2-$yshift-45;
					$ymax= $allowedymax if $ymax < $allowedymax; # set limit for huge peaks
					$gd->line($exstart,$ymax,$exstart,$ymax+2,$red);
					$gd->line($exstart,$ymax,$exend,$ymax,$red);
					$gd->line($exend,$ymax,$exend,$ymax+2,$red);
					($inexon,$exstart,$exend,$ymax)= (0,0,0,999);
					}
				}
			if( $inexon ) { # exon which ends beyond this screen
					$ymax -= 6;
					my $allowedymax= $yf2-$yshift-45;
					$ymax= $allowedymax if $ymax < $allowedymax; # set limit for huge peaks
					$gd->line($exstart,$ymax,$exstart,$ymax+2,$red);
					$gd->line($exstart,$ymax,$exend,$ymax,$red);
					}
			}
		if( 0 && $profilen>1 ) { # blocked - drawing roof lines doesn't work well with this view..
			for( my $en=3; $en<=$#allx; $en+=6 ) {
				next if $allvals[$en]==0 || $prevvals[$en]==0;
				my $y= $ally[$en];
				$yold= $prevy[$en];
				if( $yold<$y ) {
					my $x= $allx[$en];
					$xold= $prevx[$en];
					$gd->line($xold,$yold,$x,$y,$darkgrey);
					}
				}
			}
		$gd->string(GD::Font->Tiny,$xf2+$xshift+3, $yf2-$yshift-5,$subsetsnames->{$subset},$color);
		$colcycler++;
		$colcycler= 0 if $colcycler>$#colors;
		unless( $profilen==0 ) { @prevx= @allx; @prevy= @ally; @prevvals= @allvals; }
		$profilen++;
		}
	 
	return;
}

#--------------------------
sub getData {
  my $self = shift;
  my($ft,$datadir,$chromosome,$start,$stop,$scrstart,$scrstop,$flipped) = @_;
	my %Signals= ();
	$self->openDataFiles($datadir);
	my @subsets= (exists $ft->{'subsetsorder'}) ? @{$ft->{'subsetsorder'}} : sort split(/\t+/,$Indices{'subsets'});
	shift(@subsets) if $subsets[0] eq 'MAX';
	warn("subsets: @subsets\n") if DEBUG;
	my %SubsetsNames= (exists $ft->{'subsetsnames'}) ? %{$ft->{'subsetsnames'}} : map { $_, $_ } @subsets;
	$SubsetsNames{MAX}= 'MAX'; 
	my $screenstep= ($scrstop-$scrstart+1) * 1.0 / ($stop-$start+1);
	my $donecoords= 0;
	foreach my $subset ( @subsets ) {
		my $nstrings= 0;
		# scan seq ranges offsets to see where to start reading
		my $key= $subset.':'.$chromosome;
		my $poskey= $key.':offsets';
		my $ranges_pos= (exists $Indices{$poskey}) ? int($Indices{$poskey}) : -1;
		if( $ranges_pos == -1 ) { next; } # no such signal..
		warn("  positioning for $poskey starts at $ranges_pos\n") if DEBUG;
		if( $start>=1000000 ) {  
			my $bigstep= int($start/1000000.0);
			if( exists $Indices{$key.':offsets:'.$bigstep} ) {
				my $jumpval= $Indices{$key.':offsets:'.$bigstep}; 
				warn("  jump in offset search to $jumpval\n") if DEBUG;
				$ranges_pos= int($jumpval); }
			}
		seek(DATF,$ranges_pos,0);
		my($offset,$offset1)= (0,0);
		my $lastseqloc= -999999999;
		my $useoffset= 0;
		while( (my $strs=<DATF>) ) {
			$nstrings++ if DEBUG;
			if( DEBUG ) {
				chop($strs); warn("  	positioning read for coord $start ($strs)\n"); }
			last unless $strs=~m/^(-?\d+)[ \t]+(\d+)/;
			my($seqloc,$fileoffset)= ($1,$2);
			if( DEBUG ) {



( run in 3.054 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )