/** * 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; }
/** * 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; }
/** * Test the outcome of a ACGTN mismatch. * The result should always be a {@link Substitution} read feature. */ @Test public void testAddMismatchReadFeaturesSingleSubstitution() { final List<ReadFeature> readFeatures = buildMatchOrMismatchReadFeatures("A", "C", "!"); Assert.assertEquals(1, readFeatures.size()); final ReadFeature rf = readFeatures.get(0); Assert.assertTrue(rf instanceof Substitution); final Substitution substitution = (Substitution) rf; Assert.assertEquals(1, substitution.getPosition()); Assert.assertEquals('C', substitution.getBase()); Assert.assertEquals('A', substitution.getReferenceBase()); }
/** * 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)); } } } } } }
/** * 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)); } } } } } }
final Substitution sv = (Substitution) f; if (sv.getCode() < 0) baseSubstitutionCodeCodec.writeData(substitutionMatrix.code(sv.getReferenceBase(), sv.getBase())); else baseSubstitutionCodeCodec.writeData(sv.getCode());
final Substitution sv = (Substitution) f; if (sv.getCode() < 0) baseSubstitutionCodeCodec.writeData(substitutionMatrix.code(sv.getReferenceBase(), sv.getBase())); else baseSubstitutionCodeCodec.writeData(sv.getCode());