@Override public boolean equals(final Object other) { if(!(other instanceof BAMFileSpan)) return false; List<Chunk> theseChunks = getChunks(); List<Chunk> otherChunks = ((BAMFileSpan)other).getChunks(); if(theseChunks.size() != otherChunks.size()) return false; for(int i = 0; i < theseChunks.size(); i++) { if(!theseChunks.get(i).equals(otherChunks.get(i))) return false; } return true; }
@Override public CloseableIterator<SAMRecord> getIterator(SAMFileSpan chunks) { if (run == null) { throw new RuntimeException("Cannot create iterator - SRA run is uninitialized"); } if (virtualHeader == null) { throw new RuntimeException("Cannot create iterator - SAM file header is uninitialized"); } List<Chunk> chunkList = ((BAMFileSpan) chunks).getChunks(); final SRAIterator newIterator = new SRAIterator(acc, run, virtualHeader, cachedReferences, recordRangeInfo, chunkList); if (validationStringency != null) { newIterator.setValidationStringency(validationStringency); } return newIterator; }
@Override public CloseableIterator<SAMRecord> getIterator(SAMFileSpan chunks) { if (run == null) { throw new RuntimeException("Cannot create iterator - SRA run is uninitialized"); } if (virtualHeader == null) { throw new RuntimeException("Cannot create iterator - SAM file header is uninitialized"); } List<Chunk> chunkList = ((BAMFileSpan) chunks).getChunks(); final SRAIterator newIterator = new SRAIterator(acc, run, virtualHeader, cachedReferences, recordRangeInfo, chunkList); if (validationStringency != null) { newIterator.setValidationStringency(validationStringency); } return newIterator; }
@Test(dataProvider = "testRemoveContentsAfterProvider") public void testRemoveContentsAfter(BAMFileSpan originalSpan, BAMFileSpan cutoff, BAMFileSpan expectedSpan) { // only end value in cutoff is used Assert.assertEquals( ((BAMFileSpan) originalSpan.removeContentsAfter(cutoff)).getChunks(), expectedSpan.getChunks()); }
@Test(dataProvider = "testRemoveContentsBeforeProvider") public void testRemoveContentsBefore(BAMFileSpan originalSpan, BAMFileSpan cutoff, BAMFileSpan expectedSpan) { // only start value in cutoff is used Assert.assertEquals( ((BAMFileSpan) originalSpan.removeContentsBefore(cutoff)).getChunks(), expectedSpan.getChunks()); }
@Override public BAMFileSpan getSpanOverlapping(int referenceIndex, int startPos, int endPos) { BinList binList = getBinsOverlapping(referenceIndex, startPos, endPos); BAMFileSpan result = new BAMFileSpan(); Set<Chunk> savedChunks = new HashSet<Chunk>(); for (Bin bin : binList) { List<Chunk> chunks = getSpanOverlapping(bin).getChunks(); for (Chunk chunk : chunks) { if (!savedChunks.contains(chunk)) { savedChunks.add(chunk); result.add(chunk); } } } return result; }
@Override public BAMFileSpan getSpanOverlapping(int referenceIndex, int startPos, int endPos) { BinList binList = getBinsOverlapping(referenceIndex, startPos, endPos); BAMFileSpan result = new BAMFileSpan(); Set<Chunk> savedChunks = new HashSet<Chunk>(); for (Bin bin : binList) { List<Chunk> chunks = getSpanOverlapping(bin).getChunks(); for (Chunk chunk : chunks) { if (!savedChunks.contains(chunk)) { savedChunks.add(chunk); result.add(chunk); } } } return result; }
/** * Create a new GATKBAMFileSpan from an existing BAMFileSpan. * @param sourceFileSpan */ public GATKBAMFileSpan(SAMFileSpan sourceFileSpan) { if(!(sourceFileSpan instanceof BAMFileSpan)) throw new SAMException("Unable to create GATKBAMFileSpan from a SAMFileSpan. Please submit a BAMFileSpan instead"); BAMFileSpan sourceBAMFileSpan = (BAMFileSpan)sourceFileSpan; for(Chunk chunk: sourceBAMFileSpan.getChunks()) add(chunk instanceof GATKChunk ? chunk : new GATKChunk(chunk)); }
@Test public static void testGetSpanOverlapping() { BAMFileSpan bfs1 = ucsi.getSpanOverlapping(1, 939520000, 939529000); BAMFileSpan bfs2 = ucsi.getSpanOverlapping(1, 240000000, 249228250); BAMFileSpan bfs3 = ubai.getSpanOverlapping(1, 240000000, 249228250); Assert.assertTrue(bfs1.isEmpty()); Assert.assertEquals(bfs2.getChunks(), bfs3.getChunks()); BAMFileSpan bfs4 = ucsi.getSpanOverlapping(bin10); Assert.assertEquals(bfs4.getChunks().size(), 3); } }
@Override public GATKBAMIndexData readReferenceSequence(final int referenceSequence) { final List<SAMSequenceRecord> sequences = sourceHeader.getSequenceDictionary().getSequences(); if (referenceSequence >= sequences.size()) throw new ReviewedGATKException("Sequence number " + referenceSequence + " cannot be greater or equal to " + sequences.size() + " in index file " + sourceFile); final BinList sourceBins = index.getBinsOverlapping(referenceSequence, 0, sequences.get(referenceSequence).getSequenceLength()); final List<GATKBin> bins = new ArrayList<>(); for (Bin sourceBin : sourceBins) { final int indexBin = sourceBin.getBinNumber(); while(indexBin >= bins.size()) bins.add(null); final GATKBin bin = new GATKBin(referenceSequence, indexBin); final List<Chunk> chunks = index.getSpanOverlapping(sourceBin).getChunks(); final List<GATKChunk> gatkChunks = new ArrayList<>(chunks.size()); for (Chunk chunk : chunks) { gatkChunks.add(new GATKChunk(chunk)); } bin.setChunkList(gatkChunks.toArray(new GATKChunk[gatkChunks.size()])); bins.set(indexBin, bin); } // there is no interface to get linear index from HTSJDK final LinearIndex linearIndex = new LinearIndex(referenceSequence, 0, new long[]{}); return new GATKBAMIndexData(this,referenceSequence,bins,linearIndex); }
span = (BAMFileSpan) span.removeContentsBefore(splitSpan); span = (BAMFileSpan) span.removeContentsAfter(splitSpan); if (!span.getChunks().isEmpty()) { filteredSplits.add(new FileVirtualSplit(virtualSplit.getPath(), splitStart, splitEnd, virtualSplit.getLocations(), span.toCoordinateArray()));
if (!span.getChunks().isEmpty()) { filteredSplits.add(new FileVirtualSplit(virtualSplit.getPath(), splitStart, splitEnd, virtualSplit.getLocations(), span.toCoordinateArray()));
if (!span.getChunks().isEmpty()) { filteredSplits.add(new FileVirtualSplit(virtualSplit.getPath(), splitStart, splitEnd, virtualSplit.getLocations(), span.toCoordinateArray()));