[Bioperl-l] different label colours
Crabtree, Jonathan
crabtree at tigr.org
Fri Apr 29 10:29:20 EDT 2005
Hota-
Here's your problem; there are a number of places in your code where
you're doing something that looks like this-
$features = new Bio::SeqFeature::Generic (-display_name => $label);
foreach $exon (@mudr_exons) {
$subfeature = new Bio::SeqFeature::Generic( ...,
-primary =>
'zn_finger_exon',
...);
$features->add_sub_SeqFeature($subfeature, 'EXPAND');
...
}
The problem with this is that your "parent" feature ($features) has no
primary_tag. By default, however, Bioperl will only call the fontcolor
subroutine on the *parent* feature, not the child features (i.e., the
exons, which *do* have valid primary tags.) Here are a couple of ways
that you can fix this:
1. Assign each parent feature a valid primary tag when you create it.
For example:
$features = new Bio::SeqFeature::Generic (-display_name => $label,
-primary =>
'zn_finger_exon');
2. Use the -all_callbacks option (see the documentation for
Bio::Graphics::Panel).
Using option 1. requires that you pick a single color for each parent
feature, whereas option 2. will let you assign each exon its own color
and/or label. Using all_callbacks does complicate things, however, so I
wouldn't option 2 unless you really want to assign each child
feature/exon its own label and/or color.
Jonathan
> -----Original Message-----
> From: Horvath Tamas [mailto:hota.fin at freemail.hu]
> Sent: Friday, April 29, 2005 11:07 AM
> To: Crabtree, Jonathan
> Cc: Bioperl
> Subject: Re: [Bioperl-l] different label colours
>
>
> Crabtree, Jonathan wrote:
>
> >Hota-
> >
> >That's interesting. I suspect that the problem is actually
> not in your
> >-fontcolor subroutine, but somewhere else in your script.
> Can you show
> >us the rest of the code? Either your labeled features
> aren't getting
> >assigned a primary_tag correctly, or perhaps the primary_tag
> value is
> >being erased somehow. For example, maybe one of your other
> subroutines
> >is accidentally invoking primary_tag as a setter, not a getter, as in
> >$feature->primary_tag('') or $feature->primary_tag(undef)
> >
> >Jonathan
> >
> >
> >
> >>-----Original Message-----
> >>From: Horvath Tamas [mailto:hota.fin at freemail.hu]
> >>Sent: Friday, April 29, 2005 10:33 AM
> >>To: Crabtree, Jonathan
> >>Cc: Bioperl
> >>Subject: Re: [Bioperl-l] different label colours
> >>
> >>
> >>Crabtree, Jonathan wrote:
> >>
> >>
> >>
> >>>Hi Hota-
> >>>
> >>>This should work. Why don't you try inserting the
> following line in
> >>>your anonymous sub (after "my $feature = shift;") and then
> >>>
> >>>
> >>tell us what
> >>
> >>
> >>>(if anything) shows up on STDERR when you run your script:
> >>>
> >>>print STDERR "tag='", $feature->primary_tag, "'\n";
> >>>
> >>>Jonathan
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>>-----Original Message-----
> >>>>From: bioperl-l-bounces at portal.open-bio.org
> >>>>[mailto:bioperl-l-bounces at portal.open-bio.org] On Behalf Of
> >>>>Horvath Tamas
> >>>>Sent: Thursday, April 28, 2005 8:25 AM
> >>>>To: Bioperl
> >>>>Subject: [Bioperl-l] different label colours
> >>>>
> >>>>
> >>>>I'm trying to use different label colours in one single
> track, but
> >>>>the
> >>>>'sub {}' does not work for the '-fontcolor' option. Is there
> >>>>a solution?
> >>>>If not yet, where should I look over the code, to implement it?
> >>>>
> >>>>Hota
> >>>>
> >>>>PS.:
> >>>>
> >>>>-fontcolor => sub { my $feature = shift;
> >>>> return 'red' if
> >>>>$feature->primary_tag =~ /mudr/i;
> >>>> return 'blue' if
> >>>>$feature->primary_tag =~ /zn_finger/i;
> >>>> return 'orange' if
> >>>>$feature->primary_tag =~ /repeat/i;
> >>>> return 'green' if
> >>>>$feature->primary_tag eq 'exon';
> >>>> },
> >>>>this is how it looks like, but the label color is
> >>>>
> >>>>
> >>consistently black
> >>
> >>
> >>>>(though if I explicitly use -fontcolor => 'green' then
> the label is
> >>>>green indeed)
> >>>>_______________________________________________
> >>>>Bioperl-l mailing list
> >>>>Bioperl-l at portal.open-bio.org
> >>>>http://portal.open-> bio.org/mailman/listinfo/bioperl-l
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>_______________________________________________
> >>>Bioperl-l mailing list
> >>>Bioperl-l at portal.open-bio.org
> >>>http://portal.open-bio.org/mailman/listinfo/bioperl-l
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>Sorry, it's pretty messed up, but anyway, it looks like: (at
> >>font color,
> >>it is always '')
> >>
> >>tag_at_glyph='mudr_exon'
> >>tag_at_glyph='mudr_exon'
> >>tag_at_glyph=''
> >>tag_at_glyph='zn_finger_exon'
> >>tag_at_glyph='zn_finger_exon'tag_at_connector='
> >>'
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='repeat_L'
> >>tag_at_strand_arrow='repeat_L'
> >>tag_at_bgcolor='repeat_L'
> >>tag_at_connector='repeat_R'
> >>tag_at_strand_arrow='repeat_R'
> >>tag_at_bgcolor='repeat_R'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector=''
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='exon'
> >>tag_at_strand_arrow='exon'
> >>tag_at_bgcolor='exon'
> >>tag_at_connector='last_exon'
> >>tag_at_strand_arrow='last_exon'
> >>tag_at_bgcolor='last_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_connector='mudr_exon'
> >>tag_at_strand_arrow='mudr_exon'
> >>tag_at_bgcolor='mudr_exon'
> >>tag_at_fontcolor=''
> >>tag_at_connector=''
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_connector='zn_finger_exon'
> tag_at_strand_arrow='zn_finger_exon'
> >>tag_at_bgcolor='zn_finger_exon'
> >>tag_at_fontcolor=''
> >>
> >>
> >>
> >>
> >
> >
> >
> >
> Here's the cycle that u may need (the code is nod that clean,
> but... ):
>
> foreach my $record (@$pretty) {
> my $features;
> next unless $record->{R_TIR_START}; #this is only true if the
> record is valid
>
> my $track = $panel->add_track(
> -glyph => sub { my $feature = shift;
> print STDERR
> "tag_at_glyph='",
> $feature->primary_tag, "'\n";
> if ($feature->primary_tag =~
> /mudr/i || $feature->primary_tag =~ /zn_finger/i)
> { return 'generic'} else {
> return 'segments';}
> },
> -bgcolor => sub { my $feature = shift;
> print STDERR
> "tag_at_bgcolor='", $feature->primary_tag, "'\n";
> if ($feature->primary_tag =~
> /exon/) {
> if
> ($feature->primary_tag
> =~ /mudr/) {return 'red';}
> elsif
> ($feature->primary_tag =~ /zn_finger/i) {return 'blue';}
> else {return 'green';};
> }
> else {return 'orange';}
> },
> -fgcolor => 'black',
> -connector => sub { my $feature = shift;
> print STDERR
> "tag_at_connector='", $feature->primary_tag, "'\n";
>
> $feature->primary_tag =~ /exon/
> ? return 'hat' :
> return 'dashed';
>
> },
> -height => 15,
> -bump => 0,
> -label => 1,
> -orient => sub { my $feature = shift;
> print STDERR
> "tag_at_orient='",
> $feature->primary_tag, "'\n";
>
> $feature->primary_tag eq 'repeat_L'
> ? 'E' : 'W';
> },
> -fontcolor => sub { my $feature = shift;
> print STDERR
> "tag_at_fontcolor='", $feature->primary_tag, "'\n";
> return 'red' if
> $feature->primary_tag =~ /mudr/i;
> return 'blue' if
> $feature->primary_tag =~ /zn_finger/i;
> return 'orange' if
> $feature->primary_tag =~ /repeat/i;
> return 'green' if
> $feature->primary_tag eq 'exon';
> },
> -font2color => 'green',
> -point => 0,
> -strand_arrow => sub { my $feature = shift;
> print STDERR
> "tag_at_strand_arrow='", $feature->primary_tag, "'\n";
> if
> ($feature->primary_tag eq
> 'last_exon' or $feature->primary_tag =~ /repeat/i)
> {return 1;} else
> {return 0};
> },
> -description => sub {
> my $feature = shift;
> return unless
> $feature->has_tag('description');
> my ($description) =
> $feature->each_tag_value('description');
> return $description;
> }
> );
> print '.';
>
> $features = new Bio::SeqFeature::Generic (-display_name => ' ');
> $subfeature = new Bio::SeqFeature::Generic(-start =>
> $record->{L_TIR_START},
> -end =>
> $record->{L_TIR_END},
> -primary => 'repeat_L',
> -source => 'internal',
> -strand => 1);
> $features->add_sub_SeqFeature( $subfeature , 'EXPAND');
> $subfeature = new Bio::SeqFeature::Generic(-start =>
> $record->{R_TIR_START},
> -end =>
> $record->{R_TIR_END},
> -primary => 'repeat_R',
> -source => 'internal',
> -strand => -1,);
> $features->add_sub_SeqFeature( $subfeature , 'EXPAND');
>
> $track->add_feature($features);
> undef $features;
> my $description = $record->{SEQ_ID};
> my @starts = ();
> my @startx = ();
> my $lastend = 1;
> my $s = $record->{L_TIR_START}; my $e =
> $record->{R_TIR_END}; my $l
> = $record->{L_TIR_END} - $record->{L_TIR_START};
> my $ps = ${$record->{EXON_LIST}->[0]->{START}};
> my $pe =
> ${$record->{EXON_LIST}->[$#{$record->{EXON_LIST}}]->{START}};
> my $sc = $record->{SCORE};
>
> $description .= ", GW score: $sc, sequence $s - $e, TIR app.: $l,
> prot.: $ps - $pe ";
>
> $features = new Bio::SeqFeature::Generic (-display_name => ' ',
> -tag => {
>
> description => $description
> }
> );
> my @exonlist = @{$record->{EXON_LIST}};
> my $last_exon = pop @{$record->{EXON_LIST}};
> my @prot = ();
> my $pps = 0;
> my $ppe = 0;
> my $xs = 1;
> my $xe = 1;
>
> foreach $exon (@{$record->{EXON_LIST}}) {
> my $start = ${$exon->{START}};
> push @startx , $start;
> $start -= $lastend;
> push @starts , $start;
> $lastend = ${$exon->{END}};
>
> $pps = ${$exon->{START}}; $ppe = ${$exon->{END}};
> $xs = $xe;
> $xe = $xs + int( ($ppe - $pps)/3);
> push(@prot , "$xs - $xe");
>
>
> $subfeature = new Bio::SeqFeature::Generic (-start =>
> ${$exon->{START}},
> -end =>
> ${$exon->{END}},
>
> -primary => 'exon',
> -source =>
> 'internal',
> -strand => 1,
> );
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
> my $s = ${$exon->{START}};my $e =
> ${$exon->{END}};print"$s - $e..";
> }
> $subfeature = new Bio::SeqFeature::Generic (-start =>
> ${$last_exon->{START}},
> -end =>
> ${$last_exon->{END}},
> -primary =>
> 'last_exon',
> -source =>
> 'internal',
> -strand => 1,
> );
> $pps = ${$last_exon->{START}}; $ppe = ${$last_exon->{END}};
> $xs = $xe;
> $xe = $xs + int( ($ppe - $pps)/3);
> push(@prot , "$xs - $xe");
>
> my $protstat = join ( ".." , @prot);
> print "\n$protstat\n";
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
>
> print "\n";
> $track->add_feature($features);
> undef $features;
> my $ms = $record->{DOMAINS}->{MUDR}->{START};
> my $me = $record->{DOMAINS}->{MUDR}->{END};
> print "!$ms !$me\n";
> my @mudr_exons = @{&calc_domain_exons($ms,$me,\@exonlist)};
> print 1;
>
> my $label = "MuDR:$ms - $me";
>
> $features = new Bio::SeqFeature::Generic
> (-display_name => $label);
>
> foreach $exon (@mudr_exons) {
> $subfeature = new Bio::SeqFeature::Generic (-start =>
> $exon->{START},
> -end =>
> $exon->{END},
> -primary =>
> 'mudr_exon',
> -source =>
> 'internal',
> -strand => 1,
> );
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
> my $s = $exon->{START};my $e =
> $exon->{END};print"M$s - $e..";
> }
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
>
> print "\n";
> $track->add_feature($features);
> undef $features;
>
> $ms = 0;
> $ms = 0;
>
> $ms = $record->{DOMAINS}->{Zn_finger}->{START};
> $me = $record->{DOMAINS}->{Zn_finger}->{END};
> print "!$ms !$me\n";
> @mudr_exons = @{&calc_domain_exons($ms,$me,\@exonlist)};
> print 1;
>
> $label = "Zn:$ms - $me";
>
> $features = new Bio::SeqFeature::Generic
> (-display_name => $label);
>
> foreach $exon (@mudr_exons) {
> $subfeature = new Bio::SeqFeature::Generic (-start =>
> $exon->{START},
> -end =>
> $exon->{END},
> -primary =>
> 'zn_finger_exon',
> -source =>
> 'internal',
> -strand => 1,
> );
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
> my $s = $exon->{START};my $e =
> $exon->{END};print"Z$s - $e..";
> }
> $features->add_sub_SeqFeature($subfeature,'EXPAND');
>
> print "\n";
> $track->add_feature($features) if $ms;
> undef $features;
>
>
> }
>
More information about the Bioperl-l
mailing list