From 2d481c509234a4d632b062a82b71cb81315eff07 Mon Sep 17 00:00:00 2001 From: Nils Homer Date: Sat, 6 May 2017 14:33:55 -0700 Subject: [PATCH 1/2] CollectIlluminaLaneMetric should be lenient when missing prephasing and phasing metrics. --- .../illumina/CollectIlluminaLaneMetrics.java | 19 +++--- .../picard/illumina/parser/TileMetricsUtil.java | 41 ++++++++++--- .../illumina/IlluminaLaneMetricsCollectorTest.java | 64 +++++++++++++++++++-- .../missing_phasing/InterOp/TileMetricsOut.bin | Bin 0 -> 86322 bytes .../missing_phasing/RunInfo.xml | 11 ++++ .../missing_phasing.illumina_lane_metrics | 9 +++ .../missing_phasing.illumina_phasing_metrics | 13 +++++ 7 files changed, 138 insertions(+), 19 deletions(-) create mode 100644 testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/InterOp/TileMetricsOut.bin create mode 100644 testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/RunInfo.xml create mode 100644 testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_lane_metrics create mode 100644 testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_phasing_metrics diff --git a/src/main/java/picard/illumina/CollectIlluminaLaneMetrics.java b/src/main/java/picard/illumina/CollectIlluminaLaneMetrics.java index 913180c63..fdbd4f8d7 100644 --- a/src/main/java/picard/illumina/CollectIlluminaLaneMetrics.java +++ b/src/main/java/picard/illumina/CollectIlluminaLaneMetrics.java @@ -24,6 +24,7 @@ package picard.illumina; +import htsjdk.samtools.ValidationStringency; import htsjdk.samtools.metrics.MetricBase; import htsjdk.samtools.metrics.MetricsFile; import htsjdk.samtools.util.IOUtil; @@ -118,7 +119,7 @@ protected int doWork() { } } - IlluminaLaneMetricsCollector.collectLaneMetrics(RUN_DIRECTORY, OUTPUT_DIRECTORY, OUTPUT_PREFIX, laneMetricsFile, phasingMetricsFile, READ_STRUCTURE, FILE_EXTENSION == null ? "" : FILE_EXTENSION); + IlluminaLaneMetricsCollector.collectLaneMetrics(RUN_DIRECTORY, OUTPUT_DIRECTORY, OUTPUT_PREFIX, laneMetricsFile, phasingMetricsFile, READ_STRUCTURE, FILE_EXTENSION == null ? "" : FILE_EXTENSION, VALIDATION_STRINGENCY); return 0; } @@ -134,10 +135,13 @@ public static void main(final String[] args) { private final static Log LOG = Log.getInstance(IlluminaLaneMetricsCollector.class); /** Returns a partitioned collection of lane number to Tile objects from the provided basecall directory. */ - public static Map> readLaneTiles(final File illuminaRunDirectory, final ReadStructure readStructure) { + public static Map> readLaneTiles(final File illuminaRunDirectory, final ReadStructure readStructure, final ValidationStringency validationStringency) { final Collection tiles; try { - tiles = TileMetricsUtil.parseTileMetrics(TileMetricsUtil.renderTileMetricsFileFromBasecallingDirectory(illuminaRunDirectory), readStructure); + tiles = TileMetricsUtil.parseTileMetrics(TileMetricsUtil.renderTileMetricsFileFromBasecallingDirectory(illuminaRunDirectory), + readStructure, + validationStringency + ); } catch (final FileNotFoundException e) { throw new PicardException("Unable to open laneMetrics file.", e); } @@ -149,8 +153,9 @@ public static void main(final String[] args) { public static void collectLaneMetrics(final File runDirectory, final File outputDirectory, final String outputPrefix, final MetricsFile> laneMetricsFile, final MetricsFile> phasingMetricsFile, - final ReadStructure readStructure, final String fileExtension) { - final Map> laneTiles = readLaneTiles(runDirectory, readStructure); + final ReadStructure readStructure, final String fileExtension, + final ValidationStringency validationStringency) { + final Map> laneTiles = readLaneTiles(runDirectory, readStructure, validationStringency); writeLaneMetrics(laneTiles, outputDirectory, outputPrefix, laneMetricsFile, fileExtension); writePhasingMetrics(laneTiles, outputDirectory, outputPrefix, phasingMetricsFile, fileExtension); } @@ -189,10 +194,10 @@ private static double calculateLaneDensityFromTiles(final Collection tiles double area = 0; double clusters = 0; for (final Tile tile : tiles) { - area += (tile.getClusterCount() / tile.getClusterDensity()); + if (tile.getClusterDensity() > 0) area += (tile.getClusterCount() / tile.getClusterDensity()); clusters += tile.getClusterCount(); } - return clusters / area; + return (area > 0) ? clusters / area : 0.0; } } } diff --git a/src/main/java/picard/illumina/parser/TileMetricsUtil.java b/src/main/java/picard/illumina/parser/TileMetricsUtil.java index 35863d3b2..656c7be86 100644 --- a/src/main/java/picard/illumina/parser/TileMetricsUtil.java +++ b/src/main/java/picard/illumina/parser/TileMetricsUtil.java @@ -24,9 +24,12 @@ package picard.illumina.parser; +import htsjdk.samtools.ValidationStringency; import htsjdk.samtools.util.CollectionUtil; import htsjdk.samtools.util.IterableAdapter; +import htsjdk.samtools.util.Log; import picard.PicardException; +import picard.illumina.CollectIlluminaLaneMetrics; import picard.illumina.parser.readers.TileMetricsOutReader; import picard.illumina.parser.readers.TileMetricsOutReader.IlluminaTileMetrics; @@ -54,6 +57,8 @@ /** The expected name of the tile metrics output file. */ public static String TILE_METRICS_OUT_FILE_NAME = "TileMetricsOut.bin"; + private final static Log LOG = Log.getInstance(TileMetricsUtil.class); + /** Returns the path to the TileMetrics file given the basecalling directory. */ public static File renderTileMetricsFileFromBasecallingDirectory(final File illuminaRunDirectory) { return new File(new File(illuminaRunDirectory, INTEROP_SUBDIRECTORY_NAME), TILE_METRICS_OUT_FILE_NAME); @@ -68,7 +73,8 @@ public static File renderTileMetricsFileFromBasecallingDirectory(final File illu * - Phasing & Prephasing for first template read (if available) * - Phasing & Prephasing for second template read (if available) */ - public static Collection parseTileMetrics(final File tileMetricsOutFile, final ReadStructure readStructure) throws FileNotFoundException { + public static Collection parseTileMetrics(final File tileMetricsOutFile, final ReadStructure readStructure, + final ValidationStringency validationStringency) throws FileNotFoundException { // Get the tile metrics lines from TileMetricsOut, keeping only the last value for any Lane/Tile/Code combination final Collection tileMetrics = determineLastValueForLaneTileMetricsCode(new TileMetricsOutReader (tileMetricsOutFile)); @@ -91,7 +97,7 @@ public static File renderTileMetricsFileFromBasecallingDirectory(final File illu final IlluminaTileMetrics clusterRecord = CollectionUtil.getSoleElement(codeMetricsMap.get(IlluminaMetricsCode.CLUSTER_ID.getMetricsCode())); // Snag the phasing data for each read in the read structure. For both types of phasing values, this is the median of all of the individual values seen - final Collection tilePhasingValues = getTilePhasingValues(codeMetricsMap, readStructure); + final Collection tilePhasingValues = getTilePhasingValues(codeMetricsMap, readStructure, validationStringency); tiles.add(new Tile(densityRecord.getLaneNumber(), densityRecord.getTileNumber(), densityRecord.getMetricValue(), clusterRecord.getMetricValue(), tilePhasingValues.toArray(new TilePhasingValue[tilePhasingValues.size()]))); @@ -101,7 +107,7 @@ public static File renderTileMetricsFileFromBasecallingDirectory(final File illu } /** Pulls out the phasing & prephasing value for the template reads and returns a collection of TilePhasingValues representing these */ - private static Collection getTilePhasingValues(final Map> codeMetricsMap, final ReadStructure readStructure) { + private static Collection getTilePhasingValues(final Map> codeMetricsMap, final ReadStructure readStructure, final ValidationStringency validationStringency) { boolean isFirstRead = true; final Collection tilePhasingValues = new ArrayList<>(); for (int descriptorIndex = 0; descriptorIndex < readStructure.descriptors.size(); descriptorIndex++) { @@ -111,13 +117,32 @@ public static File renderTileMetricsFileFromBasecallingDirectory(final File illu final int phasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PHASING_BASE); final int prePhasingCode = IlluminaMetricsCode.getPhasingCode(descriptorIndex, IlluminaMetricsCode.PREPHASING_BASE); - if (!(codeMetricsMap.containsKey(phasingCode) && codeMetricsMap.containsKey(prePhasingCode))) { - throw new PicardException("Don't have both phasing and prephasing values for tile"); + final float phasingValue, prePhasingValue; + + // If both the phasing and pre-phasing data are missing, then likely something went wrong when imaging + // this tile, for example a grain of sand disrupting the path of light to the sensor. If only one of them + // is missing, then likely the data is corrupt. + if (codeMetricsMap.containsKey(phasingCode) && codeMetricsMap.containsKey(prePhasingCode)) { + phasingValue = CollectionUtil.getSoleElement(codeMetricsMap.get(phasingCode)).getMetricValue(); + prePhasingValue = CollectionUtil.getSoleElement(codeMetricsMap.get(prePhasingCode)).getMetricValue(); + } else { + final String message = String.format( + "Don't have both phasing and prephasing values for %s read cycle %s. Phasing code was %d and prephasing code was %d.", + tileTemplateRead.toString(), descriptorIndex + 1, phasingCode, prePhasingCode + ); + if (!codeMetricsMap.containsKey(phasingCode) && !codeMetricsMap.containsKey(prePhasingCode) && validationStringency != ValidationStringency.STRICT) { + // Ignore the error, and use the default (zero) for the phasing values + if (validationStringency == ValidationStringency.LENIENT) { + LOG.warn(message); + } + } else { + throw new PicardException(message); + } + phasingValue = 0; + prePhasingValue = 0; } - tilePhasingValues.add(new TilePhasingValue(tileTemplateRead, - CollectionUtil.getSoleElement(codeMetricsMap.get(phasingCode)).getMetricValue(), - CollectionUtil.getSoleElement(codeMetricsMap.get(prePhasingCode)).getMetricValue())); + tilePhasingValues.add(new TilePhasingValue(tileTemplateRead, phasingValue, prePhasingValue)); isFirstRead = false; } } diff --git a/src/test/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java b/src/test/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java index 3910852f4..bf6b86d0d 100644 --- a/src/test/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java +++ b/src/test/java/picard/illumina/IlluminaLaneMetricsCollectorTest.java @@ -1,17 +1,23 @@ package picard.illumina; +import htsjdk.samtools.ValidationStringency; import htsjdk.samtools.util.IOUtil; +import picard.PicardException; import picard.illumina.parser.ReadStructure; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import java.io.File;import java.lang.Exception;import java.lang.Object;import java.lang.String; +import java.io.File; +import java.io.IOException; +import java.lang.Exception;import java.lang.Object;import java.lang.String; +import java.nio.file.Files; import java.util.Arrays; /** @author mccowan */ public class IlluminaLaneMetricsCollectorTest { final static File TEST_DIRECTORY = new File("testdata/picard/illumina/IlluminaLaneMetricsCollectorTest"); final static File TILE_RUN_DIRECTORY = new File(TEST_DIRECTORY, "tileRuns"); + final static File TEST_MISSING_PHASING_DIRECTORY = new File(TEST_DIRECTORY, "missing_phasing"); private static File buildOutputFile(final File directory, final String prefix, final String extension) { return new File(directory, String.format("%s.%s", prefix, extension)); @@ -56,9 +62,9 @@ public void testCollectIlluminaLaneMetrics(final String testRun, final ReadStruc if (useReadStructure) clp.READ_STRUCTURE = readStructure; clp.doWork(); - final File phasingMetricsPhile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaPhasingMetrics.getExtension()); - final File canonicalPhasingPhile = buildOutputFile(runDirectory, testRun, IlluminaPhasingMetrics.getExtension()); - IOUtil.assertFilesEqual(canonicalPhasingPhile, phasingMetricsPhile); + final File phasingMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaPhasingMetrics.getExtension()); + final File canonicalPhasingFile = buildOutputFile(runDirectory, testRun, IlluminaPhasingMetrics.getExtension()); + IOUtil.assertFilesEqual(canonicalPhasingFile, phasingMetricsFile); final File laneMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaLaneMetrics.getExtension()); final File canonicalLaneFile = buildOutputFile(runDirectory, testRun, IlluminaLaneMetrics.getExtension()); @@ -77,4 +83,54 @@ public void testCollectIlluminaLaneMetrics(final String testRun, final ReadStruc {"A67HY", new ReadStructure("8B8B")} }; } + + /** Ensures that an exception is thrown when we encounter a tile without phasing/pre-phasing metrics. */ + @Test(expectedExceptions = PicardException.class) + public void testMissingPhasingValuesStrict() { + final ReadStructure readStructure = new ReadStructure("151T8B8B151T"); + for (final boolean useReadStructure : Arrays.asList(true, false)) { + final File runDirectory = TEST_MISSING_PHASING_DIRECTORY; + final CollectIlluminaLaneMetrics clp = new CollectIlluminaLaneMetrics(); + clp.OUTPUT_DIRECTORY = IOUtil.createTempDir("illuminaLaneMetricsCollectorTest", null); + clp.RUN_DIRECTORY = runDirectory; + clp.OUTPUT_PREFIX = "test"; + clp.VALIDATION_STRINGENCY = ValidationStringency.STRICT; + if (useReadStructure) clp.READ_STRUCTURE = readStructure; + clp.doWork(); + + final File phasingMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaPhasingMetrics.getExtension()); + final File canonicalPhasingFile = buildOutputFile(runDirectory, runDirectory.getName(), IlluminaPhasingMetrics.getExtension()); + IOUtil.assertFilesEqual(canonicalPhasingFile, phasingMetricsFile); + + final File laneMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaLaneMetrics.getExtension()); + final File canonicalLaneFile = buildOutputFile(runDirectory, runDirectory.getName(), IlluminaLaneMetrics.getExtension()); + IOUtil.assertFilesEqual(canonicalLaneFile, laneMetricsFile); + IOUtil.deleteDirectoryTree(clp.OUTPUT_DIRECTORY); + } + } + + /** Silently continue if we encounter a tile without phasing/pre-phasing metrics. */ + @Test + public void testMissingPhasingValuesSilent() throws IOException { + final ReadStructure readStructure = new ReadStructure("151T8B8B151T"); + for (final boolean useReadStructure : Arrays.asList(true, false)) { + final File runDirectory = TEST_MISSING_PHASING_DIRECTORY; + final CollectIlluminaLaneMetrics clp = new CollectIlluminaLaneMetrics(); + clp.OUTPUT_DIRECTORY = IOUtil.createTempDir("illuminaLaneMetricsCollectorTest", null); + clp.RUN_DIRECTORY = runDirectory; + clp.OUTPUT_PREFIX = "test"; + clp.VALIDATION_STRINGENCY = ValidationStringency.SILENT; + if (useReadStructure) clp.READ_STRUCTURE = readStructure; + clp.doWork(); + + final File phasingMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaPhasingMetrics.getExtension()); + final File canonicalPhasingFile = buildOutputFile(runDirectory, runDirectory.getName(), IlluminaPhasingMetrics.getExtension()); + IOUtil.assertFilesEqual(canonicalPhasingFile, phasingMetricsFile); + + final File laneMetricsFile = buildOutputFile(clp.OUTPUT_DIRECTORY, clp.OUTPUT_PREFIX, IlluminaLaneMetrics.getExtension()); + final File canonicalLaneFile = buildOutputFile(runDirectory, runDirectory.getName(), IlluminaLaneMetrics.getExtension()); + IOUtil.assertFilesEqual(canonicalLaneFile, laneMetricsFile); + IOUtil.deleteDirectoryTree(clp.OUTPUT_DIRECTORY); + } + } } diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/InterOp/TileMetricsOut.bin b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/InterOp/TileMetricsOut.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c10c8f85e135045230c4c301b3e632f194c3aa8 GIT binary patch literal 86322 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 W!CQF*_;4&HP-yE~( + + + + + + + + + + diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_lane_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_lane_metrics new file mode 100644 index 000000000..48b063e55 --- /dev/null +++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_lane_metrics @@ -0,0 +1,9 @@ + +## METRICS CLASS picard.illumina.IlluminaLaneMetrics +CLUSTER_DENSITY LANE +148913.651644 1 +144193.648422 2 +148975.949702 3 +145278.617619 4 + + diff --git a/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_phasing_metrics b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_phasing_metrics new file mode 100644 index 000000000..4edd34fea --- /dev/null +++ b/testdata/picard/illumina/IlluminaLaneMetricsCollectorTest/missing_phasing/missing_phasing.illumina_phasing_metrics @@ -0,0 +1,13 @@ + +## METRICS CLASS picard.illumina.IlluminaPhasingMetrics +LANE TYPE_NAME PHASING_APPLIED PREPHASING_APPLIED +1 FIRST 0.068819 0.052681 +1 SECOND 0.133818 0.099066 +2 FIRST 0.062264 0.053854 +2 SECOND 0.130112 0.10689 +3 FIRST 0.068925 0.052412 +3 SECOND 0.1306 0.101055 +4 FIRST 0.054477 0.045521 +4 SECOND 0.128735 0.095261 + + From d96ded53074ccadb0a4c92d501b4c0be89e02ad2 Mon Sep 17 00:00:00 2001 From: Nils Homer Date: Wed, 17 May 2017 12:36:44 -0700 Subject: [PATCH 2/2] Typo in SplitSamByLibraryTest --- src/test/java/picard/sam/SplitSamByLibraryTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/picard/sam/SplitSamByLibraryTest.java b/src/test/java/picard/sam/SplitSamByLibraryTest.java index 67ec32bd7..06a3989dc 100755 --- a/src/test/java/picard/sam/SplitSamByLibraryTest.java +++ b/src/test/java/picard/sam/SplitSamByLibraryTest.java @@ -55,7 +55,7 @@ public void basicPositiveTest() { Assert.assertEquals(splitter.doWork(), 0, "SAM file split should have succeeded but didn't."); File f = new File("unknown.sam"); - Assert.assertTrue(f.exists(), "uknown.sam should exist but doesn't"); + Assert.assertTrue(f.exists(), "unknown.sam should exist but doesn't"); Assert.assertEquals(countReads(f), 2, "unknown.sam has the wrong number of reads"); f.delete(); @@ -83,7 +83,7 @@ public void testNoUnknownFile() { // The unknown file should exist and have two reads File f = new File("unknown.sam"); - Assert.assertFalse(f.exists(), "uknown.sam should not exist but does"); + Assert.assertFalse(f.exists(), "unknown.sam should not exist but does"); if (f.exists()) f.delete(); f = new File("lib-1.sam");