@@ -51,7 +51,7 @@ pick_by_id del_by_id find_by_re
5151pick_by_re del_by_re
5252pick_by_file del_by_file
5353find_by_ambig pick_by_ambig del_by_ambig find_by_length
54- del_by_length codon_sim codon_info trim_ends) ;
54+ del_by_length codon_sim codon_info trim_ends gff_pos ) ;
5555
5656# Package global variables
5757my ($in , $out , $seq , %opts , $filename , $in_format , $out_format , $guesser );
@@ -69,6 +69,7 @@ my %opt_dispatch = (
6969 ' mol-wt' => \&print_weight,
7070 ' delete' => \&filter_seqs,
7171 ' fetch' => \&retrieve_seqs,
72+ ' gff-pos' => \&gff_pos,
7273 ' no-gaps' => \&remove_gaps,
7374 ' length' => \&print_lengths,
7475 ' longest-orf' => \&update_longest_orf,
@@ -157,7 +158,7 @@ sub initialize {
157158# }
158159# $in_format = $guesser->guess() unless $opts{'input'};
159160
160- $in_format = $opts {" input" } // ' fasta' ;
161+ $in_format = $opts {' gff-pos ' } ? ' genbank ' : $opts { " input" } ? $opts { " input " } : ' fasta' ;
161162
162163# die "Reads only fasta, fastq, embl, genbank. Not aligment file formats like clustalw\n" unless $in_format =~ /fasta|fastq|embl|genbank/;
163164 $in = Bio::SeqIO-> new(-format => $in_format , ($filename eq " STDIN" )? (-fh => \*STDIN ) : (-file => $filename ));
@@ -193,6 +194,27 @@ sub write_out {
193194
194195# ################## subroutines ########################
195196
197+ sub gff_pos {
198+ my $pos = $opts {" gff-pos" };
199+ die " $filename : Not a GenBank file. Quit\n " unless $in_format eq ' genbank' ;
200+ $seq = $in -> next_seq();
201+ my $gene_count = 0;
202+ foreach my $feat ($seq -> get_SeqFeatures()) {
203+ if ($feat -> primary_tag eq ' CDS' ) {
204+ my $location = $feat -> location();
205+ next if $location -> isa(' Bio::Location::Split' );
206+ my $gene_tag = " gene_" . $gene_count ++;
207+ my $gene_symbol = ' na' ;
208+ my $product = ' na' ;
209+ foreach my $tag ($feat -> get_all_tags()) {
210+ ($gene_tag ) = $feat -> get_tag_values($tag ) if $tag eq ' locus_tag' ;
211+ }
212+ print $gene_tag , " \n " ;
213+ }
214+ }
215+ }
216+
217+
196218# from vapid trim python code
197219sub trim_ends {
198220 while ($seq = $in -> next_seq()) {
0 commit comments