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