From 1b0cdd990ac96cba5643f874962d8980d6ac1ff1 Mon Sep 17 00:00:00 2001 From: tfenne Date: Fri, 19 Aug 2016 12:28:00 -0400 Subject: [PATCH] Added a "RANDOM" duplicate scoring strategy. --- src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java b/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java index 9d0bed5cb..1abd51473 100644 --- a/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java +++ b/src/main/java/htsjdk/samtools/DuplicateScoringStrategy.java @@ -24,6 +24,8 @@ package htsjdk.samtools; +import htsjdk.samtools.util.Murmur3; + /** * This class helps us compute and compare duplicate scores, which are used for selecting the non-duplicate * during duplicate marking (see MarkDuplicates). @@ -33,9 +35,13 @@ public enum ScoringStrategy { SUM_OF_BASE_QUALITIES, - TOTAL_MAPPED_REFERENCE_LENGTH + TOTAL_MAPPED_REFERENCE_LENGTH, + RANDOM, } + /** Hash used for the RANDOM scoring strategy. */ + private static final Murmur3 hasher = new Murmur3(1); + /** An enum to use for storing temporary attributes on SAMRecords. */ private static enum Attr { DuplicateScore } @@ -80,6 +86,8 @@ public static short computeDuplicateScore(final SAMRecord record, final ScoringS score += SAMUtils.getMateCigar(record).getReferenceLength(); } break; + case RANDOM: + score += (short) (hasher.hashUnencodedChars(record.getReadName()) >> 16); } storedScore = score;