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); } }