Exemplo n.º 1
0
        public void SvWorksWithSimpleCount()
        {
            if (MiscUtils.IsRunningAnyLinux)
            {
                return;                              // currently failing on linux :(
            }
            //var insertionSpec = InputSpecs[WittyerVariantType.Insertion];
            var insertionSpec = InputSpec.Create(WittyerType.Insertion,
                                                 WittyerConstants.DefaultBins.SetItem(0, (50, false)),
                                                 WittyerConstants.DefaultBpOverlap, 0.05, WittyerConstants.DefaultExcludeFilters,
                                                 WittyerConstants.DefaultIncludeFilters, null);
            var outputDirectory = Path.GetRandomFileName().ToDirectoryInfo();
            var wittyerSettings = WittyerSettings.Create(outputDirectory, SomaticTruth,
                                                         SomaticQuery, ImmutableList <ISamplePair> .Empty, EvaluationMode.SimpleCounting,
                                                         InputSpecs.SetItem(WittyerType.Insertion, insertionSpec));

            var results = MainLauncher.GenerateResults(wittyerSettings).Select(i => i.GetOrThrow()).ToList();

            var(_, query, truth) = results.First();

            MultiAssert.Equal(((IMutableWittyerResult)query).NumEntries,
                              (uint)WittyerVcfWriter.ProcessVariants(query, false).Count());
            MultiAssert.Equal(((IMutableWittyerResult)truth).NumEntries,
                              (uint)WittyerVcfWriter.ProcessVariants(truth, true).Count());

            var testStrings = WittyerVcfWriter.GenerateVcfStrings(query, null, null).Where(line => !line.StartsWith(VcfConstants.Header.Prefix));

            MultiAssert.True(testStrings.All(s => ParseVariantGetTag(s, WitDecision.FalsePositive)));
            testStrings = WittyerVcfWriter.GenerateVcfStrings(null, truth, null).Where(line => !line.StartsWith(VcfConstants.Header.Prefix));
            MultiAssert.True(testStrings.All(s => ParseVariantGetTag(s, WitDecision.FalseNegative)));

            var actualStats = GeneralStats.Create(results,
                                                  wittyerSettings.Mode == EvaluationMode.Default, wittyerSettings.InputSpecs, EmptyCmd).PerSampleStats
                              .First();
            var expectedStats = JsonConvert.DeserializeObject <GeneralStats>(File.ReadAllText(SvJsonSc.FullName))
                                .PerSampleStats.First();

            var expectedOverallEventStats = expectedStats.OverallStats.Single(x => x.StatsType.Equals(StatsType.Event));
            var actualOverallEventStats   = actualStats.OverallStats.Single(x => x.StatsType.Equals(StatsType.Event));

            MultiAssert.Equal(expectedOverallEventStats.QueryFpCount, actualOverallEventStats.QueryFpCount);
            MultiAssert.Equal(expectedOverallEventStats.QueryTpCount, actualOverallEventStats.QueryTpCount);
            MultiAssert.Equal(expectedOverallEventStats.QueryTotalCount, actualOverallEventStats.QueryTotalCount);
            MultiAssert.Equal(expectedOverallEventStats.TruthTpCount, actualOverallEventStats.TruthTpCount);
            MultiAssert.Equal(expectedOverallEventStats.TruthFnCount, actualOverallEventStats.TruthFnCount);
            MultiAssert.Equal(expectedOverallEventStats.TruthTotalCount, actualOverallEventStats.TruthTotalCount);

            var expectedInsertionStats = expectedStats.DetailedStats
                                         .Single(s => s.VariantType == WittyerType.Insertion.Name).PerBinStats;
            var actualInsertionStats = actualStats.DetailedStats
                                       .Single(s => s.VariantType == WittyerType.Insertion.Name).PerBinStats;

            foreach (var(expectedInsBinStat, actualInsBinStat) in expectedInsertionStats.Zip(actualInsertionStats,
                                                                                             (a, b) => (a, b)))
            {
                var expectedSingleStat = expectedInsBinStat.Stats.Single();
                var actualSingleStat   = actualInsBinStat.Stats.Single();
                if (!expectedSingleStat.Equals(actualSingleStat))
                {
                    MultiAssert.Equal(string.Empty, expectedInsBinStat.Bin);
                }
                MultiAssert.Equal(expectedSingleStat, actualSingleStat);
            }

            MultiAssert.AssertAll();
        }