private static SamInputResource openBAMFile(Storage.Objects storageClient, String gcsStoragePath, SeekableStream index) throws IOException { SeekableGCSStream s = new SeekableGCSStream(storageClient, gcsStoragePath); SamInputResource samInputResource = SamInputResource.of(s); if (index != null) { samInputResource.index(index); } LOG.info("getReadsFromBAMFile - got input resources"); return samInputResource; }
@Test public void testWrappersAreAccessed() throws Exception { Path path = Paths.get(localBam); Path indexPath = Paths.get(localBam + ".bai"); HashMap<String, Boolean> fired = new HashMap<>(); Function<SeekableByteChannel, SeekableByteChannel> wrapData = (SeekableByteChannel in) -> { fired.put("data", true); return in; }; Function<SeekableByteChannel, SeekableByteChannel> wrapIndex = (SeekableByteChannel in) -> { fired.put("index", true); return in; }; SamInputResource in = SamInputResource.of(path, wrapData); in.index(indexPath, wrapIndex); InputResource indexResource = in.indexMaybe(); Assert.assertNotNull(indexResource); Assert.assertFalse(fired.containsKey("data")); Assert.assertFalse(fired.containsKey("index")); indexResource.asUnbufferedSeekableStream(); Assert.assertFalse(fired.containsKey("data")); Assert.assertTrue(fired.containsKey("index")); in.data().asUnbufferedSeekableStream(); Assert.assertTrue(fired.containsKey("data")); Assert.assertTrue(fired.containsKey("index")); }
private static SamInputResource openBAMFile(Storage.Objects storageClient, String gcsStoragePath, SeekableStream index) throws IOException { SeekableGCSStream s = new SeekableGCSStream(storageClient, gcsStoragePath); SamInputResource samInputResource = SamInputResource.of(s); if (index != null) { samInputResource.index(index); } LOG.info("getReadsFromBAMFile - got input resources"); return samInputResource; }
@Override public SamReader open(final File file) { final SamInputResource r = SamInputResource.of(file); final File indexMaybe = SamFiles.findIndex(file); if (indexMaybe != null) r.index(indexMaybe); return open(r); }
@Override public SamReader open(final File file) { final SamInputResource r = SamInputResource.of(file); final File indexMaybe = SamFiles.findIndex(file); if (indexMaybe != null) r.index(indexMaybe); return open(r); }
@Override public SamReader open(final File file) { final SamInputResource r = SamInputResource.of(file); final File indexMaybe = SamFiles.findIndex(file); if (indexMaybe != null) r.index(indexMaybe); return open(r); }
abstract public SamReader open(final SamInputResource resource);
abstract public SamReader open(final SamInputResource resource);
/** Prepare SamReader from local bam or URL bam */ public static SamReader getSamReader(String workFilename) throws MalformedURLException { UrlValidator urlValidator = new UrlValidator(); SamReaderFactory srf=SamReaderFactory.make(); srf.validationStringency(ValidationStringency.SILENT); SamReader samReader; if(urlValidator.isValid(workFilename)){ samReader = srf.open(SamInputResource.of(new URL(workFilename)).index(new URL(workFilename + ".bai"))); } else { samReader= srf.open(new File(workFilename)); } return samReader; }
@Test(expectedExceptions = RuntimeIOException.class) public void testCRAMReaderFromURLBadIndexFile() throws IOException { // deliberately specify a bad index file to ensure we get an IOException getCRAMReaderFromInputResource( (cramURL, indexURL) -> { return SamInputResource.of(cramURL).index(new File("nonexistent.bai")); }, true, 3); }
@Test public void testCRAMReaderFromURL() throws IOException { // get a CRAM reader with an index from a URL-backed resource getCRAMReaderFromInputResource( (cramURL, indexURL) -> { return SamInputResource.of(cramURL).index(indexURL); }, true, 3); }
@Test(enabled = true) public void testSamTextFileError1() { final File samFile = new File(publicTestDir + "testfile.sam"); final File indexFile = new File(publicTestDir + "HiSeq.1mb.1RG.bai"); final SamInputResource samInputResource = SamInputResource.of(samFile); samInputResource.index(indexFile); try { final SamReader reader = SamReaderFactory.makeDefault().open(samInputResource); // we shouldn't get here Assert.fail("We should have exceptioned out when trying to create a reader with an index for a textual SAM file"); } catch (RuntimeException e) { Assert.assertTrue(e.getMessage().indexOf(CommandLineGATK.PICARD_TEXT_SAM_FILE_ERROR_1) != -1); } }
public static boolean bamHasIndex(String bam) throws IOException{ /* ------------------------------------------------------ */ /* This chunk prepares SamReader from local bam or URL bam */ UrlValidator urlValidator = new UrlValidator(); SamReaderFactory srf=SamReaderFactory.make(); srf.validationStringency(ValidationStringency.SILENT); SamReader samReader; if(urlValidator.isValid(bam)){ samReader = SamReaderFactory.makeDefault().open( SamInputResource.of(new URL(bam)).index(new URL(bam + ".bai")) ); } else { samReader= srf.open(new File(bam)); } /* ------------------------------------------------------ */ // SamReaderFactory srf=SamReaderFactory.make(); // srf.validationStringency(ValidationStringency.SILENT); // SamReader samReader = srf.open(new File(bam)); boolean hasIndex= samReader.hasIndex(); samReader.close(); return hasIndex; }
private void runLocalRemoteTest(final URL bamURL, final File bamFile, final String sequence, final int startPos, final int endPos, final boolean contained) { verbose("Testing query " + sequence + ":" + startPos + "-" + endPos + " ..."); final SamReader reader1 = SamReaderFactory.makeDefault() .disable(SamReaderFactory.Option.EAGERLY_DECODE) .open(SamInputResource.of(bamFile).index(BAM_INDEX_FILE)); final SamReader reader2 = SamReaderFactory.makeDefault() .disable(SamReaderFactory.Option.EAGERLY_DECODE) .open(SamInputResource.of(bamURL).index(BAM_INDEX_FILE)); final Iterator<SAMRecord> iter1 = reader1.query(sequence, startPos, endPos, contained); final Iterator<SAMRecord> iter2 = reader2.query(sequence, startPos, endPos, contained); final List<SAMRecord> records1 = new ArrayList<SAMRecord>(); final List<SAMRecord> records2 = new ArrayList<SAMRecord>(); while (iter1.hasNext()) { records1.add(iter1.next()); } while (iter2.hasNext()) { records2.add(iter2.next()); } assertTrue(records1.size() > 0); assertEquals(records1.size(), records2.size()); for (int i = 0; i < records1.size(); i++) { //System.out.println(records1.get(i).format()); assertEquals(records1.get(i).getSAMString(), records2.get(i).getSAMString()); } }
private SamReader createSamReader(SeekableStream in, SeekableStream inIndex, ValidationStringency stringency) { SamReaderFactory readerFactory = SamReaderFactory.makeDefault() .setOption(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES, true) .setOption(SamReaderFactory.Option.EAGERLY_DECODE, false) .setUseAsyncIo(false); if (stringency != null) { readerFactory.validationStringency(stringency); } SamInputResource resource = SamInputResource.of(in); if (inIndex != null) { resource.index(inIndex); } return readerFactory.open(resource); }
public static long getAlignedReadCount(String bam) throws IOException{ /* ------------------------------------------------------ */ /* This chunk prepares SamReader from local bam or URL bam */ UrlValidator urlValidator = new UrlValidator(); SamReaderFactory srf=SamReaderFactory.make(); srf.validationStringency(ValidationStringency.SILENT); SamReader samReader; if(urlValidator.isValid(bam)){ samReader = SamReaderFactory.makeDefault().open( SamInputResource.of(new URL(bam)).index(new URL(bam + ".bai")) ); } else { samReader= srf.open(new File(bam)); } /* ------------------------------------------------------ */ List<SAMSequenceRecord> sequences = samReader.getFileHeader().getSequenceDictionary().getSequences(); long alnCount= 0; for(SAMSequenceRecord x : sequences){ alnCount += samReader.indexing().getIndex().getMetaData(x.getSequenceIndex()).getAlignedRecordCount(); } samReader.close(); return alnCount; }
private SamReader createSamReader(SeekableStream in, SeekableStream inIndex, ValidationStringency stringency, boolean useIntelInflater) { SamReaderFactory readerFactory = SamReaderFactory.makeDefault() .setOption(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES, true) .setOption(SamReaderFactory.Option.EAGERLY_DECODE, false) .setUseAsyncIo(false); if (stringency != null) { readerFactory.validationStringency(stringency); } SamInputResource resource = SamInputResource.of(in); if (inIndex != null) { resource.index(inIndex); } if (useIntelInflater) { readerFactory.inflaterFactory(IntelGKLAccessor.newInflatorFactor()); } return readerFactory.open(resource); }
private SamReader createSamReader(SeekableStream in, SeekableStream inIndex, ValidationStringency stringency, boolean useIntelInflater) { SamReaderFactory readerFactory = SamReaderFactory.makeDefault() .setOption(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES, true) .setOption(SamReaderFactory.Option.EAGERLY_DECODE, false) .setUseAsyncIo(false); if (stringency != null) { readerFactory.validationStringency(stringency); } SamInputResource resource = SamInputResource.of(in); if (inIndex != null) { resource.index(inIndex); } if (useIntelInflater) { readerFactory.inflaterFactory(IntelGKLAccessor.newInflatorFactor()); } return readerFactory.open(resource); }
@Test public void testCRAMReaderFromURLStream() throws IOException { // get a CRAM reader with an index from a stream-backed resource created from a URL getCRAMReaderFromInputResource( (cramURL, indexURL) -> { try { ISeekableStreamFactory streamFactory = SeekableStreamFactory.getInstance(); return SamInputResource .of(streamFactory.getStreamFor(cramURL)) .index(streamFactory.getStreamFor(indexURL)); } catch (IOException e) { throw new RuntimeIOException(e); } }, true, 3); }