Class MultiLevelCollector<METRIC_TYPE extends htsjdk.samtools.metrics.MetricBase,HISTOGRAM_KEY extends Comparable<HISTOGRAM_KEY>,ARGTYPE>
java.lang.Object
org.broadinstitute.hellbender.metrics.MultiLevelCollector<METRIC_TYPE,HISTOGRAM_KEY,ARGTYPE>
- Type Parameters:
METRIC_TYPE
- The type of metrics being collectedHISTOGRAM_KEY
- If there is are Histograms related to metrics of typethen is the key value to these Histograms ARGTYPE
- The type of argument passed to individual PerUnitMetricCollector (see SAMRecordMultilevelCollector and PerUnitMetricCollector)
- Direct Known Subclasses:
SAMRecordAndReferenceMultiLevelCollector
,SAMRecordMultiLevelCollector
public abstract class MultiLevelCollector<METRIC_TYPE extends htsjdk.samtools.metrics.MetricBase,HISTOGRAM_KEY extends Comparable<HISTOGRAM_KEY>,ARGTYPE>
extends Object
MultiLevelCollector handles accumulating Metrics at different MetricAccumulationLevels(ALL_READS, SAMPLE, LIBRARY, READ_GROUP).
Based on the accumulationLevels and readGroup records passed to its constructor, MultiLevelCollector
will instantiate the number of PerUnitMetricCollector's needed to generate metrics for each of the levels provided.
To Use:
Instantiate a MultiLevelCollector and call setup(see thoughts about extending MultiLevelCollector below)
setup will create the underlying classes that will handle the accumulation level logic.
Pass all reads you wish to collect data against to MultiLevelCollector via the acceptRecord method
Call finish and use addAllLevelsToFile to add all of the metrics at each accumulation level to the given file.
Extend MultiLevelCollector and implement makeArg and makeChildCollector
You will most likely want to make a class that extends PerUnitMetricCollector. This class should do the work of keeping
track of values for one specific "accumulation unit" (e.g. for one library, or for one read group depending on what levels
you are accumulating at).
If a record has any expensive calculations to be done (that don't need to be done differently depending
on what sample/library/read group the read is for) then create a container class for the results of these calculations and pass
this class as the ARGTYPE of both the PerUnitMetricCollector and MultiLevelCollector. You can then do these calculations in the makeArg
method and they will only be done once per record.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
acceptRecord
(htsjdk.samtools.SAMRecord record, htsjdk.samtools.reference.ReferenceSequence refSeq) Construct a argument of ARGTYPE using the given SAMRecord and ReferenceSequence then pass this value to all collectors that should include this recordvoid
addAllLevelsToFile
(htsjdk.samtools.metrics.MetricsFile<METRIC_TYPE, HISTOGRAM_KEY> file) Add all metrics to the given file in the following MetricAccumulationLevel order ALL_READS, SAMPLE, LIBRARY, READ_GROUP.void
finish()
Call finish on all PerUnitMetricCollectorsGet the PerUnitMetricCollector that collects reads for all levelsprotected PerUnitMetricCollector<METRIC_TYPE,
HISTOGRAM_KEY, ARGTYPE> protected abstract ARGTYPE
makeArg
(htsjdk.samtools.SAMRecord samRec, htsjdk.samtools.reference.ReferenceSequence refSeq) protected abstract PerUnitMetricCollector<METRIC_TYPE,
HISTOGRAM_KEY, ARGTYPE> makeChildCollector
(String sample, String library, String readGroup) Construct a PerUnitMetricCollector with the given arguments.protected PerUnitMetricCollector<METRIC_TYPE,
HISTOGRAM_KEY, ARGTYPE> makeLibraryCollector
(htsjdk.samtools.SAMReadGroupRecord rg) protected PerUnitMetricCollector<METRIC_TYPE,
HISTOGRAM_KEY, ARGTYPE> makeReadGroupCollector
(htsjdk.samtools.SAMReadGroupRecord rg) protected PerUnitMetricCollector<METRIC_TYPE,
HISTOGRAM_KEY, ARGTYPE> makeSampleCollector
(htsjdk.samtools.SAMReadGroupRecord rg) protected void
setup
(Set<MetricAccumulationLevel> accumulationLevels, List<htsjdk.samtools.SAMReadGroupRecord> samRgRecords) Use an init method so that overloaded methods in subclasses can pass use parameters that are initialized in their constructor
-
Field Details
-
UNKNOWN
- See Also:
-
-
Constructor Details
-
MultiLevelCollector
public MultiLevelCollector()
-
-
Method Details
-
makeArg
protected abstract ARGTYPE makeArg(htsjdk.samtools.SAMRecord samRec, htsjdk.samtools.reference.ReferenceSequence refSeq) -
makeChildCollector
protected abstract PerUnitMetricCollector<METRIC_TYPE,HISTOGRAM_KEY, makeChildCollectorARGTYPE> (String sample, String library, String readGroup) Construct a PerUnitMetricCollector with the given arguments.- Parameters:
sample
- If aggregating by ALL_READS this will be null, otherwise the sample that will be used to identify this collectorlibrary
- If aggregating by SAMPLE this will be null, otherwise the library that will be used to identify this collectorreadGroup
- If aggregating by LIBRARY this will be null, otherwise the readGroup that will be used to identify this collector- Returns:
- A PerUnitMetricCollector parameterized by the given arguments
-
makeAllReadCollector
-
makeSampleCollector
protected PerUnitMetricCollector<METRIC_TYPE,HISTOGRAM_KEY, makeSampleCollectorARGTYPE> (htsjdk.samtools.SAMReadGroupRecord rg) -
makeLibraryCollector
protected PerUnitMetricCollector<METRIC_TYPE,HISTOGRAM_KEY, makeLibraryCollectorARGTYPE> (htsjdk.samtools.SAMReadGroupRecord rg) -
makeReadGroupCollector
protected PerUnitMetricCollector<METRIC_TYPE,HISTOGRAM_KEY, makeReadGroupCollectorARGTYPE> (htsjdk.samtools.SAMReadGroupRecord rg) -
setup
protected void setup(Set<MetricAccumulationLevel> accumulationLevels, List<htsjdk.samtools.SAMReadGroupRecord> samRgRecords) Use an init method so that overloaded methods in subclasses can pass use parameters that are initialized in their constructor- Parameters:
accumulationLevels
- PerUnitMetricCollectors will only be created for the levels identified by accumulationLevelssamRgRecords
- PerUnitMetricCollectors will be created for each of the different samples, libraries, and readGroups found in the records depending on the accumulationLevels provided
-
acceptRecord
public void acceptRecord(htsjdk.samtools.SAMRecord record, htsjdk.samtools.reference.ReferenceSequence refSeq) Construct a argument of ARGTYPE using the given SAMRecord and ReferenceSequence then pass this value to all collectors that should include this record -
finish
public void finish()Call finish on all PerUnitMetricCollectors -
getAllReadsCollector
Get the PerUnitMetricCollector that collects reads for all levels -
addAllLevelsToFile
Add all metrics to the given file in the following MetricAccumulationLevel order ALL_READS, SAMPLE, LIBRARY, READ_GROUP.
-