#!/usr/local/bin/perl -w # # Converts ACE into CAF without any trace/quality information # # Author: Bernd Senf ( bsenf@fli-leibniz.de ), 2008 # # Syntax: % cat my.ace | ./ace2caf_minimal.pl > my.caf # or # % ./ace2caf_minimal.pl < my.ace > my.caf # my %seq; my %contig; print STDERR "Reading...\n"; while (<>) { chomp(); # RD D8QSF4J01CU6TZ 96 0 0 # AGGGAGGG*AAG*AAATACACCTATG*CTTCCTCAGTAGGTAAAG***** # ***AAGA*C*TGGG***AACC*ACCACG*CCAGAGTTA*GAAAATA if (/^RD (\S+)\s+(\d+)/) { my ($name, $len) = ($1, $2); my $s = ''; $seq{$name}{len} = $len; while (<>) { $s .= $_; last if (/^$/); } $s =~ s/\*/-/g; $seq{$name}{seq} = $s; } # QA 1 96 1 96 # DS CHROMAT_FILE: D8QSF4J01CU6TZ PHD_FILE: D8QSF4J01CU6TZ.phd.1 TIME: Thu Jul 27 12:33:48 2000 #... skip # CO contig00001 1163 523 89 U # AAA*GAGAGAAGG*AGGgAGGGaGGAAGgAAGGAAGGAGAG*GAAaGAAA # *GAAA*GAGAGAGaGAAAGAAA*GAAA*GG*AAA*GAAGG*AAA*GAAGG # ... # AF D8QSF4J01CZSRB C 209 # AF D8QSF4J01CU6TZ U 205 # AF D8QSF4J01E6204 U 163 # AF D8QSF4J01A09VN U 214 # AF D8QSF4J01D2IAU C 176 # ... if (/^CO (\S+)\s+(\d+)/) { my ($name, $len) = ($1, $2); $name .= "#C"; $contig{$name}{len} = $2; # Read consensus my $seq = ''; while (<>) { last if (/^$/); $seq .= $_; } $seq =~ s/\*/-/g; $contig{$name}{seq} = $seq; # Read base quals my $qual = ''; <>; while (<>) { last if (/^$/); $qual .= $_; } $contig{$name}{qual} = $qual; # Read AF while (<>) { chomp(); last if (/^$/); if (/^AF /) { push(@{$contig{$name}{AF}}, $_); } } } } print STDERR "Writing...\n"; # Now dump it out again foreach my $c (keys %contig) { print "Sequence : $c\nIs_contig\nPadded\n"; foreach $af (@{$contig{$c}{AF}}) { my ($name,$dir,$pos) = $af =~ /^AF (\S+)\s+(\S)\s+(\d+)/; my $len = $seq{$name}{len}; print "Assembled_from $name $pos ", $pos+$len-1, " 1 $len\n"; } print "\nDNA : $c\n$contig{$c}{seq}\n"; } foreach my $s (keys %seq) { print "Sequence : $s\nIs_read\nPadded\nSCF_File $s\n"; print "Align_to_SCF 1 ", $seq{$s}{len}, " 1 ", $seq{$s}{len}, "\n\n"; print "DNA : $s\n"; print $seq{$s}{seq}, "\n\n"; print "BaseQuality : $s\n"; if (defined($seq{$s}{qual})) { print $seq{$s}{qual}, "\n\n"; } else { print "4 " x $seq{$s}{len}, "\n\n"; } }