converts the HTSW align format (derived from Eland format) into ENCODE 'TagAlign...
[htsworkflow.git] / htswanalysis / scripts / align2TagAlign.pm
1 #!/usr/bin/perl -w
2
3 use strict;
4 use warnings;
5 use Switch;
6
7 # Transform Align.txt format, example: TTTTTCTTTCTTTTCTCTCTTTCTT 12500 1 chr9:19863256 F TTTTTCTTTTCTTTCTCTCTTTCTT 11453  
8 # to 
9 # ENCODE "TagAlign" format: chrom | chromStart | chromEnd | Sequence | Score | Strand (+/-)|
10 # See online documentation of ENCODE data submission formats at http://encodewiki.ucsc.edu/EncodeDCC/index.php/File_Formats 
11
12 open (IFILE, "< $ARGV[0]") or die "Can't open file $ARGV[0]";
13
14 open (OFILE, "> $ARGV[0].TagAlign") or die "Can't open output file";
15
16 my $i = 0;
17 my $mismatches = 0;
18 my $delimit = '\s+';
19 # print "\nchr\tstart\tend\tsbjseq\tmismatched\tstrand\treps";
20 my @testArray = [];
21 while(<IFILE>) ### && $i < 10) 
22 {
23   # print "\nRead record $i: $_";
24   if(!defined($_)) { $i++; print "\nRecord $i not defined."; next; }
25   chomp;
26   my $BEDrec = '';
27
28   @testArray = split(/$delimit/,$_);
29   if($#testArray eq 6)
30   {
31     my($sbjseq,$score,$reps,$chr_pos,$strand,$genseq,$score2) = split(/$delimit/,$_);  
32     if($chr_pos =~ /^chr/)
33     {
34       my($chr,$pos) = split(/:/,$chr_pos);
35       my $end = $pos + length($sbjseq);
36       $mismatches = 0;
37       switch($score)
38       { 
39         case 12500 {$mismatches = 0}
40         case 11453 {$mismatches = 1}
41         case 10406 {$mismatches = 2}
42       }  
43       $strand =~ s/F/+/i;
44       $strand =~ s/R/-/i;
45       $BEDrec = "$chr\t$pos\t$end\t$sbjseq\t$mismatches\t$strand";
46       # print "\nBED rec: $BEDrec";
47       print OFILE "$BEDrec\n";
48       $i++;
49     }
50   }
51 }
52
53 close IFILE;
54 close OFILE;
55 print "\n==== F I N I S H E D processing $i records ===========";
56 print "\n==== INPUT FILE NAME: $ARGV[0]  ===============";
57 print "\n==== OUTPUT FILE NAME: $ARGV[0].TagAlign  ===============\n";
58
59 exit;
60