@Test(dataProvider = "TrueFalse") public void testFilterNamesEmptySetTrue(boolean include) { SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); names.forEach(builder::addUnmappedFragment); FilteringSamIterator filteringSamIterator = new FilteringSamIterator(builder.getRecords().iterator(), new ReadNameFilter(Collections.emptySet(), include)); Assert.assertEquals(filteringSamIterator.hasNext(), !include); Assert.assertEquals(filteringSamIterator.stream().count(), include ? 0 : names.size()); } }
try (final SamReader reader = readerFactory.open(input)) { final FilteringSamIterator filterIterator = new FilteringSamIterator(reader.iterator(), filter); if (filterIterator.hasNext()) { readGroupToFormat.put(rg, QualityEncodingDetector.detect( QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, filterIterator, restoreOriginalQualities));
try (final SamReader reader = readerFactory.open(input)) { final FilteringSamIterator filterIterator = new FilteringSamIterator(reader.iterator(), filter); if (filterIterator.hasNext()) { readGroupToFormat.put(rg, QualityEncodingDetector.detect( QualityEncodingDetector.DEFAULT_MAX_RECORDS_TO_ITERATE, filterIterator, restoreOriginalQualities));
private void filterReads(final FilteringSamIterator filteringIterator) { // get OUTPUT header from INPUT and overwrite it if necessary final SAMFileHeader fileHeader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(INPUT); final SAMFileHeader.SortOrder inputSortOrder = fileHeader.getSortOrder(); if (SORT_ORDER != null) { fileHeader.setSortOrder(SORT_ORDER); } if (FILTER == Filter.includePairedIntervals && fileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) { throw new UnsupportedOperationException("Input must be coordinate sorted to use includePairedIntervals"); } final boolean presorted = inputSortOrder.equals(fileHeader.getSortOrder()); log.info("Filtering [presorted=" + presorted + "] " + INPUT.getName() + " -> OUTPUT=" + OUTPUT.getName() + " [sortorder=" + fileHeader.getSortOrder().name() + "]"); // create OUTPUT file final SAMFileWriter outputWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(fileHeader, presorted, OUTPUT); final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Written"); while (filteringIterator.hasNext()) { final SAMRecord rec = filteringIterator.next(); outputWriter.addAlignment(rec); progress.record(rec); } filteringIterator.close(); outputWriter.close(); log.info(new DecimalFormat("#,###").format(progress.getCount()) + " SAMRecords written to " + OUTPUT.getName()); }
private void filterReads(final FilteringSamIterator filteringIterator) { // get OUTPUT header from INPUT and overwrite it if necessary final SAMFileHeader fileHeader = SamReaderFactory.makeDefault().referenceSequence(REFERENCE_SEQUENCE).getFileHeader(INPUT); final SAMFileHeader.SortOrder inputSortOrder = fileHeader.getSortOrder(); if (SORT_ORDER != null) { fileHeader.setSortOrder(SORT_ORDER); } if (FILTER == Filter.includePairedIntervals && fileHeader.getSortOrder() != SAMFileHeader.SortOrder.coordinate) { throw new UnsupportedOperationException("Input must be coordinate sorted to use includePairedIntervals"); } final boolean presorted = inputSortOrder.equals(fileHeader.getSortOrder()); log.info("Filtering [presorted=" + presorted + "] " + INPUT.getName() + " -> OUTPUT=" + OUTPUT.getName() + " [sortorder=" + fileHeader.getSortOrder().name() + "]"); // create OUTPUT file final SAMFileWriter outputWriter = new SAMFileWriterFactory().makeSAMOrBAMWriter(fileHeader, presorted, OUTPUT); final ProgressLogger progress = new ProgressLogger(log, (int) 1e6, "Written"); while (filteringIterator.hasNext()) { final SAMRecord rec = filteringIterator.next(); outputWriter.addAlignment(rec); progress.record(rec); } filteringIterator.close(); outputWriter.close(); log.info(new DecimalFormat("#,###").format(progress.getCount()) + " SAMRecords written to " + OUTPUT.getName()); }
@Test public void testSupplementaryRecords() { SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); int i = 0; for (boolean record1Unmapped : new boolean[]{true, false}) { for (boolean record2Unmapped : new boolean[]{true, false}) { for (boolean record1Strand : new boolean[]{true, false}) { for (boolean record2Strand : new boolean[]{true, false}) { builder.addPair("pair" + i, 0, 10, 30, record1Unmapped, record2Unmapped, null, null, record1Strand, record2Strand, false, false, 10).stream().forEach(r -> r.setSupplementaryAlignmentFlag(true)); builder.addFrag("frag" + i++, 0, 10, record1Unmapped, record2Strand, null, null, 10, false).setSupplementaryAlignmentFlag(true); } } } } FilteringSamIterator filteringSamIterator = new FilteringSamIterator(builder.getRecords().iterator(), new SecondaryOrSupplementaryFilter()); Assert.assertEquals(filteringSamIterator.hasNext(), false); }
@Test public void testSecondaryRecords() { SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); int i = 0; for (boolean record1Unmapped : new boolean[]{true, false}) { for (boolean record2Unmapped : new boolean[]{true, false}) { for (boolean record1Strand : new boolean[]{true, false}) { for (boolean record2Strand : new boolean[]{true, false}) { builder.addPair("pair" + i, 0, 10, 30, record1Unmapped, record2Unmapped, null, null, record1Strand, record2Strand, true, true, 10); builder.addFrag("frag" + i++, 0, 10, record1Unmapped, record2Strand, null, null, 10, true); } } } } FilteringSamIterator filteringSamIterator = new FilteringSamIterator(builder.getRecords().iterator(), new SecondaryOrSupplementaryFilter()); Assert.assertEquals(filteringSamIterator.hasNext(), false); }
@Test public void testSecondaryRecords() { SAMRecordSetBuilder builder = new SAMRecordSetBuilder(); int i = 0; for (boolean record1Unmapped : new boolean[]{true, false}) { for (boolean record2Unmapped : new boolean[]{true, false}) { for (boolean record1Strand : new boolean[]{true, false}) { for (boolean record2Strand : new boolean[]{true, false}) { builder.addPair("pair" + i, 0, 10, 30, record1Unmapped, record2Unmapped, null, null, record1Strand, record2Strand, true, true, 10); builder.addFrag("frag" + i++, 0, 10, record1Unmapped, record2Strand, null, null, 10, true); } } } } FilteringSamIterator filteringSamIterator = new FilteringSamIterator(builder.getRecords().iterator(), new SecondaryAlignmentFilter()); Assert.assertEquals(filteringSamIterator.hasNext(), false); }
/** * Path for writing bfqs for single-end reads * * @param iterator the iterator with he SAM Records to write * @param filters the list of filters to be applied */ private void writeSingleEndBfqs(final Iterator<SAMRecord> iterator, final List<SamRecordFilter> filters) { // Open the codecs for writing int fileIndex = 0; initializeNextBfqFiles(fileIndex++); int records = 0; final FilteringSamIterator it = new FilteringSamIterator(iterator, new AggregateFilter(filters)); while (it.hasNext()) { final SAMRecord record = it.next(); records++; if (records % increment == 0) { record.setReadName(record.getReadName() + "/1"); writeFastqRecord(codec1, record); wrote++; if (wrote % 1000000 == 0) { log.info(wrote + " records processed."); } if (chunk > 0 && wrote % chunk == 0) { initializeNextBfqFiles(fileIndex++); } } } }
while (itr.hasNext()) { itr.next(); count++;
/** * Path for writing bfqs for single-end reads * * @param iterator the iterator with he SAM Records to write * @param filters the list of filters to be applied */ private void writeSingleEndBfqs(final Iterator<SAMRecord> iterator, final List<SamRecordFilter> filters) { // Open the codecs for writing int fileIndex = 0; initializeNextBfqFiles(fileIndex++); int records = 0; final FilteringSamIterator it = new FilteringSamIterator(iterator, new AggregateFilter(filters)); while (it.hasNext()) { final SAMRecord record = it.next(); records++; if (records % increment == 0) { record.setReadName(record.getReadName() + "/1"); writeFastqRecord(codec1, record); wrote++; if (wrote % 1000000 == 0) { log.info(wrote + " records processed."); } if (chunk > 0 && wrote % chunk == 0) { initializeNextBfqFiles(fileIndex++); } } } }
while (itr.hasNext()) { itr.next(); count++;