From 0fb9179f7652d787c5a627bf4b3a1633b639aa96 Mon Sep 17 00:00:00 2001 From: Eric Banks Date: Thu, 7 Jun 2012 19:41:03 -0400 Subject: [PATCH] BQSR optimization: don't clone the original quals for each read, we can just overwrite the original array --- .../utils/recalibration/BaseRecalibration.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/recalibration/BaseRecalibration.java b/public/java/src/org/broadinstitute/sting/utils/recalibration/BaseRecalibration.java index d85fb03cd..5b5f99b3f 100644 --- a/public/java/src/org/broadinstitute/sting/utils/recalibration/BaseRecalibration.java +++ b/public/java/src/org/broadinstitute/sting/utils/recalibration/BaseRecalibration.java @@ -88,19 +88,18 @@ public class BaseRecalibration { public void recalibrateRead(final GATKSAMRecord read) { final ReadCovariates readCovariates = RecalDataManager.computeCovariates(read, requestedCovariates); // compute all covariates for the read for (final EventType errorModel : EventType.values()) { // recalibrate all three quality strings - final byte[] originalQuals = read.getBaseQualities(errorModel); - final byte[] recalQuals = originalQuals.clone(); + final byte[] quals = read.getBaseQualities(errorModel); for (int offset = 0; offset < read.getReadLength(); offset++) { // recalibrate all bases in the read - byte qualityScore = originalQuals[offset]; + final byte originalQualityScore = quals[offset]; - if (qualityScore >= QualityUtils.MIN_USABLE_Q_SCORE) { // only recalibrate usable qualities (the original quality will come from the instrument -- reported quality) + if (originalQualityScore >= QualityUtils.MIN_USABLE_Q_SCORE) { // only recalibrate usable qualities (the original quality will come from the instrument -- reported quality) final BitSet[] keySet = readCovariates.getKeySet(offset, errorModel); // get the keyset for this base using the error model - qualityScore = performSequentialQualityCalculation(keySet, errorModel); // recalibrate the base + final byte recalibratedQualityScore = performSequentialQualityCalculation(keySet, errorModel); // recalibrate the base + quals[offset] = recalibratedQualityScore; } - recalQuals[offset] = qualityScore; } - read.setBaseQualities(recalQuals, errorModel); + read.setBaseQualities(quals, errorModel); } }