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

org.broadinstitute.hellbender.utils.mcmc.DecileCollection Maven / Gradle / Ivy

The newest version!
package org.broadinstitute.hellbender.utils.mcmc;

import com.google.common.primitives.Doubles;
import org.apache.commons.math3.stat.descriptive.rank.Percentile;
import org.broadinstitute.hellbender.utils.Utils;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Represents a set of deciles.
 *
 * @author Samuel Lee <[email protected]>
 */
public final class DecileCollection implements Serializable {
    static final long serialVersionUID = 145L;

    private final Map deciles = new HashMap<>();

    /**
     * Constructs a DecileCollection from a list of samples using Apache Commons {@link Percentile}.
     * @param samples   list of samples (caution should be used if this contains NaN or infinite values)
     */
    public DecileCollection(final List samples) {
        Utils.nonNull(samples);
        Utils.validateArg(!samples.isEmpty(), "Cannot construct deciles for empty list of samples.");

        final Percentile percentile = new Percentile();
        percentile.setData(Doubles.toArray(samples));
        final Decile[] decileKeys = Decile.values();
        for (int i = 1; i < 10; i++) {
            final double decile = percentile.evaluate(10 * i);
            deciles.put(decileKeys[i - 1], decile);
        }
    }

    /**
     * Gets the specified decile.
     */
    public double get(final Decile decile) {
        return deciles.get(decile);
    }

    /**
     * Gets a list of all deciles.
     */
    public List getAll() {
        return Collections.unmodifiableList(Stream.of(Decile.values()).map(deciles::get).collect(Collectors.toList()));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy