All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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