1 # -*-Perl-*- Test Harness script for Bioperl
10 test_begin(-tests => 11);
13 use_ok('Bio::SeqFeature::Tools::Unflattener');
16 my $verbosity = test_debug();
19 my $unflattener = Bio::SeqFeature::Tools::Unflattener->new();
22 $unflattener->verbose(10);
23 my @path = ("NC_000007-ribosomal-slippage.gb");
26 my @topsfs = $seq->get_SeqFeatures;
27 if( $verbosity > 0 ) {
28 warn sprintf "TOP:%d\n", scalar(@topsfs);
33 $unflattener->verbose($verbosity);
34 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
36 if( $verbosity > 0 ) {
37 warn "\n\nPOST PROCESSING:\n";
39 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
45 my @path = ("ribosome-slippage.gb");
48 my @topsfs = $seq->get_SeqFeatures;
49 if( $verbosity > 0 ) {
50 warn sprintf "TOP:%d\n", scalar(@topsfs);
55 $unflattener->verbose($verbosity);
56 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
58 if( $verbosity > 0 ) {
59 warn "\n\nPOST PROCESSING:\n";
61 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
67 my @path = ("AE003644_Adh-genomic.gb");
70 is ($seq->accession_number, 'AE003644');
71 my @topsfs = $seq->get_SeqFeatures;
72 if( $verbosity > 0 ) {
73 warn sprintf "TOP:%d\n", scalar(@topsfs);
78 $unflattener->verbose($verbosity);
79 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
80 -group_tag=>'locus_tag');
81 if( $verbosity > 0 ) {
82 warn "\n\nPOST PROCESSING:\n";
84 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
89 # now try again, using a custom subroutine to link together features
90 $seq = getseq("AE003644_Adh-genomic.gb");
91 @sfs = $unflattener->unflatten_seq
93 -group_tag=>'locus_tag',
97 my ($sf, @candidate_container_sfs) = @_;
98 if ($sf->has_tag('note')) {
99 my @notes = $sf->get_tag_values('note');
100 my @trnames = map {/from transcript\s+(.*)/;
102 @trnames = grep {$_} @trnames;
105 $self->throw("UNRESOLVABLE");
107 elsif (@trnames == 1) {
108 $trname = $trnames[0];
111 $self->throw("AMBIGUOUS: @trnames");
116 $_->has_tag('product') ?
117 $_->get_tag_values('product') :
120 } @candidate_container_sfs;
121 if (@container_sfs == 0) {
122 $self->throw("UNRESOLVABLE");
124 elsif (@container_sfs == 1) {
126 return ($container_sfs[0]=>0);
129 $self->throw("AMBIGUOUS");
133 $unflattener->feature_from_splitloc(-seq=>$seq);
134 if( $verbosity > 0 ) {
135 warn "\n\nPOST PROCESSING:\n";
137 warn sprintf "PROCESSED2:%d\n", scalar(@sfs);
141 # try again; different sequence
142 # this is an E-Coli seq with no mRNA features;
143 # we just want to link all features directly with gene
145 $seq = getseq("D10483.gbk");
148 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
149 -partonomy=>{'*'=>'gene'},
151 if( $verbosity > 0 ) {
152 warn "\n\nPOST PROCESSING:\n";
154 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
158 # this sequence has no locus_tag or or gene tags
159 $seq = getseq("AY763288.gb");
162 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
165 if( $verbosity > 0 ) {
166 warn "\n\nPOST PROCESSING:\n";
168 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
173 # try again; different sequence - dicistronic gene, mRNA record
175 $seq = getseq("X98338_Adh-mRNA.gb");
178 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
179 -partonomy=>{'*'=>'gene'},
181 if( $verbosity > 0 ) {
182 warn "\n\nPOST PROCESSING:\n";
184 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
188 # try again; this sequence has no CDSs but rRNA present
190 $seq = getseq("no_cds_example.gb");
193 @sfs = $unflattener->unflatten_seq(-seq=>$seq,
196 if( $verbosity > 0 ) {
197 warn "\n\nPOST PROCESSING:\n";
199 warn sprintf "PROCESSED:%d\n", scalar(@sfs);
202 my @all_sfs = $seq->get_all_SeqFeatures;
204 my @exons = grep { $_-> primary_tag eq 'exon' } @all_sfs ;
212 _write_hier(0, @sfs);
218 foreach my $sf (@sfs) {
220 if ($sf->has_tag('product')) {
221 ($label) = $sf->get_tag_values('product');
223 warn sprintf "%s%s $label\n", ' ' x $indent, $sf->primary_tag;
224 my @sub_sfs = $sf->sub_SeqFeature;
225 _write_hier($indent+1, @sub_sfs);
232 Bio::SeqIO->new('-file'=> test_input_file(@path),
233 '-format' => 'GenBank');
234 $seqio->verbose($verbosity);
236 my $seq = $seqio->next_seq();