public double GetQScorePredictor(QScorePredictor predictorId)
{
switch (predictorId)
{
case QScorePredictor.BinCount:
return (double)this.BinCount;
case QScorePredictor.LogBinCount:
return Math.Log10(1 + this.BinCount);
case QScorePredictor.BinMean:
if (this.Counts.Count == 0) return 0;
return this.Counts.Average();
case QScorePredictor.BinCv:
if (this.Counts.Count == 0) return 0;
if (this.Counts.Average() == 0) return 0;
return CanvasCommon.Utilities.CoefficientOfVariation(this.Counts);
case QScorePredictor.MafCount:
return this.VariantFrequencies.Count;
case QScorePredictor.MafMean:
if (this.VariantFrequencies.Count == 0) return 0;
return this.VariantFrequencies.Average();
case QScorePredictor.MafCv:
if (this.VariantFrequencies.Count == 0) return 0;
if (this.VariantFrequencies.Average() == 0) return 0;
return CanvasCommon.Utilities.CoefficientOfVariation(this.VariantFrequencies);
case QScorePredictor.LogMafCv:
return Math.Log10(1 + GetQScorePredictor(QScorePredictor.MafCv));
case QScorePredictor.ModelDistance:
return this.ModelDistance;
case QScorePredictor.RunnerUpModelDistance:
return this.RunnerUpModelDistance;
case QScorePredictor.DistanceRatio:
if (this.RunnerUpModelDistance == 0) return 0;
return this.ModelDistance / this.RunnerUpModelDistance;
case QScorePredictor.CopyNumber:
return (double)this.CopyNumber;
case QScorePredictor.MajorChromosomeCount:
// Force a double:
if (!this.MajorChromosomeCount.HasValue) return Math.Ceiling(this.CopyNumber / 2f);
return (double)this.MajorChromosomeCount;
}
return 0;
}