示例#1
0
        public void Cnv()
        {
            const string vcfLine = "chr1	713044	DUP_gs_CNV_1_713044_755966	C	<CN0>,<CN2>	100	PASS	AC=3,206;AF=0.000599042,0.0411342;AN=5008;CS=DUP_gs;END=755966;NS=2504;SVTYPE=CNV;DP=20698;EAS_AF=0.001,0.0615;AMR_AF=0.0014,0.0259;AFR_AF=0,0.0303;EUR_AF=0.001,0.0417;SAS_AF=0,0.045";

            var altAllele = new VariantAlternateAllele(713045, 755966, "C", "CN0")
            {
                VepVariantType      = VariantType.copy_number_variation,
                IsStructuralVariant = true
            };

            var altAllele2 = new VariantAlternateAllele(713045, 755966, "C", "CN2")
            {
                VepVariantType      = VariantType.copy_number_variation,
                IsStructuralVariant = true
            };

            var expectedReferenceName    = "chr1";
            var expectedAlternateAlleles = new List <VariantAlternateAllele> {
                altAllele, altAllele2
            };
            var expectedVcfReferenceBegin = altAllele.Start - 1;
            var expectedVcfReferenceEnd   = altAllele.End;

            var variant = VcfUtilities.GetVariant(vcfLine, _renamer);

            Assert.Equal(expectedReferenceName, variant.ReferenceName);
            Assert.Equal(expectedVcfReferenceBegin, variant.VcfReferenceBegin);
            Assert.Equal(expectedVcfReferenceEnd, variant.VcfReferenceEnd);
            Assert.True(expectedAlternateAlleles.SequenceEqual(variant.AlternateAlleles));
        }
示例#2
0
        public void Duplication2()
        {
            const string vcfLine = "chrX	66764988	.	G	<DUP>	100	PASS	IMPRECISE;SVTYPE=DUP;END=66943683;SVLEN=178696;CIPOS=-1,1;CIEND=-1,1;DP=2635";

            var altAllele = new VariantAlternateAllele(66764989, 66943683, "G", "duplication")
            {
                VepVariantType      = VariantType.duplication,
                IsStructuralVariant = true,
                AlternateAllele     = "duplication"
            };

            var expectedReferenceName    = "chrX";
            var expectedAlternateAlleles = new List <VariantAlternateAllele> {
                altAllele
            };
            var expectedVcfReferenceBegin = altAllele.Start - 1;
            var expectedVcfReferenceEnd   = altAllele.End;

            var variant = VcfUtilities.GetVariant(vcfLine, _renamer);

            Assert.Equal(expectedReferenceName, variant.ReferenceName);
            Assert.Equal(expectedVcfReferenceBegin, variant.VcfReferenceBegin);
            Assert.Equal(expectedVcfReferenceEnd, variant.VcfReferenceEnd);
            Assert.True(expectedAlternateAlleles.SequenceEqual(variant.AlternateAlleles));
        }
示例#3
0
        public void Insertion()
        {
            const string vcfLine = "chr22	15883626	P1_MEI_4726	T	<INS>	40	.	SVTYPE=INS;CIPOS=-23,23;IMPRECISE;NOVEL;SVMETHOD=SR;NSF5=1;NSF3=0";

            var altAllele = new VariantAlternateAllele(15883627, 15883626, "T", "insertion")
            {
                VepVariantType      = VariantType.insertion,
                IsStructuralVariant = true,
                AlternateAllele     = "insertion"
            };

            var expectedReferenceName    = "chr22";
            var expectedAlternateAlleles = new List <VariantAlternateAllele> {
                altAllele
            };
            var expectedVcfReferenceBegin = altAllele.Start - 1;
            var expectedVcfReferenceEnd   = altAllele.End;

            var variant = VcfUtilities.GetVariant(vcfLine, _renamer);

            Assert.Equal(expectedReferenceName, variant.ReferenceName);
            Assert.Equal(expectedVcfReferenceBegin, variant.VcfReferenceBegin);
            Assert.Equal(expectedVcfReferenceEnd, variant.VcfReferenceEnd);
            Assert.True(expectedAlternateAlleles.SequenceEqual(variant.AlternateAlleles));
        }
示例#4
0
        private void AnnotateAltAllele(VariantFeature variant, VariantAlternateAllele altAllele, Transcript transcript)
        {
            // handle upstream or downstream transcripts
            if (!Overlap.Partial(transcript.Start, transcript.End, altAllele.Start, altAllele.End))
            {
                return;
            }

            var ta = new TranscriptAnnotation
            {
                AlternateAllele         = altAllele,
                HasValidCdnaCodingStart = false,
                HasValidCdsStart        = false
            };

            MapCdnaCoordinates(transcript, ta, altAllele);
            _pianoVariant.CreateAnnotationObject(transcript, altAllele);

            GetCodingAnnotations(transcript, ta, _compressedSequence);
            var consequence = new Consequences(new VariantEffect(ta, transcript, variant.InternalCopyNumberType));

            consequence.DetermineVariantEffects(variant.InternalCopyNumberType);

            _pianoVariant.FinalizeAndAddAnnotationObject(transcript, ta, consequence.GetConsequenceStrings());
        }
示例#5
0
            public SvOverlapTranscript(DataStructures.Transcript transcript, VariantAlternateAllele altAllele)
            {
                TranscriptID = TranscriptUtilities.GetTranscriptId(transcript);
                IsCanonical  = transcript.IsCanonical ? "true" : null;
                Hgnc         = transcript.Gene.Symbol;
                var isFullOverlap = altAllele.Start <= transcript.Start && altAllele.End >= transcript.End;

                IsPartialOverlap = isFullOverlap ? null : "true";
            }
示例#6
0
 public PianoAllele(VariantAlternateAllele altAllele)
 {
     VariantId      = altAllele.VariantId;
     VariantType    = altAllele.NirvanaVariantType.ToString();
     ReferenceBegin = altAllele.Start;
     ReferenceEnd   = altAllele.End;
     RefAllele      = altAllele.ReferenceAllele;
     AltAllele      = altAllele.AlternateAllele;
     SaAltAllele    = altAllele.SuppAltAllele;
     Transcripts    = new List <Transcript>();
 }
示例#7
0
        public void AddOverlappingTranscript(Transcript transcript, VariantAlternateAllele altAllele)
        {
            if (!altAllele.IsStructuralVariant)
            {
                return;
            }
            FindCorrespondingJsonVariant(altAllele);
            var svOverlapTranscript = new JsonVariant.SvOverlapTranscript(transcript, altAllele);

            _currJsonVariant.SvOverlappingTranscripts.Add(svOverlapTranscript);
        }
示例#8
0
 private JsonVariant(VariantAlternateAllele altAllele) : this()
 {
     VariantId      = altAllele.VariantId;
     VariantType    = altAllele.NirvanaVariantType.ToString();
     ReferenceBegin = altAllele.Start;
     ReferenceEnd   = altAllele.End;
     RefAllele      = altAllele.ReferenceAllele;
     AltAllele      = altAllele.AlternateAllele;
     SaAltAllele    = altAllele.SuppAltAllele;
     GenotypeIndex  = altAllele.GenotypeIndex;
 }
示例#9
0
        public JsonVariant(VariantAlternateAllele altAllele, VariantFeature variant) : this(altAllele)
        {
            IsReferenceMinor  = variant.IsRefMinor;
            IsReference       = variant.IsReference;
            IsReferenceNoCall = variant.IsRefNoCall;
            PhylopScore       = altAllele.ConservationScore;
            ReferenceName     = variant.ReferenceName;

            // change the ref and alternate allele for ref minor
            RefAllele = variant.IsRefMinor ? altAllele.AlternateAllele : altAllele.ReferenceAllele;
            AltAllele = variant.IsRefMinor ? null : altAllele.AlternateAllele;
        }
示例#10
0
        public void AddRegulatoryFeature(RegulatoryElement regulatoryFeature, VariantAlternateAllele altAllele, string[] consequences)
        {
            var regulatoryRegion = new JsonVariant.RegulatoryRegion
            {
                ID          = regulatoryFeature.Id.ToString(),
                Type        = regulatoryFeature.Type.ToString(),
                Consequence = consequences
            };

            FindCorrespondingJsonVariant(altAllele);
            _currJsonVariant.RegulatoryRegions.Add(regulatoryRegion);
        }
示例#11
0
        public void AddOverlappingGenes(HashSet <string> overlappingGeneSymbols, VariantAlternateAllele altAllele)
        {
            if (!altAllele.IsStructuralVariant)
            {
                return;
            }
            FindCorrespondingJsonVariant(altAllele);

            foreach (var geneSymbol in overlappingGeneSymbols)
            {
                _currJsonVariant.OverlappingGenes.Add(geneSymbol);
            }
        }
示例#12
0
        private static void AddCustomIntervals(VariantAlternateAllele altAllele, JsonVariant jsonVariant)
        {
            // adding the custom intervals
            if (altAllele.CustomIntervals == null)
            {
                return;
            }
            jsonVariant.CustomIntervals.Clear();

            foreach (var custInterval in altAllele.CustomIntervals)
            {
                jsonVariant.CustomIntervals.Add(custInterval);
            }
        }
示例#13
0
        /// <summary>
        /// constructor
        /// </summary>
        public VariantEffect(TranscriptAnnotation ta, Transcript transcript, VariantType internalCopyNumberType = VariantType.unknown)
        {
            _ta         = ta;
            _transcript = transcript;
            _altAllele  = ta.AlternateAllele;

            _preCache = new BasicVariantEffects(ta);

            _cache     = new VariantEffectCache();
            _tempCache = new TempVariantEffectCache();

            _featureVariantEffects = new FeatureVariantEffects(transcript, _altAllele.NirvanaVariantType,
                                                               _altAllele.Start, _altAllele.End, _altAllele.IsStructuralVariant, internalCopyNumberType);
        }
示例#14
0
 private static void GetReferenceCoordinates(Transcript transcript, VariantAlternateAllele altAllele,
                                             out int hgvsStart, out int hgvsEnd)
 {
     // calculate the HGVS position: use HGVS coordinates not variation feature coordinates due to duplications
     if (transcript.Gene.OnReverseStrand)
     {
         hgvsStart = transcript.End - altAllele.End + 1;
         hgvsEnd   = transcript.End - altAllele.Start + 1;
     }
     else
     {
         hgvsStart = altAllele.Start - transcript.Start + 1;
         hgvsEnd   = altAllele.End - transcript.Start + 1;
     }
 }
示例#15
0
        private void FindCorrespondingJsonVariant(VariantAlternateAllele altAllele)
        {
            _currPianoAllele = null;
            foreach (var pianoAllele in PianoAlleles)
            {
                if (pianoAllele.ReferenceBegin != altAllele.Start)
                {
                    continue;
                }
                if (pianoAllele.SaAltAllele != altAllele.SuppAltAllele)
                {
                    continue;
                }

                _currPianoAllele = pianoAllele;
            }
        }
示例#16
0
        public void CreateAnnotationObject(Transcript transcript, VariantAlternateAllele altAllele)
        {
            FindCorrespondingJsonVariant(altAllele);

            if (_currPianoAllele == null)
            {
                throw new GeneralException("Cannot find jsonVariant corresponding to alternate allele");
            }

            _currTranscript = new PianoAllele.Transcript
            {
                IsCanonical  = transcript.IsCanonical ? "true" : null,
                TranscriptID = transcript.Id.ToString(),
                BioType      = BioTypeUtilities.GetBiotypeDescription(transcript.BioType),
                Gene         = transcript.TranscriptSource == TranscriptDataSource.Ensembl ? transcript.Gene.EnsemblId.ToString() : transcript.Gene.EntrezGeneId.ToString(),
                Hgnc         = transcript.Gene.Symbol
            };
        }
示例#17
0
        private void FindCorrespondingJsonVariant(VariantAlternateAllele altAllele)
        {
            _currJsonVariant = null;
            foreach (var annotatedAllele in AnnotatedAlternateAlleles)
            {
                var jsonVariant = annotatedAllele as JsonVariant;

                if (jsonVariant?.ReferenceBegin != altAllele.Start)
                {
                    continue;
                }
                if (jsonVariant.SaAltAllele != altAllele.SuppAltAllele)
                {
                    continue;
                }

                _currJsonVariant = jsonVariant;
            }
        }
示例#18
0
        public void CreateAnnotationObject(Transcript transcript, VariantAlternateAllele altAllele)
        {
            // while annotating alternate allele, the first output function to be called is AddExonData.
            // So, we set the current json variant and transcript here.
            // they will subsequently be used in other output functions.
            FindCorrespondingJsonVariant(altAllele);

            if (_currJsonVariant == null)
            {
                throw new GeneralException("Cannot find jsonVariant corresponding to alternate allele");
            }

            _currTranscript = new JsonVariant.Transcript
            {
                IsCanonical  = transcript.IsCanonical ? TrueTag : null,
                TranscriptID = TranscriptUtilities.GetTranscriptId(transcript),
                BioType      = BioTypeUtilities.GetBiotypeDescription(transcript.BioType),
                Gene         = transcript.TranscriptSource == TranscriptDataSource.Ensembl ? transcript.Gene.EnsemblId.ToString() : transcript.Gene.EntrezGeneId.ToString(),
                Hgnc         = transcript.Gene.Symbol
            };
        }
示例#19
0
        private static void MapCdnaCoordinates(Transcript transcript, TranscriptAnnotation ta, VariantAlternateAllele altAllele)
        {
            if (transcript.Gene.OnReverseStrand)
            {
                ta.TranscriptReferenceAllele = SequenceUtilities.GetReverseComplement(altAllele.ReferenceAllele);
                ta.TranscriptAlternateAllele = SequenceUtilities.GetReverseComplement(altAllele.AlternateAllele);
            }
            else
            {
                ta.TranscriptReferenceAllele = altAllele.ReferenceAllele;
                ta.TranscriptAlternateAllele = altAllele.AlternateAllele;
            }

            CdnaMapper.MapCoordinates(altAllele.Start, altAllele.End, ta, transcript);
        }
示例#20
0
文件: VID.cs 项目: YuJiang01/Nirvana
        /// <summary>
        /// constructs a VID based on the supplied feature
        /// </summary>
        public string Create(ChromosomeRenamer renamer, string referenceName, VariantAlternateAllele altAllele)
        {
            referenceName = renamer.GetEnsemblReferenceName(referenceName);
            string vid;

            switch (altAllele.NirvanaVariantType)
            {
            case VariantType.SNV:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.AlternateAllele}";
                break;

            case VariantType.insertion:
                vid = altAllele.IsStructuralVariant
                        ? $"{referenceName}:{altAllele.Start}:{altAllele.End}:INS"
                        : $"{referenceName}:{altAllele.Start}:{altAllele.End}:{GetInsertedAltAllele(altAllele.AlternateAllele)}";
                break;

            case VariantType.deletion:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}";
                break;

            case VariantType.MNV:
            case VariantType.indel:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:{GetInsertedAltAllele(altAllele.AlternateAllele)}";
                break;

            case VariantType.duplication:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:DUP";
                break;

            case VariantType.tandem_duplication:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:TDUP";
                break;

            case VariantType.translocation_breakend:
                vid = altAllele.BreakEnds?[0].ToString();
                break;

            case VariantType.inversion:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:Inverse";
                break;

            case VariantType.mobile_element_insertion:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:MEI";
                break;

            case VariantType.copy_number_gain:
            case VariantType.copy_number_loss:
            case VariantType.copy_number_variation:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:{altAllele.CopyNumber}";
                break;

            case VariantType.reference_no_call:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}:NC";
                break;

            default:
                vid = $"{referenceName}:{altAllele.Start}:{altAllele.End}";
                break;
            }

            return(vid);
        }
示例#21
0
 public void AddIntergenicVariant(VariantAlternateAllele altAllele)
 {
     // in json, we do not output intergenic_variant since consequences are per transcripts and there are no transcripts for intergenic variants
     FindCorrespondingJsonVariant(altAllele);
     _currJsonVariant.IsIntergenic = true;
 }
        public void ToStringTest()
        {
            var vaa = new VariantAlternateAllele(100, 101, "AT", "A");

            Assert.NotNull(vaa.ToString());
        }