Exemple #1
0
        private void ProcessVariant(IAlleleSource source, CalledAllele variant)
        {
            // determine metrics
            _coverageCalculator.Compute(variant, source);

            if (variant.AlleleSupport > 0)
            {
                if (_config.NoiseModel == NoiseModel.Window)
                {
                    VariantQualityCalculator.Compute(variant, _config.MaxVariantQscore, (int)MathOperations.PtoQ(variant.SumOfBaseQuality / variant.TotalCoverage));
                }
                else
                {
                    VariantQualityCalculator.Compute(variant, _config.MaxVariantQscore, _config.EstimatedBaseCallQuality);
                }

                StrandBiasCalculator.Compute(variant, variant.SupportByDirection, _config.EstimatedBaseCallQuality,
                                             _config.StrandBiasFilterThreshold, _config.StrandBiasModel);
            }

            // set genotype, filter, etc
            AlleleProcessor.Process(variant, _config.MinFrequency, _config.LowDepthFilter,
                                    _config.VariantQscoreFilterThreshold, _config.FilterSingleStrandVariants, _config.VariantFreqFilter, _config.LowGTqFilter, _config.IndelRepeatFilter,
                                    _config.RMxNFilterSettings, _config.ChrReference, source.ExpectStitchedReads);
        }
        public void Compute()
        {
            // Based on Tamsen's original PValue test, just extended to our Compute method
            List <int[]> SampleValues_ExpectedQScore = new List <int[]>() //coverage,var calls}
            {
                new int[] { 100, 0, 0 },
                new int[] { 100, 1, 2 },
                new int[] { 100, 5, 24 },
                new int[] { 200, 10, 43 },
                new int[] { 500, 25, 98 },
                new int[] { 5000, 250, 890 },
                new int[] { 10000, 250, 356 },
                new int[] { 10000, 500, 1770 },
                new int[] { 10000, 9995, 156912 }, //ok, this is a silly number. but we are checking the range..
            };

            foreach (int[] item in SampleValues_ExpectedQScore)
            {
                var variant = new CalledAllele(AlleleCategory.Snv)
                {
                    ReferencePosition = 1,
                    ReferenceAllele   = "A",
                    AlternateAllele   = "T",
                    TotalCoverage     = item[0],
                    AlleleSupport     = item[1],
                };

                VariantQualityCalculator.Compute(variant, int.MaxValue, 20);
                Assert.Equal(item[2], variant.VariantQscore);

                //check upped bd works:
                VariantQualityCalculator.Compute(variant, 100, 20);
                Assert.Equal(Math.Min(100, item[2]), variant.VariantQscore);
            }
        }