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); }
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); }