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

org.broadinstitute.hellbender.tools.copynumber.denoising.SVDDenoisedCopyRatioResult Maven / Gradle / Ivy

The newest version!
package org.broadinstitute.hellbender.tools.copynumber.denoising;

import org.apache.commons.math3.linear.RealMatrix;
import org.broadinstitute.hellbender.tools.copynumber.formats.collections.CopyRatioCollection;
import org.broadinstitute.hellbender.tools.copynumber.formats.metadata.SampleLocatableMetadata;
import org.broadinstitute.hellbender.tools.copynumber.formats.records.CopyRatio;
import org.broadinstitute.hellbender.utils.SimpleInterval;
import org.broadinstitute.hellbender.utils.Utils;

import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * Represents copy ratios for a sample that has been standardized and denoised by an {@link SVDReadCountPanelOfNormals}.
 *
 * @author Samuel Lee <[email protected]>
 */
public final class SVDDenoisedCopyRatioResult {
    private final CopyRatioCollection standardizedCopyRatios;
    private final CopyRatioCollection denoisedCopyRatios;

    public SVDDenoisedCopyRatioResult(final SampleLocatableMetadata metadata,
                                      final List intervals,
                                      final RealMatrix standardizedCopyRatioValues,
                                      final RealMatrix denoisedCopyRatioValues) {
        Utils.nonNull(metadata);
        Utils.nonEmpty(intervals);
        Utils.nonNull(standardizedCopyRatioValues);
        Utils.nonNull(denoisedCopyRatioValues);
        Utils.validateArg(standardizedCopyRatioValues.getRowDimension() == 1,
                "Standardized copy-ratio values must contain only a single row.");
        Utils.validateArg(denoisedCopyRatioValues.getRowDimension() == 1,
                "Denoised copy-ratio values must contain only a single row.");
        Utils.validateArg(intervals.size() == standardizedCopyRatioValues.getColumnDimension(),
                "Number of intervals and columns in standardized copy-ratio values must match.");
        Utils.validateArg(intervals.size() == denoisedCopyRatioValues.getColumnDimension(),
                "Number of intervals and columns in denoised copy-ratio values must match.");
        this.standardizedCopyRatios = new CopyRatioCollection(
                metadata,
                IntStream.range(0, intervals.size())
                        .mapToObj(i -> new CopyRatio(intervals.get(i), standardizedCopyRatioValues.getEntry(0, i)))
                        .collect(Collectors.toList()));
        this.denoisedCopyRatios = new CopyRatioCollection(
                metadata,
                IntStream.range(0, intervals.size())
                        .mapToObj(i -> new CopyRatio(intervals.get(i), denoisedCopyRatioValues.getEntry(0, i)))
                        .collect(Collectors.toList()));
    }

    public CopyRatioCollection getStandardizedCopyRatios() {
        return standardizedCopyRatios;
    }

    public CopyRatioCollection getDenoisedCopyRatios() {
        return denoisedCopyRatios;
    }

    public void write(final File standardizedCopyRatiosFile,
                      final File denoisedCopyRatiosFile) {
        Utils.nonNull(standardizedCopyRatiosFile);
        Utils.nonNull(denoisedCopyRatiosFile);
        standardizedCopyRatios.write(standardizedCopyRatiosFile);
        denoisedCopyRatios.write(denoisedCopyRatiosFile);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy