use warnings;
use strict;
use Data::Dumper;
+use Time::HiRes;
use Maasha::Common;
use Maasha::Calc;
use Maasha::Filesys;
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+sub track_grid
+{
+ # Martin A. Hansen, March 2010.
+
+ # Create a grid of vertical lines for the browser image.
+
+ my ( $cookie, # browser cookie
+ ) = @_;
+
+ # Returns a list.
+
+ my ( @grid, $i );
+
+ for ( $i = 0; $i < $cookie->{ 'IMG_WIDTH' }; $i += 20 )
+ {
+ push @grid, {
+ type => 'grid',
+ line_width => 1,
+ color => [ 0.82, 0.89, 1 ],
+ x1 => $i,
+ y1 => 0,
+ x2 => $i,
+ y2 => $cookie->{ 'TRACK_OFFSET' },
+ };
+ }
+
+ return wantarray ? @grid : \@grid;
+}
+
+
sub track_ruler
{
# Martin A. Hansen, November 2009.
$step *= 5;
}
- for ( $i = $beg; $i < $end; $i++ )
+ $i = 0;
+
+ while ( $i <= $beg ) {
+ $i += $step;
+ }
+
+ while ( $i < $end )
{
- if ( ( $i % $step ) == 0 )
- {
- $txt = "|" . Maasha::Calc::commify( $i );
- $x = sprintf( "%.0f", ( ( $i - $beg ) * $factor ) + 2 );
+ $txt = "|" . Maasha::Calc::commify( $i );
+ $x = sprintf( "%.0f", ( ( $i - $beg ) * $factor ) + 2 );
- if ( $x > 0 and $x + ( $cookie->{ 'RULER_FONT_SIZE' } * length $txt ) < $cookie->{ 'IMG_WIDTH' } )
- {
- push @ruler, {
- type => 'text',
- txt => $txt,
- font_size => $cookie->{ 'RULER_FONT_SIZE' },
- color => $cookie->{ 'RULER_COLOR' },
- x1 => $x,
- y1 => $cookie->{ 'TRACK_OFFSET' },
- };
- }
+ if ( $x > 0 and $x + ( $cookie->{ 'RULER_FONT_SIZE' } * length $txt ) < $cookie->{ 'IMG_WIDTH' } )
+ {
+ push @ruler, {
+ type => 'text',
+ txt => $txt,
+ font_size => $cookie->{ 'RULER_FONT_SIZE' },
+ color => $cookie->{ 'RULER_COLOR' },
+ x1 => $x,
+ y1 => $cookie->{ 'TRACK_OFFSET' },
+ };
}
+
+ $i += $step;
}
$cookie->{ 'TRACK_OFFSET' } += $cookie->{ 'TRACK_SPACE' };
# Returns a list.
- my ( $data_wig, $data_kiss, $track_name, $features );
+ my ( $data_wig, $data_kiss, $track_pretty, $track_name, $features, $color );
$track_name = ( split "/", $track )[ -1 ];
- $track_name =~ s/^\d+_//;
- $track_name =~ s/_/ /g;
+
+ $track_pretty = $track_name;
+ $track_pretty =~ s/^\d+_//;
+ $track_pretty =~ s/_/ /g;
+
+ if ( track_hide( $cookie, $track_name ) ) {
+ $color = [ 0.6, 0.6, 0.6 ];
+ } else {
+ $color = $cookie->{ 'SEQ_COLOR' };
+ }
push @{ $features }, {
- type => 'text',
- txt => $track_name,
+ type => 'track_name',
+ track => $track_name,
+ txt => $track_pretty,
font_size => $cookie->{ 'SEQ_FONT_SIZE' },
- color => $cookie->{ 'SEQ_COLOR' },
+ color => $color,
x1 => 0,
y1 => $cookie->{ 'TRACK_OFFSET' },
};
$cookie->{ 'TRACK_OFFSET' } += 10;
- if ( -f "$track/track_data.wig" )
+ if ( not track_hide( $cookie, $track_name ) )
{
- $data_wig = Maasha::BGB::Wiggle::wiggle_retrieve( "$track/track_data.wig", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } );
+ if ( -f "$track/track_data.wig" )
+ {
+ $data_wig = Maasha::BGB::Wiggle::wiggle_retrieve( "$track/track_data.wig", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } );
- push @{ $features }, track_wiggle( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_wig );
- }
- elsif ( -f "$track/track_data.kiss" )
- {
- $data_kiss = Maasha::KISS::kiss_retrieve( "$track/track_data.kiss", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } );
+ push @{ $features }, track_wiggle( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_wig );
+ }
+ elsif ( -f "$track/track_data.kiss" )
+ {
+ $data_kiss = Maasha::KISS::kiss_retrieve( "$track/track_data.kiss", $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' } );
- push @{ $features }, track_linear( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_kiss );
- }
- else
- {
- Maasha::Common::error( "Unknown track data type" );
+ push @{ $features }, track_linear( $cookie, $cookie->{ 'NAV_START' }, $cookie->{ 'NAV_END' }, $data_kiss );
+ }
+ else
+ {
+ Maasha::Common::error( "Unknown track data type" );
+ }
}
return wantarray ? @{ $features } : $features;
if ( $w >= 1 )
{
$x1 = sprintf( "%.0f", ( $entry->[ S_BEG ] - $beg ) * $factor );
+ $x2 = $x1 + $w;
+ $x1 = 0 if $x1 < 0;
+ $x2 = $cookie->{ 'IMG_WIDTH' } if $x2 > $cookie->{ 'IMG_WIDTH' };
for ( $y_step = 0; $y_step < @ladder; $y_step++ ) {
last if $x1 >= $ladder[ $y_step ] + 1;
}
$y1 = $cookie->{ 'TRACK_OFFSET' } + ( ( 1.1 + $cookie->{ 'FEAT_WIDTH' } ) * $y_step );
+ $y2 = $y1 + $cookie->{ 'FEAT_WIDTH' };
$feature = {
line_width => $cookie->{ 'FEAT_WIDTH' },
strand => $entry->[ STRAND ],
x1 => $x1,
y1 => $y1,
- x2 => $x1 + $w,
- y2 => $y1 + $cookie->{ 'FEAT_WIDTH' },
+ x2 => $x2,
+ y2 => $y2,
};
if ( $entry->[ STRAND ] eq '+' or $entry->[ STRAND ] eq '-' ) {
push @features, feature_align( $entry, $beg, $y1, $factor, $cookie->{ 'FEAT_WIDTH' } ) if $entry->[ ALIGN ] ne '.';
- $ladder[ $y_step ] = $x1 + $w;
+ # $ladder[ $y_step ] = $x1 + $w;
+ $ladder[ $y_step ] = sprintf( "%.0f", ( $entry->[ S_BEG ] - $beg ) * $factor ) + $w;
}
}
{
foreach $align ( split /,/, $entry->[ ALIGN ] )
{
- if ( $align =~ /(\d+):([ATCGN-])>([ATCGN-])/ )
+ if ( $align =~ /(\d+):([ATCGRYKMSWBDHVN-])>([ATCGRYKMSWBDHVN-])/ )
{
$pos = $1;
$nt_before = $2;
}
+sub track_hide
+{
+ # Martin A. Hansen, March 2010.
+
+ # Check cookie information to see if a given track
+ # should be hidden or not.
+
+ my ( $cookie, # cookie hash
+ $track, # track name
+ ) = @_;
+
+ # Returns boolean.
+
+ my ( $clade, $genome, $assembly );
+
+ $clade = $cookie->{ 'CLADE' };
+ $genome = $cookie->{ 'GENOME' };
+ $assembly = $cookie->{ 'ASSEMBLY' };
+
+ if ( exists $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } and
+ $cookie->{ 'TRACK_STATUS' }->{ $clade }->{ $genome }->{ $assembly }->{ $track } )
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1;
return wantarray ? @{ $features } : $features;
}
+
+
+my $t0 = Time::HiRes::gettimeofday();
+my $t1 = Time::HiRes::gettimeofday(); print STDERR "Time: " . ( $t1 - $t0 ) . "\n";