/** * Applies filters such as duplicate removal that apply to all SAMRecord parsing * @param iterator raw reads * @param filterSecondaryAlignment should secondary alignment be filtered out * @return iterator with filtered record excluded */ public CloseableIterator<SAMRecord> applyCommonSAMRecordFilters(final CloseableIterator<SAMRecord> iterator, final boolean singleAlignmentPerRead) { List<SamRecordFilter> filters = Lists.<SamRecordFilter>newArrayList(new FailsVendorReadQualityFilter()); if (singleAlignmentPerRead) { filters.add(new SecondaryOrSupplementaryFilter()); } if (filterDuplicates) { filters.add(new DuplicateReadFilter()); } return new AutoClosingIterator<SAMRecord>(new FilteringSamIterator(iterator, new AggregateFilter(filters)), iterator); }
@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 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); }
new AlignedFilter(true), new CountingPairedFilter(), new SecondaryOrSupplementaryFilter(), new MappingQualityFilter(MINIMUM_MQ) );
new AlignedFilter(true), new CountingPairedFilter(), new SecondaryOrSupplementaryFilter(), new MappingQualityFilter(MINIMUM_MQ) );