From 6c0556b7e356172ed9289bc2bee581ddff754f85 Mon Sep 17 00:00:00 2001 From: Nils Homer Date: Thu, 8 Dec 2016 15:00:26 -0700 Subject: [PATCH] CollectIlluminaBasecallingMetrics supports an alternative barcodes directory. If ExtractIlluminaBarcodes is run with a different output directory (OUTPUT_DIR) than the basecalling directory, CollectIlluminaBasecallingMetrics will fail. Add an option BARCODES_DIR to specify the alternate barcodes directory. --- .../illumina/CollectIlluminaBasecallingMetrics.java | 5 +++++ .../CollectIlluminaBasecallingMetricsTest.java | 18 +++++++++++++----- .../25T8B25T/barcodes_dir/s_1_1101_barcode.txt.gz | Bin 0 -> 429 bytes 3 files changed, 18 insertions(+), 5 deletions(-) create mode 100755 testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/barcodes_dir/s_1_1101_barcode.txt.gz diff --git a/src/main/java/picard/illumina/CollectIlluminaBasecallingMetrics.java b/src/main/java/picard/illumina/CollectIlluminaBasecallingMetrics.java index 21a4028ff..257281871 100644 --- a/src/main/java/picard/illumina/CollectIlluminaBasecallingMetrics.java +++ b/src/main/java/picard/illumina/CollectIlluminaBasecallingMetrics.java @@ -94,6 +94,9 @@ @Option(doc="The Illumina basecalls output directory from which data are read", shortName="B") public File BASECALLS_DIR; + @Option(doc = "The barcodes directory with _barcode.txt files (generated by ExtractIlluminaBarcodes). If not set, use BASECALLS_DIR. ", shortName = "BCD", optional = true) + public File BARCODES_DIR; + @Option(doc="The lane whose data will be read", shortName = StandardOptionDefinitions.LANE_SHORT_NAME) public Integer LANE; @@ -155,6 +158,7 @@ protected int doWork() { factory = barcodeToMetricCounts.isEmpty() ? new IlluminaDataProviderFactory( BASECALLS_DIR, + BARCODES_DIR, LANE, readStructure, bclQualityEvaluationStrategy, @@ -162,6 +166,7 @@ protected int doWork() { IlluminaDataType.Position) : new IlluminaDataProviderFactory( BASECALLS_DIR, + BARCODES_DIR, LANE, readStructure, bclQualityEvaluationStrategy, diff --git a/src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java b/src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java index 3f3fc9bb2..7030d6335 100644 --- a/src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java +++ b/src/test/java/picard/illumina/CollectIlluminaBasecallingMetricsTest.java @@ -5,6 +5,7 @@ import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.File; @@ -33,9 +34,15 @@ private void tearDown() { IOUtil.deleteDirectoryTree(rootTestDir); } - @Test - public void testIndexedRunLane1() throws Exception { - final MetricsFile metricsFile = runIt(1, "25T8B25T","25T8B25T/Data/Intensities/BaseCalls", true); + @DataProvider(name="testIndexedRunLane1DataProvider") + public Object[][] testIndexedRunLane1DataProvider() { + return new Object[][]{{true}, {false}}; + } + + @Test(dataProvider="testIndexedRunLane1DataProvider") + public void testIndexedRunLane1(final boolean useBarcodesDir) throws Exception { + final File barcodesDir = (useBarcodesDir) ? new File(rootTestDir + "/25T8B25T/barcodes_dir") : null; + final MetricsFile metricsFile = runIt(1, "25T8B25T","25T8B25T/Data/Intensities/BaseCalls", barcodesDir, true); final IlluminaBasecallingMetrics metric1 = metricsFile.getMetrics().get(0); Assert.assertEquals(metric1.LANE, "1"); Assert.assertEquals(metric1.MOLECULAR_BARCODE_SEQUENCE_1, "AACAATGG"); @@ -123,7 +130,7 @@ public void testIndexedRunLane1() throws Exception { @Test public void testNonIndexedRunLane1() throws Exception { - final MetricsFile metricsFile = runIt(1, "125T125T","125T125T/Data/Intensities/BaseCalls",false); + final MetricsFile metricsFile = runIt(1, "125T125T","125T125T/Data/Intensities/BaseCalls", null, false); final IlluminaBasecallingMetrics laneMetric = metricsFile.getMetrics().get(0); Assert.assertEquals(laneMetric.LANE, "1"); @@ -144,7 +151,7 @@ public void testNonIndexedRunLane1() throws Exception { Assert.assertEquals(metricsFile.getMetrics().size(),1); } - private MetricsFile runIt(final int lane, final String readStructure, final String basecallsDirName, final boolean isIndexed) throws Exception { + private MetricsFile runIt(final int lane, final String readStructure, final String basecallsDirName, final File barcodesDir, final boolean isIndexed) throws Exception { final File metricsFile = File.createTempFile("cibm.", ".metrics"); metricsFile.deleteOnExit(); @@ -152,6 +159,7 @@ public void testNonIndexedRunLane1() throws Exception { ArrayList argsList = new ArrayList(); argsList.add("BASECALLS_DIR=" + basecallsDir.getPath()); + if (null != barcodesDir) argsList.add("BARCODES_DIR=" + barcodesDir.getPath()); argsList.add("LANE=" + lane); argsList.add("OUTPUT=" + metricsFile.getPath()); diff --git a/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/barcodes_dir/s_1_1101_barcode.txt.gz b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/barcodes_dir/s_1_1101_barcode.txt.gz new file mode 100755 index 0000000000000000000000000000000000000000..4d89d1ecb8b538b0e4a13bed33bdb293525012b2 GIT binary patch literal 429 zcmV;e0aE@SiwFoEFFaEK19M+7UokN-F<)X~a$|2~WiE7hbO3#nJ#ND=425U;Fh-Jg z=qhl~)`?3;A%idA`=jrXB8wVfkQn$(Q2cw8rFT*M+E0_fTl?6$^f9z6?1{AR``+>F z?YqtSobx;m*l!!o_O4^lKk(K*x2`yeciICPM~B!S_C)h9;tY|YG8iXu)w8d9+864m z{6NA+Xb)suRlItiiDn;2j;_5vM~l;ikM`Jv z)5nCULm=~2cBGP(4=OxQ{6dGZ{1ZJdr(yF>w0R?FrxW5Z&^%AnQ|or^ldHir^b2HM zjs{Z}uiMdd?`l)yTmoGmYfem`g=QDd&f+AxKJZd;eHPl@R`tLI8mv7BBL3a_$6>c8 z{`u=ae~VwtmuGQz*jJ+2sXZ#BJuvimwMUhIRcBRCr62Zh@UgrLy&jjt>