diff --git a/src/java/htsjdk/samtools/metrics/MetricsFile.java b/src/java/htsjdk/samtools/metrics/MetricsFile.java index 954aea100e..19580d2b6e 100644 --- a/src/java/htsjdk/samtools/metrics/MetricsFile.java +++ b/src/java/htsjdk/samtools/metrics/MetricsFile.java @@ -573,4 +573,21 @@ public static boolean areMetricsEqual(final File file1, final File file2) { } } + + /** + * Compare the metrics and histograms in two files, ignoring headers. + */ + public static boolean areMetricsAndHistogramsEqual(final File file1, final File file2) { + try { + final MetricsFile> mf1 = new MetricsFile>(); + final MetricsFile> mf2 = new MetricsFile>(); + mf1.read(new FileReader(file1)); + mf2.read(new FileReader(file2)); + + return mf1.areMetricsEqual(mf2) && mf1.areHistogramsEqual(mf2); + + } catch (FileNotFoundException e) { + throw new SAMException(e.getMessage(), e); + } + } } diff --git a/src/tests/java/htsjdk/samtools/metrics/MetricsFileTest.java b/src/tests/java/htsjdk/samtools/metrics/MetricsFileTest.java index e3c81b6125..23930314d1 100644 --- a/src/tests/java/htsjdk/samtools/metrics/MetricsFileTest.java +++ b/src/tests/java/htsjdk/samtools/metrics/MetricsFileTest.java @@ -97,6 +97,8 @@ public void testFloatingPointEquality() throws IOException { MetricsFile file2 = writeThenReadBack(file); Assert.assertEquals(file, file2); + + } @Test @@ -178,6 +180,22 @@ public void testWriteMetricsFile() throws IOException, ClassNotFoundException { Assert.assertEquals(file, file3); } + @Test + public void areMetricsFilesEqualTest(){ + final File TEST_DIR = new File("testdata/htsjdk/samtools/metrics/"); + final File file1 = new File(TEST_DIR,"metricsOne.metrics"); + final File file2 = new File(TEST_DIR,"metricsOneCopy.metrics"); + final File fileModifiedHist = new File(TEST_DIR,"metricsOneModifiedHistogram.metrics"); + final File fileModifiedMet = new File(TEST_DIR,"metricsOneModifiedMetrics.metrics"); + + Assert.assertTrue(MetricsFile.areMetricsEqual(file1, file2)); + Assert.assertTrue(MetricsFile.areMetricsEqual(file1, fileModifiedHist)); + + Assert.assertFalse(MetricsFile.areMetricsAndHistogramsEqual(file1, fileModifiedHist)); + Assert.assertFalse(MetricsFile.areMetricsEqual(file1, fileModifiedMet)); + Assert.assertFalse(MetricsFile.areMetricsAndHistogramsEqual(file1, fileModifiedMet)); + } + /** Helper method to persist metrics to file and read them back again. */ private MetricsFile writeThenReadBack(MetricsFile in) throws IOException { File f = File.createTempFile("test", ".metrics"); @@ -189,4 +207,7 @@ private MetricsFile writeThenReadBa retval.read(new FileReader(f)); return retval; } + + + } diff --git a/testdata/htsjdk/samtools/metrics/metricsOne.metrics b/testdata/htsjdk/samtools/metrics/metricsOne.metrics new file mode 100644 index 0000000000..46c724ed22 --- /dev/null +++ b/testdata/htsjdk/samtools/metrics/metricsOne.metrics @@ -0,0 +1,13 @@ +## htsjdk.samtools.metrics.StringHeader +# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN=100 NUM_ADAPTERS_TO_KEEP=1 VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false GA4GH_CLIENT_SECRETS=client_secrets.json +## htsjdk.samtools.metrics.StringHeader +# Started on: Mon Aug 24 13:31:51 EDT 2015 + +## METRICS CLASS htsjdk.samtools.metrics.MetricsFileTest$TestMetric +STRING_PROP DATE_PROP SHORT_PROP INTEGER_PROP LONG_PROP FLOAT_PROP DOUBLE_PROP ENUM_PROP BOOLEAN_PROP CHARACTER_PROP SHORT_PRIMITIVE INT_PRIMITIVE LONG_PRIMITIVE FLOAT_PRIMITIVE DOUBLE_PRIMITIVE BOOLEAN_PRIMITIVE CHAR_PRIMITIVE +Hello World 2008-12-31 123 9223372036854775807 456.789001 0.713487 Two N A 123 919834781 9223372034707292160 0.55694 0.229233 Y B + +## HISTOGRAM java.lang.Integer +clipped_bases read_count +6 1 +7 1 diff --git a/testdata/htsjdk/samtools/metrics/metricsOneCopy.metrics b/testdata/htsjdk/samtools/metrics/metricsOneCopy.metrics new file mode 100644 index 0000000000..46c724ed22 --- /dev/null +++ b/testdata/htsjdk/samtools/metrics/metricsOneCopy.metrics @@ -0,0 +1,13 @@ +## htsjdk.samtools.metrics.StringHeader +# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN=100 NUM_ADAPTERS_TO_KEEP=1 VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false GA4GH_CLIENT_SECRETS=client_secrets.json +## htsjdk.samtools.metrics.StringHeader +# Started on: Mon Aug 24 13:31:51 EDT 2015 + +## METRICS CLASS htsjdk.samtools.metrics.MetricsFileTest$TestMetric +STRING_PROP DATE_PROP SHORT_PROP INTEGER_PROP LONG_PROP FLOAT_PROP DOUBLE_PROP ENUM_PROP BOOLEAN_PROP CHARACTER_PROP SHORT_PRIMITIVE INT_PRIMITIVE LONG_PRIMITIVE FLOAT_PRIMITIVE DOUBLE_PRIMITIVE BOOLEAN_PRIMITIVE CHAR_PRIMITIVE +Hello World 2008-12-31 123 9223372036854775807 456.789001 0.713487 Two N A 123 919834781 9223372034707292160 0.55694 0.229233 Y B + +## HISTOGRAM java.lang.Integer +clipped_bases read_count +6 1 +7 1 diff --git a/testdata/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics b/testdata/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics new file mode 100644 index 0000000000..3e6f088782 --- /dev/null +++ b/testdata/htsjdk/samtools/metrics/metricsOneModifiedHistogram.metrics @@ -0,0 +1,14 @@ +## htsjdk.samtools.metrics.StringHeader +# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN=100 NUM_ADAPTERS_TO_KEEP=1 VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false GA4GH_CLIENT_SECRETS=client_secrets.json +## htsjdk.samtools.metrics.StringHeader +# Started on: Mon Aug 24 13:31:51 EDT 2015 + +## METRICS CLASS htsjdk.samtools.metrics.MetricsFileTest$TestMetric +STRING_PROP DATE_PROP SHORT_PROP INTEGER_PROP LONG_PROP FLOAT_PROP DOUBLE_PROP ENUM_PROP BOOLEAN_PROP CHARACTER_PROP SHORT_PRIMITIVE INT_PRIMITIVE LONG_PRIMITIVE FLOAT_PRIMITIVE DOUBLE_PRIMITIVE BOOLEAN_PRIMITIVE CHAR_PRIMITIVE +Hello World 2008-12-31 123 9223372036854775807 456.789001 0.713487 Two N A 123 919834781 9223372034707292160 0.55694 0.229233 Y B + +## HISTOGRAM java.lang.Integer +clipped_bases read_count +6 1 +7 1 +8 1 diff --git a/testdata/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics b/testdata/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics new file mode 100644 index 0000000000..a4d23d8efb --- /dev/null +++ b/testdata/htsjdk/samtools/metrics/metricsOneModifiedMetrics.metrics @@ -0,0 +1,13 @@ +## htsjdk.samtools.metrics.StringHeader +# picard.illumina.MarkIlluminaAdapters INPUT=testdata/picard/illumina/MarkIlluminaAdaptersTest/unevenReads.sam OUTPUT=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven5946421709712534555.sam METRICS=/var/folders/tc/hy9lszxd1dg9cf4bky51mrrd9k3s6g/T/uneven4591996041776878558.metrics MIN_MATCH_BASES_SE=12 MIN_MATCH_BASES_PE=6 MAX_ERROR_RATE_SE=0.1 MAX_ERROR_RATE_PE=0.1 ADAPTERS=[INDEXED, DUAL_INDEXED, PAIRED_END] ADAPTER_TRUNCATION_LENGTH=30 PRUNE_ADAPTER_LIST_AFTER_THIS_MANY_ADAPTERS_SEEN=100 NUM_ADAPTERS_TO_KEEP=1 VERBOSITY=INFO QUIET=false VALIDATION_STRINGENCY=STRICT COMPRESSION_LEVEL=5 MAX_RECORDS_IN_RAM=500000 CREATE_INDEX=false CREATE_MD5_FILE=false GA4GH_CLIENT_SECRETS=client_secrets.json +## htsjdk.samtools.metrics.StringHeader +# Started on: Mon Aug 24 13:31:51 EDT 2015 + +## METRICS CLASS htsjdk.samtools.metrics.MetricsFileTest$TestMetric +STRING_PROP DATE_PROP SHORT_PROP INTEGER_PROP LONG_PROP FLOAT_PROP DOUBLE_PROP ENUM_PROP BOOLEAN_PROP CHARACTER_PROP SHORT_PRIMITIVE INT_PRIMITIVE LONG_PRIMITIVE FLOAT_PRIMITIVE DOUBLE_PRIMITIVE BOOLEAN_PRIMITIVE CHAR_PRIMITIVE +Hello World 2008-12-31 122 9223372036854775807 456.789001 0.713487 Two N A 123 919834781 9223372034707292160 0.55694 0.229233 Y B + +## HISTOGRAM java.lang.Integer +clipped_bases read_count +6 1 +7 1