private void ApplyRnaEdits(StringBuilder sb) { if (_rnaEdits == null) { return; } var codingStart = _codingRegion.CdnaStart; var editOffset = 0; RnaEditUtilities.SetTypesAndSort(_rnaEdits); foreach (var rnaEdit in _rnaEdits) { //if the edits are in utr regions, we can skip them var cdsEditStart = rnaEdit.Start - codingStart + editOffset; if (sb.Length <= cdsEditStart) { continue; } switch (rnaEdit.Type) { case VariantType.SNV: if (cdsEditStart >= 0) { sb[cdsEditStart] = rnaEdit.Bases[0]; } break; case VariantType.MNV: for (var i = 0; i < rnaEdit.Bases.Length && cdsEditStart >= 0; i++) { sb[cdsEditStart + i] = rnaEdit.Bases[i]; } break; case VariantType.insertion: if (cdsEditStart >= 0) { sb.Insert(cdsEditStart, rnaEdit.Bases); } editOffset += rnaEdit.Bases.Length; //account for inserted bases break; case VariantType.deletion: //from the transcripts NM_033089.6 and NM_001317107.1, it seems that deletion edits are //already accounted for in the exons. So, we don't need to delete any more. editOffset -= rnaEdit.End - rnaEdit.Start + 1; //account for deleted bases break; default: throw new UserErrorException("Encountered unknown rnaEdit type:" + rnaEdit.Type); } } }
private void ApplyRnaEdits(StringBuilder sb) { if (_rnaEdits == null) { return; } var editOffset = 0; RnaEditUtilities.SetTypesAndSort(_rnaEdits); foreach (var rnaEdit in _rnaEdits) { int cdnaEditStart = rnaEdit.Start - 1 + editOffset; switch (rnaEdit.Type) { case VariantType.SNV: if (cdnaEditStart >= 0) { sb[cdnaEditStart] = rnaEdit.Bases[0]; } break; case VariantType.MNV: for (var i = 0; i < rnaEdit.Bases.Length && cdnaEditStart >= 0; i++) { sb[cdnaEditStart + i] = rnaEdit.Bases[i]; } break; case VariantType.insertion: if (cdnaEditStart >= 0) { sb.Insert(cdnaEditStart, rnaEdit.Bases); } editOffset += rnaEdit.Bases.Length; break; case VariantType.deletion: editOffset -= rnaEdit.End - rnaEdit.Start + 1; break; default: throw new UserErrorException("Encountered unknown rnaEdit type:" + rnaEdit.Type); } } }