From 6cb80591e3ea0462eaf10ef6006356f1d6cad0ea Mon Sep 17 00:00:00 2001 From: Tad Jordan Date: Wed, 13 Feb 2013 13:45:49 -0500 Subject: [PATCH] PrintReads writes a header when used with -BQSR --- .../walkers/bqsr/BQSRIntegrationTest.java | 3 +++ .../gatk/walkers/readutils/PrintReads.java | 24 ++++++++++++++++--- ...java => ArtificialStingSAMFileWriter.java} | 17 +++++++++++-- .../readutils/PrintReadsIntegrationTest.java | 1 + .../walkers/readutils/PrintReadsUnitTest.java | 10 +++----- .../sam/ArtificialSAMFileWriterUnitTest.java | 8 +++---- 6 files changed, 47 insertions(+), 16 deletions(-) rename public/java/src/org/broadinstitute/sting/utils/sam/{ArtificialSAMFileWriter.java => ArtificialStingSAMFileWriter.java} (89%) diff --git a/protected/java/test/org/broadinstitute/sting/gatk/walkers/bqsr/BQSRIntegrationTest.java b/protected/java/test/org/broadinstitute/sting/gatk/walkers/bqsr/BQSRIntegrationTest.java index 577569e4e..8a40b44e6 100644 --- a/protected/java/test/org/broadinstitute/sting/gatk/walkers/bqsr/BQSRIntegrationTest.java +++ b/protected/java/test/org/broadinstitute/sting/gatk/walkers/bqsr/BQSRIntegrationTest.java @@ -220,6 +220,7 @@ public class BQSRIntegrationTest extends WalkerTest { " -R " + hg18Reference + " -I " + privateTestDir + "HiSeq.1mb.1RG.bam" + " -nct " + nct + + " --no_pg_tag" + " -BQSR " + privateTestDir + "HiSeq.20mb.1RG.table" + params.args + " -o %s", @@ -234,6 +235,7 @@ public class BQSRIntegrationTest extends WalkerTest { " -R " + hg18Reference + " -I " + HiSeqBam + " -L " + HiSeqInterval + + " --no_pg_tag" + " -BQSR " + privateTestDir + "HiSeq.1mb.1RG.highMaxCycle.table" + " -o /dev/null", 0, @@ -248,6 +250,7 @@ public class BQSRIntegrationTest extends WalkerTest { " -R " + hg18Reference + " -I " + HiSeqBam + " -L " + HiSeqInterval + + " --no_pg_tag" + " -BQSR " + privateTestDir + "HiSeq.1mb.1RG.lowMaxCycle.table" + " -o /dev/null", 0, diff --git a/public/java/src/org/broadinstitute/sting/gatk/walkers/readutils/PrintReads.java b/public/java/src/org/broadinstitute/sting/gatk/walkers/readutils/PrintReads.java index b5a74981c..f7675cb38 100644 --- a/public/java/src/org/broadinstitute/sting/gatk/walkers/readutils/PrintReads.java +++ b/public/java/src/org/broadinstitute/sting/gatk/walkers/readutils/PrintReads.java @@ -28,15 +28,19 @@ package org.broadinstitute.sting.gatk.walkers.readutils; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMReadGroupRecord; import org.broadinstitute.sting.commandline.Argument; +import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.gatk.CommandLineGATK; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; +import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; import org.broadinstitute.sting.gatk.iterators.ReadTransformer; import org.broadinstitute.sting.gatk.iterators.ReadTransformersMode; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.walkers.*; +import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.SampleUtils; +import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.baq.BAQ; import org.broadinstitute.sting.utils.help.DocumentedGATKFeature; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; @@ -97,7 +101,7 @@ import java.util.*; public class PrintReads extends ReadWalker implements NanoSchedulable { @Output(doc="Write output to this BAM filename instead of STDOUT", required = true) - SAMFileWriter out; + StingSAMFileWriter out; @Argument(fullName = "readGroup", shortName = "readGroup", doc="Exclude all reads with this read group from the output", required = false) String readGroup = null; @@ -137,18 +141,27 @@ public class PrintReads extends ReadWalker impleme */ @Argument(fullName="simplify", shortName="s", doc="Simplify all reads.", required=false) public boolean simplifyReads = false; - + + @Hidden + @Argument(fullName = "no_pg_tag", shortName = "npt", doc ="", required = false) + private boolean NO_PG_TAG = false; List readTransformers = Collections.emptyList(); private TreeSet samplesToChoose = new TreeSet(); private boolean SAMPLES_SPECIFIED = false; + + public static final String PROGRAM_RECORD_NAME = "GATK PrintReads"; // The name that will go in the @PG tag Random random; + /** * The initialize function. */ public void initialize() { + final boolean keep_records = true; + final GenomeAnalysisEngine toolkit = getToolkit(); + if ( platform != null ) platform = platform.toUpperCase(); @@ -167,9 +180,14 @@ public class PrintReads extends ReadWalker impleme if(!samplesToChoose.isEmpty()) { SAMPLES_SPECIFIED = true; } - + random = GenomeAnalysisEngine.getRandomGenerator(); + final boolean preSorted = true; + if (getToolkit() != null && getToolkit().getArguments().BQSR_RECAL_FILE != null && !NO_PG_TAG ) { + Utils.setupWriter(out, toolkit, toolkit.getSAMFileHeader(), !preSorted, keep_records, this, PROGRAM_RECORD_NAME); + } + } /** diff --git a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialStingSAMFileWriter.java similarity index 89% rename from public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java rename to public/java/src/org/broadinstitute/sting/utils/sam/ArtificialStingSAMFileWriter.java index 4a05d91b7..5c74bb5b8 100644 --- a/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriter.java +++ b/public/java/src/org/broadinstitute/sting/utils/sam/ArtificialStingSAMFileWriter.java @@ -28,6 +28,7 @@ package org.broadinstitute.sting.utils.sam; import net.sf.samtools.SAMFileHeader; import net.sf.samtools.SAMFileWriter; import net.sf.samtools.SAMRecord; +import org.broadinstitute.sting.gatk.io.StingSAMFileWriter; import java.util.ArrayList; import java.util.List; @@ -61,12 +62,12 @@ import java.util.List; /** * @author aaron *

- * Class ArtificialSAMFileWriter + * Class ArtificialStingSAMFileWriter *

* generates a fake samwriter, that you can get the output reads * from when you're done. */ -public class ArtificialSAMFileWriter implements SAMFileWriter { +public class ArtificialStingSAMFileWriter implements StingSAMFileWriter { // are we closed private boolean closed = false; @@ -106,4 +107,16 @@ public class ArtificialSAMFileWriter implements SAMFileWriter { public List getRecords() { return records; } + + @Override + public void writeHeader(SAMFileHeader header) { + } + + @Override + public void setPresorted(boolean presorted) { + } + + @Override + public void setMaxRecordsInRam(int maxRecordsInRam) { + } } diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsIntegrationTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsIntegrationTest.java index b509fc1df..7482eae60 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsIntegrationTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsIntegrationTest.java @@ -75,6 +75,7 @@ public class PrintReadsIntegrationTest extends WalkerTest { " -R " + params.reference + " -I " + privateTestDir + params.bam + params.args + + " --no_pg_tag" + " -o %s", Arrays.asList(params.md5)); executeTest("testPrintReads-"+params.args, spec).getFirst(); diff --git a/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsUnitTest.java index f65374918..c9c126295 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/walkers/readutils/PrintReadsUnitTest.java @@ -30,7 +30,7 @@ import net.sf.samtools.SAMRecord; import org.broadinstitute.sting.BaseTest; import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.utils.sam.ArtificialReadsTraversal; -import org.broadinstitute.sting.utils.sam.ArtificialSAMFileWriter; +import org.broadinstitute.sting.utils.sam.ArtificialStingSAMFileWriter; import org.broadinstitute.sting.utils.sam.ArtificialSAMUtils; import org.broadinstitute.sting.utils.sam.GATKSAMRecord; import org.testng.annotations.BeforeMethod; @@ -85,7 +85,7 @@ public class PrintReadsUnitTest extends BaseTest { //private ReferenceContext ref = new ReferenceContext() org.broadinstitute.sting.gatk.walkers.readutils.PrintReads walker; - ArtificialSAMFileWriter writer; + ArtificialStingSAMFileWriter writer; @BeforeMethod public void before() { @@ -93,8 +93,7 @@ public class PrintReadsUnitTest extends BaseTest { readTotal = ( ( trav.endingChr - trav.startingChr ) + 1 ) * trav.readsPerChr + trav.unMappedReads; walker = new org.broadinstitute.sting.gatk.walkers.readutils.PrintReads(); - writer = new ArtificialSAMFileWriter(); - walker.out = writer; + writer = new ArtificialStingSAMFileWriter(); walker.initialize(); } @@ -121,7 +120,4 @@ public class PrintReadsUnitTest extends BaseTest { assertTrue(ret == rec); assertTrue(ret.getReadName().equals(rec.getReadName())); } - - - } diff --git a/public/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterUnitTest.java b/public/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterUnitTest.java index 69c670198..6f8fed8e0 100644 --- a/public/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/utils/sam/ArtificialSAMFileWriterUnitTest.java @@ -65,14 +65,14 @@ import java.util.List; /** * @author aaron *

- * Class ArtificialSAMFileWriter + * Class ArtificialStingSAMFileWriter *

- * Test out the ArtificialSAMFileWriter class + * Test out the ArtificialStingSAMFileWriter class */ public class ArtificialSAMFileWriterUnitTest extends BaseTest { /** the artificial sam writer */ - private ArtificialSAMFileWriter writer; + private ArtificialStingSAMFileWriter writer; private SAMFileHeader header; private final int startChr = 1; private final int numChr = 2; @@ -80,7 +80,7 @@ public class ArtificialSAMFileWriterUnitTest extends BaseTest { @BeforeMethod public void before() { - writer = new ArtificialSAMFileWriter(); + writer = new ArtificialStingSAMFileWriter(); header = ArtificialSAMUtils.createArtificialSamHeader(numChr, startChr, chrSize); }