private static Tuple<double, int> GetMeanSquaredLogRatios(double[] tumorBinCounts, double[] normalBinCounts)
{
double sumOfSquaredLogRatios = 0;
int ignoredBinCount = 0;
int nBins = 0;
for (int binIndex = 0; binIndex < tumorBinCounts.Length; binIndex++)
{
double tumorBinCount = tumorBinCounts[binIndex];
double normalBinCount = normalBinCounts[binIndex];
if (normalBinCount <= 0)
{
ignoredBinCount++;
continue;
}
double squaredLogRatio;
try
{
double logRatio = Math.Log(tumorBinCount / normalBinCount);
squaredLogRatio = logRatio * logRatio;
}
catch (Exception e)
{
Console.WriteLine("Error calculating squared log ratio: {0}. Ignoring bin {1}.", e.Message, binIndex);
ignoredBinCount++;
continue;
}
if (double.IsInfinity(squaredLogRatio) || double.IsNaN(squaredLogRatio))
{
ignoredBinCount++;
continue;
}
sumOfSquaredLogRatios += squaredLogRatio;
nBins++;
}
double meanSquaredLogRatios = nBins > 0 ? sumOfSquaredLogRatios / nBins : sumOfSquaredLogRatios;
return Tuple.Create(meanSquaredLogRatios, ignoredBinCount);
}