1 package driver; 2 3 import java.io.OutputStream; 4 import java.io.PrintWriter; 5 6 import fileIO.ReadWrite; 7 import fileIO.TextFile; 8 9 public class ConvertSamToAln { 10 main(String[] args)11 public static void main(String[] args){ 12 for(String s : args){ 13 convert(s); 14 System.out.println("Converted "+s); 15 } 16 } 17 convert(String fname)18 public static final void convert(String fname){ 19 TextFile tf=new TextFile(fname, false); 20 21 22 23 String outname=fname; 24 if(outname.toLowerCase().endsWith(".zip")){outname=outname.substring(0, outname.length()-4);} 25 if(outname.toLowerCase().endsWith(".gz")){outname=outname.substring(0, outname.length()-3);} 26 if(outname.toLowerCase().endsWith(".bz2")){outname=outname.substring(0, outname.length()-4);} 27 if(outname.toLowerCase().endsWith(".sam")){outname=outname.substring(0, outname.length()-4);} 28 outname=outname+".aln.gz"; 29 30 String s=null; 31 32 OutputStream os=ReadWrite.getOutputStream(outname, false, true, true); 33 PrintWriter out=new PrintWriter(os); 34 35 for(s=tf.nextLine(); s!=null; s=tf.nextLine()){ 36 if(!s.startsWith("@")){ 37 String[] line=s.split("\t"); 38 assert(line.length>1) : s; 39 40 boolean success=true; 41 boolean nomap=false; 42 boolean reverse=false; 43 44 int flag=-1; 45 String chrom=null; 46 int loc=-1; 47 48 try { 49 flag=Integer.parseInt(line[1]); 50 chrom=line[2]; 51 loc=Integer.parseInt(line[3]); 52 nomap=((flag&0x4)!=0); 53 reverse=((flag&0x10)!=0); 54 } catch (NumberFormatException e) { 55 success=false; 56 } 57 58 if(success && !nomap){ 59 String aln=chrom+"\t"+loc+"\t"+(reverse ? "R" : "F")+"\n"; 60 out.print(aln); 61 } 62 63 64 } 65 } 66 67 tf.close(); 68 out.flush(); 69 out.close(); 70 71 } 72 73 } 74