/// <summary> /// assigns the reference and alternate codons [TranscriptVariationAllele.pm:259 codon] /// </summary> public static void Assign(TranscriptAnnotation ta, Transcript transcript, ICompressedSequence compressedSequence) { // sanity check: make sure this is a coding region if (!(ta.HasValidCdsEnd && ta.HasValidCdsStart)) { ta.ReferenceCodon = null; ta.AlternateCodon = null; return; } // calculate necessary coordinates and lengths int aminoAcidStart = ta.ProteinBegin * 3 - 2; int aminoAcidEnd = ta.ProteinEnd * 3; int prefixLen = ta.CodingDnaSequenceBegin - aminoAcidStart; int suffixLen = aminoAcidEnd - ta.CodingDnaSequenceEnd; var codingSequence = new CodingSequence(compressedSequence, transcript.Translation.CodingRegion.GenomicStart, transcript.Translation.CodingRegion.GenomicEnd, transcript.CdnaMaps, transcript.Gene.OnReverseStrand, transcript.StartExonPhase); var aminoAcidSeq = codingSequence.Sequence(); int start1 = aminoAcidStart - 1; int start2 = aminoAcidEnd - suffixLen; int maxSuffixLen = aminoAcidSeq.Length - start2; bool atTailEnd = false; if (suffixLen > maxSuffixLen) { suffixLen = maxSuffixLen; atTailEnd = true; } if (start1 < 0) { start1 = 0; } if (start2 < 0) { start2 = 0; } if (prefixLen < 0) { prefixLen = 0; } string prefix = start1 + prefixLen < aminoAcidSeq.Length ? aminoAcidSeq.Substring(start1, prefixLen).ToLower() : "AAA"; string suffix = suffixLen > 0 ? aminoAcidSeq.Substring(start2, suffixLen).ToLower() : ""; ta.HasFrameShift = false; ta.ReferenceCodon = GetCodon(ta.TranscriptReferenceAllele, prefix, suffix, ref ta.HasFrameShift, atTailEnd); ta.AlternateCodon = GetCodon(ta.TranscriptAlternateAllele, prefix, suffix, ref ta.HasFrameShift, atTailEnd); }
/// <summary>O /// sets the amino acids given the reference and variant codons /// </summary> public void Assign(TranscriptAnnotation transcriptAnnotation) { if (string.IsNullOrEmpty(transcriptAnnotation.ReferenceCodon) && string.IsNullOrEmpty(transcriptAnnotation.AlternateCodon)) { return; } // sanity check: return null if either codon contains Ns if (transcriptAnnotation.ReferenceCodon.Contains("N") || transcriptAnnotation.AlternateCodon.Contains("N")) { return; } transcriptAnnotation.ReferenceAminoAcids = TranslateBases(transcriptAnnotation.ReferenceCodon, false); transcriptAnnotation.AlternateAminoAcids = TranslateBases(transcriptAnnotation.AlternateCodon, false); }