private Genotype CalculateHaploidGenotype(IEnumerable <CalledAllele> alleles,
                                                  int minDepthToGenotype, out List <CalledAllele> allelesToPrune)
        {
            allelesToPrune = new List <CalledAllele>();
            var  singleGTForLoci    = Genotype.HemizygousNoCall;
            var  orderedVariants    = GenotypeCalculatorUtilities.FilterAndOrderAllelesByFrequency(alleles, allelesToPrune, _minorVF);
            var  referenceFrequency = GenotypeCalculatorUtilities.GetReferenceFrequency(alleles, _minorVF);
            var  refExists          = (referenceFrequency >= _minorVF);
            var  depthIssue         = GenotypeCalculatorUtilities.CheckForDepthIssue(alleles, minDepthToGenotype);
            bool refCall            = ((orderedVariants.Count == 0) || (orderedVariants[0].Frequency < _minorVF));


            if (!depthIssue && refCall && refExists && referenceFrequency > _majorVF)
            {
                singleGTForLoci = Genotype.HemizygousRef;
            }

            if (!depthIssue && !refCall && !refExists && orderedVariants[0].Frequency > _majorVF)
            {
                singleGTForLoci = Genotype.HemizygousAlt;
            }

            //if (!diploidModelFail)
            allelesToPrune = GenotypeCalculatorUtilities.GetAllelesToPruneBasedOnGTCall(singleGTForLoci, orderedVariants, allelesToPrune);

            return(singleGTForLoci);
        }
Example #2
0
        private static Genotype CalculateDiploidGenotype(IEnumerable <CalledAllele> alleles,
                                                         int minDepthToGenotype, DiploidThresholdingParameters snvThresholdingParameters,
                                                         DiploidThresholdingParameters indelThresholdingParameters, out List <CalledAllele> allelesToPrune)
        {
            allelesToPrune = new List <CalledAllele>();
            var  orderedVariants    = GenotypeCalculatorUtilities.FilterAndOrderAllelesByFrequency(alleles, allelesToPrune, snvThresholdingParameters.MinorVF);
            var  referenceFrequency = GenotypeCalculatorUtilities.GetReferenceFrequency(alleles, snvThresholdingParameters.MinorVF);
            var  refExists          = (referenceFrequency >= snvThresholdingParameters.MinorVF);
            var  depthIssue         = GenotypeCalculatorUtilities.CheckForDepthIssue(alleles, minDepthToGenotype);
            var  parameters         = snvThresholdingParameters;
            bool refCall            = orderedVariants.Count == 0 || (orderedVariants[0].Frequency < snvThresholdingParameters.MinorVF);

            //do we apply SNP threshholds or indel thresholds?
            parameters = SelectParameters(indelThresholdingParameters, orderedVariants, parameters, refCall);

            var preliminaryGenotype = GetPreliminaryGenotype(orderedVariants, parameters, refCall);

            var finalGTForLoci = GenotypeCalculatorUtilities.ConvertSimpleGenotypeToComplexGenotype(alleles, orderedVariants, referenceFrequency, refExists, depthIssue, refCall,
                                                                                                    parameters.MinorVF, parameters.SumVFforMultiAllelicSite, preliminaryGenotype);

            allelesToPrune = GenotypeCalculatorUtilities.GetAllelesToPruneBasedOnGTCall(finalGTForLoci, orderedVariants, allelesToPrune);


            return(finalGTForLoci);
        }
        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);
        }