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 000000000..4d89d1ecb Binary files /dev/null and b/testdata/picard/illumina/CollectIlluminaBasecallingMetrics/25T8B25T/barcodes_dir/s_1_1101_barcode.txt.gz differ