package net.sf.cram;
import htsjdk.samtools.ValidationStringency;
import htsjdk.samtools.cram.build.CramIO;
import htsjdk.samtools.cram.encoding.reader.CramRecordReader;
import htsjdk.samtools.cram.encoding.reader.DataReaderFactory;
import htsjdk.samtools.cram.encoding.readfeatures.ReadBase;
import htsjdk.samtools.cram.encoding.readfeatures.ReadFeature;
import htsjdk.samtools.cram.io.DefaultBitInputStream;
import htsjdk.samtools.cram.structure.Container;
import htsjdk.samtools.cram.structure.ContainerIO;
import htsjdk.samtools.cram.structure.CramCompressionRecord;
import htsjdk.samtools.cram.structure.CramHeader;
import htsjdk.samtools.cram.structure.Slice;
import htsjdk.samtools.util.Log;
import htsjdk.samtools.util.Log.LogLevel;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class DetectFeatureB {
public static void main(String[] args) throws IOException, IllegalArgumentException, IllegalAccessException {
Log.setGlobalLogLevel(LogLevel.INFO);
File cramFile = new File(args[0]);
InputStream is = new BufferedInputStream(new FileInputStream(cramFile));
CramHeader header = CramIO.readCramHeader(is);
Container c = null;
while ((c = ContainerIO.readContainer(header.getVersion(), is)) != null && !c.isEOF()) {
for (Slice slice : c.slices) {
final DataReaderFactory dataReaderFactory = new DataReaderFactory();
final Map<Integer, InputStream> inputMap = new HashMap<Integer, InputStream>();
for (final Integer exId : slice.external.keySet()) {
inputMap.put(exId, new ByteArrayInputStream(slice.external.get(exId).getRawContent()));
}
final CramRecordReader reader = new CramRecordReader(ValidationStringency.SILENT);
dataReaderFactory.buildReader(reader, new DefaultBitInputStream(new ByteArrayInputStream(
slice.coreBlock.getRawContent())), inputMap, c.header, slice.sequenceId);
for (int i = 0; i < slice.nofRecords; i++) {
CramCompressionRecord record = new CramCompressionRecord();
reader.read(record);
if (record.isSegmentUnmapped() || record.readFeatures == null || record.readFeatures.isEmpty())
continue;
for (ReadFeature rf : record.readFeatures) {
if (rf.getOperator() == ReadBase.operator) {
System.out.println("Read feature B detected.");
System.exit(1);
}
}
}
}
}
}
}