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); }
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); }
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); }
public void GetProteinPosition_Forward_Insertion() { int proteinStart = MappedPositionUtilities.GetProteinPosition(225); int proteinEnd = MappedPositionUtilities.GetProteinPosition(224); Assert.Equal(75, proteinStart); Assert.Equal(75, proteinEnd); }
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); }
public void GetProteinPosition_Reverse_Deletion() { int proteinStart = MappedPositionUtilities.GetProteinPosition(-1); int proteinEnd = MappedPositionUtilities.GetProteinPosition(-1); Assert.Equal(-1, proteinStart); Assert.Equal(-1, proteinEnd); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
/// <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); }
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; } }
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)); }
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); }