private static List <CalledAllele> ProcessMultiAllelicLocus(List <CalledAllele> orderedVariants, RecalibrationResults results) { RecalibrationResult resultForVariant = GetModelFromType(orderedVariants[0], results); MixtureModelResult mixtureModelResult = GetModelResult(orderedVariants[0], resultForVariant); switch (mixtureModelResult.GenotypeCategory) { case SimplifiedDiploidGenotype.HomozygousRef: case SimplifiedDiploidGenotype.HomozygousAlt: var allele = UpdateGenotypeAndQScore(orderedVariants[0], mixtureModelResult); return(new List <CalledAllele> { allele }); case SimplifiedDiploidGenotype.HeterozygousAltRef: orderedVariants[0].Genotype = Genotype.HeterozygousAlt1Alt2; orderedVariants[1].Genotype = Genotype.HeterozygousAlt1Alt2; orderedVariants = UpdateMultiAllelicQScores(orderedVariants, results); return(orderedVariants); default: throw new ArgumentException("Invalid model results"); } }
private static CalledAllele UpdateGenotypeAndQScore(CalledAllele allele, MixtureModelResult mixtureModelResult) { allele = UpdateGenotype(allele, mixtureModelResult.GenotypeCategory); allele.GenotypePosteriors = mixtureModelResult.GenotypePosteriors; allele.GenotypeQscore = mixtureModelResult.QScore; return(allele); }
public RecalibratedVariant(int dp, int ad, int category, int qScore, float[] gp) { Dp = dp; Ad = ad; MixtureModelResult = new MixtureModelResult(); MixtureModelResult.GenotypeCategory = MixtureModelResult.IntToGenotypeCategory(category); MixtureModelResult.QScore = qScore; MixtureModelResult.GenotypePosteriors = gp; }
public void GetMultiAllelicQScores() { CalledAllele variant1 = TestHelper.CreateDummyAllele("chr1", 1000, "A", "C", 30, 12); CalledAllele variant2 = TestHelper.CreateDummyAllele("chr1", 1000, "A", "T", 30, 11); MixtureModelResult result = AdaptiveGenotyperCalculator.GetMultiAllelicQScores(variant1, variant2, new List <double[]> { Means, Means }); // The 4th GP should always be the minimum because that reflects the 1/2 call Assert.Equal(4, result.GenotypePosteriors.ToList().IndexOf(result.GenotypePosteriors.Min())); }
private void TestCalculation(CalledAllele variant, double frequency, double depth, int expectedValue) { variant.TotalCoverage = (int)depth; variant.AlleleSupport = (int)(depth * frequency); if (variant.Genotype == Genotype.HomozygousRef) { variant.AlleleSupport = (int)(depth * (1.0 - frequency)); } MixtureModelResult result = AdaptiveGenotyperCalculator.GetGenotypeAndQScore(variant, Means, Priors); Assert.Equal(expectedValue, result.QScore); }
public void GenotypeCategoryTests() { var mm = new MixtureModelResult { GenotypeCategory = SimplifiedDiploidGenotype.HeterozygousAltRef }; Assert.Equal(1, mm.GenotypeCategoryAsInt); mm.GenotypeCategory = SimplifiedDiploidGenotype.HomozygousAlt; Assert.Equal(2, mm.GenotypeCategoryAsInt); mm.GenotypeCategoryAsInt = 0; Assert.Equal(SimplifiedDiploidGenotype.HomozygousRef, mm.GenotypeCategory); Assert.Throws <ArgumentException>(() => mm.GenotypeCategoryAsInt = 3); }