Package picard.analysis
Class MergeableMetricBase
- java.lang.Object
-
- htsjdk.samtools.metrics.MetricBase
-
- picard.analysis.MergeableMetricBase
-
- Direct Known Subclasses:
CollectArraysVariantCallingMetrics.ArraysVariantCallingSummaryMetrics
,CollectQualityYieldMetrics.QualityYieldMetrics
,CollectVariantCallingMetrics.VariantCallingSummaryMetrics
,DuplicationMetrics
,ErrorMetric
,ErrorSummaryMetrics
,IndependentReplicateMetric
,MendelianViolationMetrics
,WgsMetrics
public abstract class MergeableMetricBase extends htsjdk.samtools.metrics.MetricBase
An extension of MetricBase that knows how to merge-by-adding fields that are appropriately annotated (MergeByAdding
). It also provides an interface for calculating derived fieldscalculateDerivedFields()
(and an annotation that informs that said fields are derivedNoMergingIsDerived
). Finally, it also allows for an annotation that suggests that a field will be used as an ID and thus merging will simply ensure that these fields are equalMergeByAssertEquals
. Other annotations are available, though they all currently imply that noimplicit action will be takenMergingIsManual
andNoMergingKeepsValue
.MergeByAdding
is only enabled for the following types: int, Integer, float, Float, double, Double, short, Short, long, Long, byte, Byte. Overflow will be detected (for the short, and byte types) and an exception thrown.Every (non-static) field in this class
must be @Annotated by one of:MergeByAdding
,MergeByAssertEquals
,NoMergingIsDerived
,MergingIsManual
,NoMergingKeepsValue
. Static fields may be annotated, but not withMergeByAdding
, there will be no automatic modification of static fieldsMergeByAdding
- When merging another metric into this one, the value of the field in the other class will be added to the value in this. This will happen automatically!
MergeByAssertEquals
- When merging another metric into this one, the code will assert that value of the field in the other class is equal to the value in this.
NoMergingIsDerived
- When merging another metric into this one, no action will be taken since the value of this field should be derived from the other field. This derivation should happen in the "calculateDerivedFields" method.
MergingIsManual
- When merging another metric into this one, the resulting value will be calculated "manually", i.e. by custom code in the merge method. The resulting value can depend on both this and other objects.
NoMergingKeepsValue
- When merging another metric into this one, the value of the field in this remains unchanged by design.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
MergeableMetricBase.MergeByAdding
Metrics whose values can be merged by adding.protected static interface
MergeableMetricBase.MergeByAssertEquals
Metrics whose values should be equal when merging.protected static interface
MergeableMetricBase.MergingIsManual
Metrics that are merged manually in themerge(MergeableMetricBase)
()}.protected static interface
MergeableMetricBase.NoMergingIsDerived
Metrics that are not merged, but are subsequently derived from other metrics, for example bycalculateDerivedFields()
.protected static interface
MergeableMetricBase.NoMergingKeepsValue
Metrics that are not merged.
-
Constructor Summary
Constructors Constructor Description MergeableMetricBase()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
calculateDerivedFields()
Placeholder method that will calculate the derived fields from the other ones.boolean
canMerge(MergeableMetricBase other)
Checks if this instance can be merged with another Other must have all the fields that this instance has, and the fields that are annotated as MergeByAssertEquals must contain the same valueMergeableMetricBase
merge(Collection<? extends MergeableMetricBase> many)
for a collection of MergeableMetricBase, merge them all into "this" one.MergeableMetricBase
merge(MergeableMetricBase other)
Merge another metric into this oneboolean
mergeIfCan(MergeableMetricBase other)
Merges another MergableMetricBase if possible
-
-
-
Method Detail
-
canMerge
public boolean canMerge(MergeableMetricBase other)
Checks if this instance can be merged with another Other must have all the fields that this instance has, and the fields that are annotated as MergeByAssertEquals must contain the same value- Parameters:
other
- metric that will be merged into this one.- Returns:
- true if the other metric can be merged into this one.
-
mergeIfCan
public boolean mergeIfCan(MergeableMetricBase other)
Merges another MergableMetricBase if possible- Parameters:
other
- another MergableMetricBase instance to merge, must of the same class as this.- Returns:
- true if the other metric can be merged into this one.
-
merge
public MergeableMetricBase merge(Collection<? extends MergeableMetricBase> many)
for a collection of MergeableMetricBase, merge them all into "this" one.- Parameters:
many
- a Collection of MergeableMetricBase
-
merge
public MergeableMetricBase merge(MergeableMetricBase other)
Merge another metric into this one- Parameters:
other
- metric to merge into this one.
-
calculateDerivedFields
public void calculateDerivedFields()
Placeholder method that will calculate the derived fields from the other ones. Classes that are derived from non-trivial derived classes should consider calling super.calculateDerivedFields() as well. Fields whose value will change due to this method should be annotated withNoMergingKeepsValue
.
-
-