if (record.readFeatures != null) for (final ReadFeature feature : record.readFeatures) { switch (feature.getOperator()) { case BaseQualityScore.operator: int pos = feature.getPosition(); scores[pos - 1] = ((BaseQualityScore) feature).getQualityScore(); star = false; break; case ReadBase.operator: pos = feature.getPosition(); scores[pos - 1] = ((ReadBase) feature).getQualityScore(); star = false;
public static void reversePositionsInRead(CramCompressionRecord record) { if (record.readFeatures == null || record.readFeatures.isEmpty()) return; for (ReadFeature f : record.readFeatures) f.setPosition(record.readLength - f.getPosition() - 1); Collections.reverse(record.readFeatures); }
/** * Build an array of substitution frequencies for the given CRAM records. * * @param records * CRAM records to scan * @return a 2D array of frequencies, see * {@link htsjdk.samtools.cram.structure.SubstitutionMatrix} */ static long[][] buildFrequencies(final List<CramCompressionRecord> records) { final long[][] frequencies = new long[BYTE_SPACE_SIZE][BYTE_SPACE_SIZE]; for (final CramCompressionRecord record : records) { if (record.readFeatures != null) { for (final ReadFeature readFeature : record.readFeatures) { if (readFeature.getOperator() == Substitution.operator) { final Substitution substitution = ((Substitution) readFeature); final byte refBase = substitution.getReferenceBase(); final byte base = substitution.getBase(); frequencies[refBase][base]++; } } } } return frequencies; }
@Override public int compare(final ReadFeature o1, final ReadFeature o2) { return o1.getPosition() - o2.getPosition(); } };
/** * Build an array of substitution frequencies for the given CRAM records. * * @param records * CRAM records to scan * @return a 2D array of frequencies, see * {@link htsjdk.samtools.cram.structure.SubstitutionMatrix} */ static long[][] buildFrequencies(final List<CramCompressionRecord> records) { final long[][] frequencies = new long[BYTE_SPACE_SIZE][BYTE_SPACE_SIZE]; for (final CramCompressionRecord record : records) { if (record.readFeatures != null) { for (final ReadFeature readFeature : record.readFeatures) { if (readFeature.getOperator() == Substitution.operator) { final Substitution substitution = ((Substitution) readFeature); final byte refBase = substitution.getReferenceBase(); final byte base = substitution.getBase(); frequencies[refBase][base]++; } } } } return frequencies; }
@Override public int compare(final ReadFeature o1, final ReadFeature o2) { return o1.getPosition() - o2.getPosition(); } };
if (record.readFeatures != null) for (final ReadFeature feature : record.readFeatures) { switch (feature.getOperator()) { case BaseQualityScore.operator: int pos = feature.getPosition(); scores[pos - 1] = ((BaseQualityScore) feature).getQualityScore(); star = false; break; case ReadBase.operator: pos = feature.getPosition(); scores[pos - 1] = ((ReadBase) feature).getQualityScore(); star = false;
continue; for (ReadFeature rf : record.readFeatures) { if (rf.getOperator() == ReadBase.operator) { System.out.println("Read feature B detected."); System.exit(1);
@Override public int compare(final ReadFeature o1, final ReadFeature o2) { return o1.getPosition() - o2.getPosition(); } };
if (record.readFeatures != null) for (final ReadFeature feature : record.readFeatures) { switch (feature.getOperator()) { case BaseQualityScore.operator: int pos = feature.getPosition(); scores[pos - 1] = ((BaseQualityScore) feature).getQualityScore(); star = false; break; case ReadBase.operator: pos = feature.getPosition(); scores[pos - 1] = ((ReadBase) feature).getQualityScore(); star = false;
void calculateAlignmentBoundaries() { if (isSegmentUnmapped()) { alignmentSpan = 0; alignmentEnd = SAMRecord.NO_ALIGNMENT_START; } else if (readFeatures == null || readFeatures.isEmpty()) { alignmentSpan = readLength; alignmentEnd = alignmentStart + alignmentSpan - 1; } else { alignmentSpan = readLength; for (final ReadFeature readFeature : readFeatures) { switch (readFeature.getOperator()) { case InsertBase.operator: alignmentSpan--; break; case Insertion.operator: alignmentSpan -= ((Insertion) readFeature).getSequence().length; break; case SoftClip.operator: alignmentSpan -= ((SoftClip) readFeature).getSequence().length; break; case Deletion.operator: alignmentSpan += ((Deletion) readFeature).getLength(); break; default: break; } } alignmentEnd = alignmentStart + alignmentSpan - 1; } }
for (; posInRead < variation.getPosition(); posInRead++) { final int rp = alignmentStart + posInSeq++ - refOffsetZeroBased; if (rp < 0) switch (variation.getOperator()) { case Substitution.operator: final Substitution substitution = (Substitution) variation; switch (variation.getOperator()) { case ReadBase.operator: final ReadBase readBase = (ReadBase) variation; bases[variation.getPosition() - 1] = readBase.getBase(); break; default:
void calculateAlignmentBoundaries() { if (isSegmentUnmapped()) { alignmentSpan = 0; alignmentEnd = SAMRecord.NO_ALIGNMENT_START; } else if (readFeatures == null || readFeatures.isEmpty()) { alignmentSpan = readLength; alignmentEnd = alignmentStart + alignmentSpan - 1; } else { alignmentSpan = readLength; for (final ReadFeature readFeature : readFeatures) { switch (readFeature.getOperator()) { case InsertBase.operator: alignmentSpan--; break; case Insertion.operator: alignmentSpan -= ((Insertion) readFeature).getSequence().length; break; case SoftClip.operator: alignmentSpan -= ((SoftClip) readFeature).getSequence().length; break; case Deletion.operator: alignmentSpan += ((Deletion) readFeature).getLength(); break; default: break; } } alignmentEnd = alignmentStart + alignmentSpan - 1; } }
for (final ReadFeature feature : features) { final int gap = feature.getPosition() - (lastOpPos + lastOpLen); if (gap > 0) { if (lastOperator != CigarOperator.MATCH_OR_MISMATCH) { switch (feature.getOperator()) { case Insertion.operator: cigarOperator = CigarOperator.INSERTION; lastOpPos = feature.getPosition(); } else lastOpLen += readFeatureLength;
/** * Given the records update the substitution matrix with actual substitution * codes. * * @param records * CRAM records * @param substitutionMatrix * the matrix to be updated */ static void updateSubstitutionCodes(final List<CramCompressionRecord> records, final SubstitutionMatrix substitutionMatrix) { for (final CramCompressionRecord record : records) { if (record.readFeatures != null) { for (final ReadFeature recordFeature : record.readFeatures) { if (recordFeature.getOperator() == Substitution.operator) { final Substitution substitution = ((Substitution) recordFeature); if (substitution.getCode() == Substitution.NO_CODE) { final byte refBase = substitution.getReferenceBase(); final byte base = substitution.getBase(); substitution.setCode(substitutionMatrix.code(refBase, base)); } } } } } }
for (final ReadFeature feature : features) { final int gap = feature.getPosition() - (lastOpPos + lastOpLen); if (gap > 0) { if (lastOperator != CigarOperator.MATCH_OR_MISMATCH) { switch (feature.getOperator()) { case Insertion.operator: cigarOperator = CigarOperator.INSERTION; lastOpPos = feature.getPosition(); } else lastOpLen += readFeatureLength;
/** * Given the records update the substitution matrix with actual substitution * codes. * * @param records * CRAM records * @param substitutionMatrix * the matrix to be updated */ static void updateSubstitutionCodes(final List<CramCompressionRecord> records, final SubstitutionMatrix substitutionMatrix) { for (final CramCompressionRecord record : records) { if (record.readFeatures != null) { for (final ReadFeature recordFeature : record.readFeatures) { if (recordFeature.getOperator() == Substitution.operator) { final Substitution substitution = ((Substitution) recordFeature); if (substitution.getCode() == Substitution.NO_CODE) { final byte refBase = substitution.getReferenceBase(); final byte base = substitution.getBase(); substitution.setCode(substitutionMatrix.code(refBase, base)); } } } } } }
for (; posInRead < variation.getPosition(); posInRead++) { final int rp = alignmentStart + posInSeq++ - refOffsetZeroBased; bases[posInRead - 1] = getByteOrDefault(ref, rp, (byte) 'N'); switch (variation.getOperator()) { case Substitution.operator: final Substitution substitution = (Substitution) variation; switch (variation.getOperator()) { case ReadBase.operator: final ReadBase readBase = (ReadBase) variation; bases[variation.getPosition() - 1] = readBase.getBase(); break; default:
for (; posInRead < variation.getPosition(); posInRead++) { final int rp = alignmentStart + posInSeq++ - refOffsetZeroBased; bases[posInRead - 1] = getByteOrDefault(ref, rp, (byte) 'N'); switch (variation.getOperator()) { case Substitution.operator: final Substitution substitution = (Substitution) variation; switch (variation.getOperator()) { case ReadBase.operator: final ReadBase readBase = (ReadBase) variation; bases[variation.getPosition() - 1] = readBase.getBase(); break; default:
int prevPos = 0; for (final ReadFeature f : r.readFeatures) { featuresCodeCodec.writeData(f.getOperator()); featurePositionCodec.writeData(f.getPosition() - prevPos); prevPos = f.getPosition(); switch (f.getOperator()) { case ReadBase.operator: final ReadBase rb = (ReadBase) f; break; default: throw new RuntimeException("Unknown read feature operator: " + (char) f.getOperator());