[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