samFileReader.getFileHeader(), ref, preservation,
params.captureAllTags, params.captureTags,
params.ignoreTags);
samRecords.clear();
Container container = BLOCK_PROTO.buildContainer(records,
samFileReader.getFileHeader(),
params.preserveReadNames, globalRecordCounter,
null, true);
for (Slice s : container.slices) {
if (s.alignmentStart < 1) {
s.refMD5 = new byte[16];
Arrays.fill(s.refMD5, (byte) 0);
continue;
}
md5_MessageDigest.reset();
int span = Math.min(s.alignmentSpan, ref.length
- s.alignmentStart);
if (s.alignmentStart == 0)
System.out.println("gotcha");
md5_MessageDigest.update(ref, s.alignmentStart - 1,
span);
String sliceRef = new String(ref, s.alignmentStart - 1,
Math.min(span, 30));
s.refMD5 = md5_MessageDigest.digest();
log.debug("Slice ref starts with: " + sliceRef);
log.debug("Slice ref md5: "
+ (String.format("%032x", new BigInteger(1,
s.refMD5))));
}
globalRecordCounter += records.size();
records.clear();
long len = ReadWrite.writeContainer(container, os);
container.offset = offset;
offset += len;
log.info(String
.format("CONTAINER WRITE TIMES: header build time %dms, slices build time %dms, io time %dms.",
container.buildHeaderTime / 1000000,
container.buildSlicesTime / 1000000,
container.writeTime / 1000000));
for (Slice s : container.slices) {
coreBytes += s.coreBlock.getCompressedContent().length;
for (Integer i : s.external.keySet())
externalBytes[i] += s.external.get(i)
.getCompressedContent().length;
}
}
}
if (prevSeqId != samRecord.getReferenceIndex()) {
if (samRecord.getReferenceIndex() != SAMRecord.NO_ALIGNMENT_REFERENCE_INDEX) {
sequence = Utils
.trySequenceNameVariants(referenceSequenceFile,
samRecord.getReferenceName());
ref = sequence.getBases();
{
// hack:
int newLines = 0;
for (byte b : ref)
if (b == 10)
newLines++;
byte[] ref2 = new byte[ref.length - newLines];
int j = 0;
for (int i = 0; i < ref.length; i++)
if (ref[i] == 10)
continue;
else
ref2[j++] = ref[i];
ref = ref2;
}
} else
ref = new byte[] {};
prevSeqId = samRecord.getReferenceIndex();
}
samRecords.add(samRecord);
bases += samRecord.getReadLength();
if (params.maxRecords-- < 1)
break;
} while (iterator.hasNext());
{ // copied for now, should be a subroutine:
if (!samRecords.isEmpty()) {
List<CramRecord> records = convert(samRecords,
samFileReader.getFileHeader(), ref, preservation,
params.captureAllTags, params.captureTags,
params.ignoreTags);
samRecords.clear();
Container container = BLOCK_PROTO.buildContainer(records,
samFileReader.getFileHeader(),
params.preserveReadNames, globalRecordCounter, null,
true);
for (Slice s : container.slices) {
if (s.alignmentStart < 1) {