[Bio] / FigKernelScripts / reformat_fasta.pl Repository:
ViewVC logotype

Annotation of /FigKernelScripts/reformat_fasta.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : overbeek 1.1 # -*- perl -*-
2 :    
3 :     use FIG;
4 :    
5 :     use Pod::Text;
6 :     # use File::Basename; $this_tool_name = basename($0);
7 :     if ((@ARGV == 1) && ($ARGV[0] =~ m/-help/)) {
8 :     pod2text($0); exit(0);
9 :     }
10 :    
11 :     =pod
12 :    
13 :     =over 5
14 :    
15 :     =item Usage: reformat_fasta_file < fasta_in > fasta_out
16 :    
17 :     =item Function: Reformats a fasta file to a uniform 60 chars per line.
18 :    
19 :     =back
20 :    
21 :     =cut
22 :    
23 :     if ($ARGV[0] =~ m/-strip/) { $strip = shift; }
24 :    
25 :     if ($ARGV[0] && (-e $ARGV[0]))
26 :     {
27 :     open(FIN, "<$ARGV[0]") or die "could not open $ARGV[0] as input";
28 :     $fin = \*FIN;
29 :     }
30 :     else
31 :     {
32 :     $fin = \*STDIN;
33 :     }
34 :    
35 :     if ($ARGV[1])
36 :     {
37 :     open(FOUT, ">$ARGV[1]") or die "could not open $ARGV[1] as output";
38 :     $fout = \*FOUT;
39 :     }
40 :     else
41 :     {
42 :     $fout = \*STDOUT;
43 :     }
44 :    
45 :    
46 :    
47 :     while ( (! eof($fin)) && ( ($head, $seq) = &get_a_fasta_record($fin) ) )
48 :     {
49 :     if ($strip) { $head =~ m/^(\S+)/; $head = $1; }
50 :    
51 :     &display_id_and_seq( $head, \$seq, $fout );
52 :     }
53 :    
54 :    
55 :     sub get_a_fasta_record
56 :     {
57 :     my ($fh) = @_;
58 :     my ( $old_eol, $entry, @lines, $head, $id, $seq );
59 :    
60 :     $old_eol = $/;
61 :     $/ = "\n>";
62 :    
63 :     if (! defined($fh)) { $fh = \*STDIN; }
64 :    
65 :     $entry = <$fh>;
66 :     chomp $entry;
67 :     @lines = split( /\n/, $entry );
68 :    
69 :     $head = shift @lines;
70 :     $head =~ s/^>?//;
71 :     $head =~ m/(\S+)/; $id = $1;
72 :    
73 :     $seq = join( "", @lines );
74 :     $seq =~ s/\s//g;
75 :     $seq =~ s/\*$//;
76 :    
77 :     my $tmp = $seq;
78 :     if (($tmp =~ s/[ARNDCQEGHILKMFPSTWYUVBZX]//ig) && $tmp)
79 :     {
80 :     print STDERR "$id has invalid chars: $tmp\n";
81 :     $seq =~ s/[^ARNDCQEGHILKMFPSTWYUVBZX]/x/ig;
82 :     }
83 :    
84 :     $/ = $old_eol;
85 :     return ( $head, $seq );
86 :     }
87 :    
88 :    
89 :     sub display_id_and_seq {
90 :     my( $id, $seq, $fh ) = @_;
91 :     my ( $i, $n, $ln );
92 :    
93 :     if (! defined($fh) ) { $fh = \*STDOUT; }
94 :    
95 :     print $fh ">$id\n";
96 :    
97 :     $n = length($$seq);
98 :     # confess "zero-length sequence ???" if ( (! defined($n)) || ($n == 0) );
99 :     for ($i=0; ($i < $n); $i += 60)
100 :     {
101 :     if (($i + 60) <= $n)
102 :     {
103 :     $ln = substr($$seq,$i,60);
104 :     }
105 :     else
106 :     {
107 :     $ln = substr($$seq,$i,($n-$i));
108 :     }
109 :     print $fh "$ln\n";
110 :     }
111 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3