@Override public void close() { samRecordIterator.close(); }
@Override public void close() { delegate.close(); }
@Override public void close() { iterator.close(); }
public void close() { i.close(); }
@Override public void close() throws IOException { iterator.close(); }
@Override public void close() throws IOException { iterator.close(); }
@Override public void close() throws IOException { iterator.close(); }
iterator.close(); reader.close();
/** * Adds the provided reader's records to the detector. * @return The number of records read */ public long add(final long maxRecords, final SAMFileReader reader) { final SAMRecordIterator iterator = reader.iterator(); long recordCount = 0; try { while (iterator.hasNext() && recordCount++ != maxRecords) { this.add(iterator.next()); } return recordCount; } finally { iterator.close(); } }
@Test(expectedExceptions = IllegalStateException.class) public void testSortsDisagree() throws Exception { SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(COORDINATE_SORTED_FILE)).iterator(); try { it.assertSorted(SAMFileHeader.SortOrder.queryname); while (it.hasNext()) { it.next(); } Assert.fail("Queryname assertion should have failed on coordinate sorted file but didn't"); } finally { it.close(); } }
private int countRecordsInQueryInterval(final SamReader reader, final QueryInterval query) { final SAMRecordIterator iter = reader.queryOverlapping(new QueryInterval[]{query}); int count = 0; while (iter.hasNext()) { iter.next(); count++; } iter.close(); return count; }
recordIterator.close(); samReader.close();
@Test(dataProvider = "validSorts") public void testSortAssertionValid(String file, SAMFileHeader.SortOrder order) { SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(file)).iterator(); try { it.assertSorted(order); while (it.hasNext()) { it.next(); } } finally { it.close(); } }
@Test(dataProvider = "invalidSorts", expectedExceptions = IllegalStateException.class) public void testSortAssertionFails(String file, SAMFileHeader.SortOrder order) throws Exception { SAMRecordIterator it = SamReaderFactory.makeDefault().open(new File(file)).iterator(); try { it.assertSorted(order); while (it.hasNext()) { it.next(); } Assert.fail("Iterated successfully over " + file + " with invalid sort assertion: " + order.name()); } finally { it.close(); } }
@Test(dataProvider = "composeAllPermutationsOfSamInputResource") public void queryInputResourcePermutation(final SamInputResource resource) throws IOException { try(final SamReader reader = SamReaderFactory.makeDefault().open(resource)) { LOG.info(String.format("Query from %s ...", resource)); if (reader.hasIndex()) { final StopWatch stopWatch = new StopWatch(); stopWatch.start(); final SAMRecordIterator q1 = reader.query("chr1", 500000, 100000000, true); observedRecordOrdering1.add(Iterables.slurp(q1)); q1.close(); final SAMRecordIterator q20 = reader.query("chr20", 1, 1000000, true); observedRecordOrdering20.add(Iterables.slurp(q20)); q20.close(); final SAMRecordIterator q3 = reader.query("chr3", 1, 10000000, true); observedRecordOrdering3.add(Iterables.slurp(q3)); q3.close(); stopWatch.stop(); LOG.info(String.format("Finished queries in %sms", stopWatch.getElapsedTime())); Assert.assertEquals(observedRecordOrdering1.size(), 1, "read different records for chromosome 1"); Assert.assertEquals(observedRecordOrdering20.size(), 1, "read different records for chromosome 20"); Assert.assertEquals(observedRecordOrdering3.size(), 1, "read different records for chromosome 3"); } else if (resource.indexMaybe() != null) { LOG.warn("Resource has an index source, but is not indexed: " + resource); } else { LOG.info("Skipping query operation: no index."); } } }
@Test(dataProvider = "jsData") public void testJavascriptFilters(final String samFile, final String javascriptFile, final int expectCount) { final SamReaderFactory srf = SamReaderFactory.makeDefault(); final SamReader samReader = srf.open(new File(testDir, samFile)); final JavascriptSamRecordFilter filter; try { filter = new JavascriptSamRecordFilter(new File(testDir, javascriptFile), samReader.getFileHeader()); } catch (IOException err) { Assert.fail("Cannot read script",err); return; } final SAMRecordIterator iter = samReader.iterator(); int count = 0; while (iter.hasNext()) { if (filter.filterOut(iter.next())) { continue; } ++count; } iter.close(); CloserUtil.close(samReader); Assert.assertEquals(count, expectCount, "Expected number of reads " + expectCount + " but got " + count); } }
private int countAlignmentsInWindow(int reference, int window, SamReader reader, int expectedCount) { final int SIXTEEN_K = 1 << 14; // 1 << LinearIndex.BAM_LIDX_SHIFT final int start = window >> 14; // window * SIXTEEN_K; final int stop = ((window + 1) >> 14) - 1; // (window + 1 * SIXTEEN_K) - 1; final String chr = reader.getFileHeader().getSequence(reference).getSequenceName(); // get records for the entire linear index window SAMRecordIterator iter = reader.queryOverlapping(chr, start, stop); SAMRecord rec; int count = 0; while (iter.hasNext()) { rec = iter.next(); count++; if (expectedCount == -1) System.err.println(rec.getReadName()); } iter.close(); return count; }
/** * Helper function that writes reads from iterator it into writer out, updating each SAMRecord along the way * according to the newOrder mapping from dictionary index -> index. Name is used for printing only. */ private void writeReads(final SAMFileWriter out, final SAMRecordIterator it, final Map<Integer, Integer> newOrder, final String name) { long counter = 0; log.info(" Processing " + name); while (it.hasNext()) { counter++; final SAMRecord read = it.next(); final int oldRefIndex = read.getReferenceIndex(); final int oldMateIndex = read.getMateReferenceIndex(); final int newRefIndex = newOrderIndex(read, oldRefIndex, newOrder); read.setHeader(out.getFileHeader()); read.setReferenceIndex(newRefIndex); final int newMateIndex = newOrderIndex(read, oldMateIndex, newOrder); if (oldMateIndex != -1 && newMateIndex == -1) { // becoming unmapped read.setMateAlignmentStart(0); read.setMateUnmappedFlag(true); read.setAttribute(SAMTag.MC.name(), null); // Set the Mate Cigar String to null } read.setMateReferenceIndex(newMateIndex); out.addAlignment(read); } it.close(); log.info("Wrote " + counter + " reads"); }
@Test public void scanMappedReads() throws IOException { SamReader samReader = SamReaderFactory.makeDefault().open(BAM_FILE); SAMRecordIterator samRecordIterator = samReader.iterator(); CRAMFileReader reader = new CRAMFileReader(new ByteArraySeekableStream(cramBytes), new ByteArraySeekableStream(baiBytes), source, ValidationStringency.SILENT); reader.setValidationStringency(ValidationStringency.SILENT); int counter = 0; while (samRecordIterator.hasNext()) { SAMRecord samRecord = samRecordIterator.next(); if (samRecord.getReferenceIndex() == SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) break; // test only 1st and 2nd in every 100 to speed the test up: if (counter++ %100 > 1) continue; String s1 = samRecord.getSAMString(); CloseableIterator<SAMRecord> iterator = reader.queryAlignmentStart(samRecord.getReferenceName(), samRecord.getAlignmentStart()); Assert.assertTrue(iterator.hasNext(), counter + ": " + s1); SAMRecord cramRecord = iterator.next(); String s2 = cramRecord.getSAMString(); Assert.assertEquals(samRecord.getReferenceName(), cramRecord.getReferenceName(), s1 + s2); // default 'overlap' is true, so test records intersect the query: Assert.assertTrue(CoordMath.overlaps(cramRecord.getAlignmentStart(), cramRecord.getAlignmentEnd(), samRecord.getAlignmentStart(), samRecord.getAlignmentEnd()), s1 + s2); } samRecordIterator.close(); reader.close(); Assert.assertEquals(counter, nofMappedReads); }
/** * Helper function that writes reads from iterator it into writer out, updating each SAMRecord along the way * according to the newOrder mapping from dictionary index -> index. Name is used for printing only. */ private void writeReads(final SAMFileWriter out, final SAMRecordIterator it, final Map<Integer, Integer> newOrder, final String name) { long counter = 0; log.info(" Processing " + name); while (it.hasNext()) { counter++; final SAMRecord read = it.next(); final int oldRefIndex = read.getReferenceIndex(); final int oldMateIndex = read.getMateReferenceIndex(); final int newRefIndex = newOrderIndex(read, oldRefIndex, newOrder); read.setHeader(out.getFileHeader()); read.setReferenceIndex(newRefIndex); final int newMateIndex = newOrderIndex(read, oldMateIndex, newOrder); if (oldMateIndex != -1 && newMateIndex == -1) { // becoming unmapped read.setMateAlignmentStart(0); read.setMateUnmappedFlag(true); read.setAttribute(SAMTag.MC.name(), null); // Set the Mate Cigar String to null } read.setMateReferenceIndex(newMateIndex); out.addAlignment(read); } it.close(); log.info("Wrote " + counter + " reads"); }