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

org.broadinstitute.hellbender.tools.CompareIntervalLists Maven / Gradle / Ivy

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

import htsjdk.samtools.SAMSequenceDictionary;
import org.broadinstitute.barclay.argparser.Argument;
import org.broadinstitute.barclay.argparser.ArgumentCollection;
import org.broadinstitute.barclay.argparser.CommandLineProgramProperties;
import org.broadinstitute.hellbender.cmdline.CommandLineProgram;
import org.broadinstitute.hellbender.cmdline.argumentcollections.ReferenceInputArgumentCollection;
import org.broadinstitute.hellbender.cmdline.argumentcollections.RequiredReferenceInputArgumentCollection;
import org.broadinstitute.hellbender.engine.ReferenceDataSource;
import org.broadinstitute.hellbender.exceptions.UserException;
import org.broadinstitute.hellbender.utils.*;
import picard.cmdline.programgroups.IntervalsManipulationProgramGroup;

import java.util.List;

@CommandLineProgramProperties(summary="Compare two interval lists to see if they are equal",
        oneLineSummary = "Compare two interval lists for equality",
        programGroup = IntervalsManipulationProgramGroup.class)
public class CompareIntervalLists extends CommandLineProgram {

    @Argument(fullName ="L")
    public String firstIntervalFile;

    @Argument(fullName ="L2")
    public String secondIntervalFile;

    @ArgumentCollection
    final ReferenceInputArgumentCollection reference = new RequiredReferenceInputArgumentCollection();

    @Override
    public Object doWork() {
        final SAMSequenceDictionary samSequenceDictionary;
        try(final ReferenceDataSource ref = ReferenceDataSource.of(reference.getReferencePath())) {
            samSequenceDictionary = ref.getSequenceDictionary();
        }

        final GenomeLocParser genomeLocParser = new GenomeLocParser(samSequenceDictionary);
        final GenomeLocSortedSet firstIntervals = getGenomeLocs(genomeLocParser, firstIntervalFile);
        final GenomeLocSortedSet secondIntervals = getGenomeLocs(genomeLocParser, secondIntervalFile);
        final String result = IntervalUtils.equateIntervals(firstIntervals.toList(), secondIntervals.toList());
        if(result == null) {
            System.out.println("Intervals are equal");
            return 0;
        } else {
            throw new UserException("Intervals are not equal: \n" + result);
        }
    }

    private static GenomeLocSortedSet getGenomeLocs(final GenomeLocParser genomeLocParser, final String intervalFile) {

        final List genomeLocs = IntervalUtils.parseIntervalArguments(genomeLocParser, intervalFile);
        return  IntervalUtils.sortAndMergeIntervals(genomeLocParser, genomeLocs, IntervalMergingRule.ALL);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy