private static void MultipleFinePolynomialRecursiveHelper(int[] mins, int[] maxs, int[] indices, int index, IList<Polynomial> fPolynomial, IList<Composition> elementalComposition, int atoms, double minProb, int maxValue)
{
for (indices[index] = mins[index]; indices[index] <= maxs[index]; indices[index]++)
{
if (index < mins.Length - 1)
{
MultipleFinePolynomialRecursiveHelper(mins, maxs, indices, index + 1, fPolynomial, elementalComposition, atoms, minProb, maxValue);
}
else
{
int l = atoms - indices.Sum();
if (l < 0 || l > maxValue)
continue;
double prob = FactorLn(atoms) - FactorLn(l) + l*elementalComposition[elementalComposition.Count - 1].LogProbability;
double power = l*elementalComposition[elementalComposition.Count - 1].Power;
for (int i = 0; i <= elementalComposition.Count - 2; i++)
{
int indexValue = indices[i];
Composition tComposition = elementalComposition[i];
prob -= FactorLn(indexValue);
prob += indexValue*tComposition.LogProbability;
power += indexValue*tComposition.Power;
}
prob = Math.Exp(prob);
if (prob >= minProb)
{
Polynomial tPolynomial = new Polynomial {Probablity = prob, Power = power};
fPolynomial.Add(tPolynomial);
}
}
}
}