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;
        }
Esempio n. 4
0
        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"));
        }
Esempio n. 5
0
        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);
        }