Merge our 2 fastq writers into 1: incorporate Kiran's secondary-base file writer into the fasta/fastq writers

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@1423 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
ebanks 2009-08-14 20:55:23 +00:00
parent 843d7e6c8f
commit 4b6ddc55bd
2 changed files with 30 additions and 74 deletions

View File

@ -1,74 +0,0 @@
package org.broadinstitute.sting.playground.gatk.walkers;
import org.broadinstitute.sting.gatk.walkers.ReadWalker;
import org.broadinstitute.sting.utils.cmdLine.Argument;
import net.sf.samtools.SAMRecord;
import java.io.*;
public class SAMToFastqAndSqWalker extends ReadWalker<Integer, Integer> {
@Argument(fullName="FASTQFILE", doc="Output path for Fastq file")
public File FASTQFILE;
@Argument(fullName="SQFILE", shortName="SQ", doc="Output path for secondary quality map (readName => SAM SQ field)", required=false)
public File SQFILE;
private PrintWriter fastqbw;
private PrintWriter sqbw;
private boolean ready = false;
public Integer map(char[] ref, SAMRecord read) {
if (!ready) {
try {
fastqbw = new PrintWriter(FASTQFILE);
if (SQFILE != null) {
sqbw = new PrintWriter(SQFILE);
}
ready = true;
} catch (IOException e) {
err.println("Unable to open output files.");
System.exit(1);
}
}
String bases = read.getReadString();
String quals = read.getBaseQualityString();
byte[] sqs = (byte[]) read.getAttribute("SQ");
fastqbw.println("@" + read.getReadName());
fastqbw.println(bases);
fastqbw.println("+" + read.getReadName());
fastqbw.println(quals);
if (sqbw != null && sqs != null) {
sqbw.print(read.getReadName() + "\t" + "SQ:H:");
for (byte sq : sqs) {
sqbw.printf("%02X", sq);
}
sqbw.println();
}
return null;
}
public Integer reduceInit() {
return null;
}
public Integer reduce(Integer value, Integer sum) {
return null;
}
public void onTraversalDone(Integer sum) {
fastqbw.close();
if (sqbw != null) {
sqbw.close();
}
}
}

View File

@ -6,6 +6,8 @@ import org.broadinstitute.sting.utils.BaseUtils;
import org.broadinstitute.sting.utils.cmdLine.Argument;
import net.sf.samtools.SAMRecord;
import java.io.*;
// create a fastq file from a bam file
@WalkerName("BamToFastq")
@ -14,6 +16,21 @@ public class BamToFastqWalker extends ReadWalker<Integer, Integer> {
@Argument(fullName="re_reverse", shortName="reverse", doc="re-reverse bases and quals of reads from the negative strand", required=false)
private Boolean RE_REVERSE = false;
@Argument(fullName="SQFile", shortName="SQ", doc="Output path for secondary quality map (readName => SAM SQ field)", required=false)
String SQFile = null;
private PrintWriter sqbw = null;
public void initialize() {
if ( SQFile != null ) {
try {
sqbw = new PrintWriter(SQFile);
} catch (IOException e) {
throw new RuntimeException("Unable to open sq output file: " + SQFile);
}
}
}
public Integer map(char[] ref, SAMRecord read) {
out.println("@" + read.getReadName());
if ( !RE_REVERSE || !read.getReadNegativeStrandFlag() ) {
@ -26,6 +43,17 @@ public class BamToFastqWalker extends ReadWalker<Integer, Integer> {
out.println(BaseUtils.reverse(read.getBaseQualityString()));
}
if ( sqbw != null ) {
byte[] sqs = (byte[])read.getAttribute("SQ");
if ( sqs != null ) {
sqbw.print(read.getReadName() + "\t" + "SQ:H:");
for ( byte sq : sqs ) {
sqbw.printf("%02X", sq);
}
sqbw.println();
}
}
return 1;
}
@ -38,6 +66,8 @@ public class BamToFastqWalker extends ReadWalker<Integer, Integer> {
}
public void onTraversalDone(Integer sum) {
if ( sqbw != null )
sqbw.close();
logger.info("Number of reads converted: " + sum);
}
}