public static IGenotypeCalculator CreateGenotypeCalculator(PloidyModel ploidyModel, float minimumFrequencyFilter, int minEmitDepth, DiploidThresholdingParameters snvParameters, DiploidThresholdingParameters indelParameters, AdaptiveGenotypingParameters adaptiveGenotypingParameters, int minGQscore, int maxGQscore, float targetLODVariantFrequency, float minimumEmitFrequency = 0, string refName = null, bool?isMale = null) { var ploidyModelForThisChr = GetPloidyForThisChr(ploidyModel, isMale, refName); switch (ploidyModelForThisChr) { case PloidyModel.Haploid: return(new HaploidGenotyper(minEmitDepth, minGQscore, maxGQscore, snvParameters.MinorVF, snvParameters.MajorVF)); case PloidyModel.DiploidByAdaptiveGT: return(new DiploidAdaptiveGenotyper(minEmitDepth, minGQscore, maxGQscore, adaptiveGenotypingParameters)); case PloidyModel.DiploidByThresholding: return(new DiploidThresholdingGenotyper(snvParameters, snvParameters, minEmitDepth, minGQscore, maxGQscore)); case PloidyModel.Somatic: default: return(new SomaticGenotyper(minimumFrequencyFilter, minEmitDepth, minGQscore, maxGQscore, minimumEmitFrequency, targetLODVariantFrequency)); } }
public DiploidAdaptiveGenotyper(int minCalledVariantDepth, int minGQscore, int maxGQscore, AdaptiveGenotypingParameters adaptiveGenotypingParameters) { MinDepthToGenotype = minCalledVariantDepth; MinGQScore = minGQscore; MaxGQScore = maxGQscore; _adaptiveGenotypingParameters = adaptiveGenotypingParameters; }
public DiploidAdaptiveGenotyper() { var defaultParams = new VariantCallingParameters(); _adaptiveGenotypingParameters = new AdaptiveGenotypingParameters(); MinGQScore = defaultParams.MinimumGenotypeQScore; MaxGQScore = defaultParams.MaximumGenotypeQScore; MinDepthToGenotype = defaultParams.MinimumCoverage; }
public void ChrYUnknownGenderTests_adaptive() { var adaptiveGTparams = new AdaptiveGenotypingParameters(); var diploidPars = new DiploidThresholdingParameters(new float[] { 0.2f, 0.7f, 0.8f }); var genotypeCaculator = GenotypeCreator.CreateGenotypeCalculator(PloidyModel.DiploidByAdaptiveGT, 0.05f, 30, diploidPars, diploidPars, adaptiveGTparams, 0, 100, 0.05f, 0.02f, "chrY"); Assert.True(genotypeCaculator is DiploidAdaptiveGenotyper); Assert.Equal(PloidyModel.DiploidByAdaptiveGT, GenotypeCreator.GetPloidyForThisChr(PloidyModel.DiploidByAdaptiveGT, null, "chrY")); }
public void ChrMMaleTests_adaptive() { var adaptiveGTparams = new AdaptiveGenotypingParameters(); var diploidPars = new DiploidThresholdingParameters(new float[] { 0.2f, 0.7f, 0.8f }); var genotypeCaculator = GenotypeCreator.CreateGenotypeCalculator(PloidyModel.DiploidByAdaptiveGT, 0.05f, 30, diploidPars, diploidPars, adaptiveGTparams, 0, 100, 0.05f, 0.02f, "chrM", true); Assert.True(genotypeCaculator is SomaticGenotyper); Assert.Equal(PloidyModel.Somatic, GenotypeCreator.GetPloidyForThisChr(PloidyModel.DiploidByAdaptiveGT, true, "chrM")); }
private static Genotype CalculateDiploidGenotypeFromBinomialModel( IEnumerable <CalledAllele> alleles, int minDepthToGenotype, AdaptiveGenotypingParameters adaptiveGenotypingParameters, out List <CalledAllele> allelesToPrune) { allelesToPrune = new List <CalledAllele>(); float minVariantFrequency = GetMinVarFrequency(alleles.First().TotalCoverage, adaptiveGenotypingParameters.SnvModel, adaptiveGenotypingParameters.SnvPrior); double referenceFrequency = GetReferenceFrequency(alleles); bool depthIssue = GenotypeCalculatorUtilities.CheckForDepthIssue(alleles, minDepthToGenotype); bool refExists = referenceFrequency > minVariantFrequency; List <CalledAllele> orderedVariants = GenotypeCalculatorUtilities.FilterAndOrderAllelesByFrequency(alleles, allelesToPrune, minVariantFrequency); bool refCall = orderedVariants.Count == 0; //assume its ref call var preliminaryGenotype = SimplifiedDiploidGenotype.HomozygousRef; //this is order by descending - so most frequent is first. if (!refCall) { //do we apply SNP threshholds or indel thresholds? var dominantVariant = orderedVariants[0]; var(model, priors) = adaptiveGenotypingParameters.GetModelsAndPriors(dominantVariant); preliminaryGenotype = AdaptiveGenotyperCalculator.GetSimplifiedGenotype(dominantVariant, model, priors); minVariantFrequency = GetMinVarFrequency(dominantVariant.TotalCoverage, model, priors); } var finalGTForLoci = GenotypeCalculatorUtilities.ConvertSimpleGenotypeToComplexGenotype(alleles, orderedVariants, referenceFrequency, refExists, depthIssue, refCall, minVariantFrequency, adaptiveGenotypingParameters.SumVFforMultiAllelicSite, preliminaryGenotype); allelesToPrune = GenotypeCalculatorUtilities.GetAllelesToPruneBasedOnGTCall(finalGTForLoci, orderedVariants, allelesToPrune); return(finalGTForLoci); }
private static AdaptiveGenotypingParameters UpdateAdaptiveGenotypingParameters(AdaptiveGenotypingParameters parameters, string inputModelFilePath) { if (File.Exists(inputModelFilePath)) { var newModels = MixtureModel.ReadModelsFile(inputModelFilePath); parameters.SnvModel = newModels[0].Means; parameters.SnvPrior = newModels[0].Priors; parameters.IndelModel = newModels[1].Means; parameters.IndelPrior = newModels[1].Priors; } else { throw new ArgumentException("No AdaptiveGT model file found at " + inputModelFilePath); } return(parameters); }