CanvasDiploidCaller.CanvasDiploidCaller.AssignPloidyCallsDistance C# (CSharp) Метод

AssignPloidyCallsDistance() приватный Метод

private AssignPloidyCallsDistance ( CoverageModel model, List segments, int medianVariantCoverage ) : void
model CanvasCommon.CoverageModel
segments List
medianVariantCoverage int
Результат void
        private void AssignPloidyCallsDistance(CoverageModel model, List<SegmentInfo> segments, int medianVariantCoverage)
        {
            List<ModelPoint> modelPoints = InitializeModelPoints(model);
            foreach (CanvasSegment segment in this.Segments)
            {
                // Compute (MAF, Coverage) for this segment:
                List<double> MAF = new List<double>();
                foreach (float VF in segment.VariantFrequencies) MAF.Add(VF > 0.5 ? 1 - VF : VF);
                int expectedSnpDensityCutoff = (segment.End - segment.Begin) / MedianHetSnpsDistance / 2;

                List<Tuple<float, float>> weightedVariantFrequencies = new List<Tuple<float, float>>();
                double medianCoverage = CanvasCommon.Utilities.Median(segment.Counts);

                double medianMAF = -1;

                SegmentPloidy bestPloidy = null;

                if (MAF.Count >= Math.Max(10, expectedSnpDensityCutoff))
                {
                    medianMAF = Utilities.Median(MAF);
                }

                double bestDistance = double.MaxValue;
                double secondBestDistance = double.MaxValue;

                foreach (SegmentPloidy ploidy in AllPloidies)
                {
                    double diff = (ploidy.MixedCoverage - medianCoverage) * CoverageWeightingFactor;
                    double distance = diff * diff;
                    if (MAF.Count >= Math.Max(10, expectedSnpDensityCutoff))
                    {
                        diff = ploidy.MixedMinorAlleleFrequency - medianMAF;
                        distance += diff * diff;
                    }
                    if (distance < bestDistance)
                    {
                        secondBestDistance = bestDistance;
                        bestDistance = distance;
                        bestPloidy = ploidy;
                    }
                    else if (distance < secondBestDistance)
                    {
                        secondBestDistance = distance;
                    }
                }
                segment.CopyNumber = bestPloidy.CopyNumber;
                segment.ModelDistance = bestDistance;
                segment.RunnerUpModelDistance = secondBestDistance;

                segment.MajorChromosomeCount = bestPloidy.MajorChromosomeCount;
                if (MAF.Count < 10) segment.MajorChromosomeCount = null; // Don't assign MCC if we don't have variant allele frequencies
            }
        }