Skip to content

Commit

Permalink
Splitting responsibility for AbstractWsgMetricsCollector class
Browse files Browse the repository at this point in the history
  • Loading branch information
LadDeep committed Apr 7, 2023
1 parent 2816540 commit c147cbb
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 31 deletions.
60 changes: 32 additions & 28 deletions src/main/java/picard/analysis/AbstractWgsMetricsCollector.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ public abstract class AbstractWgsMetricsCollector<T extends AbstractRecordAndOff
*/
protected long counter = 0;

protected WgsHistogramCollector histogram;

/**
* Creates a collector and initializes the inner data structures
*
Expand All @@ -106,6 +108,7 @@ public abstract class AbstractWgsMetricsCollector<T extends AbstractRecordAndOff
this.coverageCap = coverageCap;
this.intervals = intervals;
this.usingStopAfter = collectWgsMetrics.STOP_AFTER > 0;
this.histogram = new WgsHistogramCollector(coverageCap);
}

/**
Expand Down Expand Up @@ -134,33 +137,33 @@ public void addToMetricsFile(final MetricsFile<WgsMetrics, Integer> file,

// add them to the file
file.addMetric(metrics);
file.addHistogram(getHighQualityDepthHistogram());
if (includeBQHistogram) addBaseQHistogram(file);
}

protected void addBaseQHistogram(final MetricsFile<WgsMetrics, Integer> file) {
file.addHistogram(getUnfilteredBaseQHistogram());
}

protected Histogram<Integer> getHighQualityDepthHistogram() {
return getHistogram(highQualityDepthHistogramArray, "coverage", "high_quality_coverage_count");
}

protected Histogram<Integer> getUnfilteredDepthHistogram() {
return getHistogram(unfilteredDepthHistogramArray, "coverage", "unfiltered_coverage_count");
}

protected Histogram<Integer> getUnfilteredBaseQHistogram() {
return getHistogram(unfilteredBaseQHistogramArray, "baseq", "unfiltered_baseq_count");
file.addHistogram(histogram.getHighQualityDepthHistogram());
if (includeBQHistogram) histogram.addBaseQHistogram(file);
}

protected Histogram<Integer> getHistogram(final long[] array, final String binLabel, final String valueLabel) {
final Histogram<Integer> histogram = new Histogram<>(binLabel, valueLabel);
for (int i = 0; i < array.length; ++i) {
histogram.increment(i, array[i]);
}
return histogram;
}
// protected void addBaseQHistogram(final MetricsFile<WgsMetrics, Integer> file) {
// file.addHistogram(getUnfilteredBaseQHistogram());
// }
//
// protected Histogram<Integer> getHighQualityDepthHistogram() {
// return getHistogram(highQualityDepthHistogramArray, "coverage", "high_quality_coverage_count");
// }
//
// protected Histogram<Integer> getUnfilteredDepthHistogram() {
// return getHistogram(unfilteredDepthHistogramArray, "coverage", "unfiltered_coverage_count");
// }
//
// protected Histogram<Integer> getUnfilteredBaseQHistogram() {
// return getHistogram(unfilteredBaseQHistogramArray, "baseq", "unfiltered_baseq_count");
// }
//
// protected Histogram<Integer> getHistogram(final long[] array, final String binLabel, final String valueLabel) {
// final Histogram<Integer> histogram = new Histogram<>(binLabel, valueLabel);
// for (int i = 0; i < array.length; ++i) {
// histogram.increment(i, array[i]);
// }
// return histogram;
// }

/**
* Creates CollectWgsMetrics.WgsMetrics - the object holding the result of CollectWgsMetrics
Expand All @@ -176,8 +179,8 @@ protected WgsMetrics getMetrics(final CountingFilter dupeFilter,
final CountingPairedFilter pairFilter) {
return collectWgsMetrics.generateWgsMetrics(
this.intervals,
getHighQualityDepthHistogram(),
getUnfilteredDepthHistogram(),
histogram.getHighQualityDepthHistogram(),
histogram.getUnfilteredDepthHistogram(),
collectWgsMetrics.getBasesExcludedBy(adapterFilter),
collectWgsMetrics.getBasesExcludedBy(mapqFilter),
collectWgsMetrics.getBasesExcludedBy(dupeFilter),
Expand All @@ -186,7 +189,7 @@ protected WgsMetrics getMetrics(final CountingFilter dupeFilter,
basesExcludedByOverlap,
basesExcludedByCapping,
coverageCap,
getUnfilteredBaseQHistogram(),
histogram.getUnfilteredBaseQHistogram(),
collectWgsMetrics.SAMPLE_SIZE);
}

Expand Down Expand Up @@ -218,4 +221,5 @@ boolean isReferenceBaseN(final int position, final ReferenceSequence ref) {
final byte base = ref.getBases()[position - 1];
return SequenceUtil.isNoCall(base);
}

}
3 changes: 2 additions & 1 deletion src/main/java/picard/analysis/CollectWgsMetrics.java
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,7 @@ protected int doWork() {
iterator.setIncludeNonPfReads(false);

final AbstractWgsMetricsCollector<?> collector = getCollector(COVERAGE_CAP, getIntervalsToExamine());
final WgsHistogramCollector histogramCollector = new WgsHistogramCollector(COVERAGE_CAP);
final WgsMetricsProcessor processor = getWgsMetricsProcessor(progress, refWalker, iterator, collector);
processor.processFile();

Expand All @@ -243,7 +244,7 @@ protected int doWork() {
// Write out theoretical sensitivity results.
final MetricsFile<TheoreticalSensitivityMetrics, ?> theoreticalSensitivityMetrics = getMetricsFile();
log.info("Calculating theoretical sentitivity at " + ALLELE_FRACTION.size() + " allele fractions.");
List<TheoreticalSensitivityMetrics> tsm = TheoreticalSensitivity.calculateSensitivities(SAMPLE_SIZE, collector.getUnfilteredDepthHistogram(), collector.getUnfilteredBaseQHistogram(), ALLELE_FRACTION);
List<TheoreticalSensitivityMetrics> tsm = TheoreticalSensitivity.calculateSensitivities(SAMPLE_SIZE, collector.histogram.getUnfilteredDepthHistogram(), histogramCollector.getUnfilteredDepthHistogram(), ALLELE_FRACTION);
theoreticalSensitivityMetrics.addAllMetrics(tsm);
theoreticalSensitivityMetrics.write(THEORETICAL_SENSITIVITY_OUTPUT);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,12 +242,12 @@ public void addToMetricsFile(final MetricsFile<WgsMetrics, Integer> file,
file.addHistogram(highQualityDepthHistogramNonZero);

if (includeBQHistogram) {
addBaseQHistogram(file);
histogram.addBaseQHistogram(file);
}
}

protected Histogram<Integer> getDepthHistogram() {
return getHistogram(highQualityDepthHistogramArray, "coverage", "count_WHOLE_GENOME");
return histogram.getHistogram(highQualityDepthHistogramArray, "coverage", "count_WHOLE_GENOME");
}

private Histogram<Integer> getDepthHistogramNonZero() {
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/picard/analysis/WgsHistogramCollector.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package picard.analysis;

import htsjdk.samtools.metrics.MetricsFile;
import htsjdk.samtools.util.Histogram;

public class WgsHistogramCollector {
private long[] highQualityDepthHistogramArray;
protected final long[] unfilteredDepthHistogramArray;
protected final long[] unfilteredBaseQHistogramArray;

public WgsHistogramCollector(final int coverageCap) {
unfilteredDepthHistogramArray = new long[coverageCap + 1];
highQualityDepthHistogramArray = new long[coverageCap + 1];
unfilteredBaseQHistogramArray = new long[Byte.MAX_VALUE];
}

protected void addBaseQHistogram(final MetricsFile<WgsMetrics, Integer> file) {
file.addHistogram(getUnfilteredBaseQHistogram());
}

protected Histogram<Integer> getHighQualityDepthHistogram() {
return getHistogram(highQualityDepthHistogramArray, "coverage", "high_quality_coverage_count");
}

protected Histogram<Integer> getUnfilteredDepthHistogram() {
return getHistogram(unfilteredDepthHistogramArray, "coverage", "unfiltered_coverage_count");
}

protected Histogram<Integer> getUnfilteredBaseQHistogram() {
return getHistogram(unfilteredBaseQHistogramArray, "baseq", "unfiltered_baseq_count");
}

protected Histogram<Integer> getHistogram(final long[] array, final String binLabel, final String valueLabel) {
final Histogram<Integer> histogram = new Histogram<>(binLabel, valueLabel);
for (int i = 0; i < array.length; ++i) {
histogram.increment(i, array[i]);
}
return histogram;
}
}

0 comments on commit c147cbb

Please sign in to comment.