CSMSL.Chemistry.IsotopicDistribution.MultipleFinePolynomialRecursiveHelper C# (CSharp) Method

MultipleFinePolynomialRecursiveHelper() private static method

private static MultipleFinePolynomialRecursiveHelper ( int mins, int maxs, int indices, int index, IList fPolynomial, IList elementalComposition, int atoms, double minProb, int maxValue ) : void
mins int
maxs int
indices int
index int
fPolynomial IList
elementalComposition IList
atoms int
minProb double
maxValue int
return void
        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);
                    }
                }
            }
        }