Package picard.vcf

Source Code of picard.vcf.ByIntervalListVariantContextIterator

package picard.vcf;

import htsjdk.samtools.util.CloseableIterator;
import htsjdk.samtools.util.Interval;
import htsjdk.samtools.util.IntervalList;
import htsjdk.variant.variantcontext.VariantContext;
import htsjdk.variant.vcf.VCFFileReader;

import java.util.Iterator;
import java.util.Set;

/**
* Takes a VCFFileReader and an IntervalList and provides a single iterator over all variants in all the intervals.
*
* @TODO Currently this uses the VCFFileReader.query method - could be useful to make a version of this iterator that uses the .iterator method
*
* @author Tim Fennell
* @author George Grant
*/
public class ByIntervalListVariantContextIterator implements Iterator<VariantContext> {
    private final VCFFileReader reader;
    private final Iterator<Interval> intervals;
    private CloseableIterator<VariantContext> currentIterator;

    public ByIntervalListVariantContextIterator(final VCFFileReader reader, final IntervalList intervals) {
        this.reader = reader;
        this.intervals = intervals.uniqued().iterator();
    }

    /** If the current iterator is null or exhausted, move to the next interval. */
    private void advance() {
        while ((currentIterator == null || !currentIterator.hasNext()) && this.intervals.hasNext()) {
            if (currentIterator != null) currentIterator.close();
            final Interval i = this.intervals.next();
            this.currentIterator = this.reader.query(i.getSequence(), i.getStart(), i.getEnd());
        }
    }

    @Override public boolean hasNext() {
        advance();
        return this.currentIterator.hasNext();
    }

    @Override public VariantContext next() {
        advance();
        return this.currentIterator.next();
    }

    @Override public void remove() {
        throw new UnsupportedOperationException();
    }
}
TOP

Related Classes of picard.vcf.ByIntervalListVariantContextIterator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.