public final void readReadFeatures(AbstractReader reader) throws IOException { readFeatureBuffer.clear(); readFeatureSize = reader.numberOfReadFeaturesCodec.readData(); int prevPos = 0; for (int i = 0; i < readFeatureSize; i++) { Byte operator = reader.readFeatureCodeCodec.readData(); int pos = prevPos + reader.readFeaturePositionCodec.readData(); prevPos = pos; readFeatureBuffer.put(reader.baseCodec.readData()); readFeatureBuffer.put(reader.qualityScoreCodec.readData()); break; case Substitution.operator: readFeatureBuffer.put(reader.baseSubstitutionCodec.readData()); break; case Insertion.operator: byte[] ins = reader.insertionCodec.readData(); readFeatureBuffer.putInt(ins.length); readFeatureBuffer.put(ins); break; case SoftClip.operator: byte[] softClip = reader.softClipCodec.readData(); readFeatureBuffer.putInt(softClip.length); readFeatureBuffer.put(softClip); break; case HardClip.operator: readFeatureBuffer.putInt(reader.hardClipCodec.readData()); break; case Padding.operator: readFeatureBuffer.putInt(reader.paddingCodec.readData());
readName = null; try { flags = bitFlagsCodec.readData(); compressionFlags = compressionBitFlagsCodec.readData(); if (refId == -2) { seqId = refIdCodec.readData(); readLength = readLengthCodec.readData(); if (APDelta) prevAlStart += alignmentStartCodec.readData(); else prevAlStart = alignmentStartCodec.readData(); readGroupCodec.readData(); readName = readNameCodec.readData(); mateFlags = mateBitFlagCodec.readData(); if (!captureReadNames) readName = readNameCodec.readData(); mateReferenceIdCodec.readData(); mateAlignmentStartCodec.readData(); insertSizeCodec.readData(); detachedCount++; } else if ((compressionFlags & CramFlags.HAS_MATE_DOWNSTREAM_FLAG) != 0) { int distance = distanceToNextFragmentCodec.readData(); nameCache.put(recordCounter + distance + 1, recordCounter);
flags = bitFlagsCodec.readData(); compressionFlags = compressionBitFlagsCodec.readData(); if (refId == -2) view.setRefID(refIdCodec.readData()); else view.setRefID(refId); readLength = readLengthCodec.readData(); if (AP_delta) prevAlStart += alignmentStartCodec.readData(); else prevAlStart = alignmentStartCodec.readData(); readGroupID = readGroupCodec.readData(); view.setReadName(readNameCodec.readData()); mateFlags = mateBitFlagCodec.readData(); if (!captureReadNames) view.setReadName(readNameCodec.readData()); view.setMateRefID(mateReferenceIdCodec.readData()); view.setMateAlStart(mateAlignmentStartCodec.readData()); view.setInsertSize(insertSizeCodec.readData()); detachedCount++; distances[recordCounter] = 0; } else if ((compressionFlags & CramFlags.HAS_MATE_DOWNSTREAM_FLAG) != 0) {