private static SamReader openBAMReader(SamInputResource resource, ValidationStringency stringency, boolean includeFileSource, long offset) throws IOException { SamReaderFactory samReaderFactory = SamReaderFactory .makeDefault() .validationStringency(stringency) .enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES); if (includeFileSource) { samReaderFactory.enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS); } if (offset == 0) { return samReaderFactory.open(resource); } LOG.info("Initializing seeking reader with the offset of " + offset); SeekingBAMFileReader primitiveReader = new SeekingBAMFileReader(resource, false, stringency, DefaultSAMRecordFactory.getInstance(), offset); final SeekingReaderAdapter reader = new SeekingReaderAdapter(primitiveReader, resource); samReaderFactory.reapplyOptions(reader); return reader; } }
private static SamReader openBAMReader(SamInputResource resource, ValidationStringency stringency, boolean includeFileSource, long offset) throws IOException { SamReaderFactory samReaderFactory = SamReaderFactory .makeDefault() .validationStringency(stringency) .enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES); if (includeFileSource) { samReaderFactory.enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS); } if (offset == 0) { return samReaderFactory.open(resource); } LOG.info("Initializing seeking reader with the offset of " + offset); SeekingBAMFileReader primitiveReader = new SeekingBAMFileReader(resource, false, stringency, DefaultSAMRecordFactory.getInstance(), offset); final SeekingReaderAdapter reader = new SeekingReaderAdapter(primitiveReader, resource); samReaderFactory.reapplyOptions(reader); return reader; } }
public static void main(String[] args) throws IOException { if (args.length < 2) { System.out.println("Usage: " + PrintReadsExample.class.getCanonicalName() + " inFile eagerDecode [outFile]"); System.exit(1); } final File inputFile = new File(args[0]); final boolean eagerDecode = Boolean.parseBoolean(args[1]); //useful to test (realistic) scenarios in which every record is always fully decoded. final File outputFile = args.length >= 3 ? new File(args[2]) : null; final long start = System.currentTimeMillis(); log.info("Start with args:" + Arrays.toString(args)); printConfigurationInfo(); SamReaderFactory readerFactory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT); if (eagerDecode) { readerFactory = readerFactory.enable(SamReaderFactory.Option.EAGERLY_DECODE); } try (final SamReader reader = readerFactory.open(inputFile)) { final SAMFileHeader header = reader.getFileHeader(); try (final SAMFileWriter writer = outputFile != null ? new SAMFileWriterFactory().makeBAMWriter(header, true, outputFile) : null) { final ProgressLogger pl = new ProgressLogger(log, 1000000); for (final SAMRecord record : reader) { if (writer != null) { writer.addAlignment(record); } pl.record(record); } } } final long end = System.currentTimeMillis(); log.info(String.format("Done. Elapsed time %.3f seconds", (end - start) / 1000.0)); }
public static void main(String[] args) throws IOException { if (args.length < 2) { System.out.println("Usage: " + PrintReadsExample.class.getCanonicalName() + " inFile eagerDecode [outFile]"); System.exit(1); } final File inputFile = new File(args[0]); final boolean eagerDecode = Boolean.parseBoolean(args[1]); //useful to test (realistic) scenarios in which every record is always fully decoded. final File outputFile = args.length >= 3 ? new File(args[2]) : null; final long start = System.currentTimeMillis(); log.info("Start with args:" + Arrays.toString(args)); printConfigurationInfo(); SamReaderFactory readerFactory = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT); if (eagerDecode) { readerFactory = readerFactory.enable(SamReaderFactory.Option.EAGERLY_DECODE); } try (final SamReader reader = readerFactory.open(inputFile)) { final SAMFileHeader header = reader.getFileHeader(); try (final SAMFileWriter writer = outputFile != null ? new SAMFileWriterFactory().makeBAMWriter(header, true, outputFile) : null) { final ProgressLogger pl = new ProgressLogger(log, 1000000); for (final SAMRecord record : reader) { if (writer != null) { writer.addAlignment(record); } pl.record(record); } } } final long end = System.currentTimeMillis(); log.info(String.format("Done. Elapsed time %.3f seconds", (end - start) / 1000.0)); }
SamReader reader = eagerlyDecode ? readerFactory.enable(SamReaderFactory.Option.EAGERLY_DECODE).open(SamInputResource.of(input)) : readerFactory.open(SamInputResource.of(input)); final SAMFileHeader header = reader.getFileHeader();
public LongReadSupportFinder(File indexedBam) { SamReaderFactory factory = SamReaderFactory.makeDefault() .enable(Option.CACHE_FILE_BASED_INDEXES) .validationStringency(ValidationStringency.LENIENT); this.reader = factory.open(indexedBam); this.dict = reader.getFileHeader().getSequenceDictionary(); } /**
@Test(dataProvider = "legalIntegerAttributesFiles") public void testLegalIntegerAttributesFilesStrict( final File inputFile ) { final SamReader reader = SamReaderFactory.makeDefault() .enable(SamReaderFactory.Option.EAGERLY_DECODE) .validationStringency(ValidationStringency.STRICT) .open(inputFile); final SAMRecord rec = reader.iterator().next(); final Map<String, Number> expectedTags = new HashMap<String, Number>(); expectedTags.put("SB", -128); expectedTags.put("UB", 129); expectedTags.put("SS", 32767); expectedTags.put("US", 65535); expectedTags.put("SI", 2147483647); expectedTags.put("I2", -2147483647); expectedTags.put("UI", 4294967295L); for (final Map.Entry<String, Number> entry : expectedTags.entrySet()) { final Object value = rec.getAttribute(entry.getKey()); Assert.assertTrue(((Number) value).longValue() == entry.getValue().longValue()); } CloserUtil.close(reader); }
@Test(dataProvider = "queryIntervalsData") public void testQueryIntervals(final boolean contained, final int expected) { final SamReader reader = SamReaderFactory.makeDefault().enable().open(BAM_FILE); final CloseableIterator<SAMRecord> it = reader.query("chr1", 202661637, 202661812, contained); Assert.assertEquals(countElements(it), expected); }
.enable(SamReaderFactory.Option.DONT_MEMORY_MAP_INDEX) .validationStringency(ValidationStringency.SILENT) .samRecordFactory(DefaultSAMRecordFactory.getInstance()) SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS).validationStringency(ValidationStringency.LENIENT);
private SplittingBAMIndex fromSAMRecords(int granularity) throws IOException { File indexFile = new File(input + SplittingBAMIndexer.OUTPUT_FILE_EXTENSION); FileOutputStream out = new FileOutputStream(indexFile); SplittingBAMIndexer indexer = new SplittingBAMIndexer(out, granularity); SamReader samReader = SamReaderFactory.makeDefault() .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(new File(input)); for (SAMRecord r : samReader) { indexer.processAlignment(r); } indexer.finish(new File(input).length()); out.close(); assertTrue(indexFile.exists()); return new SplittingBAMIndex(indexFile); } }
public void indexBAM(File inputFile, String outputFileName) { final File bamIndexFile = new File(outputFileName); SamReaderFactory.setDefaultValidationStringency(ValidationStringency.SILENT); final SamReader samReader = SamReaderFactory.makeDefault(). enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS). open(inputFile); BAMIndexer indexer = new BAMIndexer(bamIndexFile, samReader.getFileHeader()); long totalRecords = 0; // create and write the content SAMRecordIterator iter = samReader.iterator().assertSorted(SAMFileHeader.SortOrder.coordinate); while(iter.hasNext()) { SAMRecord rec = iter.next(); if (++totalRecords % 1000000 == 0) { if (null != log) log.info(totalRecords + " reads processed ..."); } indexer.processAlignment(rec); } indexer.finish(); }
@Test(enabled = true) public void testWriteText() throws Exception { // Compare the text form of the c-generated bai file and a java-generated one final File cBaiTxtFile = File.createTempFile("cBai.", ".bai.txt"); BAMIndexer.createAndWriteIndex(BAI_FILE, cBaiTxtFile, true); verbose("Wrote textual C BAM Index file " + cBaiTxtFile); final File javaBaiFile = File.createTempFile("javaBai.", "java.bai"); final File javaBaiTxtFile = new File(javaBaiFile.getAbsolutePath() + ".txt"); final SamReader bam = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(BAM_FILE); BAMIndexer.createIndex(bam, javaBaiFile.toPath()); verbose("Wrote binary Java BAM Index file " + javaBaiFile); // now, turn the bai file into text BAMIndexer.createAndWriteIndex(javaBaiFile, javaBaiTxtFile, true); // and compare them verbose("diff " + javaBaiTxtFile + " " + cBaiTxtFile); IOUtil.assertFilesEqual(javaBaiTxtFile, cBaiTxtFile); cBaiTxtFile.deleteOnExit(); javaBaiFile.deleteOnExit(); javaBaiTxtFile.deleteOnExit(); CloserUtil.close(bam); }
@Test(enabled = true) public void testWriteBinary() throws Exception { // Compare java-generated bai file with c-generated and sorted bai file final File javaBaiFile = File.createTempFile("javaBai.", ".bai"); final SamReader bam = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(BAM_FILE); BAMIndexer.createIndex(bam, javaBaiFile.toPath()); verbose("Wrote binary java BAM Index file " + javaBaiFile); final File cRegeneratedBaiFile = File.createTempFile("cBai.", ".bai"); BAMIndexer.createAndWriteIndex(BAI_FILE, cRegeneratedBaiFile, false); verbose("Wrote sorted C binary BAM Index file " + cRegeneratedBaiFile); // Binary compare of javaBaiFile and cRegeneratedBaiFile should be the same verbose("diff " + javaBaiFile + " " + cRegeneratedBaiFile); IOUtil.assertFilesEqual(javaBaiFile, cRegeneratedBaiFile); javaBaiFile.deleteOnExit(); cRegeneratedBaiFile.deleteOnExit(); CloserUtil.close(bam); }
private BAMFileReader bamFileReader(final File bamFile) { final SamReader samReader = SamReaderFactory.makeDefault() .validationStringency(ValidationStringency.SILENT) .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(bamFile); return (BAMFileReader) ((SamReader.PrimitiveSamReaderToSamReaderAdapter) samReader).underlyingReader(); }
private List<SAMRecord> getReads(final File bamFile) throws IOException { try (SamReader samReader = SamReaderFactory.makeDefault() .validationStringency(ValidationStringency.SILENT) .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).open(bamFile)) { return Iterables.slurp(samReader); } }
@Test public void testIndexFileValidation() throws Exception { final SamReader samReader = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT) .enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES).open((new File(TEST_DATA_DIR, "bad_index.bam"))); Histogram<String> results = executeValidation(samReader, null, IndexValidationStringency.EXHAUSTIVE); Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_INDEX_FILE_POINTER.getHistogramString()).getValue(), 1.0); results = executeValidation(samReader, null, IndexValidationStringency.LESS_EXHAUSTIVE); Assert.assertEquals(results.get(SAMValidationError.Type.INVALID_INDEX_FILE_POINTER.getHistogramString()).getValue(), 1.0); }
@BeforeClass public void init() throws IOException { final SamReader reader = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES).open(bamFile); sequenceDictionary = reader.getFileHeader().getSequenceDictionary(); reader.close(); bamIndex = new GATKBAMIndexFromFile(bamIndexFile, sequenceDictionary); }
@BeforeClass public void init() throws IOException { final SamReader reader = SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES).open(bamFile); Assert.assertTrue(reader.hasIndex()); Assert.assertTrue(reader.indexing().hasBrowseableIndex()); bamIndex = new GATKBAMIndexFromDataSource(bamFile, reader.getFileHeader(), reader.indexing().getBrowseableIndex()); reader.close(); }
/** Runnable implementation that reads the entire stream and writes the index. */ @Override public void run() { final SamReader in = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT) .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).disable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS) .open(SamInputResource.of(this.stream)); final BAMIndexer indexer = new BAMIndexer(this.index, in.getFileHeader()); for (final SAMRecord rec : in) { indexer.processAlignment(rec); } indexer.finish(); CloserUtil.close(in); } }
/** Runnable implementation that reads the entire stream and writes the index. */ @Override public void run() { final SamReader in = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT) .enable(SamReaderFactory.Option.INCLUDE_SOURCE_IN_RECORDS).disable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS) .open(SamInputResource.of(this.stream)); final BAMIndexer indexer = new BAMIndexer(this.index, in.getFileHeader()); for (final SAMRecord rec : in) { indexer.processAlignment(rec); } indexer.finish(); CloserUtil.close(in); } }