Beispiel #1
0
        public void GetCdnaPosition_Snv_AfterOutframeRnaEditInsertion()
        {
            // NM_033517.1
            var variant  = new Interval(51135986, 51135986);
            var observed = MappedPositionUtilities.GetCdnaPositions(_regionsNm33517[20], _regionsNm33517[20], variant, false, false);

            Assert.Equal(1343, observed.CdnaStart);
        }
Beispiel #2
0
        public void GetCdnaPosition_Snv_AfterOutFrameRnaEditDeletion()
        {
            // NM_001317107.1
            var variant  = new Interval(22138550, 22138550);
            var observed = MappedPositionUtilities.GetCdnaPositions(_regionsNm1317107[0], _regionsNm1317107[0], variant, true, false);

            Assert.Equal(681, observed.CdnaStart);
        }
Beispiel #3
0
        public void GetCdnaPosition_Snv_AfterInframeRnaEditInsertion()
        {
            // NM_000682.6
            var variant  = new Interval(96780984, 96780984);
            var observed = MappedPositionUtilities.GetCdnaPositions(_regionsNm682[0], _regionsNm682[0], variant, true, false);

            Assert.Equal(1010, observed.CdnaStart);
        }
Beispiel #4
0
        public void GetProteinPosition_Forward_Insertion()
        {
            int proteinStart = MappedPositionUtilities.GetProteinPosition(225);
            int proteinEnd   = MappedPositionUtilities.GetProteinPosition(224);

            Assert.Equal(75, proteinStart);
            Assert.Equal(75, proteinEnd);
        }
Beispiel #5
0
        public void GetCdnaPositions_Reverse_Deletion()
        {
            var variant  = new Interval(ReverseVariantStart, ReverseVariantEnd);
            var observed = MappedPositionUtilities.GetCdnaPositions(_reverseTranscriptRegions[6], _reverseTranscriptRegions[7], variant, true, false);

            Assert.Equal(123, observed.CdnaStart);
            Assert.Equal(-1, observed.CdnaEnd);
        }
Beispiel #6
0
        public void GetProteinPosition_Reverse_Deletion()
        {
            int proteinStart = MappedPositionUtilities.GetProteinPosition(-1);
            int proteinEnd   = MappedPositionUtilities.GetProteinPosition(-1);

            Assert.Equal(-1, proteinStart);
            Assert.Equal(-1, proteinEnd);
        }
Beispiel #7
0
        public void GetCdnaPositions_Forward_Insertion()
        {
            var variant  = new Interval(ForwardVariantStart, ForwardVariantEnd);
            var observed = MappedPositionUtilities.GetCdnaPositions(_forwardTranscriptRegions[4],
                                                                    _forwardTranscriptRegions[4], variant, false, true);

            Assert.Equal(486, observed.CdnaStart);
            Assert.Equal(485, observed.CdnaEnd);
        }
Beispiel #8
0
        public void GetCdsPosition_Reverse_NoCodingRegion_Deletion()
        {
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(null, -1, 123, startExonPhase, false);

            Assert.Equal(-1, cdsStart);
            Assert.Equal(-1, cdsEnd);
        }
Beispiel #9
0
        public void GetCdsPosition_Snv_AfterOutframeRnaEditInsertion()
        {
            // NM_033517.1
            var        codingRegion   = new CodingRegion(51113070, 51169740, 1, 5196, 5157);
            const byte startExonPhase = 0;

            (int cdsStart, _) = MappedPositionUtilities.GetCdsPositions(codingRegion, 1343, 1343, startExonPhase, false);

            Assert.Equal(1343, cdsStart);
        }
Beispiel #10
0
        public void GetCdsPosition_Forward_Insertion()
        {
            var        codingRegion   = new CodingRegion(78001559, 78024355, 262, 495, 234);
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 486, 485, startExonPhase, true);

            Assert.Equal(225, cdsStart);
            Assert.Equal(224, cdsEnd);
        }
Beispiel #11
0
        public void FindRegion_Reverse_Deletion()
        {
            var observedStart = MappedPositionUtilities.FindRegion(_reverseTranscriptRegions, ReverseVariantStart);
            var observedEnd   = MappedPositionUtilities.FindRegion(_reverseTranscriptRegions, ReverseVariantEnd);

            Assert.Equal(6, observedStart.Index);
            Assert.Equal(7, observedEnd.Index);
            Assert.NotNull(observedStart.Region);
            Assert.NotNull(observedEnd.Region);
        }
Beispiel #12
0
        public void FindRegion_Forward_Insertion()
        {
            var observedStart = MappedPositionUtilities.FindRegion(_forwardTranscriptRegions, ForwardVariantStart);
            var observedEnd   = MappedPositionUtilities.FindRegion(_forwardTranscriptRegions, ForwardVariantEnd);

            Assert.Equal(4, observedStart.Index);
            Assert.Equal(4, observedEnd.Index);
            Assert.NotNull(observedStart.Region);
            Assert.NotNull(observedEnd.Region);
        }
        private static IMappedPosition GetMappedPosition(ITranscriptRegion[] regions, IInterval variant)
        {
            (int startIndex, _) = MappedPositionUtilities.FindRegion(regions, variant.Start);
            (int endIndex, _)   = MappedPositionUtilities.FindRegion(regions, variant.End);

            (int exonStart, int exonEnd, int intronStart, int intronEnd) = regions.GetExonsAndIntrons(startIndex, endIndex);

            return(new MappedPosition(-1, -1, -1, -1, -1, -1, exonStart, exonEnd, intronStart, intronEnd, startIndex,
                                      endIndex));
        }
Beispiel #14
0
        public void GetCdsPosition_Forward_Insertion_WithStartExonPhase()
        {
            var        codingRegion   = new CodingRegion(6413107, 6415837, 1, 953, 953);
            const byte startExonPhase = 1;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 29, 28, startExonPhase, true);

            Assert.Equal(30, cdsStart);
            Assert.Equal(29, cdsEnd);
        }
Beispiel #15
0
        public void GetCdsPosition_Snv_AfterInframeRnaEditInsertion()
        {
            // NM_000682.6
            var        codingRegion   = new CodingRegion(96780545, 96781888, 97, 1449, 1344);
            const byte startExonPhase = 0;

            (int cdsStart, _) = MappedPositionUtilities.GetCdsPositions(codingRegion, 1010, 1010, startExonPhase, false);

            Assert.Equal(914, cdsStart);
        }
Beispiel #16
0
        public void GetCdsPosition_Snv_AfterOutFrameRnaEditDeletion()
        {
            // NM_001317107.1
            var        codingRegion   = new CodingRegion(22138201, 22139150, 83, 1030, 948);
            const byte startExonPhase = 0;

            (int cdsStart, _) = MappedPositionUtilities.GetCdsPositions(codingRegion, 681, 681, startExonPhase, false);

            Assert.Equal(599, cdsStart);
        }
Beispiel #17
0
        public void FixExonEndpointInsertion_VariantStart_ExonStart_Forward()
        {
            var startRegion = new TranscriptRegion(TranscriptRegionType.Exon, 2, 99459243, 99459360, 108, 225);
            var endRegion   = new TranscriptRegion(TranscriptRegionType.Intron, 1, 99456512, 99459242, 107, 108);

            var result = MappedPositionUtilities.FixExonEndpointInsertion(108, -1, false, startRegion, endRegion,
                                                                          new Interval(99459243, 99459242));

            Assert.Equal(108, result.CdnaStart);
            Assert.Equal(107, result.CdnaEnd);
        }
Beispiel #18
0
        public void FixExonEndpointInsertion_VariantEnd_ExonEnd_Forward()
        {
            var startRegion = new TranscriptRegion(TranscriptRegionType.Intron, 16, 89521770, 89528546, 3071, 3072);
            var endRegion   = new TranscriptRegion(TranscriptRegionType.Exon, 16, 89521614, 89521769, 2916, 3071);

            var result = MappedPositionUtilities.FixExonEndpointInsertion(-1, 3071, false, startRegion, endRegion,
                                                                          new Interval(89521770, 89521769));

            Assert.Equal(3072, result.CdnaStart);
            Assert.Equal(3071, result.CdnaEnd);
        }
Beispiel #19
0
        public void FixExonEndpointInsertion_VariantEnd_ExonEnd_Reverse()
        {
            var startRegion = new TranscriptRegion(TranscriptRegionType.Intron, 7, 243736351, 243776972, 762, 763);
            var endRegion   = new TranscriptRegion(TranscriptRegionType.Exon, 8, 243736228, 243736350, 763, 885);

            var result = MappedPositionUtilities.FixExonEndpointInsertion(-1, 763, true, startRegion, endRegion,
                                                                          new Interval(243736351, 243736350));

            Assert.Equal(762, result.CdnaStart);
            Assert.Equal(763, result.CdnaEnd);
        }
Beispiel #20
0
        public void GetCdsPosition_SilenceOutput_InsertionBeforeCodingRegion_Reverse()
        {
            // variant: [37480320, 37480319] insertion after coding region
            var        codingRegion   = new CodingRegion(37480320, 37543667, 556, 3228, 2673);
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 3229, 3228, startExonPhase, true);

            Assert.Equal(-1, cdsStart);
            Assert.Equal(-1, cdsEnd);
        }
Beispiel #21
0
        public void GetCdsPosition_DoNotSilenceOutput_Reverse()
        {
            // variant: [179315139, 179315692]
            var        codingRegion   = new CodingRegion(179308070, 179315170, 617, 942, 326);
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 95, 648, startExonPhase, false);

            Assert.Equal(-1, cdsStart);
            Assert.Equal(32, cdsEnd);
        }
Beispiel #22
0
        public void GetCdsPosition_SilenceOutput_InsertionAfterCodingRegion_Reverse()
        {
            // variant: [103629803, 103629804] insertion after coding region
            var        codingRegion   = new CodingRegion(103113259, 103629803, 161, 10543, 10383);
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 161, 160, startExonPhase, true);

            Assert.Equal(-1, cdsStart);
            Assert.Equal(-1, cdsEnd);
        }
Beispiel #23
0
        public void GetCdsPosition_SilenceOutput_InsertionAfterCodingRegion_Forward()
        {
            // variant: [6647337, 6647336] insertion after coding region
            var        codingRegion   = new CodingRegion(6643999, 6647336, 667, 1674, 1008);
            const byte startExonPhase = 0;

            var(cdsStart, cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, 1675, 1674, startExonPhase, true);

            Assert.Equal(-1, cdsStart);
            Assert.Equal(-1, cdsEnd);
        }
Beispiel #24
0
        public void FixExonEndpointInsertion_VariantStart_ExonStart_Reverse()
        {
            // N.B. this configuration has never been spotted in the wild
            var startRegion = new TranscriptRegion(TranscriptRegionType.Exon, 2, 2000, 2199, 1, 200);
            var endRegion   = new TranscriptRegion(TranscriptRegionType.Intron, 2, 1999, 1000, 200, 201);

            var result = MappedPositionUtilities.FixExonEndpointInsertion(200, -1, true, startRegion, endRegion,
                                                                          new Interval(2000, 1999));

            Assert.Equal(200, result.CdnaStart);
            Assert.Equal(201, result.CdnaEnd);
        }
Beispiel #25
0
        /// <summary>
        /// Adjust positions by alt allele length
        /// </summary>
        internal static (int Start, int End, string RefAllele, int RegionStart, int RegionEnd) ShiftDuplication(
            this ITranscriptRegion[] regions, int start, string altAllele, bool onReverseStrand)
        {
            int incrementLength = altAllele.Length;
            int dupStart        = onReverseStrand ? start + incrementLength - 1    : start - incrementLength;
            int dupEnd          = onReverseStrand ? dupStart - incrementLength + 1 : dupStart + incrementLength - 1;

            (int regionStart, _) = MappedPositionUtilities.FindRegion(regions, dupStart);
            (int regionEnd, _)   = MappedPositionUtilities.FindRegion(regions, dupEnd);

            return(dupStart, dupEnd, altAllele, regionStart, regionEnd);
        }
Beispiel #26
0
        public void GetHgvscAnnotation_in_intron_gap_substitution(int variantStart, int variantEnd, string reference, string alt,
                                                                  string transcriptRef, VariantType variantType, string expectedHgvsc)
        {
            var(startIndex, _) =
                MappedPositionUtilities.FindRegion(_gapTranscript.TranscriptRegions, variantStart);
            var(endIndex, _) =
                MappedPositionUtilities.FindRegion(_gapTranscript.TranscriptRegions, variantEnd);
            var variant       = new SimpleVariant(ChromosomeUtilities.Chr10, variantStart, variantEnd, reference, alt, variantType);
            var observedHgvsc =
                HgvsCodingNomenclature.GetHgvscAnnotation(_gapTranscript, variant, null, startIndex, endIndex, transcriptRef, null);

            Assert.Equal(expectedHgvsc, observedHgvsc);
        }
        internal static void GetGeneFusionsByTranscript(this Dictionary <string, IAnnotatedGeneFusion> transcriptIdToGeneFusions,
                                                        BreakEndAdjacency adjacency, ITranscript[] originTranscripts, ITranscript[] partnerTranscripts)
        {
            var geneFusions = new List <IGeneFusion>();

            foreach (var originTranscript in originTranscripts)
            {
                geneFusions.Clear();
                bool originOnReverseStrand = originTranscript.Gene.OnReverseStrand ^ adjacency.Origin.OnReverseStrand;
                (int originIndex, ITranscriptRegion originRegion) = MappedPositionUtilities.FindRegion(originTranscript.TranscriptRegions, adjacency.Origin.Position);

                int?originExon   = originRegion.Type == TranscriptRegionType.Exon ? (int?)originRegion.Id : null;
                int?originIntron = originRegion.Type == TranscriptRegionType.Intron ? (int?)originRegion.Id : null;

                foreach (var partnerTranscript in partnerTranscripts)
                {
                    bool partnerOnReverseStrand      = partnerTranscript.Gene.OnReverseStrand ^ adjacency.Partner.OnReverseStrand;
                    bool differentStrand             = originOnReverseStrand != partnerOnReverseStrand;
                    bool differentTranscriptSource   = originTranscript.Source != partnerTranscript.Source;
                    bool sameGeneSymbol              = originTranscript.Gene.Symbol == partnerTranscript.Gene.Symbol;
                    bool codingRegionAlreadyOverlaps = originTranscript.Translation.CodingRegion.Overlaps(partnerTranscript.Translation.CodingRegion);

                    if (differentStrand || differentTranscriptSource || sameGeneSymbol || codingRegionAlreadyOverlaps)
                    {
                        continue;
                    }

                    (int partnerIndex, ITranscriptRegion partnerRegion) = MappedPositionUtilities.FindRegion(partnerTranscript.TranscriptRegions, adjacency.Partner.Position);

                    int?partnerExon   = partnerRegion.Type == TranscriptRegionType.Exon ? (int?)partnerRegion.Id : null;
                    int?partnerIntron = partnerRegion.Type == TranscriptRegionType.Intron ? (int?)partnerRegion.Id : null;

                    BreakPointTranscript origin  = new BreakPointTranscript(originTranscript, adjacency.Origin.Position, originIndex);
                    BreakPointTranscript partner = new BreakPointTranscript(partnerTranscript, adjacency.Partner.Position, partnerIndex);
                    (BreakPointTranscript first, BreakPointTranscript second) = originOnReverseStrand ? (partner, origin) : (origin, partner);

                    string hgvsCoding = GetHgvsCoding(first, second);

                    geneFusions.Add(new GeneFusion(partnerExon, partnerIntron, hgvsCoding));
                }

                if (geneFusions.Count == 0)
                {
                    continue;
                }
                var annotatedGeneFusion = new AnnotatedGeneFusion(originExon, originIntron, geneFusions.ToArray());
                transcriptIdToGeneFusions[originTranscript.Id.WithVersion] = annotatedGeneFusion;
            }
        }
Beispiel #28
0
                        AltAminoAcids, string RefCodons, string AltCodons, string TranscriptAltAllele, string TranscriptRefAllele) AnnotateTranscript(ITranscript transcript, ISimpleVariant variant, AminoAcids aminoAcids, ISequence refSequence)
        {
            bool onReverseStrand = transcript.Gene.OnReverseStrand;
            var  start           = MappedPositionUtilities.FindRegion(transcript.TranscriptRegions, variant.Start);
            var  end             = MappedPositionUtilities.FindRegion(transcript.TranscriptRegions, variant.End);

            var position = GetMappedPosition(transcript.TranscriptRegions, start.Region, start.Index, end.Region,
                                             end.Index, variant, onReverseStrand, transcript.Translation?.CodingRegion, transcript.StartExonPhase,
                                             variant.Type == VariantType.insertion);

            var codingSequence = GetCodingSequence(transcript, refSequence);
            var cdnaSequence   = GetCdnaSequence(transcript, refSequence);

            string transcriptAltAllele = HgvsUtilities.GetTranscriptAllele(variant.AltAllele, onReverseStrand);
            var    codons = Codons.GetCodons(transcriptAltAllele, position.CdsStart, position.CdsEnd, position.ProteinStart, position.ProteinEnd, codingSequence);

            var aa = aminoAcids.Translate(codons.Reference, codons.Alternate);

            (aa, position.ProteinStart, position.ProteinEnd) = TryTrimAminoAcidsAndUpdateProteinPositions(aa, position.ProteinStart, position.ProteinEnd);

            (position.CoveredCdnaStart, position.CoveredCdnaEnd) = transcript.TranscriptRegions.GetCoveredCdnaPositions(position.CdnaStart, start.Index, position.CdnaEnd, end.Index, onReverseStrand);
            (position.CoveredCdsStart, position.CoveredCdsEnd, position.CoveredProteinStart, position.CoveredProteinEnd) = MappedPositionUtilities.GetCoveredCdsAndProteinPositions(position.CoveredCdnaStart, position.CoveredCdnaEnd, transcript.StartExonPhase, transcript.Translation?.CodingRegion);

            var            transcriptRefAllele = GetTranscriptRefAllele(position, cdnaSequence, variant, onReverseStrand);
            SequenceChange coveredAa;

            // only generate the covered version of ref & alt alleles when CDS start/end is -1
            if (position.CdsStart == -1 || position.CdsEnd == -1)
            {
                coveredAa = GetCoveredAa(aminoAcids, transcriptAltAllele, position.CoveredCdsStart, position.CoveredCdsEnd, position.CoveredProteinStart, position.CoveredProteinEnd, codingSequence);
                (coveredAa, position.CoveredProteinStart, position.CoveredProteinEnd) = TryTrimAminoAcidsAndUpdateProteinPositions(coveredAa, position.CoveredProteinStart, position.CoveredProteinEnd);
            }
            else
            {
                coveredAa = aa;
                position.CoveredProteinStart = position.ProteinStart;
                position.CoveredProteinEnd   = position.ProteinEnd;
            }


            var positionalEffect = GetPositionalEffect(transcript, variant, position, aa.Reference, aa.Alternate,
                                                       position.CoveredCdnaStart, position.CoveredCdnaEnd, position.CoveredCdsStart, position.CoveredCdsEnd);

            var variantEffect = new VariantEffect(positionalEffect, variant, transcript, aa.Reference, aa.Alternate,
                                                  codons.Reference, codons.Alternate, position.ProteinStart, coveredAa.Reference, coveredAa.Alternate);

            return(variantEffect, position, aa.Reference, aa.Alternate, codons.Reference, codons.Alternate, transcriptAltAllele, transcriptRefAllele);
        }
        private static IMappedPosition GetMappedPosition(ITranscriptRegion[] regions, ITranscriptRegion startRegion,
                                                         int startIndex, ITranscriptRegion endRegion, int endIndex, IInterval variant, bool onReverseStrand,
                                                         ICodingRegion codingRegion, byte startExonPhase, bool isInsertion)
        {
            (int cdnaStart, int cdnaEnd) = MappedPositionUtilities.GetCdnaPositions(startRegion, endRegion, variant, onReverseStrand, isInsertion);
            if (onReverseStrand)
            {
                Swap.Int(ref cdnaStart, ref cdnaEnd);
            }

            (int cdsStart, int cdsEnd) = MappedPositionUtilities.GetCdsPositions(codingRegion, cdnaStart, cdnaEnd,
                                                                                 startExonPhase, isInsertion);

            int proteinStart = MappedPositionUtilities.GetProteinPosition(cdsStart);
            int proteinEnd   = MappedPositionUtilities.GetProteinPosition(cdsEnd);

            (int exonStart, int exonEnd, int intronStart, int intronEnd) = regions.GetExonsAndIntrons(startIndex, endIndex);

            return(new MappedPosition(cdnaStart, cdnaEnd, cdsStart, cdsEnd, proteinStart, proteinEnd, exonStart,
                                      exonEnd, intronStart, intronEnd, startIndex, endIndex));
        }
Beispiel #30
0
                         AltAminoAcids, string RefCodons, string AltCodons, string TranscriptAltAllele) AnnotateTranscript(ITranscript transcript, ISimpleVariant variant, AminoAcids aminoAcids,
                                                                                                                           ISequence refSequence)
        {
            var onReverseStrand = transcript.Gene.OnReverseStrand;
            var start           = MappedPositionUtilities.FindRegion(transcript.TranscriptRegions, variant.Start);
            var end             = MappedPositionUtilities.FindRegion(transcript.TranscriptRegions, variant.End);

            var position = GetMappedPosition(transcript.TranscriptRegions, start.Region, start.Index, end.Region,
                                             end.Index, variant, onReverseStrand, transcript.Translation?.CodingRegion, transcript.StartExonPhase,
                                             variant.Type == VariantType.insertion);

            var transcriptRefAllele = HgvsUtilities.GetTranscriptAllele(variant.RefAllele, onReverseStrand);
            var transcriptAltAllele = HgvsUtilities.GetTranscriptAllele(variant.AltAllele, onReverseStrand);

            var codingSequence = transcript.Translation == null
                ? null
                : new CodingSequence(refSequence, transcript.Translation.CodingRegion, transcript.TranscriptRegions,
                                     transcript.Gene.OnReverseStrand, transcript.StartExonPhase);

            var codons = Codons.GetCodons(transcriptRefAllele, transcriptAltAllele, position.CdsStart, position.CdsEnd,
                                          position.ProteinStart, position.ProteinEnd, codingSequence);

            var coveredCdna = transcript.TranscriptRegions.GetCoveredCdnaPositions(position.CdnaStart, start.Index,
                                                                                   position.CdnaEnd, end.Index, onReverseStrand);

            var coveredCds = MappedPositionUtilities.GetCoveredCdsPositions(coveredCdna.Start, coveredCdna.End,
                                                                            transcript.StartExonPhase, transcript.Translation?.CodingRegion);

            var aa = aminoAcids.Translate(codons.Reference, codons.Alternate);

            var positionalEffect = GetPositionalEffect(transcript, variant, position, aa.Reference, aa.Alternate,
                                                       coveredCdna.Start, coveredCdna.End, coveredCds.Start, coveredCds.End);

            var variantEffect = new VariantEffect(positionalEffect, variant, transcript, aa.Reference, aa.Alternate,
                                                  codons.Reference, codons.Alternate, position.ProteinStart);

            return(variantEffect, position, aa.Reference, aa.Alternate, codons.Reference, codons.Alternate,
                   transcriptAltAllele);
        }