From 4544c30a52f72331d88b4cbcd186a46605f5e7b5 Mon Sep 17 00:00:00 2001 From: Ilya Soifer Date: Thu, 2 Jun 2022 21:58:47 +0300 Subject: [PATCH 1/4] Rebase fix --- .gitignore | 2 + .../java/picard/sam/DuplicationMetrics.java | 32 +++++++++++ .../CollectDuplicateMetrics.java | 4 +- .../EstimateLibraryComplexity.java | 3 +- .../sam/markduplicates/MarkDuplicates.java | 55 ++++++++++++------ .../MarkDuplicatesWithMateCigarIterator.java | 5 +- .../SimpleMarkDuplicatesWithMateCigar.java | 3 +- ...tractMarkDuplicatesCommandLineProgram.java | 43 +++++++------- .../util/LibraryIdGenerator.java | 7 ++- .../sam/markduplicates/util/ReadEnds.java | 2 +- .../util/ReadEndsForMarkDuplicates.java | 5 ++ .../picard/sam/DuplicationMetricsTest.java | 56 +++++++++---------- ...arkDuplicatesCommandLineProgramTester.java | 3 +- ...catesTagRepresentativeReadIndexTester.java | 1 - .../markduplicates/MarkDuplicatesTest.java | 8 +-- .../markduplicates/MarkDuplicatesTester.java | 5 +- 16 files changed, 153 insertions(+), 81 deletions(-) diff --git a/.gitignore b/.gitignore index 59a855917d..a0c69cb2f0 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ report jacoco.data .gradle build +*.log +*.swp diff --git a/src/main/java/picard/sam/DuplicationMetrics.java b/src/main/java/picard/sam/DuplicationMetrics.java index cc3f476fab..4840623002 100644 --- a/src/main/java/picard/sam/DuplicationMetrics.java +++ b/src/main/java/picard/sam/DuplicationMetrics.java @@ -24,10 +24,15 @@ package picard.sam; +import htsjdk.samtools.SAMReadGroupRecord; +import htsjdk.samtools.SAMRecord; import htsjdk.samtools.util.Histogram; import org.broadinstitute.barclay.help.DocumentedFeature; import picard.analysis.MergeableMetricBase; import picard.util.help.HelpConstants; +import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram; +import picard.util.MathUtil; +import java.util.List; /** * Metrics that are calculated during the process of marking duplicates @@ -236,4 +241,31 @@ public static void main(String[] args) { System.out.println(bin.getId() + "\t" + bin.getValue()); } } + + public void addDuplicateReadToMetrics(final SAMRecord rec) { + // only update duplicate counts for "decider" reads, not tag-a-long reads + if (!rec.isSecondaryOrSupplementary() && !rec.getReadUnmappedFlag()) { + // Update the duplication metrics + if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { + ++UNPAIRED_READ_DUPLICATES; + + } else { + ++READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end + } + } + } + + public void addReadToLibraryMetrics(final SAMRecord rec) { + + // First bring the simple metrics up to date + if (rec.getReadUnmappedFlag()) { + ++UNMAPPED_READS; + } else if (rec.isSecondaryOrSupplementary()) { + ++SECONDARY_OR_SUPPLEMENTARY_RDS; + } else if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { + ++UNPAIRED_READS_EXAMINED; + } else { + ++READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end + } + } } diff --git a/src/main/java/picard/sam/markduplicates/CollectDuplicateMetrics.java b/src/main/java/picard/sam/markduplicates/CollectDuplicateMetrics.java index 6d5d182140..3cf6c71fdf 100644 --- a/src/main/java/picard/sam/markduplicates/CollectDuplicateMetrics.java +++ b/src/main/java/picard/sam/markduplicates/CollectDuplicateMetrics.java @@ -89,11 +89,11 @@ protected void setup(final SAMFileHeader header, final File samFile) { @Override protected void acceptRead(final SAMRecord rec, final ReferenceSequence ref) { - final DuplicationMetrics metrics = AbstractMarkDuplicatesCommandLineProgram.addReadToLibraryMetrics(rec, header, libraryIdGenerator); + final DuplicationMetrics metrics = AbstractMarkDuplicatesCommandLineProgram.addReadToLibraryMetrics(rec, header, libraryIdGenerator, false); final boolean isDuplicate = rec.getDuplicateReadFlag(); if (isDuplicate) { - AbstractMarkDuplicatesCommandLineProgram.addDuplicateReadToMetrics(rec, metrics); + metrics.addDuplicateReadToMetrics(rec); } } diff --git a/src/main/java/picard/sam/markduplicates/EstimateLibraryComplexity.java b/src/main/java/picard/sam/markduplicates/EstimateLibraryComplexity.java index 9e5e25c3b2..6f32f33d8c 100644 --- a/src/main/java/picard/sam/markduplicates/EstimateLibraryComplexity.java +++ b/src/main/java/picard/sam/markduplicates/EstimateLibraryComplexity.java @@ -45,6 +45,7 @@ import picard.cmdline.StandardOptionDefinitions; import picard.cmdline.programgroups.DiagnosticsAndQCProgramGroup; import picard.sam.DuplicationMetrics; +import picard.sam.DuplicationMetricsFactory; import picard.sam.markduplicates.util.AbstractOpticalDuplicateFinderCommandLineProgram; import picard.sam.util.PhysicalLocationShort; @@ -583,7 +584,7 @@ protected int doWork() { for (final String library : duplicationHistosByLibrary.keySet()) { final Histogram duplicationHisto = duplicationHistosByLibrary.get(library); final Histogram opticalHisto = opticalHistosByLibrary.get(library); - final DuplicationMetrics metrics = new DuplicationMetrics(); + final DuplicationMetrics metrics = DuplicationMetricsFactory.createMetrics(); metrics.LIBRARY = library; // Filter out any bins that have fewer than MIN_GROUP_COUNT entries in them and calculate derived metrics diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicates.java b/src/main/java/picard/sam/markduplicates/MarkDuplicates.java index 93a2724858..4953d1f91e 100644 --- a/src/main/java/picard/sam/markduplicates/MarkDuplicates.java +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicates.java @@ -28,6 +28,7 @@ import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy; import htsjdk.samtools.util.*; import org.broadinstitute.barclay.argparser.Argument; +import org.broadinstitute.barclay.argparser.ArgumentCollection; import org.broadinstitute.barclay.argparser.CommandLineProgramProperties; import org.broadinstitute.barclay.help.DocumentedFeature; import picard.PicardException; @@ -54,7 +55,7 @@ oneLineSummary = MarkDuplicates.USAGE_SUMMARY, programGroup = ReadDataManipulationProgramGroup.class) @DocumentedFeature -public class MarkDuplicates extends AbstractMarkDuplicatesCommandLineProgram { +public class MarkDuplicates extends AbstractMarkDuplicatesCommandLineProgram implements MarkDuplicatesHelper { static final String USAGE_SUMMARY = "Identifies duplicate reads. "; static final String USAGE_DETAILS = "

This tool locates and tags duplicate reads in a SAM, BAM or CRAM file, where duplicate reads are " + "defined as originating from a single fragment of DNA. Duplicates can arise during sample preparation e.g. library " + @@ -216,12 +217,18 @@ public String code() { "the BARCODE_TAG option be set to a non null value. Default null.", optional = true) public String MOLECULAR_IDENTIFIER_TAG = null; + @ArgumentCollection + public MarkDuplicatesForFlowArgumentCollection flowBasedArguments = new MarkDuplicatesForFlowArgumentCollection(); - private SortingCollection pairSort; - private SortingCollection fragSort; - private SortingLongCollection duplicateIndexes; - private SortingLongCollection opticalDuplicateIndexes; - private SortingCollection representativeReadIndicesForDuplicates; + protected SortingCollection pairSort; + protected SortingCollection fragSort; + protected SortingLongCollection duplicateIndexes; + protected SortingLongCollection opticalDuplicateIndexes; + protected SortingCollection representativeReadIndicesForDuplicates; + + // some calculations are performed using a helper class, which can be parameter specific + // by default, this instance is the helper + private MarkDuplicatesHelper calcHelper = this; private int numDuplicateIndices = 0; static private final long NO_SUCH_INDEX = Long.MAX_VALUE; // needs to be large so that that >= test fails for query-sorted traversal @@ -253,11 +260,17 @@ protected int doWork() { final boolean useBarcodes = (null != BARCODE_TAG || null != READ_ONE_BARCODE_TAG || null != READ_TWO_BARCODE_TAG); + // use flow based calculation helper? + if ( flowBasedArguments.FLOW_MODE ) { + calcHelper = new MarkDuplicatesForFlowHelper(this); + } + reportMemoryStats("Start of doWork"); log.info("Reading input file and constructing read end information."); buildSortedReadEndLists(useBarcodes); reportMemoryStats("After buildSortedReadEndLists"); - generateDuplicateIndexes(useBarcodes, this.REMOVE_SEQUENCING_DUPLICATES || this.TAGGING_POLICY != DuplicateTaggingPolicy.DontTag); + calcHelper.generateDuplicateIndexes(useBarcodes, this.REMOVE_SEQUENCING_DUPLICATES || this.TAGGING_POLICY != DuplicateTaggingPolicy.DontTag); + reportMemoryStats("After generateDuplicateIndexes"); log.info("Marking " + this.numDuplicateIndices + " records as duplicates."); @@ -324,7 +337,7 @@ protected int doWork() { while (iterator.hasNext()) { final SAMRecord rec = iterator.next(); - DuplicationMetrics metrics = AbstractMarkDuplicatesCommandLineProgram.addReadToLibraryMetrics(rec, header, libraryIdGenerator); + DuplicationMetrics metrics = AbstractMarkDuplicatesCommandLineProgram.addReadToLibraryMetrics(rec, header, libraryIdGenerator, flowBasedArguments.FLOW_MODE); // Now try and figure out the next duplicate index (if going by coordinate. if going by query name, only do this // if the query name has changed. @@ -337,7 +350,7 @@ protected int doWork() { if (isDuplicate) { rec.setDuplicateReadFlag(true); - AbstractMarkDuplicatesCommandLineProgram.addDuplicateReadToMetrics(rec, metrics); + metrics.addDuplicateReadToMetrics(rec); } else { rec.setDuplicateReadFlag(false); } @@ -514,7 +527,7 @@ private void buildSortedReadEndLists(final boolean useBarcodes) { final CloseableIterator iterator = headerAndIterator.iterator; if (null == this.libraryIdGenerator) { - this.libraryIdGenerator = new LibraryIdGenerator(header); + this.libraryIdGenerator = new LibraryIdGenerator(header, flowBasedArguments.FLOW_MODE); } String duplicateQueryName = null; @@ -548,7 +561,7 @@ private void buildSortedReadEndLists(final boolean useBarcodes) { } else if (!rec.isSecondaryOrSupplementary()) { final long indexForRead = assumedSortOrder == SAMFileHeader.SortOrder.queryname ? duplicateIndex : index; - final ReadEndsForMarkDuplicates fragmentEnd = buildReadEnds(header, indexForRead, rec, useBarcodes); + final ReadEndsForMarkDuplicates fragmentEnd = calcHelper.buildReadEnds(header, indexForRead, rec, useBarcodes); this.fragSort.add(fragmentEnd); if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) { @@ -610,7 +623,7 @@ private void buildSortedReadEndLists(final boolean useBarcodes) { pairedEnds.orientation == ReadEnds.R); } - pairedEnds.score += DuplicateScoringStrategy.computeDuplicateScore(rec, this.DUPLICATE_SCORING_STRATEGY); + pairedEnds.score += calcHelper.getReadDuplicateScore(rec, pairedEnds); this.pairSort.add(pairedEnds); } } @@ -631,10 +644,18 @@ private void buildSortedReadEndLists(final boolean useBarcodes) { this.fragSort.doneAdding(); } + /** + * update score for pairedEnds + */ + public short getReadDuplicateScore(final SAMRecord rec, final ReadEndsForMarkDuplicates pairedEnds) { + return DuplicateScoringStrategy.computeDuplicateScore(rec, this.DUPLICATE_SCORING_STRATEGY); + } + + /** * Builds a read ends object that represents a single read. */ - private ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec, final boolean useBarcodes) { + public ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec, final boolean useBarcodes) { final ReadEndsForMarkDuplicates ends; if (useBarcodes) { @@ -693,7 +714,7 @@ private ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, fina * Goes through the accumulated ReadEndsForMarkDuplicates objects and determines which of them are * to be marked as duplicates. */ - private void generateDuplicateIndexes(final boolean useBarcodes, final boolean indexOpticalDuplicates) { + public void generateDuplicateIndexes(final boolean useBarcodes, final boolean indexOpticalDuplicates) { final int entryOverhead; if (TAG_DUPLICATE_SET_MEMBERS) { // Memory requirements for RepresentativeReadIndexer: @@ -777,7 +798,7 @@ private void generateDuplicateIndexes(final boolean useBarcodes, final boolean i } } - private void handleChunk(List nextChunk) { + protected void handleChunk(List nextChunk) { if (nextChunk.size() > 1) { markDuplicatePairs(nextChunk); if (TAG_DUPLICATE_SET_MEMBERS) { @@ -788,7 +809,7 @@ private void handleChunk(List nextChunk) { } } - private boolean areComparableForDuplicates(final ReadEndsForMarkDuplicates lhs, final ReadEndsForMarkDuplicates rhs, final boolean compareRead2, final boolean useBarcodes) { + protected boolean areComparableForDuplicates(final ReadEndsForMarkDuplicates lhs, final ReadEndsForMarkDuplicates rhs, final boolean compareRead2, final boolean useBarcodes) { boolean areComparable = lhs.libraryId == rhs.libraryId; if (useBarcodes && areComparable) { // areComparable is useful here to avoid the casts below @@ -930,7 +951,7 @@ private long nextIndexIfNeeded(final SAMFileHeader.SortOrder sortOrder, final lo * * @param containsPairs true if the list also contains objects containing pairs, false otherwise. */ - private void markDuplicateFragments(final List list, final boolean containsPairs) { + protected void markDuplicateFragments(final List list, final boolean containsPairs) { if (containsPairs) { for (final ReadEndsForMarkDuplicates end : list) { if (!end.isPaired()) { diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java index 75da3ab8c2..2ce10df324 100644 --- a/src/main/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesWithMateCigarIterator.java @@ -34,6 +34,7 @@ import htsjdk.samtools.*; import htsjdk.samtools.DuplicateScoringStrategy.ScoringStrategy; import htsjdk.samtools.util.CloseableIterator; +import picard.sam.DuplicationMetricsFactory; import picard.sam.markduplicates.util.*; import java.io.File; @@ -146,7 +147,7 @@ public MarkDuplicatesWithMateCigarIterator(final SAMFileHeader header, final String library = LibraryIdGenerator.getReadGroupLibraryName(readGroup); DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library); if (metrics == null) { - metrics = new DuplicationMetrics(); + metrics = DuplicationMetricsFactory.createMetrics(); metrics.LIBRARY = library; libraryIdGenerator.addMetricsByLibrary(library, metrics); } @@ -610,7 +611,7 @@ private DuplicationMetrics getMetrics(final SAMRecord record) { final String library = LibraryIdGenerator.getLibraryName(header, record); DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library); if (metrics == null) { - metrics = new DuplicationMetrics(); + metrics = DuplicationMetricsFactory.createMetrics(); metrics.LIBRARY = library; libraryIdGenerator.addMetricsByLibrary(library, metrics); } diff --git a/src/main/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java b/src/main/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java index f5ead285c5..4a9ee17b7c 100644 --- a/src/main/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java +++ b/src/main/java/picard/sam/markduplicates/SimpleMarkDuplicatesWithMateCigar.java @@ -39,6 +39,7 @@ import org.broadinstitute.barclay.argparser.CommandLineProgramProperties; import picard.cmdline.programgroups.ReadDataManipulationProgramGroup; import picard.sam.DuplicationMetrics; +import picard.sam.DuplicationMetricsFactory; import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram; import picard.sam.markduplicates.util.LibraryIdGenerator; import picard.sam.markduplicates.util.ReadEnds; @@ -138,7 +139,7 @@ protected int doWork() { final String library = LibraryIdGenerator.getLibraryName(header, record); DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library); if (metrics == null) { - metrics = new DuplicationMetrics(); + metrics = DuplicationMetricsFactory.createMetrics(); metrics.LIBRARY = library; libraryIdGenerator.addMetricsByLibrary(library, metrics); } diff --git a/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java b/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java index 72337e8c60..8a839e9f79 100644 --- a/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java +++ b/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java @@ -42,6 +42,8 @@ import picard.cmdline.CommandLineProgram; import picard.cmdline.StandardOptionDefinitions; import picard.sam.DuplicationMetrics; +import picard.sam.DuplicationMetricsFactory; +import picard.sam.markduplicates.MarkDuplicatesForFlowHelper; import picard.sam.util.PGTagArgumentCollection; import java.io.File; @@ -202,37 +204,36 @@ static public void finalizeAndWriteMetrics(final LibraryIdGenerator libraryIdGen metricsFile.write(outputFile); } - public static DuplicationMetrics addReadToLibraryMetrics(final SAMRecord rec, final SAMFileHeader header, final LibraryIdGenerator libraryIdGenerator) { + public static DuplicationMetrics addReadToLibraryMetrics(final SAMRecord rec, final SAMFileHeader header, final LibraryIdGenerator libraryIdGenerator, final boolean flowMetrics) { final String library = LibraryIdGenerator.getLibraryName(header, rec); DuplicationMetrics metrics = libraryIdGenerator.getMetricsByLibrary(library); if (metrics == null) { - metrics = new DuplicationMetrics(); + metrics = DuplicationMetricsFactory.createMetrics(flowMetrics); metrics.LIBRARY = library; libraryIdGenerator.addMetricsByLibrary(library, metrics); } - // First bring the simple metrics up to date - if (rec.getReadUnmappedFlag()) { - ++metrics.UNMAPPED_READS; - } else if (rec.isSecondaryOrSupplementary()) { - ++metrics.SECONDARY_OR_SUPPLEMENTARY_RDS; - } else if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { - ++metrics.UNPAIRED_READS_EXAMINED; - } else { - ++metrics.READ_PAIRS_EXAMINED; // will need to be divided by 2 at the end - } + metrics.addReadToLibraryMetrics(rec); return metrics; } - public static void addDuplicateReadToMetrics(final SAMRecord rec, final DuplicationMetrics metrics) { - // only update duplicate counts for "decider" reads, not tag-a-long reads - if (!rec.isSecondaryOrSupplementary() && !rec.getReadUnmappedFlag()) { - // Update the duplication metrics - if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { - ++metrics.UNPAIRED_READ_DUPLICATES; - } else { - ++metrics.READ_PAIR_DUPLICATES;// will need to be divided by 2 at the end - } + /** + * This method is used to generate the following two metrics: + * UNPAIRED_DUPS_WITH_TLEN + * UNPAIRED_DUPS_WITHOUT_TLEN + * + * It will return true if and only if the read is single ended and the exact fragment length is + * known (i.e. it was not quality trimmed) + */ + public static boolean isSingleEndReadKnownFragment(final SAMRecord rec) { + if ( rec.getReadUnmappedFlag() || rec.getReadPairedFlag() ) { + return false; + } else if ( MarkDuplicatesForFlowHelper.isAdapterClipped(rec) ) { + return true; + } else if ( !rec.getReadNegativeStrandFlag() ) { + return rec.getEnd() != rec.getUnclippedEnd(); + } else { + return rec.getStart() != rec.getUnclippedStart(); } } diff --git a/src/main/java/picard/sam/markduplicates/util/LibraryIdGenerator.java b/src/main/java/picard/sam/markduplicates/util/LibraryIdGenerator.java index ca7fb4a9e8..3259edadf5 100644 --- a/src/main/java/picard/sam/markduplicates/util/LibraryIdGenerator.java +++ b/src/main/java/picard/sam/markduplicates/util/LibraryIdGenerator.java @@ -30,6 +30,7 @@ import htsjdk.samtools.SAMRecord; import htsjdk.samtools.util.Histogram; import picard.sam.DuplicationMetrics; +import picard.sam.DuplicationMetricsFactory; import java.util.HashMap; import java.util.Map; @@ -55,13 +56,17 @@ public class LibraryIdGenerator { private final Histogram opticalDuplicateCountHist = new Histogram<>("set_size", "optical_sets"); public LibraryIdGenerator(final SAMFileHeader header) { + this(header, false); + } + + public LibraryIdGenerator(final SAMFileHeader header, final boolean flowMetrics) { this.header = header; for (final SAMReadGroupRecord readGroup : header.getReadGroups()) { final String library = LibraryIdGenerator.getReadGroupLibraryName(readGroup); DuplicationMetrics metrics = metricsByLibrary.get(library); if (metrics == null) { - metrics = new DuplicationMetrics(); + metrics = DuplicationMetricsFactory.createMetrics(flowMetrics); metrics.LIBRARY = library; metricsByLibrary.put(library, metrics); } diff --git a/src/main/java/picard/sam/markduplicates/util/ReadEnds.java b/src/main/java/picard/sam/markduplicates/util/ReadEnds.java index f267a08040..0a2ff032a7 100644 --- a/src/main/java/picard/sam/markduplicates/util/ReadEnds.java +++ b/src/main/java/picard/sam/markduplicates/util/ReadEnds.java @@ -35,7 +35,7 @@ abstract public class ReadEnds extends PhysicalLocationShort { public int read1ReferenceIndex = -1; public int read1Coordinate = -1; public int read2ReferenceIndex = -1; - public int read2Coordinate = -1; + public int read2Coordinate = -1; // this field is overloaded for flow based processing as the end coordinate (paired reads not supported) // Additional information used to detect optical dupes public short readGroup = -1; diff --git a/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java b/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java index b677d377f2..6760f6f9dc 100644 --- a/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java +++ b/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java @@ -73,6 +73,11 @@ public ReadEndsForMarkDuplicates(final ReadEndsForMarkDuplicates read) { this.read2IndexInFile = read.read2IndexInFile; } + @Override + public String toString() { + return String.format("%d %d %d", read1IndexInFile, read1Coordinate, score); + } + @Override public ReadEndsForMarkDuplicates clone() { return new ReadEndsForMarkDuplicates(this); diff --git a/src/test/java/picard/sam/DuplicationMetricsTest.java b/src/test/java/picard/sam/DuplicationMetricsTest.java index e2aabd2ef6..da3c3b1d21 100644 --- a/src/test/java/picard/sam/DuplicationMetricsTest.java +++ b/src/test/java/picard/sam/DuplicationMetricsTest.java @@ -34,29 +34,29 @@ public class DuplicationMetricsTest { private DuplicationMetrics emptyMetrics() { - final DuplicationMetrics metric = new DuplicationMetrics(); - metric.LIBRARY = "LIBRARY"; - metric.UNPAIRED_READS_EXAMINED = 0; - metric.READ_PAIRS_EXAMINED = 0; + final DuplicationMetrics metric = DuplicationMetricsFactory.createMetrics(); + metric.LIBRARY = "LIBRARY"; + metric.UNPAIRED_READS_EXAMINED = 0; + metric.READ_PAIRS_EXAMINED = 0; metric.SECONDARY_OR_SUPPLEMENTARY_RDS = 0; - metric.UNMAPPED_READS = 0; - metric.UNPAIRED_READ_DUPLICATES = 0; - metric.READ_PAIR_DUPLICATES = 0; - metric.READ_PAIR_OPTICAL_DUPLICATES = 0; + metric.UNMAPPED_READS = 0; + metric.UNPAIRED_READ_DUPLICATES = 0; + metric.READ_PAIR_DUPLICATES = 0; + metric.READ_PAIR_OPTICAL_DUPLICATES = 0; metric.calculateDerivedFields(); return metric; } private DuplicationMetrics nonEmptyMetrics(final int scale) { - final DuplicationMetrics metric = new DuplicationMetrics(); - metric.LIBRARY = "LIBRARY"; - metric.UNPAIRED_READS_EXAMINED = 1000 * scale; - metric.READ_PAIRS_EXAMINED = 1000 * scale; + final DuplicationMetrics metric = DuplicationMetricsFactory.createMetrics(); + metric.LIBRARY = "LIBRARY"; + metric.UNPAIRED_READS_EXAMINED = 1000 * scale; + metric.READ_PAIRS_EXAMINED = 1000 * scale; metric.SECONDARY_OR_SUPPLEMENTARY_RDS = scale; - metric.UNMAPPED_READS = 10 * scale; - metric.UNPAIRED_READ_DUPLICATES = 100 * scale; - metric.READ_PAIR_DUPLICATES = 110 * scale; - metric.READ_PAIR_OPTICAL_DUPLICATES = 10 * scale; + metric.UNMAPPED_READS = 10 * scale; + metric.UNPAIRED_READ_DUPLICATES = 100 * scale; + metric.READ_PAIR_DUPLICATES = 110 * scale; + metric.READ_PAIR_OPTICAL_DUPLICATES = 10 * scale; metric.calculateDerivedFields(); return metric; } @@ -71,24 +71,24 @@ public void testMerge(final DuplicationMetrics left, final DuplicationMetrics ri left.merge(right); left.calculateDerivedFields(); - Assert.assertEquals(left.LIBRARY, expected.LIBRARY); - Assert.assertEquals(left.UNPAIRED_READS_EXAMINED, expected.UNPAIRED_READS_EXAMINED); - Assert.assertEquals(left.READ_PAIRS_EXAMINED, expected.READ_PAIRS_EXAMINED); + Assert.assertEquals(left.LIBRARY, expected.LIBRARY); + Assert.assertEquals(left.UNPAIRED_READS_EXAMINED, expected.UNPAIRED_READS_EXAMINED); + Assert.assertEquals(left.READ_PAIRS_EXAMINED, expected.READ_PAIRS_EXAMINED); Assert.assertEquals(left.SECONDARY_OR_SUPPLEMENTARY_RDS, expected.SECONDARY_OR_SUPPLEMENTARY_RDS); - Assert.assertEquals(left.UNMAPPED_READS, expected.UNMAPPED_READS); - Assert.assertEquals(left.UNPAIRED_READ_DUPLICATES, expected.UNPAIRED_READ_DUPLICATES); - Assert.assertEquals(left.READ_PAIR_DUPLICATES, expected.READ_PAIR_DUPLICATES); - Assert.assertEquals(left.READ_PAIR_OPTICAL_DUPLICATES, expected.READ_PAIR_OPTICAL_DUPLICATES); - Assert.assertEquals(left.PERCENT_DUPLICATION, expected.PERCENT_DUPLICATION); - Assert.assertEquals(left.ESTIMATED_LIBRARY_SIZE, expected.ESTIMATED_LIBRARY_SIZE); + Assert.assertEquals(left.UNMAPPED_READS, expected.UNMAPPED_READS); + Assert.assertEquals(left.UNPAIRED_READ_DUPLICATES, expected.UNPAIRED_READ_DUPLICATES); + Assert.assertEquals(left.READ_PAIR_DUPLICATES, expected.READ_PAIR_DUPLICATES); + Assert.assertEquals(left.READ_PAIR_OPTICAL_DUPLICATES, expected.READ_PAIR_OPTICAL_DUPLICATES); + Assert.assertEquals(left.PERCENT_DUPLICATION, expected.PERCENT_DUPLICATION); + Assert.assertEquals(left.ESTIMATED_LIBRARY_SIZE, expected.ESTIMATED_LIBRARY_SIZE); } @DataProvider(name="testMergeDataProvider") public Object[][] testMergeDataProvider() { return new Object[][] { - {emptyMetrics(), emptyMetrics(), emptyMetrics()}, - {emptyMetrics(), nonEmptyMetrics(1), nonEmptyMetrics(1)}, - {nonEmptyMetrics(1), emptyMetrics(), nonEmptyMetrics(1)}, + {emptyMetrics(), emptyMetrics(), emptyMetrics()}, + {emptyMetrics(), nonEmptyMetrics(1), nonEmptyMetrics(1)}, + {nonEmptyMetrics(1), emptyMetrics(), nonEmptyMetrics(1)}, {nonEmptyMetrics(1), nonEmptyMetrics(1), nonEmptyMetrics(2)}, {nonEmptyMetrics(1), nonEmptyMetrics(2), nonEmptyMetrics(3)} }; diff --git a/src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java b/src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java index 17fa6e3c4f..3da0f9f602 100644 --- a/src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java +++ b/src/test/java/picard/sam/markduplicates/AbstractMarkDuplicatesCommandLineProgramTester.java @@ -33,6 +33,7 @@ import org.testng.Assert; import picard.cmdline.CommandLineProgram; import picard.sam.DuplicationMetrics; +import picard.sam.DuplicationMetricsFactory; import picard.sam.testers.SamFileTester; import java.io.File; @@ -60,7 +61,7 @@ public AbstractMarkDuplicatesCommandLineProgramTester(final ScoringStrategy dupl public AbstractMarkDuplicatesCommandLineProgramTester(final ScoringStrategy duplicateScoringStrategy, SAMFileHeader.SortOrder sortOrder, boolean recordNeedSorting) { super(50, true, SAMRecordSetBuilder.DEFAULT_CHROMOSOME_LENGTH, duplicateScoringStrategy, sortOrder, recordNeedSorting); - expectedMetrics = new DuplicationMetrics(); + expectedMetrics = DuplicationMetricsFactory.createMetrics(); expectedMetrics.READ_PAIR_OPTICAL_DUPLICATES = 0; metricsFile = new File(getOutputDir(), "metrics.txt"); diff --git a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTagRepresentativeReadIndexTester.java b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTagRepresentativeReadIndexTester.java index 5d38e9d168..232f5100cd 100644 --- a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTagRepresentativeReadIndexTester.java +++ b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTagRepresentativeReadIndexTester.java @@ -30,7 +30,6 @@ import htsjdk.samtools.metrics.MetricsFile; import htsjdk.samtools.util.CloserUtil; import htsjdk.samtools.util.IOUtil; -import htsjdk.samtools.util.TestUtil; import org.testng.Assert; import picard.PicardException; import picard.cmdline.CommandLineProgram; diff --git a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTest.java b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTest.java index f12654b587..bb33223fb6 100644 --- a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTest.java +++ b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTest.java @@ -24,17 +24,17 @@ package picard.sam.markduplicates; -import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SAMProgramRecord; import htsjdk.samtools.SAMRecord; +import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SAMTag; -import htsjdk.samtools.SamReader; -import htsjdk.samtools.SamReaderFactory; import htsjdk.samtools.util.CloserUtil; import htsjdk.samtools.util.CollectionUtil; import htsjdk.samtools.util.IOUtil; import htsjdk.samtools.util.IterableAdapter; -import htsjdk.samtools.util.TestUtil; +import htsjdk.samtools.SamReader; +import htsjdk.samtools.SamReaderFactory; +import htsjdk.samtools.DuplicateScoringStrategy; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; diff --git a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTester.java b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTester.java index 67cfc820cd..6fd3cbfc01 100644 --- a/src/test/java/picard/sam/markduplicates/MarkDuplicatesTester.java +++ b/src/test/java/picard/sam/markduplicates/MarkDuplicatesTester.java @@ -33,8 +33,11 @@ */ public class MarkDuplicatesTester extends AbstractMarkDuplicatesCommandLineProgramTester { + public MarkDuplicatesTester(DuplicateScoringStrategy.ScoringStrategy strategy) { + super(strategy); + } public MarkDuplicatesTester() { - super(DuplicateScoringStrategy.ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH); + this(DuplicateScoringStrategy.ScoringStrategy.TOTAL_MAPPED_REFERENCE_LENGTH); } @Override From 8c54aabe235d66036ff149aa5f60214e3c0b4891 Mon Sep 17 00:00:00 2001 From: Ilya Soifer Date: Mon, 4 Apr 2022 15:43:27 +0300 Subject: [PATCH 2/4] Squashed ultima.flow.mods.alignment.only --- .../analysis/AlignmentSummaryMetrics.java | 14 +- .../AlignmentSummaryMetricsCollector.java | 1 + .../analysis/CollectQualityYieldMetrics.java | 116 ++++++++++- .../picard/analysis/MeanQualityByCycle.java | 72 ------- src/main/java/picard/sam/RevertSam.java | 8 +- .../util/AccumulateQualityYieldMetrics.java | 3 +- .../CollectQualityYieldMetricsTest.java | 192 ++++++++++++++++++ 7 files changed, 322 insertions(+), 84 deletions(-) diff --git a/src/main/java/picard/analysis/AlignmentSummaryMetrics.java b/src/main/java/picard/analysis/AlignmentSummaryMetrics.java index 3a0caaa586..efb9379ae1 100644 --- a/src/main/java/picard/analysis/AlignmentSummaryMetrics.java +++ b/src/main/java/picard/analysis/AlignmentSummaryMetrics.java @@ -139,7 +139,12 @@ public enum Category {UNPAIRED, FIRST_OF_PAIR, SECOND_OF_PAIR, PAIR} /** The standard deviation of the read lengths. Computed using all read lengths including clipped bases. */ public double SD_READ_LENGTH; - /** The median read length. Computed using all read lengths including clipped bases. */ + /** + * The median read length of the set of reads examined. When looking at the data for a single lane with + * equal length reads this number is just the read length. When looking at data for merged lanes with + * differing read lengths this is the median read length of all reads. Computed using all bases in reads, + * including clipped bases. + */ public double MEDIAN_READ_LENGTH; /** @@ -155,6 +160,13 @@ public enum Category {UNPAIRED, FIRST_OF_PAIR, SECOND_OF_PAIR, PAIR} /** The maximum read length. Computed using all read lengths including clipped bases. */ public double MAX_READ_LENGTH; + /** + * The mean aligned read length of the set of reads examined. When looking at the data for a single lane with + * equal length reads this number is just the read length. When looking at data for merged lanes with + * differing read lengths this is the mean read length of all reads. Clipped bases are not counted. + */ + public double MEAN_ALIGNED_READ_LENGTH; + /** * The number of aligned reads whose mate pair was also aligned to the reference. */ diff --git a/src/main/java/picard/analysis/AlignmentSummaryMetricsCollector.java b/src/main/java/picard/analysis/AlignmentSummaryMetricsCollector.java index c16eb42c65..530b66c50e 100644 --- a/src/main/java/picard/analysis/AlignmentSummaryMetricsCollector.java +++ b/src/main/java/picard/analysis/AlignmentSummaryMetricsCollector.java @@ -285,6 +285,7 @@ public void finish() { metrics.PCT_PF_READS_ALIGNED = MathUtil.divide(metrics.PF_READS_ALIGNED, (double) metrics.PF_READS); metrics.PCT_READS_ALIGNED_IN_PAIRS = MathUtil.divide(metrics.READS_ALIGNED_IN_PAIRS, (double) metrics.PF_READS_ALIGNED); metrics.PCT_PF_READS_IMPROPER_PAIRS = MathUtil.divide(metrics.PF_READS_IMPROPER_PAIRS, (double) metrics.PF_READS_ALIGNED); + metrics.MEAN_ALIGNED_READ_LENGTH = alignedReadLengthHistogram.getMean(); metrics.STRAND_BALANCE = MathUtil.divide(numPositiveStrand, (double) metrics.PF_READS_ALIGNED); metrics.PCT_CHIMERAS = MathUtil.divide(chimeras, (double) chimerasDenominator); metrics.PF_INDEL_RATE = MathUtil.divide(indels, (double) metrics.PF_ALIGNED_BASES); diff --git a/src/main/java/picard/analysis/CollectQualityYieldMetrics.java b/src/main/java/picard/analysis/CollectQualityYieldMetrics.java index 0c11870c11..20d2662dde 100644 --- a/src/main/java/picard/analysis/CollectQualityYieldMetrics.java +++ b/src/main/java/picard/analysis/CollectQualityYieldMetrics.java @@ -26,13 +26,14 @@ import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SAMRecord; -import htsjdk.samtools.metrics.MetricBase; import htsjdk.samtools.metrics.MetricsFile; import htsjdk.samtools.reference.ReferenceSequence; import htsjdk.samtools.util.IOUtil; +import org.apache.commons.lang.ArrayUtils; import org.broadinstitute.barclay.argparser.Argument; import org.broadinstitute.barclay.argparser.CommandLineProgramProperties; import org.broadinstitute.barclay.help.DocumentedFeature; +import picard.PicardException; import picard.cmdline.StandardOptionDefinitions; import picard.cmdline.programgroups.DiagnosticsAndQCProgramGroup; import picard.util.help.HelpConstants; @@ -92,6 +93,9 @@ public class CollectQualityYieldMetrics extends SinglePassSamProgram { "of bases if there are supplemental alignments in the input file.") public boolean INCLUDE_SUPPLEMENTAL_ALIGNMENTS = false; + @Argument(doc = "If true, calculates flow-specific READ_LENGTH_AVG_Q metrics.") + public boolean FLOW_MODE = false; + /** * Ensure that we get all reads regardless of alignment status. */ @@ -103,7 +107,11 @@ protected boolean usesNoRefReads() { @Override protected void setup(final SAMFileHeader header, final File samFile) { IOUtil.assertFileIsWritable(OUTPUT); - this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS); + if (FLOW_MODE) { + this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS, true); + } else { + this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS); + } } @Override @@ -130,17 +138,32 @@ public static class QualityYieldMetricsCollector { // If true, include bases from supplemental alignments in metrics. Setting to true may cause double-counting // of bases if there are supplemental alignments in the input file. - public final boolean includeSupplementalAlignments; + private final boolean includeSupplementalAlignments; + // If true collects RLQ25/RLQ30 + private final boolean flowMode; // The metrics to be accumulated - private final QualityYieldMetrics metrics = new QualityYieldMetrics(); + private final QualityYieldMetrics metrics; public QualityYieldMetricsCollector(final boolean useOriginalQualities, final boolean includeSecondaryAlignments, - final boolean includeSupplementalAlignments) { + final boolean includeSupplementalAlignments){ + this(useOriginalQualities, includeSecondaryAlignments, includeSupplementalAlignments, false); + } + + public QualityYieldMetricsCollector(final boolean useOriginalQualities, + final boolean includeSecondaryAlignments, + final boolean includeSupplementalAlignments, + final boolean flowMode) { this.useOriginalQualities = useOriginalQualities; this.includeSecondaryAlignments = includeSecondaryAlignments; this.includeSupplementalAlignments = includeSupplementalAlignments; + this.flowMode = flowMode; + if (flowMode){ + this.metrics = new QualityYieldMetricsFlow(useOriginalQualities); + } else { + this.metrics = new QualityYieldMetrics(useOriginalQualities); + } } public void acceptRecord(final SAMRecord rec, final ReferenceSequence ref) { @@ -187,12 +210,15 @@ public void acceptRecord(final SAMRecord rec, final ReferenceSequence ref) { } } } + + if (flowMode) { + ((QualityYieldMetricsFlow)metrics).addRecordToHistogramGenerator(rec); + } } public void finish() { metrics.Q20_EQUIVALENT_YIELD = metrics.Q20_EQUIVALENT_YIELD / 20; metrics.PF_Q20_EQUIVALENT_YIELD = metrics.PF_Q20_EQUIVALENT_YIELD / 20; - metrics.calculateDerivedFields(); } @@ -201,12 +227,70 @@ public void addMetricsToFile(final MetricsFile met } } + public static class QualityYieldMetricsFlow extends QualityYieldMetrics{ + /** The length of the longest interval on the reads where the average quality per-base is above (Q30) */ + @NoMergingIsDerived + public long READ_LENGTH_AVG_Q_ABOVE_30 = 0; + + /** The length of the longest interval on the reads where the average quality per-base is above (Q25) */ + @NoMergingIsDerived + public long READ_LENGTH_AVG_Q_ABOVE_25 = 0; + + @MergingIsManual + protected final HistogramGenerator histogramGenerator; + + public QualityYieldMetricsFlow(){ + this(false); + } + + public QualityYieldMetricsFlow(final boolean useOriginalBaseQualities){ + + super(useOriginalBaseQualities); + histogramGenerator=new HistogramGenerator(useOriginalQualities); + } + + public QualityYieldMetricsFlow(final boolean useOriginalBaseQualities, final HistogramGenerator hg) { + histogramGenerator=hg; + } + + @Override + public void calculateDerivedFields() { + super.calculateDerivedFields(); + this.READ_LENGTH_AVG_Q_ABOVE_25 = histogramGenerator.calculateLQ(25, 1,5); + this.READ_LENGTH_AVG_Q_ABOVE_30 = histogramGenerator.calculateLQ(30, 1,5); + } + + @Override + public MergeableMetricBase merge(final MergeableMetricBase other) { + if (!(other instanceof QualityYieldMetricsFlow)){ + throw new PicardException("Only objects of the same type can be merged"); + } + this.histogramGenerator.addOtherHistogramGenerator(((QualityYieldMetricsFlow)other).histogramGenerator); + super.merge(other); + return this; + } + + protected void addRecordToHistogramGenerator(final SAMRecord rec) { + histogramGenerator.addRecord(rec); + } + + } /** * A set of metrics used to describe the general quality of a BAM file */ @DocumentedFeature(groupName = HelpConstants.DOC_CAT_METRICS, summary = HelpConstants.DOC_CAT_METRICS_SUMMARY) public static class QualityYieldMetrics extends MergeableMetricBase { + public QualityYieldMetrics() { + this(false); + } + + + public QualityYieldMetrics(final boolean useOriginalQualities) { + super(); + this.useOriginalQualities = useOriginalQualities; + } + /** * The total number of reads in the input file */ @@ -220,7 +304,7 @@ public static class QualityYieldMetrics extends MergeableMetricBase { public long PF_READS = 0; /** - * The average read length of all the reads (will be fixed for a lane) + * The average read length of all the reads */ @NoMergingIsDerived public int READ_LENGTH = 0; @@ -273,12 +357,26 @@ public static class QualityYieldMetrics extends MergeableMetricBase { @MergeByAdding public long PF_Q20_EQUIVALENT_YIELD = 0; + @MergeByAssertEquals + protected final boolean useOriginalQualities; + @Override public void calculateDerivedFields() { super.calculateDerivedFields(); - this.READ_LENGTH = this.TOTAL_READS == 0 ? 0 : (int) (this.TOTAL_BASES / this.TOTAL_READS); } - } + @Override + public MergeableMetricBase merge(final MergeableMetricBase other) { + if (!(other instanceof QualityYieldMetrics)){ + throw new PicardException("Only objects of the same type can be merged"); + } + + final QualityYieldMetrics otherMetric = (QualityYieldMetrics) other; + + super.merge(otherMetric); + calculateDerivedFields(); + return this; + } + } } diff --git a/src/main/java/picard/analysis/MeanQualityByCycle.java b/src/main/java/picard/analysis/MeanQualityByCycle.java index 535045f8ec..81891b1390 100644 --- a/src/main/java/picard/analysis/MeanQualityByCycle.java +++ b/src/main/java/picard/analysis/MeanQualityByCycle.java @@ -29,7 +29,6 @@ import htsjdk.samtools.SAMRecord; import htsjdk.samtools.metrics.MetricsFile; import htsjdk.samtools.reference.ReferenceSequence; -import htsjdk.samtools.util.Histogram; import htsjdk.samtools.util.IOUtil; import htsjdk.samtools.util.Log; import htsjdk.samtools.util.StringUtil; @@ -95,77 +94,6 @@ public class MeanQualityByCycle extends SinglePassSamProgram { private final Log log = Log.getInstance(MeanQualityByCycle.class); - private static final class HistogramGenerator { - final boolean useOriginalQualities; - int maxLengthSoFar = 0; - double[] firstReadTotalsByCycle = new double[maxLengthSoFar]; - long[] firstReadCountsByCycle = new long[maxLengthSoFar]; - double[] secondReadTotalsByCycle = new double[maxLengthSoFar]; - long[] secondReadCountsByCycle = new long[maxLengthSoFar]; - - private HistogramGenerator(final boolean useOriginalQualities) { - this.useOriginalQualities = useOriginalQualities; - } - - void addRecord(final SAMRecord rec) { - final byte[] quals = (useOriginalQualities ? rec.getOriginalBaseQualities() : rec.getBaseQualities()); - if (quals == null) return; - - final int length = quals.length; - final boolean rc = rec.getReadNegativeStrandFlag(); - ensureArraysBigEnough(length+1); - - for (int i=0; i maxLengthSoFar) { - firstReadTotalsByCycle = Arrays.copyOf(firstReadTotalsByCycle, length); - firstReadCountsByCycle = Arrays.copyOf(firstReadCountsByCycle, length); - secondReadTotalsByCycle = Arrays.copyOf(secondReadTotalsByCycle , length); - secondReadCountsByCycle = Arrays.copyOf(secondReadCountsByCycle, length); - maxLengthSoFar = length; - } - } - - Histogram getMeanQualityHistogram() { - final String label = useOriginalQualities ? "MEAN_ORIGINAL_QUALITY" : "MEAN_QUALITY"; - final Histogram meanQualities = new Histogram("CYCLE", label); - - int firstReadLength = 0; - - for (int cycle=0; cycle < firstReadTotalsByCycle.length; ++cycle) { - if (firstReadTotalsByCycle[cycle] > 0) { - meanQualities.increment(cycle, firstReadTotalsByCycle[cycle] / firstReadCountsByCycle[cycle]); - firstReadLength = cycle; - } - } - - for (int i=0; i< secondReadTotalsByCycle.length; ++i) { - if (secondReadCountsByCycle[i] > 0) { - final int cycle = firstReadLength + i; - meanQualities.increment(cycle, secondReadTotalsByCycle[i] / secondReadCountsByCycle[i]); - } - } - - return meanQualities; - } - - boolean isEmpty() { - return maxLengthSoFar == 0; - } - } @Override protected String[] customCommandLineValidation() { diff --git a/src/main/java/picard/sam/RevertSam.java b/src/main/java/picard/sam/RevertSam.java index 1f0c27389b..997035b94e 100644 --- a/src/main/java/picard/sam/RevertSam.java +++ b/src/main/java/picard/sam/RevertSam.java @@ -205,6 +205,12 @@ public String getHelpDoc() { add(SAMTag.AS.name()); }}; + @Argument(shortName="RV", doc="Attributes on negative strand reads that need to be reversed.", optional = true) + public Set ATTRIBUTE_TO_REVERSE = new LinkedHashSet<>(SAMRecord.TAGS_TO_REVERSE); + + @Argument(shortName="RC", doc="Attributes on negative strand reads that need to be reverse complemented.", optional = true) + public Set ATTRIBUTE_TO_REVERSE_COMPLEMENT = new LinkedHashSet<>(SAMRecord.TAGS_TO_REVERSE_COMPLEMENT); + @Argument(doc = "WARNING: This option is potentially destructive. If enabled will discard reads in order to produce " + "a consistent output BAM. Reads discarded include (but are not limited to) paired reads with missing " + "mates, duplicated records, records with mismatches in length of bases and qualities. This option can " + @@ -390,7 +396,7 @@ public void revertSamRecord(final SAMRecord rec) { if (REMOVE_ALIGNMENT_INFORMATION) { if (rec.getReadNegativeStrandFlag()) { - rec.reverseComplement(true); + rec.reverseComplement(ATTRIBUTE_TO_REVERSE_COMPLEMENT, ATTRIBUTE_TO_REVERSE, true); rec.setReadNegativeStrandFlag(false); } diff --git a/src/main/java/picard/util/AccumulateQualityYieldMetrics.java b/src/main/java/picard/util/AccumulateQualityYieldMetrics.java index b3715900c1..50091fb57b 100644 --- a/src/main/java/picard/util/AccumulateQualityYieldMetrics.java +++ b/src/main/java/picard/util/AccumulateQualityYieldMetrics.java @@ -62,7 +62,8 @@ protected int doWork() { IOUtil.assertFileIsWritable(OUTPUT); // set up the output metric - CollectQualityYieldMetrics.QualityYieldMetrics finalMetric = new CollectQualityYieldMetrics.QualityYieldMetrics(); + // note that useOriginalQualities does not matter here + CollectQualityYieldMetrics.QualityYieldMetrics finalMetric = new CollectQualityYieldMetrics.QualityYieldMetrics(false); INPUT.forEach(file -> finalMetric.merge(MetricsFile.readBeans(file).get(0))); diff --git a/src/test/java/picard/analysis/CollectQualityYieldMetricsTest.java b/src/test/java/picard/analysis/CollectQualityYieldMetricsTest.java index 5e963b4475..fcb14fec2b 100644 --- a/src/test/java/picard/analysis/CollectQualityYieldMetricsTest.java +++ b/src/test/java/picard/analysis/CollectQualityYieldMetricsTest.java @@ -26,12 +26,15 @@ import htsjdk.samtools.metrics.MetricsFile; import org.testng.Assert; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import picard.cmdline.CommandLineProgramTest; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.util.Arrays; +import java.util.function.Consumer; /** * Created by kbergin on 11/23/15. @@ -74,4 +77,193 @@ public void test() throws IOException { Assert.assertEquals(metrics.PF_Q20_EQUIVALENT_YIELD, 6497); } + + + @Test + public void testFlowMode() throws IOException { + final File input = new File(TEST_DATA_DIR, "subsample.bam"); + final File outfile = File.createTempFile("test", ".quality_yield_metrics"); + outfile.deleteOnExit(); + final String[] args = new String[] { + "INPUT=" + input.getAbsolutePath(), + "OUTPUT=" + outfile.getAbsolutePath(), + "USE_ORIGINAL_QUALITIES=false", + "FLOW_MODE=true" + }; + + Assert.assertEquals(runPicardCommandLine(args), 0); + + final MetricsFile output = new MetricsFile<>(); + output.read(new FileReader(outfile)); + + Assert.assertEquals(output.getMetrics().size(),1); + + final CollectQualityYieldMetrics.QualityYieldMetricsFlow metrics = output.getMetrics().get(0); + Assert.assertEquals(metrics.TOTAL_READS, 56); + Assert.assertEquals(metrics.PF_READS, 56); + Assert.assertEquals(metrics.READ_LENGTH, 285); + Assert.assertEquals(metrics.TOTAL_BASES, 15983); + Assert.assertEquals(metrics.PF_BASES, 15983); + Assert.assertEquals(metrics.Q20_BASES, 15494); + Assert.assertEquals(metrics.PF_Q20_BASES, 15494); + Assert.assertEquals(metrics.Q30_BASES, 14786); + Assert.assertEquals(metrics.PF_Q30_BASES, 14786); + Assert.assertEquals(metrics.Q20_EQUIVALENT_YIELD, 30589); + Assert.assertEquals(metrics.PF_Q20_EQUIVALENT_YIELD, 30589); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_30, 102); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_25, 196); + } + + @Test + public void testFlowModeReverseReadsSameResults() throws IOException { + final File input = new File(TEST_DATA_DIR, "subsample.bam"); + final File outfile = File.createTempFile("test", ".quality_yield_metrics"); + outfile.deleteOnExit(); + final String[] args = new String[] { + "INPUT=" + input.getAbsolutePath(), + "OUTPUT=" + outfile.getAbsolutePath(), + "USE_ORIGINAL_QUALITIES=false", + "FLOW_MODE=true" + }; + + Assert.assertEquals(runPicardCommandLine(args), 0); + + final File inputReverse = new File(TEST_DATA_DIR, "subsample.reverse.bam"); + final File outfileReverse = File.createTempFile("test", "reverse.quality_yield_metrics"); + outfileReverse.deleteOnExit(); + final String[] argsReverse = new String[] { + "INPUT=" + inputReverse.getAbsolutePath(), + "OUTPUT=" + outfileReverse.getAbsolutePath(), + "USE_ORIGINAL_QUALITIES=false", + "FLOW_MODE=true" + }; + Assert.assertEquals(runPicardCommandLine(argsReverse), 0); + + final MetricsFile output = new MetricsFile<>(); + output.read(new FileReader(outfile)); + + final MetricsFile outputReverse = new MetricsFile<>(); + outputReverse.read(new FileReader(outfileReverse)); + + Assert.assertEquals(output.getMetrics().size(),1); + Assert.assertEquals(outputReverse.getMetrics().size(),1); + + final CollectQualityYieldMetrics.QualityYieldMetricsFlow metrics = output.getMetrics().get(0); + final CollectQualityYieldMetrics.QualityYieldMetricsFlow metricsReverse = outputReverse.getMetrics().get(0); + Assert.assertEquals(metrics.TOTAL_READS, metricsReverse.TOTAL_READS); + Assert.assertEquals(metrics.PF_READS, metricsReverse.PF_READS); + Assert.assertEquals(metrics.READ_LENGTH, metricsReverse.READ_LENGTH); + Assert.assertEquals(metrics.TOTAL_BASES, metricsReverse.TOTAL_BASES); + Assert.assertEquals(metrics.PF_BASES, metricsReverse.PF_BASES); + Assert.assertEquals(metrics.Q20_BASES, metricsReverse.Q20_BASES); + Assert.assertEquals(metrics.PF_Q20_BASES, metricsReverse.PF_Q20_BASES); + Assert.assertEquals(metrics.Q30_BASES, metricsReverse.Q30_BASES); + Assert.assertEquals(metrics.PF_Q30_BASES, metricsReverse.PF_Q30_BASES); + Assert.assertEquals(metrics.Q20_EQUIVALENT_YIELD, metricsReverse.Q20_EQUIVALENT_YIELD); + Assert.assertEquals(metrics.PF_Q20_EQUIVALENT_YIELD, metricsReverse.PF_Q20_EQUIVALENT_YIELD); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_30, + metricsReverse.READ_LENGTH_AVG_Q_ABOVE_30); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_25, + metricsReverse.READ_LENGTH_AVG_Q_ABOVE_25); + } + + @Test + public void testMultiFlow() throws IOException { + final File input = new File(TEST_DATA_DIR, "subsample.bam"); + final File outfile = File.createTempFile("test", ".quality_yield_metrics"); + outfile.deleteOnExit(); + final String[] args = new String[] { + "INPUT=" + input.getAbsolutePath(), + "OUTPUT=" + outfile.getAbsolutePath(), + "METRIC_ACCUMULATION_LEVEL=" + MetricAccumulationLevel.ALL_READS.name(), + "PROGRAM=null", + "PROGRAM=" + CollectMultipleMetrics.Program.CollectQualityYieldMetrics.name(), + "EXTRA_ARGUMENT=CollectQualityYieldMetrics::FLOW_MODE=true", + "EXTRA_ARGUMENT=CollectQualityYieldMetrics::USE_ORIGINAL_QUALITIES=false" + }; + + Assert.assertEquals(runPicardCommandLine(CollectMultipleMetrics.class.getSimpleName(), args), 0); + + final MetricsFile output = new MetricsFile<>(); + output.read(new FileReader(outfile + ".quality_yield_metrics")); + + Assert.assertEquals(output.getMetrics().size(),1); + + final CollectQualityYieldMetrics.QualityYieldMetricsFlow metrics = output.getMetrics().get(0); + Assert.assertEquals(metrics.TOTAL_READS, 56); + Assert.assertEquals(metrics.PF_READS, 56); + Assert.assertEquals(metrics.READ_LENGTH, 285); + Assert.assertEquals(metrics.TOTAL_BASES, 15983); + Assert.assertEquals(metrics.PF_BASES, 15983); + Assert.assertEquals(metrics.Q20_BASES, 15494); + Assert.assertEquals(metrics.PF_Q20_BASES, 15494); + Assert.assertEquals(metrics.Q30_BASES, 14786); + Assert.assertEquals(metrics.PF_Q30_BASES, 14786); + Assert.assertEquals(metrics.Q20_EQUIVALENT_YIELD, 30589); + Assert.assertEquals(metrics.PF_Q20_EQUIVALENT_YIELD, 30589); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_30, 102); + Assert.assertEquals(metrics.READ_LENGTH_AVG_Q_ABOVE_25, 196); + + } + + @Test + public void testMergeFlow() { + CollectQualityYieldMetrics.QualityYieldMetricsFlow m1 = createTestQualityYieldMetricsFlow(); + CollectQualityYieldMetrics.QualityYieldMetricsFlow m2 = createTestQualityYieldMetricsFlow(); + + m1.merge(m2); + Assert.assertEquals(m1.TOTAL_READS, m2.TOTAL_READS * 2); + Assert.assertEquals(m1.PF_READS, m2.PF_READS * 2); + Assert.assertEquals(m1.READ_LENGTH, m2.READ_LENGTH); + Assert.assertEquals(m1.PF_BASES, m2.PF_BASES * 2); + Assert.assertEquals(m1.Q20_BASES, m2.Q20_BASES * 2); + Assert.assertEquals(m1.PF_Q20_BASES, m2.PF_Q20_BASES * 2); + Assert.assertEquals(m1.Q30_BASES, m2.Q30_BASES * 2); + Assert.assertEquals(m1.PF_Q30_BASES, m2.PF_Q30_BASES * 2); + Assert.assertEquals(m1.Q20_EQUIVALENT_YIELD, m2.Q20_EQUIVALENT_YIELD * 2); + Assert.assertEquals(m1.READ_LENGTH_AVG_Q_ABOVE_25, m2.READ_LENGTH_AVG_Q_ABOVE_25); + Assert.assertEquals(m1.READ_LENGTH_AVG_Q_ABOVE_25, 100 - m1.histogramGenerator.skipBases); + + Assert.assertEquals(m1.READ_LENGTH_AVG_Q_ABOVE_30, m2.READ_LENGTH_AVG_Q_ABOVE_30); + Assert.assertEquals(m1.READ_LENGTH_AVG_Q_ABOVE_30, 100 - m1.histogramGenerator.skipBases); + + } + + private CollectQualityYieldMetrics.QualityYieldMetricsFlow createTestQualityYieldMetricsFlow() { + + HistogramGenerator hg = createTestHistograms(); + CollectQualityYieldMetrics.QualityYieldMetricsFlow m = new CollectQualityYieldMetrics.QualityYieldMetricsFlow(false, hg); + + m.TOTAL_READS = 52; + m.PF_READS = 52; + m.READ_LENGTH = 101; + m.TOTAL_BASES = 5252; + m.PF_BASES = 5252; + m.Q20_BASES = 3532; + m.PF_Q20_BASES = 3532; + m.Q30_BASES = 3145; + m.PF_Q30_BASES = 3145; + m.Q20_EQUIVALENT_YIELD = 6497; + m.PF_Q20_EQUIVALENT_YIELD = 6497; + m.calculateDerivedFields(); + return m; + } + + private HistogramGenerator createTestHistograms(){ + long [] firstReadCounts = new long[100]; + Arrays.fill(firstReadCounts,100); + long [] secondReadCounts = firstReadCounts.clone(); + double[] firstReadTotals = new double[100]; + Arrays.fill(firstReadTotals, 100*50); + double[] secondReadsTotals = firstReadTotals.clone(); + + double[] firstReadTotalProbs = new double[100]; + Arrays.fill(firstReadTotalProbs, 100*0.0001); + double[] secondReadsTotalProbs = firstReadTotalProbs.clone(); + + return new HistogramGenerator(firstReadTotals, firstReadTotalProbs, firstReadCounts, + secondReadsTotals, secondReadsTotalProbs, secondReadCounts, 50); + } + + } From 08f7a6358562296bbd8d53ceaaffd77446cb5d92 Mon Sep 17 00:00:00 2001 From: Ilya Soifer Date: Mon, 4 Apr 2022 16:03:42 +0300 Subject: [PATCH 3/4] Added rebase fixes --- .../picard/analysis/HistogramGenerator.java | 231 ++++++++++ .../picard/sam/DuplicationMetricsFactory.java | 19 + .../sam/FlowBasedDuplicationMetrics.java | 74 +++ ...rkDuplicatesForFlowArgumentCollection.java | 41 ++ .../MarkDuplicatesForFlowHelper.java | 422 ++++++++++++++++++ .../markduplicates/MarkDuplicatesHelper.java | 12 + .../MarkDuplicatesForFlowHelperTest.java | 342 ++++++++++++++ .../CollectGcBias11612750771983880335.bam | Bin 0 -> 23009 bytes .../CollectGcBias6837461464900918747.bam | Bin 0 -> 16214 bytes .../collect_quality_yield_test1.sam | 6 + testdata/picard/sam/subsample.bam | Bin 0 -> 130432 bytes testdata/picard/sam/subsample.reverse.bam | Bin 0 -> 130443 bytes 12 files changed, 1147 insertions(+) create mode 100644 src/main/java/picard/analysis/HistogramGenerator.java create mode 100644 src/main/java/picard/sam/DuplicationMetricsFactory.java create mode 100644 src/main/java/picard/sam/FlowBasedDuplicationMetrics.java create mode 100644 src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowArgumentCollection.java create mode 100644 src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java create mode 100644 src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java create mode 100644 src/test/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelperTest.java create mode 100644 testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias11612750771983880335.bam create mode 100644 testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias6837461464900918747.bam create mode 100644 testdata/picard/sam/CollectQualityYieldMetrics/collect_quality_yield_test1.sam create mode 100644 testdata/picard/sam/subsample.bam create mode 100644 testdata/picard/sam/subsample.reverse.bam diff --git a/src/main/java/picard/analysis/HistogramGenerator.java b/src/main/java/picard/analysis/HistogramGenerator.java new file mode 100644 index 0000000000..4d5479db19 --- /dev/null +++ b/src/main/java/picard/analysis/HistogramGenerator.java @@ -0,0 +1,231 @@ +/* + * The MIT License + * + * Copyright (c) 2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package picard.analysis; + +import htsjdk.samtools.SAMRecord; +import htsjdk.samtools.util.Histogram; +import htsjdk.samtools.util.QualityUtil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +final class HistogramGenerator { + final boolean useOriginalQualities; + int maxLengthSoFar = 0; + double[] firstReadTotalsByCycle = new double[maxLengthSoFar]; + double[] firstReadTotalProbsByCycle = new double[maxLengthSoFar]; + long[] firstReadCountsByCycle = new long[maxLengthSoFar]; + double[] secondReadTotalsByCycle = new double[maxLengthSoFar]; + double[] secondReadTotalProbsByCycle = new double[maxLengthSoFar]; + long[] secondReadCountsByCycle = new long[maxLengthSoFar]; + int recordsCount = 0; + final public int skipBases = 10; //qualities of the first bases are ignored (inference issues) + final public int minimalCount = 25; + + public HistogramGenerator(final boolean useOriginalQualities) { + this.useOriginalQualities = useOriginalQualities; + } + + public HistogramGenerator(final double[] firstReadTotalsByCycle, final double[] firstReadTotalProbsByCycle, + final long[] firstReadCountsByCycle, final double[] secondReadTotalsByCycle, + final double[] secondReadTotalProbsByCycle, final long[] secondReadCountsByCycle, int nRecords){ + this.firstReadCountsByCycle = firstReadCountsByCycle.clone(); + this.firstReadTotalsByCycle = firstReadTotalsByCycle.clone(); + this.firstReadTotalProbsByCycle = firstReadTotalProbsByCycle.clone(); + this.secondReadCountsByCycle = secondReadCountsByCycle.clone(); + this.secondReadTotalsByCycle = secondReadTotalsByCycle.clone(); + this.secondReadTotalProbsByCycle = secondReadTotalProbsByCycle.clone(); + this.useOriginalQualities = false; + this.recordsCount = nRecords; + } + + public void addRecord(final SAMRecord rec) { + final byte[] quals = (useOriginalQualities ? rec.getOriginalBaseQualities() : rec.getBaseQualities()); + if (quals == null) return; + recordsCount++; + final int length = quals.length; + final boolean rc = rec.getReadNegativeStrandFlag(); + ensureArraysBigEnough(length+1); + + for (int i=0; i result = new ArrayList<>(); + List weights = new ArrayList<>(); + double[] accumulator; + long[] counts; + if (readInPair == 1){ + accumulator = firstReadTotalProbsByCycle; + counts = firstReadCountsByCycle; + } else { + accumulator = secondReadTotalProbsByCycle; + counts = secondReadCountsByCycle; + } + for (int i = skipBases; i < accumulator.length; i++ ){ + if (counts[i] < minimalCount){ + break; + } + result.add(accumulator[i]/counts[i]); + weights.add(counts[i]); + } + applySpanningWindowMean(result, weights, spanningWindowLength); + return longestHighQuality(result,errorProbThreshold); + } + + private void applySpanningWindowMean(List vector, List weights, final int spanLength){ + List tmp = new ArrayList<>(vector); + for (int i = 0; i < vector.size(); i++){ + double tmpEr = 0; + long tmpWeight = 0; + for (int j = Math.max(i-spanLength,0); j < Math.min(i+spanLength+1, vector.size()); j++){ + tmpEr += tmp.get(j)*weights.get(j); + tmpWeight += weights.get(j); + } + vector.set(i, tmpEr/tmpWeight); + } + } + + private int longestHighQuality(List averageErrorProbabilities, double errorProbThreshold){ + int curStart = 0; + int curEnd = 0; + int curBestIntervalLength = 0; + + while ( curEnd < averageErrorProbabilities.size() ) { + if (averageErrorProbabilities.get(curEnd) <= errorProbThreshold) { + curEnd++; + } else { + if ((curEnd - curStart) > curBestIntervalLength) { + curBestIntervalLength = curEnd - curStart; + } + curStart = curEnd + 1; + curEnd = curStart; + } + } + if ((curEnd - curStart) > curBestIntervalLength) { + curBestIntervalLength = curEnd - curStart; + } + return curBestIntervalLength; + } + + boolean isEmpty() { + return maxLengthSoFar == 0; + } + + + private void ensureArraysBigEnough(final int length) { + if (length > maxLengthSoFar) { + firstReadTotalsByCycle = Arrays.copyOf(firstReadTotalsByCycle, length); + firstReadTotalProbsByCycle = Arrays.copyOf(firstReadTotalProbsByCycle, length); + firstReadCountsByCycle = Arrays.copyOf(firstReadCountsByCycle, length); + secondReadTotalsByCycle = Arrays.copyOf(secondReadTotalsByCycle , length); + secondReadTotalProbsByCycle = Arrays.copyOf(secondReadTotalProbsByCycle , length); + secondReadCountsByCycle = Arrays.copyOf(secondReadCountsByCycle, length); + maxLengthSoFar = length; + } + } + + Histogram getMeanQualityHistogram() { + final String label = useOriginalQualities ? "MEAN_ORIGINAL_QUALITY" : "MEAN_QUALITY"; + final Histogram meanQualities = new Histogram("CYCLE", label); + + int firstReadLength = 0; + + for (int cycle=0; cycle < firstReadTotalsByCycle.length; ++cycle) { + if (firstReadTotalsByCycle[cycle] > 0) { + meanQualities.increment(cycle, firstReadTotalsByCycle[cycle] / firstReadCountsByCycle[cycle]); + firstReadLength = cycle; + } + } + + for (int i=0; i< secondReadTotalsByCycle.length; ++i) { + if (secondReadCountsByCycle[i] > 0) { + final int cycle = firstReadLength + i; + meanQualities.increment(cycle, secondReadTotalsByCycle[i] / secondReadCountsByCycle[i]); + } + } + + return meanQualities; + } + + Histogram getMeanErrorProbHistogram() { + final String label = useOriginalQualities ? "MEAN_ORIGINAL_ERROR_PROB" : "MEAN_ERROR_PROB"; + final Histogram meanQualities = new Histogram("CYCLE", label); + + int firstReadLength = 0; + + for (int cycle=0; cycle < firstReadTotalsByCycle.length; ++cycle) { + if (firstReadTotalsByCycle[cycle] > 0) { + meanQualities.increment(cycle, firstReadTotalProbsByCycle[cycle] / firstReadCountsByCycle[cycle]); + firstReadLength = cycle; + } + } + + for (int i=0; i< secondReadTotalsByCycle.length; ++i) { + if (secondReadCountsByCycle[i] > 0) { + final int cycle = firstReadLength + i; + meanQualities.increment(cycle, secondReadTotalProbsByCycle[i] / secondReadCountsByCycle[i]); + } + } + + return meanQualities; + } + +} diff --git a/src/main/java/picard/sam/DuplicationMetricsFactory.java b/src/main/java/picard/sam/DuplicationMetricsFactory.java new file mode 100644 index 0000000000..ad7299fb72 --- /dev/null +++ b/src/main/java/picard/sam/DuplicationMetricsFactory.java @@ -0,0 +1,19 @@ +package picard.sam; + +public class DuplicationMetricsFactory { + + // create a DuplicationMetrics for a specific read group + public static DuplicationMetrics createMetrics(final boolean flowMetrics) { + + // create based on the presence of flow order + if ( !flowMetrics ) { + return new DuplicationMetrics(); + } else { + return new FlowBasedDuplicationMetrics(); + } + } + + public static DuplicationMetrics createMetrics() { + return new DuplicationMetrics(); + } +} diff --git a/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java b/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java new file mode 100644 index 0000000000..ed25731c07 --- /dev/null +++ b/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java @@ -0,0 +1,74 @@ +package picard.sam; + +import htsjdk.samtools.SAMRecord; +import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram; +import picard.util.MathUtil; + +public class FlowBasedDuplicationMetrics extends DuplicationMetrics { + + /* + * count of single end reads where the exact fragment length is known (i.e. clipped) + */ + @MergeByAdding + public long UNPAIRED_WITH_TLEN; + + /* + * count of single end duplicates where the exact fragment length is + * unknown (quality trimmed, not clipped) + */ + @MergeByAdding + public long UNPAIRED_DUPS_WITHOUT_TLEN; + + /* + * count of duplicates where both ends are known + */ + @MergeByAdding + public long UNPAIRED_DUPS_WITH_TLEN; + + /** + * The fraction of duplicated reads out of all reads with exact + * fragment length unknown + */ + @NoMergingIsDerived + public Double UNPAIRED_DUP_RATE_WITHOUT_TLEN; + + /** + * The fraction of duplicated reads out of all reads with exact fragment + * length known + */ + @NoMergingIsDerived + public Double UNPAIRED_DUP_RATE_WITH_TLEN; + + + @Override + public void calculateDerivedFields() { + super.calculateDerivedFields(); + + UNPAIRED_DUP_RATE_WITHOUT_TLEN = MathUtil.divide(UNPAIRED_DUPS_WITHOUT_TLEN, UNPAIRED_READS_EXAMINED - UNPAIRED_WITH_TLEN); + UNPAIRED_DUP_RATE_WITH_TLEN = MathUtil.divide(UNPAIRED_DUPS_WITH_TLEN, UNPAIRED_WITH_TLEN); + } + + public void addDuplicateReadToMetrics(final SAMRecord rec) { + super.addDuplicateReadToMetrics(rec); + + if (!rec.isSecondaryOrSupplementary() && !rec.getReadUnmappedFlag()) { + if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { + if ( AbstractMarkDuplicatesCommandLineProgram.isSingleEndReadKnownFragment(rec) ) { + ++UNPAIRED_DUPS_WITH_TLEN; + } else { + ++UNPAIRED_DUPS_WITHOUT_TLEN; + } + } + } + } + + public void addReadToLibraryMetrics(final SAMRecord rec) { + + super.addReadToLibraryMetrics(rec); + + if (AbstractMarkDuplicatesCommandLineProgram.isSingleEndReadKnownFragment(rec)) { + ++UNPAIRED_WITH_TLEN; + } + } + +} diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowArgumentCollection.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowArgumentCollection.java new file mode 100644 index 0000000000..2e51a46e6f --- /dev/null +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowArgumentCollection.java @@ -0,0 +1,41 @@ +package picard.sam.markduplicates; + +import org.broadinstitute.barclay.argparser.Argument; + +public class MarkDuplicatesForFlowArgumentCollection { + + @Argument(doc = "enable parameters and behavior specific to flow based reads.", optional = true) + public boolean FLOW_MODE = false; + + @Argument(doc = "Use specific quality summing strategy for flow based reads. The strategy ensures that the same " + + "(and correct) quality value is used for all bases of the same homopolymer.", optional = true) + public boolean FLOW_QUALITY_SUM_STRATEGY = false; + + @Argument(doc = "Make the end location of single end read be significant when considering duplicates, " + + "in addition to the start location, which is always significant (i.e. require single-ended reads to start and" + + "end on the same position to be considered duplicate) " + + "(for this argument, \"read end\" means 3' end).", optional = true) + public boolean USE_END_IN_UNPAIRED_READS = false; + + @Argument(doc = "Use position of the clipping as the end position, when considering duplicates (or use the unclipped end position) " + + "(for this argument, \"read end\" means 3' end).", optional = true) + public boolean USE_UNPAIRED_CLIPPED_END = false; + + @Argument(doc = "Maximal difference of the read end position that counted as equal. Useful for flow based " + + "reads where the end position might vary due to sequencing errors. " + + "(for this argument, \"read end\" means 3' end)", optional = true) + public int UNPAIRED_END_UNCERTAINTY = 0; + + @Argument(doc = "Skip first N flows, starting from the read's start, when considering duplicates. Useful for flow based reads where sometimes there " + + "is noise in the first flows " + + "(for this argument, \"read start\" means 5' end).", optional = true) + public int FLOW_SKIP_FIRST_N_FLOWS = 0; + + @Argument(doc = "Treat position of read trimming based on quality as the known end (relevant for flow based reads). Default false - if the read " + + "is trimmed on quality its end is not defined and the read is duplicate of any read starting at the same place.", optional = true) + public boolean FLOW_Q_IS_KNOWN_END = false; + + @Argument(doc = "Threshold for considering a quality value high enough to be included when calculating FLOW_QUALITY_SUM_STRATEGY calculation.", optional = true) + public int FLOW_EFFECTIVE_QUALITY_THRESHOLD = 15; + +} diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java new file mode 100644 index 0000000000..0a26767a76 --- /dev/null +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java @@ -0,0 +1,422 @@ +package picard.sam.markduplicates; + +import com.google.common.annotations.VisibleForTesting; +import htsjdk.samtools.SAMFileHeader; +import htsjdk.samtools.SAMReadGroupRecord; +import htsjdk.samtools.SAMRecord; +import htsjdk.samtools.util.Log; +import htsjdk.samtools.util.SortingCollection; +import htsjdk.samtools.util.SortingLongCollection; +import picard.sam.markduplicates.util.ReadEndsForMarkDuplicates; +import picard.sam.markduplicates.util.RepresentativeReadIndexerCodec; +import picard.sam.util.RepresentativeReadIndexer; + +import java.io.File; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * MarkDuplicates calculation helper class for flow based mode + * + * The class extends the behavior of MarkDuplicates which contains the complete + * code for the non-flow based mode. When in flow mode, additional parameters + * may control the establishment of read ends (start/end) for the purpose of + * determining duplication status. Additionally, the logic used to gather reads into + * (duplicate) buckets (chunks) is enhanced with an optional mechanism of read end + * uncertainty threshold. When active, reads are considered to belong to the same chunk if + * for each read in the chunk there exists at least one other read with the uncertainty + * distance on the read end. + */ +public class MarkDuplicatesForFlowHelper implements MarkDuplicatesHelper { + + private final Log log = Log.getInstance(MarkDuplicatesForFlowHelper.class); + + private static final int END_INSIGNIFICANT_VALUE = 0; + private static final String ATTR_DUPLICATE_SCORE = "ForFlowDuplicateScore"; + + // constants for clippingTagContainsAny + public static final String CLIPPING_TAG_NAME = "tm"; + public static final char[] CLIPPING_TAG_CONTAINS_A = {'A'}; + public static final char[] CLIPPING_TAG_CONTAINS_AQ = {'A', 'Q'}; + public static final char[] CLIPPING_TAG_CONTAINS_QZ = {'Q', 'Z'}; + + // instance of hosting MarkDuplicates + private final MarkDuplicates md; + + public MarkDuplicatesForFlowHelper(final MarkDuplicates md) { + this.md = md; + + validateFlowParameteres(); + } + + private void validateFlowParameteres() { + + if ( md.flowBasedArguments.UNPAIRED_END_UNCERTAINTY != 0 && !md.flowBasedArguments.USE_END_IN_UNPAIRED_READS ) { + throw new IllegalArgumentException("invalid parameter combination. UNPAIRED_END_UNCERTAINTY can not be specified when USE_END_IN_UNPAIRED_READS not specified"); + } + } + + /** + * This method is identical in function to generateDuplicateIndexes except that it accomodates for + * the possible significance of the end side of the reads (w/ or w/o uncertainty). This is only + * applicable for flow mode invocation. + */ + public void generateDuplicateIndexes(final boolean useBarcodes, final boolean indexOpticalDuplicates) { + final int entryOverhead; + if (md.TAG_DUPLICATE_SET_MEMBERS) { + // Memory requirements for RepresentativeReadIndexer: + // three int entries + overhead: (3 * 4) + 4 = 16 bytes + entryOverhead = 16; + } else { + entryOverhead = SortingLongCollection.SIZEOF; + } + // Keep this number from getting too large even if there is a huge heap. + int maxInMemory = (int) Math.min((Runtime.getRuntime().maxMemory() * 0.25) / entryOverhead, (double) (Integer.MAX_VALUE - 5)); + // If we're also tracking optical duplicates, reduce maxInMemory, since we'll need two sorting collections + if (indexOpticalDuplicates) { + maxInMemory /= ((entryOverhead + SortingLongCollection.SIZEOF) / entryOverhead); + md.opticalDuplicateIndexes = new SortingLongCollection(maxInMemory, md.TMP_DIR.toArray(new File[md.TMP_DIR.size()])); + } + log.info("Will retain up to " + maxInMemory + " duplicate indices before spilling to disk."); + md.duplicateIndexes = new SortingLongCollection(maxInMemory, md.TMP_DIR.toArray(new File[md.TMP_DIR.size()])); + if (md.TAG_DUPLICATE_SET_MEMBERS) { + final RepresentativeReadIndexerCodec representativeIndexCodec = new RepresentativeReadIndexerCodec(); + md.representativeReadIndicesForDuplicates = SortingCollection.newInstance(RepresentativeReadIndexer.class, + representativeIndexCodec, + Comparator.comparing(read -> read.readIndexInFile), + maxInMemory, + md.TMP_DIR); + } + + // this code does support pairs at this time + if ( md.pairSort.iterator().hasNext() ) { + throw new IllegalArgumentException("flow based code does not support paired reads"); + } + md.pairSort.cleanup(); + md.pairSort = null; + + /** + * Now deal with the fragments + * + * The end processing semantics depends on the following factors: + * 1. Whether the end is marked as significant (as specified by USE_END_IN_UNPAIRED_READS) + * 2. Whether end certainty is specified (by UNPAIRED_END_UNCERTAINTY) + * + * - If ends are insignificant, they are ignored + * - If ends are significant and uncertainty is set to 0 - they must be equal for fragments to be considered same + * - Otherwise, fragments are accumulated (into the same bucket) as long as they are with the + * specified uncertainty from at least one existing fragment. Note that using this strategy the effective + * range of end locations associated with fragments in a bucket may grow, but only in 'uncertainty' steps. + */ + log.info("Traversing fragment information and detecting duplicates."); + ReadEndsForMarkDuplicates firstOfNextChunk = null; + int nextChunkRead1Coordinate2Min = Integer.MAX_VALUE; + int nextChunkRead1Coordinate2Max = Integer.MIN_VALUE; + final List nextChunk = new ArrayList<>(200); + boolean containsPairs = false; + boolean containsFrags = false; + + for (final ReadEndsForMarkDuplicates next : md.fragSort) { + if (firstOfNextChunk != null && areComparableForDuplicatesWithEndSignificance(firstOfNextChunk, next, useBarcodes, + nextChunkRead1Coordinate2Min, nextChunkRead1Coordinate2Max)) { + nextChunk.add(next); + containsPairs = containsPairs || next.isPaired(); + containsFrags = containsFrags || !next.isPaired(); + if ( next.read2Coordinate != END_INSIGNIFICANT_VALUE) { + nextChunkRead1Coordinate2Min = Math.min(nextChunkRead1Coordinate2Min, next.read2Coordinate); + nextChunkRead1Coordinate2Max = Math.max(nextChunkRead1Coordinate2Max, next.read2Coordinate); + + if ( firstOfNextChunk.read2Coordinate == END_INSIGNIFICANT_VALUE) + firstOfNextChunk = next; + } + } else { + if (nextChunk.size() > 1 && containsFrags) { + md.markDuplicateFragments(nextChunk, containsPairs); + } + nextChunk.clear(); + nextChunk.add(next); + firstOfNextChunk = next; + if ( next.read2Coordinate != END_INSIGNIFICANT_VALUE) + nextChunkRead1Coordinate2Min = nextChunkRead1Coordinate2Max = next.read2Coordinate; + else { + nextChunkRead1Coordinate2Min = Integer.MAX_VALUE; + nextChunkRead1Coordinate2Max = Integer.MIN_VALUE; + } + containsPairs = next.isPaired(); + containsFrags = !next.isPaired(); + } + } + md.markDuplicateFragments(nextChunk, containsPairs); + md.fragSort.cleanup(); + md.fragSort = null; + + log.info("Sorting list of duplicate records."); + md.duplicateIndexes.doneAddingStartIteration(); + if (md.opticalDuplicateIndexes != null) { + md.opticalDuplicateIndexes.doneAddingStartIteration(); + } + if (md.TAG_DUPLICATE_SET_MEMBERS) { + md.representativeReadIndicesForDuplicates.doneAdding(); + } + } + + /** + * Builds a read ends object that represents a single read - for flow based read + */ + @Override + public ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec, final boolean useBarcodes) { + final ReadEndsForMarkDuplicates ends = md.buildReadEnds(header, index, rec, useBarcodes); + + // this code only supported unpaired reads + if (rec.getReadPairedFlag() && !rec.getMateUnmappedFlag()) { + throw new IllegalArgumentException("FLOW_MODE does not support paired reads. offending read: " + rec); + } + + // adjust start/end coordinates + ends.read1Coordinate = getReadEndCoordinate(rec, !rec.getReadNegativeStrandFlag(), true, md.flowBasedArguments); + if (md.flowBasedArguments.USE_END_IN_UNPAIRED_READS) { + ends.read2Coordinate = getReadEndCoordinate(rec, rec.getReadNegativeStrandFlag(), false, md.flowBasedArguments); + } + + // adjust score + if ( md.flowBasedArguments.FLOW_QUALITY_SUM_STRATEGY ) { + ends.score = computeFlowDuplicateScore(rec, ends.read2Coordinate); + } + + return ends; + } + + /** + * update score for pairedEnds + */ + @Override + public short getReadDuplicateScore(final SAMRecord rec, final ReadEndsForMarkDuplicates pairedEnds) { + if (md.flowBasedArguments.FLOW_QUALITY_SUM_STRATEGY ) { + return computeFlowDuplicateScore(rec, pairedEnds.read2Coordinate); + } else { + return md.getReadDuplicateScore(rec, pairedEnds); + } + } + + /** + * This method is identical in function to areComparableForDuplicates except that it accomodates for + * the possible significance of the end side of the reads (w/ or wo/ uncertainty). This is only + * applicable for flow mode invocation. + */ + private boolean areComparableForDuplicatesWithEndSignificance(final ReadEndsForMarkDuplicates lhs, final ReadEndsForMarkDuplicates rhs, final boolean useBarcodes, + final int lhsRead1Coordinate2Min, final int lhsRead1Coordinate2Max) { + boolean areComparable = md.areComparableForDuplicates(lhs, rhs, false, useBarcodes); + + if (areComparable) { + areComparable = (!endCoorSignificant(lhs.read2Coordinate, rhs.read2Coordinate) || + endCoorInRangeWithUncertainty(lhsRead1Coordinate2Min, lhsRead1Coordinate2Max, + rhs.read2Coordinate, md.flowBasedArguments.UNPAIRED_END_UNCERTAINTY)); + } + + return areComparable; + } + + private boolean endCoorSignificant(final int lhsCoor, final int rhsCoor) { + return lhsCoor != END_INSIGNIFICANT_VALUE && rhsCoor != END_INSIGNIFICANT_VALUE; + } + + private boolean endCoorInRangeWithUncertainty(final int lhsCoorMin, final int lhsCoorMax, final int rhsCoor, final int uncertainty) { + return (rhsCoor >= (lhsCoorMin - uncertainty)) && (rhsCoor <= (lhsCoorMax + uncertainty)); + } + + /** + * A quality summing scoring strategy used for flow based reads. + * + * The method walks on the bases of the read, in the synthesis direction. For each base, the effective + * quality value is defined as the value on the first base on the hmer to which the base belongs to. The score + * is defined to be the sum of all effective values above a given threshold. + * + * @param rec - SAMRecord to get a score for + * @param threshold - threshold above which effective quality is included + * @return - calculated score (see method description) + */ + static protected int getFlowSumOfBaseQualities(final SAMRecord rec, final int threshold) { + int score = 0; + + // access qualities and bases + final byte[] quals = rec.getBaseQualities(); + final byte[] bases = rec.getReadBases(); + + // create iteration range and direction + final int startingOffset = !rec.getReadNegativeStrandFlag() ? 0 : bases.length; + final int endOffset = !rec.getReadNegativeStrandFlag() ? bases.length : 0; + final int iterIncr = !rec.getReadNegativeStrandFlag() ? 1 : -1; + + // loop on bases, extract qual related to homopolymer from start of homopolymer + byte lastBase = 0; + byte effectiveQual = 0; + for ( int i = startingOffset ; i != endOffset ; i += iterIncr ) { + final byte base = bases[i]; + if ( base != lastBase ) { + effectiveQual = quals[i]; + } + if ( effectiveQual >= threshold) { + score += effectiveQual; + } + lastBase = base; + } + + return score; + } + + private short computeFlowDuplicateScore(final SAMRecord rec, final int end) { + + if ( end == END_INSIGNIFICANT_VALUE) + return -1; + + Short storedScore = (Short)rec.getTransientAttribute(ATTR_DUPLICATE_SCORE); + if ( storedScore == null ) { + short score = 0; + + score += (short) Math.min(getFlowSumOfBaseQualities(rec, md.flowBasedArguments.FLOW_EFFECTIVE_QUALITY_THRESHOLD), Short.MAX_VALUE / 2); + + score += rec.getReadFailsVendorQualityCheckFlag() ? (short) (Short.MIN_VALUE / 2) : 0; + storedScore = score; + rec.setTransientAttribute(ATTR_DUPLICATE_SCORE, storedScore); + } + + return storedScore; + } + + @VisibleForTesting + protected static int getReadEndCoordinate(final SAMRecord rec, final boolean startEnd, final boolean certain, final MarkDuplicatesForFlowArgumentCollection flowBasedArguments) { + final FlowOrder flowOrder = new FlowOrder(rec); + final int unclippedCoor = startEnd ? rec.getUnclippedStart() : rec.getUnclippedEnd(); + final int alignmentCoor = startEnd ? rec.getAlignmentStart() : rec.getAlignmentEnd(); + + // this code requires a valid flow order + if ( flowOrder.isValid() ) { + + // simple case + if ( flowBasedArguments.USE_UNPAIRED_CLIPPED_END ) { + return alignmentCoor; + } + + // "skipping" case + if (certain && flowBasedArguments.FLOW_SKIP_FIRST_N_FLOWS != 0) { + final byte[] bases = rec.getReadBases(); + byte hmerBase = startEnd ? bases[0] : bases[bases.length - 1]; + int hmersLeft = flowBasedArguments.FLOW_SKIP_FIRST_N_FLOWS; // number of hmer left to trim + + // advance flow order to base + while (flowOrder.current() != hmerBase) { + flowOrder.advance(); + hmersLeft--; + } + + int hmerSize; + for (hmerSize = 1; hmerSize < bases.length; hmerSize++) { + if ((startEnd ? bases[hmerSize] : bases[bases.length - 1 - hmerSize]) != hmerBase) { + if (--hmersLeft <= 0) { + break; + } else { + hmerBase = startEnd ? bases[hmerSize] : bases[bases.length - 1 - hmerSize]; + flowOrder.advance(); + while (flowOrder.current() != hmerBase) { + flowOrder.advance(); + hmersLeft--; + } + if (hmersLeft <= 0) { + break; + } + } + } + } + final int coor = unclippedCoor + (startEnd ? hmerSize : -hmerSize); + return flowBasedArguments.USE_UNPAIRED_CLIPPED_END + ? (startEnd ? Math.max(coor, alignmentCoor) : Math.min(coor, alignmentCoor)) + : coor; + } + + // "know end" case + if (flowBasedArguments.FLOW_Q_IS_KNOWN_END ? isAdapterClipped(rec) : isAdapterClippedWithQ(rec)) { + return unclippedCoor; + } + + // "uncertain quality clipped" case + if (!certain && isQualityClipped(rec)) { + return END_INSIGNIFICANT_VALUE; + } + } + + // if here, return a default + return unclippedCoor; + } + + public static boolean isAdapterClipped(final SAMRecord rec) { + return clippingTagContainsAny(rec, CLIPPING_TAG_CONTAINS_A); + } + + public static boolean isAdapterClippedWithQ(final SAMRecord rec) { + return clippingTagContainsAny(rec, CLIPPING_TAG_CONTAINS_AQ); + } + + public static boolean isQualityClipped(final SAMRecord rec) { + return clippingTagContainsAny(rec, CLIPPING_TAG_CONTAINS_QZ); + } + + private static boolean clippingTagContainsAny(final SAMRecord rec, final char[] chars) { + final String clippingTagValue = rec.getStringAttribute(CLIPPING_TAG_NAME); + + if ( clippingTagValue == null ) { + return false; + } else { + for ( final char ch : chars ) { + if ( clippingTagValue.indexOf(ch) >= 0 ) { + return true; + } + } + return false; + } + } + + /** + * private class used to represent use a SAMRecord's flow order, if such is present + */ + static private class FlowOrder { + + byte[] flowOrder; // the flow order byte string + int flowIndex = 0; // the current position on the flow order + + private FlowOrder(final SAMRecord rec) { + + // access flow order from record's read group + if ( rec.getReadGroup() != null && rec.getReadGroup().getFlowOrder() != null ) { + flowOrder = rec.getReadGroup().getFlowOrder().getBytes(); + return; + } + + // fallback on finding a flow order elsewhere + final SAMFileHeader header = rec.getHeader(); + for ( final SAMReadGroupRecord rg : header.getReadGroups() ) { + if (rg.getFlowOrder() != null) { + flowOrder = rg.getFlowOrder().getBytes(); + return; + } + } + + // otherwise, no flow order + flowOrder = null; + } + + private boolean isValid() { + return flowOrder != null; + } + + private void advance() { + if (++flowIndex >= flowOrder.length) { + flowIndex = 0; + } + } + + private byte current() { + return flowOrder[flowIndex]; + } + } +} diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java new file mode 100644 index 0000000000..18462c452e --- /dev/null +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java @@ -0,0 +1,12 @@ +package picard.sam.markduplicates; + +import htsjdk.samtools.SAMFileHeader; +import htsjdk.samtools.SAMRecord; +import picard.sam.markduplicates.util.ReadEndsForMarkDuplicates; + +public interface MarkDuplicatesHelper { + + void generateDuplicateIndexes(final boolean useBarcodes, final boolean indexOpticalDuplicates); + ReadEndsForMarkDuplicates buildReadEnds(final SAMFileHeader header, final long index, final SAMRecord rec, final boolean useBarcodes); + short getReadDuplicateScore(final SAMRecord rec, final ReadEndsForMarkDuplicates pairedEnds); +} diff --git a/src/test/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelperTest.java b/src/test/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelperTest.java new file mode 100644 index 0000000000..cfddeacf0a --- /dev/null +++ b/src/test/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelperTest.java @@ -0,0 +1,342 @@ +/* + * The MIT License + * + * Copyright (c) 2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package picard.sam.markduplicates; + +import htsjdk.samtools.DuplicateScoringStrategy; +import htsjdk.samtools.SAMRecord; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.io.File; + +/** + * This class defines the individual test cases to run. The actual running of the test is done + * by MarkDuplicatesTester (see getTester). + */ +public class MarkDuplicatesForFlowHelperTest { + protected static String TEST_BASE_NAME = null; + protected static File TEST_DATA_DIR = null; + final static String FLOW_ORDER = "TGCA"; + + + @BeforeClass + public void setUp() { + TEST_BASE_NAME = "MarkDuplicatesForFlowHelper"; + TEST_DATA_DIR = new File("testdata/picard/sam/MarkDuplicates"); + } + + protected AbstractMarkDuplicatesCommandLineProgramTester getTester() { + return new MarkDuplicatesTester(); + } + + private interface TesterModifier { + void modify(AbstractMarkDuplicatesCommandLineProgramTester tester); + } + + private static class TestRecordInfo { + final int length; + final int alignmentStart; + final String cigar; + final boolean isDuplicate; + final String startMod; + final String endMod; + + TestRecordInfo(final int length, final int alignmentStart, final String cigar, final boolean isDuplicate, + final String startMod, final String endMod) { + this.length = length; + this.alignmentStart = alignmentStart; + this.cigar = cigar; + this.isDuplicate = isDuplicate; + this.startMod = startMod; + this.endMod = endMod; + } + } + + @DataProvider(name ="forFlowDataProvider") + public Object[][] forFlowDataProvider() { + return new Object[][] { + // testUSE_END_IN_UNPAIRED_READS: End location is not significant + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, null, false, null, null), + new TestRecordInfo(74, 12, null, true, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=false" }, null + }, + + // testUSE_END_IN_UNPAIRED_READS: End location is significant + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, null, false, null, null), + new TestRecordInfo(74, 12, null, false, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true" }, null + }, + + // testUSE_UNPAIRED_CLIPPED_END: Do not use clipped locations (meaning, use unclipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, "1S76M", false, null, null), + new TestRecordInfo(74, 12, "74M", false, null, null) + }, + new String[] { "USE_UNPAIRED_CLIPPED_END=false" }, null + }, + + // testUSE_UNPAIRED_CLIPPED_END: Use clipped locations (meaning, use clipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, "1S76M", false, null, null), + new TestRecordInfo(74, 12, "74M", true, null, null) + }, + new String[] { "USE_UNPAIRED_CLIPPED_END=true" }, null + }, + + // testUSE_UNPAIRED_CLIPPED_END: Use clipped locations (meaning, use clipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, "1S76M1S", true, null, null), + new TestRecordInfo(78, 11, "78M", false, null, null) + }, + new String[] { "USE_UNPAIRED_CLIPPED_END=false", "USE_END_IN_UNPAIRED_READS=true" }, null + }, + + // testUSE_UNPAIRED_CLIPPED_END: Use clipped locations (meaning, use clipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, "1S76M1S", false, null, null), + new TestRecordInfo(78, 11, "78M", false, null, null) + }, + new String[] { "USE_UNPAIRED_CLIPPED_END=true", "USE_END_IN_UNPAIRED_READS=true" }, null + }, + + // testFLOW_SKIP_FIRST_N_FLOWS: Do not use clipped locations (meaning, use unclipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12,"76M", false, "ACGTT", "TTGCA"), + new TestRecordInfo(76, 12, "76M", true, "ACGGT", "TGGCA") + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true", "FLOW_SKIP_FIRST_N_FLOWS=0" }, null + }, + + // testFLOW_SKIP_FIRST_N_FLOWS: Do not use clipped locations (meaning, use unclipped) + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12,"76M", false, "ACGTT", "TTGCA"), + new TestRecordInfo(76, 12, "76M", false, "CCGGT", "TGGCA") + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true", "FLOW_SKIP_FIRST_N_FLOWS=3" }, null + }, + + // testFLOW_QUALITY_SUM_STRATEGY: normal sum + { + DuplicateScoringStrategy.ScoringStrategy.SUM_OF_BASE_QUALITIES, + new TestRecordInfo[] { + new TestRecordInfo(76, 12,"76M", true, "AAAC", null), + new TestRecordInfo(76, 12, "76M", false, "AACC", null) + }, + new String[] { "FLOW_QUALITY_SUM_STRATEGY=false" }, + new TesterModifier() { + @Override + public void modify(final AbstractMarkDuplicatesCommandLineProgramTester tester) { + final SAMRecord[] records = tester.getSamRecordSetBuilder().getRecords().toArray(new SAMRecord[0]); + records[0].setAttribute("tp", new int[76]); + records[1].setAttribute("tp", new int[76]); + records[0].getBaseQualities()[1] = 25; // dip inside AAA + } + } + }, + + // testFLOW_QUALITY_SUM_STRATEGY: flow (homopolymer based) sum + { + DuplicateScoringStrategy.ScoringStrategy.SUM_OF_BASE_QUALITIES, + new TestRecordInfo[] { + new TestRecordInfo(76, 12,"76M", false, "AAAC", null), + new TestRecordInfo(76, 12, "76M", true, "AACC", null) + }, + new String[] { "FLOW_QUALITY_SUM_STRATEGY=true" }, + new TesterModifier() { + @Override + public void modify(final AbstractMarkDuplicatesCommandLineProgramTester tester) { + final SAMRecord[] records = tester.getSamRecordSetBuilder().getRecords().toArray(new SAMRecord[0]); + records[0].setAttribute("tp", new int[76]); + records[1].setAttribute("tp", new int[76]); + records[0].getBaseQualities()[1] = 25; // dip inside AAA + } + } + }, + + // testUNPAIRED_END_UNCERTAINTY: End location is significant and uncertain, end sorted + { + null, + new TestRecordInfo[] { + new TestRecordInfo(74, 12, null, true, null, null), + new TestRecordInfo(84, 12, null, true, null, null), + new TestRecordInfo(94, 12, null, false, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true", "UNPAIRED_END_UNCERTAINTY=10" }, null + }, + + // testUNPAIRED_END_UNCERTAINTY: End location is significant and uncertain, end not sorted + { + null, + new TestRecordInfo[] { + new TestRecordInfo(174, 12, null, true, null, null), + new TestRecordInfo(194, 12, null, false, null, null), + new TestRecordInfo(184, 12, null, true, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true", "UNPAIRED_END_UNCERTAINTY=10" }, null + }, + + // testUNPAIRED_END_UNCERTAINTY: End location is significant and uncertain, end not sorted, multiple non-dup + { + null, + new TestRecordInfo[] { + new TestRecordInfo(174, 12, null, true, null, null), + new TestRecordInfo(294, 12, null, false, null, null), + new TestRecordInfo(184, 12, null, false, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=true", "UNPAIRED_END_UNCERTAINTY=10" }, null + }, + // Barcode + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, null, false, null, null), + new TestRecordInfo(74, 12, null, true, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=false", "BARCODE_TAG=BC" }, + new TesterModifier() { + @Override + public void modify(final AbstractMarkDuplicatesCommandLineProgramTester tester) { + final SAMRecord[] records = tester.getSamRecordSetBuilder().getRecords().toArray(new SAMRecord[0]); + records[0].setAttribute("BC", "A"); + records[1].setAttribute("BC", "A"); + } + } + }, + // Barcode + { + null, + new TestRecordInfo[] { + new TestRecordInfo(76, 12, null, false, null, null), + new TestRecordInfo(74, 12, null, false, null, null) + }, + new String[] { "USE_END_IN_UNPAIRED_READS=false", "BARCODE_TAG=BC" }, + new TesterModifier() { + @Override + public void modify(final AbstractMarkDuplicatesCommandLineProgramTester tester) { + final SAMRecord[] records = tester.getSamRecordSetBuilder().getRecords().toArray(new SAMRecord[0]); + records[0].setAttribute("BC", "A"); + records[1].setAttribute("BC", "T"); + } + } + }, + }; + } + + @Test(dataProvider = "forFlowDataProvider") + public void testForFlow(final DuplicateScoringStrategy.ScoringStrategy scoringStrategy, final TestRecordInfo[] recInfos, final String[] params, TesterModifier modifier) { + + // get tester, build records + final AbstractMarkDuplicatesCommandLineProgramTester tester = + scoringStrategy == null ? getTester() : new MarkDuplicatesTester(scoringStrategy); + for ( final TestRecordInfo info : recInfos ) { + tester.getSamRecordSetBuilder().setReadLength(info.length); + if ( info.cigar != null ) { + tester.addMappedFragment(0, info.alignmentStart, info.isDuplicate, info.cigar, 50); + } else { + tester.addMappedFragment(0, info.alignmentStart, info.isDuplicate, 50); + } + } + + // modify records + final SAMRecord[] records = tester.getSamRecordSetBuilder().getRecords().toArray(new SAMRecord[0]); + for ( int i = 0 ; i < records.length ; i++ ) { + final SAMRecord rec = records[i]; + final TestRecordInfo info = recInfos[i]; + + if ( info.startMod != null ) { + System.arraycopy(info.startMod.getBytes(), 0, rec.getReadBases(), 0, info.startMod.length()); + } + if ( info.endMod != null ) { + System.arraycopy(info.endMod.getBytes(), 0, rec.getReadBases(), rec.getReadBases().length - info.endMod.length(), info.endMod.length()); + } + } + + // add parames, set flow order + tester.addArg("FLOW_MODE=true"); + for ( final String param : params ) { + tester.addArg(param); + } + tester.getSamRecordSetBuilder().getHeader().getReadGroups().get(0).setFlowOrder(FLOW_ORDER); + + // further modify tester + if ( modifier != null ) { + modifier.modify(tester); + } + + // run test + tester.runTest(); + } + + @DataProvider(name ="getFlowSumOfBaseQualitiesDataProvider") + public Object[][] getFlowSumOfBaseQualitiesDataProvider() { + return new Object[][] { + { "AAAA", new byte[] {50,50,50,50}, 30, 200 }, + { "AAAA", new byte[] {50,10,10,50}, 30, 200 }, + { "AAAA", new byte[] {20,10,10,20}, 30, 0 }, + { "AABBCC", new byte[] {50,50,10,10,40,40}, 30, 180 }, + }; + } + + @Test(dataProvider = "getFlowSumOfBaseQualitiesDataProvider") + public void testGetFlowSumOfBaseQualities(final String bases, final byte[] quals, final int threshold, final int expectedScore) { + + // build record + final AbstractMarkDuplicatesCommandLineProgramTester tester = getTester(); + tester.getSamRecordSetBuilder().setReadLength(bases.length()); + tester.addMappedFragment(0, 12, false, 50); + + // install bases and quals + final SAMRecord rec = tester.getSamRecordSetBuilder().getRecords().iterator().next(); + System.arraycopy(bases.getBytes(), 0, rec.getReadBases(), 0,bases.length()); + System.arraycopy(quals, 0, rec.getBaseQualities(), 0, quals.length); + + // calculate score + final int score = MarkDuplicatesForFlowHelper.getFlowSumOfBaseQualities(rec, threshold); + Assert.assertEquals(score, expectedScore); + } + +} diff --git a/testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias11612750771983880335.bam b/testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias11612750771983880335.bam new file mode 100644 index 0000000000000000000000000000000000000000..00dba076d8d6ffb16d5330c7ed1179d01307a61e GIT binary patch literal 23009 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 oA0F_<2dGj203VA81ONa4009360763o02=@U00000000000Hug6G5`Po literal 0 HcmV?d00001 diff --git a/testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias6837461464900918747.bam b/testdata/picard/sam/CollectGcBiasMetrics/CollectGcBias6837461464900918747.bam new file mode 100644 index 0000000000000000000000000000000000000000..b3954671a928dd8c8b08cf9632c4b33c0e788698 GIT binary patch literal 16214 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 C1E~Q3 literal 0 HcmV?d00001 diff --git a/testdata/picard/sam/CollectQualityYieldMetrics/collect_quality_yield_test1.sam b/testdata/picard/sam/CollectQualityYieldMetrics/collect_quality_yield_test1.sam new file mode 100644 index 0000000000..02352f82a7 --- /dev/null +++ b/testdata/picard/sam/CollectQualityYieldMetrics/collect_quality_yield_test1.sam @@ -0,0 +1,6 @@ +@HD VN:1.0 SO:coordinate +@SQ SN:chr1 LN:101 UR:file:testdata/net/sf/picard/sam/merger.fasta M5:bd01f7e11515bb6beda8f7257902aa67 +@RG ID:0 SM:Hi,Momma! LB:whatever PU:me PL:ILLUMINA +READ_1 0 chr1 1 255 10M * 0 0 TTTTTTTTTT :::::::::: RG:Z:0 XN:i:1 +READ_2 512 chr1 1 255 10M * 0 0 TTTTTTTTTT :::::::::: RG:Z:0 XN:i:1 +READ_3 0 chr1 1 255 10M * 0 0 TTTTTTTTTT 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%0DjUVd@*Z-Tya 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

fW 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%0DjUVd@*Z-Tya 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
fW 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 literal 0 HcmV?d00001 From 89f425b33752d21f6045a58f0323dfe37f439b40 Mon Sep 17 00:00:00 2001 From: Ilya Soifer Date: Sat, 25 Jun 2022 22:45:18 +0300 Subject: [PATCH 4/4] PR comments - fixed --- .gitignore | 1 - .../analysis/CollectQualityYieldMetrics.java | 14 ++----- .../java/picard/sam/DuplicationMetrics.java | 7 +++- .../picard/sam/DuplicationMetricsFactory.java | 37 ++++++++++++++++++- .../sam/FlowBasedDuplicationMetrics.java | 29 ++++++++++++++- .../sam/markduplicates/MarkDuplicates.java | 10 ++++- .../MarkDuplicatesForFlowHelper.java | 31 ++++++++++++++-- .../markduplicates/MarkDuplicatesHelper.java | 24 ++++++++++++ ...tractMarkDuplicatesCommandLineProgram.java | 20 ---------- .../sam/markduplicates/util/ReadEnds.java | 2 +- .../util/ReadEndsForMarkDuplicates.java | 23 ++++++++++++ 11 files changed, 156 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index a0c69cb2f0..1444682d32 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,4 @@ report jacoco.data .gradle build -*.log *.swp diff --git a/src/main/java/picard/analysis/CollectQualityYieldMetrics.java b/src/main/java/picard/analysis/CollectQualityYieldMetrics.java index 20d2662dde..83879a475a 100644 --- a/src/main/java/picard/analysis/CollectQualityYieldMetrics.java +++ b/src/main/java/picard/analysis/CollectQualityYieldMetrics.java @@ -29,7 +29,6 @@ import htsjdk.samtools.metrics.MetricsFile; import htsjdk.samtools.reference.ReferenceSequence; import htsjdk.samtools.util.IOUtil; -import org.apache.commons.lang.ArrayUtils; import org.broadinstitute.barclay.argparser.Argument; import org.broadinstitute.barclay.argparser.CommandLineProgramProperties; import org.broadinstitute.barclay.help.DocumentedFeature; @@ -107,11 +106,7 @@ protected boolean usesNoRefReads() { @Override protected void setup(final SAMFileHeader header, final File samFile) { IOUtil.assertFileIsWritable(OUTPUT); - if (FLOW_MODE) { - this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS, true); - } else { - this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS); - } + this.collector = new QualityYieldMetricsCollector(USE_ORIGINAL_QUALITIES, INCLUDE_SECONDARY_ALIGNMENTS, INCLUDE_SUPPLEMENTAL_ALIGNMENTS, FLOW_MODE); } @Override @@ -138,7 +133,7 @@ public static class QualityYieldMetricsCollector { // If true, include bases from supplemental alignments in metrics. Setting to true may cause double-counting // of bases if there are supplemental alignments in the input file. - private final boolean includeSupplementalAlignments; + public final boolean includeSupplementalAlignments; // If true collects RLQ25/RLQ30 private final boolean flowMode; @@ -256,8 +251,8 @@ public QualityYieldMetricsFlow(final boolean useOriginalBaseQualities, final His @Override public void calculateDerivedFields() { super.calculateDerivedFields(); - this.READ_LENGTH_AVG_Q_ABOVE_25 = histogramGenerator.calculateLQ(25, 1,5); - this.READ_LENGTH_AVG_Q_ABOVE_30 = histogramGenerator.calculateLQ(30, 1,5); + this.READ_LENGTH_AVG_Q_ABOVE_25 = histogramGenerator.calculateLQ(25, 1, 5); + this.READ_LENGTH_AVG_Q_ABOVE_30 = histogramGenerator.calculateLQ(30, 1, 5); } @Override @@ -285,7 +280,6 @@ public QualityYieldMetrics() { this(false); } - public QualityYieldMetrics(final boolean useOriginalQualities) { super(); this.useOriginalQualities = useOriginalQualities; diff --git a/src/main/java/picard/sam/DuplicationMetrics.java b/src/main/java/picard/sam/DuplicationMetrics.java index 4840623002..7c05325cff 100644 --- a/src/main/java/picard/sam/DuplicationMetrics.java +++ b/src/main/java/picard/sam/DuplicationMetrics.java @@ -242,6 +242,9 @@ public static void main(String[] args) { } } + /** + * Adds duplicated read to the metrics + */ public void addDuplicateReadToMetrics(final SAMRecord rec) { // only update duplicate counts for "decider" reads, not tag-a-long reads if (!rec.isSecondaryOrSupplementary() && !rec.getReadUnmappedFlag()) { @@ -255,8 +258,10 @@ public void addDuplicateReadToMetrics(final SAMRecord rec) { } } + /** + * Adds a read to the metrics + */ public void addReadToLibraryMetrics(final SAMRecord rec) { - // First bring the simple metrics up to date if (rec.getReadUnmappedFlag()) { ++UNMAPPED_READS; diff --git a/src/main/java/picard/sam/DuplicationMetricsFactory.java b/src/main/java/picard/sam/DuplicationMetricsFactory.java index ad7299fb72..1b23c79c4b 100644 --- a/src/main/java/picard/sam/DuplicationMetricsFactory.java +++ b/src/main/java/picard/sam/DuplicationMetricsFactory.java @@ -1,8 +1,39 @@ +/* + * The MIT License + * + * Copyright (c) 2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package picard.sam; +/** + * Factory class that creates either regular or flow-based duplication metrics. + * Supports MarkDuplicates with --flowMode + */ public class DuplicationMetricsFactory { - // create a DuplicationMetrics for a specific read group + /** + * Create empty regular of flow duplication metrics + * @param flowMetrics + * @return DuplicationMetrics + */ public static DuplicationMetrics createMetrics(final boolean flowMetrics) { // create based on the presence of flow order @@ -13,6 +44,10 @@ public static DuplicationMetrics createMetrics(final boolean flowMetrics) { } } + /** + * Create non-flow duplication metrics + * @return + */ public static DuplicationMetrics createMetrics() { return new DuplicationMetrics(); } diff --git a/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java b/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java index ed25731c07..e51b41e724 100644 --- a/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java +++ b/src/main/java/picard/sam/FlowBasedDuplicationMetrics.java @@ -1,7 +1,32 @@ +/* + * The MIT License + * + * Copyright (c) 2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + package picard.sam; import htsjdk.samtools.SAMRecord; import picard.sam.markduplicates.util.AbstractMarkDuplicatesCommandLineProgram; +import picard.sam.markduplicates.util.ReadEndsForMarkDuplicates; import picard.util.MathUtil; public class FlowBasedDuplicationMetrics extends DuplicationMetrics { @@ -53,7 +78,7 @@ public void addDuplicateReadToMetrics(final SAMRecord rec) { if (!rec.isSecondaryOrSupplementary() && !rec.getReadUnmappedFlag()) { if (!rec.getReadPairedFlag() || rec.getMateUnmappedFlag()) { - if ( AbstractMarkDuplicatesCommandLineProgram.isSingleEndReadKnownFragment(rec) ) { + if ( ReadEndsForMarkDuplicates.isSingleEndReadKnownFragment(rec) ) { ++UNPAIRED_DUPS_WITH_TLEN; } else { ++UNPAIRED_DUPS_WITHOUT_TLEN; @@ -66,7 +91,7 @@ public void addReadToLibraryMetrics(final SAMRecord rec) { super.addReadToLibraryMetrics(rec); - if (AbstractMarkDuplicatesCommandLineProgram.isSingleEndReadKnownFragment(rec)) { + if (ReadEndsForMarkDuplicates.isSingleEndReadKnownFragment(rec)) { ++UNPAIRED_WITH_TLEN; } } diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicates.java b/src/main/java/picard/sam/markduplicates/MarkDuplicates.java index 4953d1f91e..b5b52d133b 100644 --- a/src/main/java/picard/sam/markduplicates/MarkDuplicates.java +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicates.java @@ -645,13 +645,19 @@ private void buildSortedReadEndLists(final boolean useBarcodes) { } /** - * update score for pairedEnds + * Calculates score for the duplicate read + * @param rec - read + * @param pairedEnds - location of the read ends + * @return - read score calculated according to the DUPLICATE_SCORING_STRATEGY: + * SUM_OF_BASE_QUALITIES, (default) + * TOTAL_MAPPED_REFERENCE_LENGTH, + * RANDOM + * */ public short getReadDuplicateScore(final SAMRecord rec, final ReadEndsForMarkDuplicates pairedEnds) { return DuplicateScoringStrategy.computeDuplicateScore(rec, this.DUPLICATE_SCORING_STRATEGY); } - /** * Builds a read ends object that represents a single read. */ diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java index 0a26767a76..7a06380456 100644 --- a/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesForFlowHelper.java @@ -1,3 +1,27 @@ +/* + * The MIT License + * + * Copyright (c) 2009-2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + package picard.sam.markduplicates; import com.google.common.annotations.VisibleForTesting; @@ -51,9 +75,8 @@ public MarkDuplicatesForFlowHelper(final MarkDuplicates md) { } private void validateFlowParameteres() { - if ( md.flowBasedArguments.UNPAIRED_END_UNCERTAINTY != 0 && !md.flowBasedArguments.USE_END_IN_UNPAIRED_READS ) { - throw new IllegalArgumentException("invalid parameter combination. UNPAIRED_END_UNCERTAINTY can not be specified when USE_END_IN_UNPAIRED_READS not specified"); + throw new IllegalArgumentException("Invalid parameter combination. UNPAIRED_END_UNCERTAINTY can not be specified when USE_END_IN_UNPAIRED_READS not specified"); } } @@ -91,7 +114,7 @@ public void generateDuplicateIndexes(final boolean useBarcodes, final boolean in // this code does support pairs at this time if ( md.pairSort.iterator().hasNext() ) { - throw new IllegalArgumentException("flow based code does not support paired reads"); + throw new IllegalArgumentException("Flow based code does not support paired reads"); } md.pairSort.cleanup(); md.pairSort = null; @@ -334,7 +357,7 @@ protected static int getReadEndCoordinate(final SAMRecord rec, final boolean sta : coor; } - // "know end" case + // "known end" case if (flowBasedArguments.FLOW_Q_IS_KNOWN_END ? isAdapterClipped(rec) : isAdapterClippedWithQ(rec)) { return unclippedCoor; } diff --git a/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java b/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java index 18462c452e..16caa589eb 100644 --- a/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java +++ b/src/main/java/picard/sam/markduplicates/MarkDuplicatesHelper.java @@ -1,3 +1,27 @@ +/* + * The MIT License + * + * Copyright (c) 2009-2022 The Broad Institute + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + package picard.sam.markduplicates; import htsjdk.samtools.SAMFileHeader; diff --git a/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java b/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java index 8a839e9f79..c46bf9eb5a 100644 --- a/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java +++ b/src/main/java/picard/sam/markduplicates/util/AbstractMarkDuplicatesCommandLineProgram.java @@ -217,26 +217,6 @@ public static DuplicationMetrics addReadToLibraryMetrics(final SAMRecord rec, fi return metrics; } - /** - * This method is used to generate the following two metrics: - * UNPAIRED_DUPS_WITH_TLEN - * UNPAIRED_DUPS_WITHOUT_TLEN - * - * It will return true if and only if the read is single ended and the exact fragment length is - * known (i.e. it was not quality trimmed) - */ - public static boolean isSingleEndReadKnownFragment(final SAMRecord rec) { - if ( rec.getReadUnmappedFlag() || rec.getReadPairedFlag() ) { - return false; - } else if ( MarkDuplicatesForFlowHelper.isAdapterClipped(rec) ) { - return true; - } else if ( !rec.getReadNegativeStrandFlag() ) { - return rec.getEnd() != rec.getUnclippedEnd(); - } else { - return rec.getStart() != rec.getUnclippedStart(); - } - } - /** * Little class used to package up a header and an iterable/iterator. */ diff --git a/src/main/java/picard/sam/markduplicates/util/ReadEnds.java b/src/main/java/picard/sam/markduplicates/util/ReadEnds.java index 0a2ff032a7..9d5dd3775b 100644 --- a/src/main/java/picard/sam/markduplicates/util/ReadEnds.java +++ b/src/main/java/picard/sam/markduplicates/util/ReadEnds.java @@ -35,7 +35,7 @@ abstract public class ReadEnds extends PhysicalLocationShort { public int read1ReferenceIndex = -1; public int read1Coordinate = -1; public int read2ReferenceIndex = -1; - public int read2Coordinate = -1; // this field is overloaded for flow based processing as the end coordinate (paired reads not supported) + public int read2Coordinate = -1; // This field is overloaded for flow based processing as the end coordinate of read 1. (paired reads not supported) // Additional information used to detect optical dupes public short readGroup = -1; diff --git a/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java b/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java index 6760f6f9dc..d521af853c 100644 --- a/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java +++ b/src/main/java/picard/sam/markduplicates/util/ReadEndsForMarkDuplicates.java @@ -24,6 +24,9 @@ package picard.sam.markduplicates.util; +import htsjdk.samtools.SAMRecord; +import picard.sam.markduplicates.MarkDuplicatesForFlowHelper; + /** * Little struct-like class to hold read pair (and fragment) end data for MarkDuplicatesWithMateCigar * @@ -83,4 +86,24 @@ public ReadEndsForMarkDuplicates clone() { return new ReadEndsForMarkDuplicates(this); } + /** + * This method is used to generate the following two metrics: + * UNPAIRED_DUPS_WITH_TLEN + * UNPAIRED_DUPS_WITHOUT_TLEN + * + * It will return true if and only if the read is single ended and the exact fragment length is + * known (i.e. it was not quality trimmed) + */ + public static boolean isSingleEndReadKnownFragment(final SAMRecord rec) { + if ( rec.getReadUnmappedFlag() || rec.getReadPairedFlag() ) { + return false; + } else if ( MarkDuplicatesForFlowHelper.isAdapterClipped(rec) ) { + return true; + } else if ( !rec.getReadNegativeStrandFlag() ) { + return rec.getEnd() != rec.getUnclippedEnd(); + } else { + return rec.getStart() != rec.getUnclippedStart(); + } + } + } \ No newline at end of file