use of htsjdk.samtools.SamReader in project jvarkit by lindenb.
the class BamStats02 method doWork.
@Override
public int doWork(List<String> args) {
SamReader samFileReader = null;
PrintWriter out = null;
try {
if (bedFile != null) {
LOG.info("Reading BED file " + bedFile);
this.intervals = super.readBedFileAsBooleanIntervalTreeMap(bedFile);
}
out = super.openFileOrStdoutAsPrintWriter(outputFile);
boolean first = true;
out.print("#");
for (final STRING_PROPS p : STRING_PROPS.values()) {
if (!first)
out.print("\t");
first = false;
out.print(p.name());
}
for (final INT_PROPS p : INT_PROPS.values()) {
out.print("\t");
out.print(p.name());
}
for (final SAMFlag flg : SAMFlag.values()) {
out.print("\t");
out.print(flg.name());
}
out.print("\t");
out.print("count");
out.println();
final SamReaderFactory srf = super.createSamReaderFactory();
if (args.isEmpty()) {
LOG.info("Reading from stdin");
samFileReader = srf.open(SamInputResource.of(stdin()));
run("stdin", samFileReader, out);
samFileReader.close();
samFileReader = null;
} else {
for (final String filename : IOUtils.unrollFiles(args)) {
LOG.info("Reading from " + filename);
samFileReader = srf.open(new File(filename));
run(filename, samFileReader, out);
samFileReader.close();
samFileReader = null;
}
}
out.flush();
return RETURN_OK;
} catch (Exception err) {
LOG.error(err);
return -1;
} finally {
CloserUtil.close(samFileReader);
CloserUtil.close(out);
}
}
use of htsjdk.samtools.SamReader in project jvarkit by lindenb.
the class Biostar172515 method doWork.
@Override
public int doWork(final List<String> inputFiles) {
final SamReaderFactory samReaderFactory = SamReaderFactory.makeDefault().setOption(SamReaderFactory.Option.CACHE_FILE_BASED_INDEXES, Boolean.TRUE).validationStringency(ValidationStringency.LENIENT);
OutputStream stream = null;
SamReader samReader = null;
Set<String> args = IOUtils.unrollFiles(inputFiles);
try {
stream = super.openFileOrStdoutAsStream(this.outputFile);
XMLOutputFactory xof = XMLOutputFactory.newFactory();
this.w = xof.createXMLStreamWriter(stream);
this.w.writeStartDocument("UTF-8", "1.0");
this.w.writeStartElement("bai-list");
for (final String filename : args) {
this.w.writeStartElement("bam");
this.w.writeAttribute("bam", filename);
samReader = samReaderFactory.open(SamInputResource.of(filename));
this.w.writeAttribute("has-index", String.valueOf(samReader.hasIndex()));
if (!samReader.hasIndex()) {
this.w.writeEndElement();
samReader.close();
continue;
}
final SamReader.Indexing indexing = samReader.indexing();
if (!indexing.hasBrowseableIndex()) {
this.w.writeComment("no browseable index");
this.w.writeEndElement();
samReader.close();
continue;
}
final SAMSequenceDictionary dict = samReader.getFileHeader().getSequenceDictionary();
this.w.writeAttribute("n_ref", String.valueOf(dict.size()));
final BrowseableBAMIndex baiFile;
try {
baiFile = indexing.getBrowseableIndex();
} catch (Exception err) {
this.w.writeComment("no browseable index");
this.w.writeEndElement();
samReader.close();
continue;
}
for (int tid = 0; tid < dict.size(); ++tid) {
final SAMSequenceRecord ssr = dict.getSequence(tid);
final BAMIndexMetaData baiMetaData = baiFile.getMetaData(tid);
this.w.writeStartElement("reference");
this.w.writeAttribute("ref-id", String.valueOf(tid));
this.w.writeAttribute("ref-name", ssr.getSequenceName());
this.w.writeAttribute("ref-length", String.valueOf(ssr.getSequenceLength()));
this.w.writeAttribute("n_aligned", String.valueOf(baiMetaData.getAlignedRecordCount()));
BinList binList = baiFile.getBinsOverlapping(tid, 1, ssr.getSequenceLength());
int n_bin = 0;
for (@SuppressWarnings("unused") final Bin binItem : binList) n_bin++;
this.w.writeAttribute("n_bin", String.valueOf(n_bin));
this.w.writeAttribute("n_no_coor", String.valueOf(baiMetaData.getUnalignedRecordCount()));
for (final Bin binItem : binList) {
this.w.writeStartElement("bin");
this.w.writeAttribute("first-locus", String.valueOf(baiFile.getFirstLocusInBin(binItem)));
this.w.writeAttribute("last-locus", String.valueOf(baiFile.getLastLocusInBin(binItem)));
this.w.writeAttribute("level", String.valueOf(baiFile.getLevelForBin(binItem)));
final BAMFileSpan span = baiFile.getSpanOverlapping(binItem);
this.w.writeAttribute("first-offset", String.valueOf(span.getFirstOffset()));
final List<Chunk> chunks = span.getChunks();
this.w.writeAttribute("n_chunk", String.valueOf(chunks.size()));
for (final Chunk chunk : chunks) {
this.w.writeEmptyElement("chunk");
this.w.writeAttribute("chunk_beg", String.valueOf(chunk.getChunkStart()));
this.w.writeAttribute("chunk_end", String.valueOf(chunk.getChunkEnd()));
}
this.w.writeEndElement();
}
this.w.writeEndElement();
}
this.w.writeEndElement();
samReader.close();
}
this.w.writeEndElement();
this.w.flush();
this.w.close();
return 0;
} catch (final Exception err) {
LOG.error(err);
return -1;
} finally {
CloserUtil.close(this.w);
CloserUtil.close(stream);
CloserUtil.close(samReader);
this.w = null;
}
}
use of htsjdk.samtools.SamReader in project jvarkit by lindenb.
the class BioAlcidae method execute_bam.
private int execute_bam(String source) throws IOException {
SamReader in = null;
SAMRecordIterator iter = null;
try {
SamReaderFactory srf = SamReaderFactory.makeDefault().validationStringency(ValidationStringency.SILENT);
if (source == null) {
in = srf.open(SamInputResource.of(stdin()));
} else {
in = srf.open(SamInputResource.of(source));
}
iter = in.iterator();
bindings.put("header", in.getFileHeader());
bindings.put("iter", iter);
bindings.put("format", "sam");
this.script.eval(bindings);
this.writer.flush();
return RETURN_OK;
} catch (Exception e) {
LOG.error(e);
return -1;
} finally {
CloserUtil.close(in);
CloserUtil.close(iter);
bindings.remove("header");
bindings.remove("iter");
bindings.remove("format");
}
}
use of htsjdk.samtools.SamReader in project jvarkit by lindenb.
the class TestUtils method sortBamOnQueryName.
protected File sortBamOnQueryName(final Path bamFile, final Predicate<SAMRecord> pred) throws IOException {
File sortedBam = this.createTmpFile(".bam");
SamReader sr = SamReaderFactory.makeDefault().open(bamFile);
SAMFileHeader outHeader = sr.getFileHeader().clone();
outHeader.setSortOrder(SortOrder.queryname);
SAMFileWriter w = new SAMFileWriterFactory().makeBAMWriter(outHeader, false, sortedBam);
sr.iterator().stream().filter(R -> pred == null ? true : pred.test(R)).forEach(R -> w.addAlignment(R));
w.close();
sr.close();
return sortedBam;
}
use of htsjdk.samtools.SamReader in project jvarkit by lindenb.
the class TestUtils method addClippingToBam.
protected File addClippingToBam(final File bamFile) throws IOException {
final String bases = "ATGC";
File clippedBam = this.createTmpFile(".bam");
SamReader sr = SamReaderFactory.makeDefault().open(bamFile);
SAMFileHeader inHeader = sr.getFileHeader();
boolean createIndex = sr.hasIndex() && inHeader.getSortOrder().equals(SortOrder.coordinate);
if (createIndex) {
this.deleteFilesAtExit.add(new File(bamFile.getParentFile(), IOUtil.basename(clippedBam) + BAMIndex.BAMIndexSuffix));
}
final SAMFileWriter w = new SAMFileWriterFactory().setCreateIndex(createIndex).makeBAMWriter(inHeader, true, clippedBam);
sr.iterator().stream().map(R -> {
if (R.getReadUnmappedFlag() || R.getCigar() == null)
return R;
if (R.getCigar().isClipped())
return R;
if (R.getBaseQualities().equals(SAMRecord.NULL_QUALS))
return R;
if (R.getBaseQualityString().equals(SAMRecord.NULL_QUALS_STRING))
return R;
for (int side = 0; side < 2; side++) {
final String cigar;
boolean hard = this.random.nextBoolean();
final int clipLen = 1 + this.random.nextInt(100);
final StringBuilder seq = new StringBuilder();
final StringBuilder qual = new StringBuilder();
if (hard) {
cigar = String.valueOf(clipLen) + "H";
} else {
cigar = String.valueOf(clipLen) + "S";
for (int x = 0; x < clipLen; ++x) {
seq.append(bases.charAt(this.random.nextInt(bases.length())));
qual.append("#");
}
}
if (side == 0) {
R.setReadString(seq.toString() + R.getReadString());
R.setBaseQualityString(qual.toString() + R.getBaseQualityString());
R.setCigarString(cigar + R.getCigarString());
} else {
R.setCigarString(R.getCigarString() + cigar);
R.setReadString(R.getReadString() + seq.toString());
R.setBaseQualityString(R.getBaseQualityString() + qual.toString());
}
}
return R;
}).forEach(R -> w.addAlignment(R));
w.close();
sr.close();
assertIsValidBam(bamFile);
return bamFile;
}
Aggregations