コード例 #1
0
        public void GenerateVcfStrings_IncludeHeaders()
        {
            if (MiscUtils.IsRunningAnyLinux)
            {
                return;                              // currently failing on linux :(
            }
            var parser         = VcfVariantParserSettings.Create(ImmutableList.Create(SampleName));
            var variants       = VcfVariant.TryParse(Bnd1, parser).FollowedBy(VcfVariant.TryParse(Bnd2, parser)).EnumerateSuccesses().ToList();
            var wittyerVariant = WittyerBndInternal.Create(variants[0],
                                                           variants[0].ToTryOfGenotypedVcfVariant(VariantNormalizer.TrimCommonBases).GetOrThrow().Samples.Values.First(),
                                                           WittyerType.IntraChromosomeBreakend, new List <uint>(), uint.MinValue, null, variants[1]);
            var headerLines = WittyerVcfWriter.GenerateVcfStrings(
                WittyerResult.Create(VcfHeader.CreateBuilder(VcfVersion.FourPointOne).Build(), SampleName,
                                     variants.Select(v => v.Contig).Distinct().ToList(), false,
                                     new Dictionary <WittyerType, IReadOnlyList <IWittyerVariant> >(),
                                     new Dictionary <WittyerType, IReadOnlyList <IWittyerBnd> >
            {
                { WittyerType.IntraChromosomeBreakend, new List <IWittyerBnd> {
                      wittyerVariant
                  } }
            }, new List <IVcfVariant>()), null, null)
                              .TakeWhile(line => line.StartsWith(VcfConstants.Header.Prefix)).ToList();

            // 11 = VcfVersion, WHO, WHAT, WHERE, WHY, WIT, WIN, WOW, date, version, column names
            Assert.Equal(11, headerLines.Count);
        }
コード例 #2
0
        public void OverlapWorks_DupDel([NotNull] string truthVar, [NotNull] string queryVar, string type, bool isTp)
        {
            const string sampleName = "blah";
            var          vcfVariantParserSettings = VcfVariantParserSettings.Create(new List <string> {
                sampleName
            });
            var        baseVariant   = VcfVariant.TryParse(truthVar, vcfVariantParserSettings).GetOrThrow();
            const bool isCrossTypeOn = true;
            var        wittyerType   = WittyerType.Parse(type);
            var        inputSpecs    = InputSpec.GenerateCustomInputSpecs(!isCrossTypeOn, new[] { wittyerType }, percentDistance: PercentDistance).ToDictionary(s => s.VariantType, s => s);

            var bndSet    = new Dictionary <IGeneralBnd, IVcfVariant>();
            var errorList = new List <string>();
            var truthV    = (IMutableWittyerSimpleVariant)WittyerVcfReader.CreateVariant(baseVariant, baseVariant.Samples.First().Value, true, sampleName,
                                                                                         inputSpecs, bndSet, errorList, isCrossTypeOn);

            baseVariant = VcfVariant.TryParse(queryVar, vcfVariantParserSettings).GetOrThrow();
            var queryV = (IMutableWittyerVariant)WittyerVcfReader.CreateVariant(baseVariant, baseVariant.Samples.First().Value, false, sampleName,
                                                                                inputSpecs, bndSet, errorList, isCrossTypeOn);
            var tree = TruthForest.Create(sampleName, VcfHeader.CreateBuilder(VcfVersion.FourPointOne).Build());

            tree.AddTarget(truthV);
            OverlappingUtils.DoOverlapping(tree.VariantTrees, queryV, OverlappingUtils.IsVariantAlleleMatch, isCrossTypeOn, true);
            queryV.Finalize(WitDecision.FalsePositive, EvaluationMode.CrossTypeAndSimpleCounting, null);
            truthV.Finalize(WitDecision.FalseNegative, EvaluationMode.CrossTypeAndSimpleCounting, null);
            Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalsePositive, queryV.Sample.Wit);
            Assert.Equal(isTp ? WitDecision.TruePositive : WitDecision.FalseNegative, truthV.Sample.Wit);
        }
コード例 #3
0
        public static void WittyerVariantIntervalCorrect([NotNull] string variant, uint start, uint end,
                                                         uint posStart, uint posEnd, uint endStart, uint endEnd)
        {
            const string sampleName = "tumor";
            var          vcfVariant = VcfVariant.TryParse(variant,
                                                          VcfVariantParserSettings.Create(ImmutableList.Create("normal", sampleName), GenomeAssembly.Hg38))
                                      .GetOrThrowDebug();

            var _ = WittyerType.ParseFromVariant(vcfVariant, false, sampleName, out var type);

            if (type == null)
            {
                throw new NotSupportedException("This test does not handle svType null");
            }
            var wittyerVariant = WittyerVariantInternal
                                 .Create(vcfVariant, vcfVariant.Samples[sampleName], type, Bins, PercentDistance, BasepairDistance);

            var expectedStart = ContigAndInterval.Create(vcfVariant.Contig, start, end);
            var expectedPos   = BedInterval.Create(posStart, posEnd);
            var expectedEnd   = BedInterval.Create(endStart, endEnd);

            MultiAssert.Equal(expectedStart, wittyerVariant);
            MultiAssert.Equal(expectedPos, wittyerVariant.CiPosInterval);
            MultiAssert.Equal(expectedEnd, wittyerVariant.CiEndInterval);
            MultiAssert.AssertAll();
        }
コード例 #4
0
        public void ToStringBnd()
        {
            var parser  = VcfVariantParserSettings.Create(ImmutableList.Create(SampleName));
            var variant = VcfVariant.TryParse(Bnd1, parser).GetOrThrow();
            var actual  = WittyerVcfWriter.ToString(variant, null);

            Assert.Equal(Bnd1, actual);
        }
コード例 #5
0
        public void ToStringNoValueWorks()
        {
            var parser  = VcfVariantParserSettings.Create(ImmutableList.Create(SampleName));
            var variant = VcfVariant.TryParse(NoValueUnsorted, parser).GetOrThrow();
            var actual  = WittyerVcfWriter.ToString(variant, null);

            Assert.Equal(NoValueSorted, actual);
        }
コード例 #6
0
        public void GetInsertionIntervalNoLenIns()
        {
            var variant = VcfVariant
                          .TryParse(UnknownLength, VcfVariantParserSettings.Create(ImmutableList.Create("blah"))).GetOrThrow();
            var bedInterval = WittyerBndInternal.GetInsertionInterval(variant);

            MultiAssert.Equal(null, bedInterval?.GetLength());
            MultiAssert.AssertAll();
        }
コード例 #7
0
        public static void ParseReferenceVariantWorks([NotNull] string inputVariant)
        {
            var vcfVariant = VcfVariant.TryParse(inputVariant,
                                                 VcfVariantParserSettings.Create(ImmutableList.Create("NA12878", "haha"), GenomeAssembly.Hg19))
                             .GetOrThrowDebug();

            WittyerType.ParseFromVariant(vcfVariant, false, "NA12878", out var actualType);
            Assert.Equal(WittyerType.CopyNumberReference, actualType);
        }
コード例 #8
0
        private static IWittyerBnd CreateWittyerBnd([NotNull] string bndLine1, [NotNull] string bndLine2)
        {
            var variant = VcfVariant.TryParse(bndLine1,
                                              VcfVariantParserSettings.Create(ImmutableList.Create("normal"), GenomeAssembly.Grch37))
                          .GetOrThrowDebug();

            return(WittyerBndInternal.Create(variant, variant.Samples["normal"], WittyerType.TranslocationBreakend, Bins,
                                             BasepairDistance, PercentDistance, VcfVariant.TryParse(bndLine2,
                                                                                                    VcfVariantParserSettings.Create(ImmutableList.Create("normal"), GenomeAssembly.Grch37))
                                             .GetOrThrowDebug()));
        }
コード例 #9
0
        public static void WittyerVariantReaderWorks()
        {
            var vcfSettings =
                VcfVariantParserSettings.Create(ImmutableList.Create("proband", "father"), GenomeAssembly.Grch37);
            var ref1 = VcfVariant.TryParse(RefSiteUndeterminedGt, vcfSettings).GetOrThrowDebug();

            WittyerVcfReader.CreateVariant(ref1, ref1.Samples.First().Value, false, "proband",
                                           new Dictionary <WittyerType, InputSpec>
            {
                {
                    WittyerType.CopyNumberReference,
                    InputSpec.GenerateCustomInputSpecs(false, new[] { WittyerType.CopyNumberReference }, percentDistance: 0.05).First()
                }
            }, new Dictionary <IGeneralBnd, IVcfVariant>(), new List <string>(), true);
        }
コード例 #10
0
        private static IWittyerSimpleVariant CreateWittyerVariant([NotNull] string vcfline)
        {
            var baseVariant = VcfVariant.TryParse(vcfline,
                                                  VcfVariantParserSettings.Create(ImmutableList.Create("normal"), GenomeAssembly.Grch37))
                              .GetOrThrowDebug();

            WittyerType.ParseFromVariant(baseVariant, true, null, out var svType);

            if (svType == null)
            {
                throw new NotSupportedException("This method does not handle svType null");
            }

            return(WittyerVariantInternal
                   .Create(baseVariant, baseVariant.Samples["normal"], svType, Bins, PercentDistance, BasepairDistance));
        }
コード例 #11
0
        public void ComparerWorks()
        {
            if (MiscUtils.IsRunningAnyLinux)
            {
                return;                              // currently failing on linux :(
            }
            IReadOnlyList <IContigInfo> CreateHeader(string fileName) => VcfHeader
            .TryCreate(Path.Combine("Resources", "VcfHeaders", fileName).ToFileInfo()).GetOrThrow()
            .ColumnMetaInfoLines.ContigLines.Select(kvp => kvp.Value.Contig).ToReadOnlyList();

            var comparer = WittyerVcfWriter.CreateComparer(CreateHeader("query.vcf.gz"), CreateHeader("truth.vcf.gz"));
            var parser   = VcfVariantParserSettings.Create(ImmutableList.Create(SampleName));
            var bnd1     = VcfVariant.TryParse(Bnd1, parser).GetOrThrow();
            var bnd2     = VcfVariant.TryParse(Bnd2, parser).GetOrThrow();

            Assert.True(comparer.Compare(bnd1, bnd2) < 0);
        }
コード例 #12
0
        public static void ParseWittyerVariantType_AssignCorrectType([NotNull] string vcfString, bool isCrossTypeOn,
                                                                     [CanBeNull] string expected)
        {
            const string sampleName = "s1";
            var          variant    = VcfVariant.TryParse(vcfString,
                                                          VcfVariantParserSettings.Create(ImmutableList.Create(sampleName, "s2"), GenomeAssembly.Hg38))
                                      .GetOrThrowDebug();
            var reason = WittyerType.ParseFromVariant(variant, isCrossTypeOn, sampleName, out var assignedType);

            if (expected == null)
            {
                Assert.Equal(FailedReason.UndeterminedCn, reason);
            }
            else
            {
                Assert.Equal(WittyerType.Parse(expected), assignedType);
            }
        }
コード例 #13
0
        public static void WittyerIntraBndWorkCorrectly()
        {
            var vcfSettings =
                VcfVariantParserSettings.Create(ImmutableList.Create("proband", "father"), GenomeAssembly.Grch37);
            var bnd1 = VcfVariant.TryParse(GenotypedIntraBnd, vcfSettings).GetOrThrowDebug();

            var bnd2       = VcfVariant.TryParse(GenotypedIntraBndPair, vcfSettings).GetOrThrowDebug();
            var wittyerBnd = WittyerBndInternal
                             .Create(bnd2, bnd2.Samples["father"], WittyerType.IntraChromosomeBreakend, Bins, BasepairDistance,
                                     PercentDistance, bnd1);

            var distance            = Math.Round(Math.Abs(bnd1.Position - bnd2.Position) * PercentDistance);
            var expectedEndInterval = ContigAndInterval.Create(wittyerBnd.Contig, bnd1.Position - (uint)distance - 1,
                                                               bnd1.Position + (uint)distance);

            MultiAssert.Equal(expectedEndInterval, wittyerBnd.EndInterval);
            MultiAssert.Equal(10000U, wittyerBnd.Win.End);
            MultiAssert.AssertAll();

            Assert.IsType <WittyerGenotypedSample>(wittyerBnd.Sample);
        }
コード例 #14
0
        private static bool ParseVariantGetTag([NotNull] string variant, WitDecision targetDecision)
        {
            var parser = VcfVariantParserSettings.Create(new List <string> {
                "sample"
            });
            var vcfVariant       = VcfVariant.TryParse(variant, parser).GetOrThrow();
            var sampleDictionary = vcfVariant.Samples.Single().Value.SampleDictionary;

            if (vcfVariant.Info.TryGetValue(WittyerConstants.WittyerMetaInfoLineKeys.Who, out var who))
            {
                if (who.Split(WittyerConstants.SampleValueDel).Length > WittyerConstants.MaxNumberOfAnnotations)
                {
                    return(false);
                }
            }
            return(sampleDictionary
                   .TryGetValue(WittyerConstants.WittyerMetaInfoLineKeys.Wit).Any(it =>
                                                                                  it != VcfConstants.MissingValueString &&
                                                                                  (it != targetDecision.ToStringDescription() && it != NotAssessedString || sampleDictionary
                                                                                   .TryGetValue(WittyerConstants.WittyerMetaInfoLineKeys.Why)
                                                                                   .Any(val => val != VcfConstants.MissingValueString))));
        }
コード例 #15
0
        public static void WittyerBndCreateCorrectly()
        {
            var vcfSettings =
                VcfVariantParserSettings.Create(ImmutableList.Create("proband", "father"), GenomeAssembly.Grch37);
            var bnd1 = VcfVariant.TryParse(GenotypedBnd, vcfSettings).GetOrThrowDebug();

            var bnd2       = VcfVariant.TryParse(GenotypedBndPair, vcfSettings).GetOrThrowDebug();
            var wittyerBnd = WittyerBndInternal
                             .Create(bnd2, bnd2.Samples["father"], WittyerType.TranslocationBreakend, Bins,
                                     BasepairDistance, PercentDistance, bnd1);

            var expectedContig      = ContigInfo.Create("1");
            var expectedEndInterval = ContigAndInterval.Create(ContigInfo.Create("4"), 191034451, 191035452);

            MultiAssert.Equal(expectedContig, wittyerBnd.Contig);
            MultiAssert.Equal(expectedEndInterval, wittyerBnd.EndInterval);
            MultiAssert.Equal(230675U, wittyerBnd.Start);
            MultiAssert.Equal(231676U, wittyerBnd.Stop);
            MultiAssert.Equal(WittyerConstants.StartingBin, wittyerBnd.Win.Start);
            MultiAssert.Equal(null, wittyerBnd.Win.End);
            MultiAssert.AssertAll();
        }