private static void AssignExtended(string transcriptReferenceAllele, string transcriptAlternateAllele, NullableInterval cdsInterval, NullableInterval proteinInterval, ISequence codingSequence, out string refCodons, out string altCodons) { refCodons = null; altCodons = null; if (cdsInterval.Start == null || cdsInterval.End == null || proteinInterval.Start == null || proteinInterval.End == null) { return; } int aminoAcidStart = proteinInterval.Start.Value * 3 - 2; int aminoAcidEnd = proteinInterval.End.Value * 3; int prefixLen = cdsInterval.Start.Value - aminoAcidStart; int suffixLen = aminoAcidEnd - cdsInterval.End.Value; int start1 = aminoAcidStart - 1; int start2 = aminoAcidEnd - suffixLen; int maxSuffixLen = codingSequence.Length - start2; var atTailEnd = false; if (suffixLen > maxSuffixLen) { suffixLen = maxSuffixLen; atTailEnd = true; } if (suffixLen > maxSuffixLen) { suffixLen = maxSuffixLen; } string prefix = start1 + prefixLen < codingSequence.Length ? codingSequence.Substring(start1, prefixLen).ToLower() : "AAA"; string suffix = suffixLen > 0 ? codingSequence.Substring(start2, suffixLen).ToLower() : ""; var needExtend = !atTailEnd && !Codons.IsTriplet(prefixLen + suffixLen + transcriptAlternateAllele.Length); var extendedLen = (maxSuffixLen - suffixLen) > 45 ? 45 : (maxSuffixLen - suffixLen) / 3 * 3; if (needExtend) { suffix = codingSequence.Substring(start2, suffixLen + extendedLen); } refCodons = Codons.GetCodon(transcriptReferenceAllele, prefix, suffix); altCodons = Codons.GetCodon(transcriptAlternateAllele, prefix, suffix); }
/// <summary> /// returns true if the variant is a frameshift variant [VariantEffect.pm:940 frameshift] /// </summary> public bool IsFrameshiftVariant() { const ConsequenceType ct = ConsequenceType.FrameshiftVariant; if (_cache.Contains(ct)) { return(_cache.Get(ct)); } // check the predicates if (!_preCache.IsCoding) { _cache.Add(ct, false); return(false); } bool result = false; if (!_altAllele.IsStructuralVariant) { if (IsIncompleteTerminalCodonVariant() || !_ta.HasValidCdsStart || !_ta.HasValidCdsEnd) { _cache.Add(ct, false); return(false); } int varLen = _ta.CodingDnaSequenceEnd - _ta.CodingDnaSequenceBegin + 1; int alleleLen = _altAllele.AlternateAllele?.Length ?? 0; result = !Codons.IsTriplet(alleleLen - varLen) && !IsStopRetained(); } result = result && !IsTruncatedByStop(); _cache.Add(ct, result); return(result); }
public void IsTriplet(int len, bool expectedResult) { var observedResult = Codons.IsTriplet(len); Assert.Equal(expectedResult, observedResult); }