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

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

Generate a table listing segments (and several features), and noting which are accurate (copy number exactly matches truth set) or directionally accurate (copy number and truth set are both <2, both =2, or both >2) This table will become our collection of feature vectors for training q-scores!
private GenerateReportVersusKnownCN ( ) : void
Результат void
        private void GenerateReportVersusKnownCN()
        {
            string debugPath = Path.Combine(this.TempFolder, "CallsVersusKnownCN.txt");
            using (StreamWriter writer = new StreamWriter(debugPath))
            {
                writer.Write("#Accurate\tDirectionAccurate\t");
                writer.Write("Chr\tBegin\tEnd\tTruthSetCN\t");
                writer.Write("LogLength\tLogBinCount\tBinCount\tBinCV\tModelDistance\tRunnerUpModelDistance\t");
                writer.Write("MafCount\tMafMean\tMafCv\tLogMafCv\tCopyNumber\tMCC\t");
                writer.Write("DistanceRatio\tLogMafCount\t");
                writer.Write("ModelPurity\tModelDeviation\t");
                writer.Write("QScoreLinearFit\tQScoreGeneralizedLinearFit\tQScoreLogistic\tQScoreGermlineLogistic");
                writer.WriteLine();
                foreach (CanvasSegment segment in this.Segments)
                {
                    int CN = this.GetKnownCNForSegment(segment);
                    if (CN < 0) continue;
                    if (segment.End - segment.Begin < 5000) continue;
                    List<float> MAF = new List<float>();
                    foreach (float VF in segment.VariantFrequencies)
                    {
                        MAF.Add(VF > 0.5 ? 1 - VF : VF);
                    }
                    MAF.Sort();
                    float MedianMAF = -1;
                    if (MAF.Count > 0)
                        MedianMAF = MAF[MAF.Count / 2];
                    double medianCoverage = CanvasCommon.Utilities.Median(segment.Counts);
                    string accurateFlag = "N";
                    if (CN == segment.CopyNumber) accurateFlag = "Y";
                    string directionAccurateFlag = "N";
                    if ((CN < 2 && segment.CopyNumber < 2) ||
                        (CN == 2 && segment.CopyNumber == 2) ||
                        (CN > 2 && segment.CopyNumber > 2))
                        directionAccurateFlag = "Y";
                    writer.Write("{0}\t{1}\t", accurateFlag, directionAccurateFlag);
                    writer.Write("{0}\t{1}\t{2}\t{3}\t", segment.Chr, segment.Begin, segment.End, CN);
                    writer.Write("{0}\t", Math.Log(segment.End - segment.Begin));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.LogBinCount));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.BinCount));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.BinCv));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.ModelDistance));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.RunnerUpModelDistance));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.MafCount));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.MafMean));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.MafCv));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.LogMafCv));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.CopyNumber));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.MajorChromosomeCount));
                    writer.Write("{0}\t", segment.GetQScorePredictor(CanvasSegment.QScorePredictor.DistanceRatio));
                    writer.Write("{0}\t", Math.Log(segment.GetQScorePredictor(CanvasSegment.QScorePredictor.MafCount)));
                    writer.Write("{0}\t", 100);
                    writer.Write("{0}\t", Model.Deviation);
                    double score = segment.ComputeQScore(CanvasSegment.QScoreMethod.BinCountLinearFit);
                    writer.Write("{0}\t", score);
                    score = segment.ComputeQScore(CanvasSegment.QScoreMethod.GeneralizedLinearFit);
                    writer.Write("{0}\t", score);
                    score = segment.ComputeQScore(CanvasSegment.QScoreMethod.Logistic);
                    writer.Write("{0}\t", score);
                    score = segment.ComputeQScore(CanvasSegment.QScoreMethod.LogisticGermline);
                    writer.Write("{0}\t", score);

                    writer.WriteLine();
                }
            }
            Console.WriteLine(">>> Wrote report of CNV calls versus reference calls to {0}", debugPath);
        }