private MZSpectrum CalculateFineGrain(List<List<Composition>> elementalComposition, Normalization normalization)
{
List<Polynomial> fPolynomial = MultiplyFinePolynomial(elementalComposition);
fPolynomial = MergeFinePolynomial(fPolynomial);
// Convert polynomial to spectrum
int count = fPolynomial.Count;
double[] mz = new double[count];
double[] intensities = new double[count];
double totalProbability = 0;
double basePeak = 0;
int i = 0;
foreach (Polynomial polynomial in fPolynomial)
{
totalProbability += polynomial.Probablity;
if (polynomial.Probablity > basePeak)
{
basePeak = polynomial.Probablity;
}
mz[i] = polynomial.Power*_mwResolution;
intensities[i] = polynomial.Probablity;
i++;
}
double normalizedValue = normalization == Normalization.Sum ? totalProbability : basePeak;
// Normalize
for (i = 0; i < count; i++)
{
intensities[i] /= normalizedValue;
}
return new MZSpectrum(mz, intensities, false);
}