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

org.broadinstitute.hellbender.utils.codecs.FeatureOutputCodecFinder Maven / Gradle / Ivy

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

import htsjdk.tribble.Feature;
import org.broadinstitute.hellbender.engine.GATKPath;
import org.broadinstitute.hellbender.exceptions.GATKException;
import org.broadinstitute.hellbender.exceptions.UserException;

import java.util.ArrayList;
import java.util.List;

/**
 * This class knows about all FeatureOutputCodec implementations, and allows you to find an
 * appropriate codec to create a given file type.
 */
public final class FeatureOutputCodecFinder {

    private static final List>> outputCodecs =
            new ArrayList<>(10);
    static {
        outputCodecs.add(new BafEvidenceCodec());
        outputCodecs.add(new DepthEvidenceCodec());
        outputCodecs.add(new DiscordantPairEvidenceCodec());
        outputCodecs.add(new SiteDepthCodec());
        outputCodecs.add(new SplitReadEvidenceCodec());
        outputCodecs.add(new BafEvidenceBCICodec());
        outputCodecs.add(new DepthEvidenceBCICodec());
        outputCodecs.add(new DiscordantPairEvidenceBCICodec());
        outputCodecs.add(new SiteDepthBCICodec());
        outputCodecs.add(new SplitReadEvidenceBCICodec());
    }

    public static FeatureOutputCodec>
                    find( final GATKPath outputFilePath ) {
        FeatureOutputCodec result = null;
        final String outputFileName = outputFilePath.toString();
        for ( final FeatureOutputCodec codec : outputCodecs ) {
            if ( codec.canDecode(outputFileName) ) {
                if ( result != null ) {
                    throw new GATKException("Found multiple output codecs for " + outputFileName);
                }
                result = codec;
            }
        }
        if ( result == null ) {
            throw new UserException("No feature output codec found for " + outputFileName);
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy