public static void main(String[] args) throws IOException { Log.setGlobalLogLevel(LogLevel.INFO); File bamFile = new File(args[0]); File outCramFile = new File(args[1]); ReferenceSource source = new ReferenceSource(new File(args[2])); int maxThreads = Integer.valueOf(args[3]); BAMFileReader reader = new BAMFileReader(bamFile, null, false, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory()); OutputStream os = new FileOutputStream(outCramFile); CRAMFileWriter writer = new CRAMFileWriter(os, source, reader.getFileHeader(), outCramFile.getName(), maxThreads); CloseableIterator<SAMRecord> iterator = reader.getIterator(); while (iterator.hasNext()) { SAMRecord record = iterator.next(); writer.addAlignment(record); } writer.close(); reader.close(); }
private List<SAMRecord> getReadsInChunk(final File bamFile, final Chunk chunk) { try (CloseableIterator<SAMRecord> iterator = bamFileReader(bamFile).getIterator(new BAMFileSpan(chunk))) { return Iterables.slurp(iterator); } } }
} else { BAMFileSpan splitSpan = new BAMFileSpan(new Chunk(virtualStart, virtualEnd)); iterator = bamFileReader.getIterator(splitSpan);
private SBIIndex fromSAMRecords(final File bamFile, final long granularity) throws IOException { final BAMFileReader bamFileReader = bamFileReader(bamFile); try (CloseableIterator<SAMRecord> iterator = bamFileReader.getIterator(); ByteArrayOutputStream out = new ByteArrayOutputStream()) { final SBIIndexWriter indexWriter = new SBIIndexWriter(out, granularity); while (iterator.hasNext()) { processAlignment(indexWriter, iterator.next()); } indexWriter.finish(bamFileReader.getVirtualFilePointer(), bamFile.length()); return SBIIndex.load(new ByteArrayInputStream(out.toByteArray())); } }
private SAMRecord getReadAtOffset(final File bamFile, final long virtualOffset) { final Chunk chunk = new Chunk(virtualOffset, BlockCompressedFilePointerUtil.makeFilePointer(bamFile.length())); try (CloseableIterator<SAMRecord> iterator = bamFileReader(bamFile).getIterator(new BAMFileSpan(chunk))) { Assert.assertTrue(iterator.hasNext()); return iterator.next(); } }
iterator = bamFileReader.getIterator(splitSpan);
iterator = bamFileReader.getIterator(splitSpan);
@Test(dataProvider = "longCigarsData") public void testClearAttributesDoesntVoidLongCigar(final int numOps) throws Exception { final SAMRecordSetBuilder builder = new SAMRecordSetBuilder(true, SAMFileHeader.SortOrder.coordinate); final Cigar cigar = Cigar.fromCigarOperators(getCigarOperatorsForTest(numOps)); builder.addFrag("frag1", 0, 1, false, false, cigar.toString(), null, 30); //encode as BAM into ByteArray final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final BAMFileWriter writer = new BAMFileWriter(baos, null)) { writer.setHeader(builder.getHeader()); builder.getRecords().forEach(writer::addAlignment); } //read from ByteArray final BAMFileReader reader = new BAMFileReader(new ByteArrayInputStream(baos.toByteArray()), null, false, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory()); final CloseableIterator<SAMRecord> iterator = reader.getIterator(); iterator.hasNext(); final SAMRecord recordFromBAM = iterator.next(); //clear attributes before explicitly accessing cigar or attributes recordFromBAM.clearAttributes(); // see that cigar is unscathed Assert.assertNotNull(recordFromBAM.getCigar()); Assert.assertFalse(BAMRecord.isSentinelCigar(recordFromBAM.getCigar(), recordFromBAM.getReadLength())); }
/** * A test to check that BAM changes read bases according with {@link SequenceUtil#toBamReadBasesInPlace}. */ @Test public void testBAMReadBases() throws IOException { final SAMFileHeader header = new SAMFileHeader(); header.addSequence(new SAMSequenceRecord("1", SequenceUtil.getIUPACCodesString().length())); header.addReadGroup(new SAMReadGroupRecord("rg1")); final SAMRecord originalSAMRecord = new SAMRecord(header); originalSAMRecord.setReadName("test"); originalSAMRecord.setReferenceIndex(0); originalSAMRecord.setAlignmentStart(1); originalSAMRecord.setReadBases(SequenceUtil.getIUPACCodesString().getBytes()); originalSAMRecord.setCigarString(originalSAMRecord.getReadLength() + "M"); originalSAMRecord.setBaseQualities(SAMRecord.NULL_QUALS); final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final BAMFileWriter writer = new BAMFileWriter(baos, null)) { writer.setHeader(header); writer.addAlignment(originalSAMRecord); } final BAMFileReader reader = new BAMFileReader(new ByteArrayInputStream(baos.toByteArray()), null, true, false, ValidationStringency.SILENT, new DefaultSAMRecordFactory()); final CloseableIterator<SAMRecord> iterator = reader.getIterator(); iterator.hasNext(); final SAMRecord recordFromBAM = iterator.next(); Assert.assertNotEquals(recordFromBAM.getReadBases(), originalSAMRecord.getReadBases()); Assert.assertEquals(recordFromBAM.getReadBases(), SequenceUtil.toBamReadBasesInPlace(originalSAMRecord.getReadBases())); }