Imported Upstream version 0.12.7
[bowtie.git] / scripts / colorize_fastq.pl
1 #!/usr/bin/perl -w
2
3 ##
4 # colorize_fastq.pl
5 #
6 # Convert nucleotide FASTQ input to colorspace CSFASTQ output.
7 # Colorspace versions of nucleotide sequnences are 1 character shorter.
8 # Names are unchanged.  No primer base is given.
9 #
10
11 ##
12 # Given a string in nucleotide space, convert to colorspace.
13 #
14 sub colorize($$) {
15         my ($s, $nucs) = @_;
16         defined($s) || die;
17         my %cmap = (
18                 "AA" => "0", "CC" => "0", "GG" => "0", "TT" => "0",
19                 "AC" => "1", "CA" => "1", "GT" => "1", "TG" => "1",
20                 "AG" => "2", "GA" => "2", "CT" => "2", "TC" => "2",
21                 "AT" => "3", "TA" => "3", "CG" => "3", "GC" => "3",
22                 "NA" => ".", "NC" => ".", "NG" => ".", "NT" => ".",
23                 "AN" => ".", "CN" => ".", "GN" => ".", "TN" => ".",
24                 "NN" => "."
25         );
26         my %nmap = ("0" => "A", "1" => "C", "2" => "G", "3" => "T", "." => "N");
27         my $ret = "";
28         for(my $i = 0; $i < length($s)-1; $i++) {
29                 my $di = uc substr($s, $i, 2);
30                 $di =~ tr/-NnMmRrWwSsYyKkVvHhDdBbXx/N/;
31                 defined($cmap{$di}) || die "Bad dinuc: $di\n";
32                 $ret .= ($nucs ? $nmap{$cmap{$di}} : $cmap{$di});
33         }
34         return $ret;
35 }
36
37 while(<>) {
38         next if /^[;#]/;
39         my $name  = $_;
40         my $seq   = <>;
41         my $name2 = <>;
42         my $qual  = <>;
43         chomp($seq);
44         print $name.colorize($seq, 0)."\n$name2$qual";
45 }