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.NoiseLevelUsedForQScoring); } StrandBiasCalculator.Compute(variant, variant.SupportByDirection, _config.NoiseLevelUsedForQScoring, _config.MinFrequency, _config.StrandBiasFilterThreshold, _config.StrandBiasModel); AmpliconBiasCalculator.Compute(variant, _config.MaxVariantQscore, _config.AmpliconBiasFilterThreshold); } // set genotype, filter, etc AlleleProcessor.Process(variant, _config.MinFrequency, _config.LowDepthFilter, _config.VariantQscoreFilterThreshold, _config.FilterSingleStrandVariants, _config.VariantFreqFilter, _config.LowGTqFilter, _config.IndelRepeatFilter, _config.RMxNFilterSettings, _config.NoCallFilterThreshold, _config.AmpliconBiasFilterThreshold, _config.ChrReference, source.ExpectStitchedReads); }
private BiasResultsAcrossAmplicons ExecuteTest(AmpliconCounts supportForAmplicons, AmpliconCounts coverageForAmplicons, bool expectNull = false) { var variant1 = new CalledAllele(AlleleCategory.Snv) { SupportByAmplicon = supportForAmplicons, CoverageByAmplicon = coverageForAmplicons }; AmpliconBiasCalculator.Compute(variant1, 100, 0.01F); var variant2 = new CalledAllele(AlleleCategory.Snv) { SupportByAmplicon = ReverseAmpliconData(supportForAmplicons), CoverageByAmplicon = ReverseAmpliconData(coverageForAmplicons) }; AmpliconBiasCalculator.Compute(variant2, 100, 0.01F); //sanity check, reversing the input must always give the same result. if (expectNull) { Assert.Null(variant1.AmpliconBiasResults); Assert.Null(variant2.AmpliconBiasResults); } else { Assert.Equal(variant1.AmpliconBiasResults.BiasDetected, variant2.AmpliconBiasResults.BiasDetected); } return(variant1.AmpliconBiasResults); }
public void Write() { var outFolder = Path.Combine(TestPaths.LocalScratchDirectory, "AmpliconBiasTestOutput"); var outputFile = Path.Combine(outFolder, "AmpliconBiasWriterTests.txt"); TestHelper.RecreateDirectory(outFolder); //check writing var chromosome = "chr1"; var reference = "A"; var alternate = "T"; var position = 123; var BaseCalledAlleles = new List <CalledAllele>(); var variant = new CalledAllele(AlleleCategory.Snv) { Chromosome = chromosome, ReferenceAllele = reference, AlternateAllele = alternate, ReferencePosition = position, SupportByAmplicon = new Domain.Models.AmpliconCounts { AmpliconNames = new string[] { "Amplicon1", "Amplicon2", "Amplicon3" }, CountsForAmplicon = new int[] { 12, 4, 5 } }, CoverageByAmplicon = new Domain.Models.AmpliconCounts { AmpliconNames = new string[] { "Amplicon1", "Amplicon2", "Amplicon3" }, CountsForAmplicon = new int[] { 120, 4000, 5000 } } }; AmpliconBiasCalculator.Compute(variant, 100, 0.01F); BaseCalledAlleles.Add(variant); var writer = new AmpliconBiasFileWriter(outputFile); writer.WriteHeader(); writer.Write(BaseCalledAlleles); writer.Dispose(); //check it reads in //Chr,Position,Reference,Alternate,Name,freq,obs support, expected support, prob its real, confidence Qscore, bias detected ?, Filter Variant? //chr1,123,A,T,Amplicon1,0.1,12,12,1,100,False,True, //chr1,123,A,T,Amplicon2,0.001,4,400,2.06343002707725E-165,0,True,True, //chr1,123,A,T,Amplicon3,0.001,5,500,1.87406134646469E-206,0,True,True, var biasFileContents = File.ReadAllLines(outputFile); Assert.True(biasFileContents.Length == 4); var header = biasFileContents.First(); var expectedHeader = "Chr,Position,Reference,Alternate,Name,freq,obs support, expected support, prob its real, confidence Qscore, bias detected?, Filter Variant?"; var data = biasFileContents.Skip(1).First(); var expectedData = "chr1,123,A,T,Amplicon1,0.1,12,12,1,100,False,True,"; // Make sure well-formed and populated with the right data Assert.Equal(expectedHeader, header); Assert.Equal(expectedData, data); //check IO Assert.Throws <IOException>(() => writer.WriteHeader()); Assert.Throws <IOException>(() => writer.Write(BaseCalledAlleles)); writer.Dispose(); }