public static IsobaricTagPurityCorrection Create(double[,] purityValues)
{
int rows = purityValues.GetLength(0);
int inputCount = purityValues.GetLength(1);
double[,] purityMatrix = new double[rows, rows];
//w x y z part of iTracker Paper
for (int i = 0; i < rows; i++)
{
double startvalue = 100;
for (int j = 0; j < inputCount; j++)
{
startvalue -= purityValues[i, j];
}
for (int j = 0; j < rows; j++)
{
if (j == i) continue; // Handled in the above code
double value = 0; // Zero fill;
int k = (j > i) ? 2 - j + i : i - j + 1;
if (k < inputCount && k >= 0)
value = purityValues[j, k];
purityMatrix[i, j] = value;
}
purityMatrix[i, i] = startvalue;
}
return new IsobaricTagPurityCorrection(purityMatrix);
}