diff --git a/java/src/org/broadinstitute/sting/gatk/refdata/rodGELI.java b/java/src/org/broadinstitute/sting/gatk/refdata/rodGELI.java new file mode 100755 index 000000000..df0cb1e7a --- /dev/null +++ b/java/src/org/broadinstitute/sting/gatk/refdata/rodGELI.java @@ -0,0 +1,81 @@ +package org.broadinstitute.sting.gatk.refdata; + +import java.util.Iterator; +import java.io.IOException; +import java.io.File; + +import edu.mit.broad.picard.genotype.geli.GeliFileReader; +import edu.mit.broad.picard.genotype.geli.GenotypeLikelihoods; +import org.broadinstitute.sting.utils.GenomeLoc; +import org.broadinstitute.sting.utils.GenomeLocParser; + +import net.sf.samtools.util.CloseableIterator; + + +/** + * This class wraps Picard Geli CHiP data and presents it as a ROD. + */ + +public class rodGELI extends BasicReferenceOrderedDatum { + // ---------------------------------------------------------------------- + // + // Constructors + // + // ---------------------------------------------------------------------- + + private GenotypeLikelihoods gh = null; + + public rodGELI(final String name, GenotypeLikelihoods gh) { + super(name); + this.gh = gh; + } + + @Override + public GenomeLoc getLocation() { + return GenomeLocParser.createGenomeLoc(gh.getSequenceIndex(), gh.getPosition()); + } + + /** Required by ReferenceOrderedDatum interface. This implementation provides its own iterator, + * so this method does nothing at all (always returns false). + * + */ + @Override + public boolean parseLine(Object header, String[] parts) throws IOException { + return false; + } + + @Override + public String toString() { + return gh.toString(); + } + + private static class rodGELIIterator implements Iterator { + + private String rodName = null; + private GeliFileReader parser = null; + private CloseableIterator iterator = null; + + rodGELIIterator(String name, File f) { + rodName = name; + parser = new GeliFileReader(f); + iterator = parser.iterator(); + } + + public boolean hasNext() { + return iterator.hasNext(); + } + + public rodGELI next() { + return new rodGELI(rodName, iterator.next()); + } + + public void remove() { + throw new UnsupportedOperationException("'remove' operation is not supported for GELIs"); + } + + } + + public static Iterator createIterator(String name, File file) { + return new rodGELI.rodGELIIterator(name,file); + } +} \ No newline at end of file