org.broadinstitute.hellbender.tools.sv.cluster.ClusteringParameters Maven / Gradle / Ivy
The newest version!
package org.broadinstitute.hellbender.tools.sv.cluster;
import org.broadinstitute.hellbender.tools.sv.SVCallRecord;
import java.util.function.BiPredicate;
/**
* Stores clustering parameters for different combinations of supporting algorithm types (depth-only/depth-only,
* depth-only/PESR, and PESR/PESR)
*/
public class ClusteringParameters {
private final double reciprocalOverlap; // minimum fractional reciprocal overlap of event intervals
private final double sizeSimilarity; // minimum min(size1, size2) / max(size1, size)
private final int window; // maximum distance between variant end-points
private final double sampleOverlap; // minimum fractional carrier sample overlap
// if true, both reciprocal overlap and window criteria must be met
// if false, reciprocal overlap and/or window criteria must be met
// NOTE this is currently set to true in all tools but is being kept for possible future use
private final boolean requiresOverlapAndProximity;
// returns true if two given records are the correct type of pair for this parameter set
private final BiPredicate validRecordsPredicate;
public ClusteringParameters(final double reciprocalOverlap, final double sizeSimilarity, final int window, final double sampleOverlap,
final boolean overlapAndProximity, final BiPredicate validRecordsPredicate) {
this.reciprocalOverlap = reciprocalOverlap;
this.sizeSimilarity = sizeSimilarity;
this.window = window;
this.sampleOverlap = sampleOverlap;
this.requiresOverlapAndProximity = overlapAndProximity;
this.validRecordsPredicate = validRecordsPredicate;
}
public double getReciprocalOverlap() {
return reciprocalOverlap;
}
public double getSizeSimilarity() {
return sizeSimilarity;
}
public int getWindow() {
return window;
}
public double getSampleOverlap() {
return sampleOverlap;
}
public boolean requiresOverlapAndProximity() {
return requiresOverlapAndProximity;
}
public boolean isValidPair(final SVCallRecord a, final SVCallRecord b) {
return validRecordsPredicate.test(a, b);
}
public static ClusteringParameters createDepthParameters(final double reciprocalOverlap, final double sizeSimilarity, final int window, final double sampleOverlap) {
return new ClusteringParameters(reciprocalOverlap, sizeSimilarity, window, sampleOverlap, true, (a,b) -> a.isDepthOnly() && b.isDepthOnly());
}
public static ClusteringParameters createMixedParameters(final double reciprocalOverlap, final double sizeSimilarity, final int window, final double sampleOverlap) {
return new ClusteringParameters(reciprocalOverlap, sizeSimilarity, window, sampleOverlap, true, (a,b) -> a.isDepthOnly() != b.isDepthOnly());
}
public static ClusteringParameters createPesrParameters(final double reciprocalOverlap, final double sizeSimilarity, final int window, final double sampleOverlap) {
return new ClusteringParameters(reciprocalOverlap, sizeSimilarity, window, sampleOverlap, true, (a,b) -> !a.isDepthOnly() && !b.isDepthOnly());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy