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

MergeFinePolynomial() private method

private MergeFinePolynomial ( List tPolynomial ) : List
tPolynomial List
return List
        private List<Polynomial> MergeFinePolynomial(List<Polynomial> tPolynomial)
        {
            // Sort by mass (i.e. power)
            tPolynomial.Sort((a, b) => a.Power.CompareTo(b.Power));

            int count = tPolynomial.Count;

            for (int k = 1; k <= 9; k++)
            {
                for (int i = 0; i < count; i++)
                {
                    double power = tPolynomial[i].Power;

                    if (power == 0)
                        continue;

                    double probability = tPolynomial[i].Probablity;
                    Polynomial tempPolynomial;
                    tempPolynomial.Power = power*probability;
                    tempPolynomial.Probablity = probability;

                    for (int j = i + 1; j < count; j++)
                    {
                        double value = Math.Abs(tPolynomial[i].Power*_mwResolution - tPolynomial[j].Power*_mwResolution);

                        double threshold = (k <= 8) ? k*_mergeFineResolution/8 : _mergeFineResolution + _mergeFineResolution/100;

                        // Combine terms if their mass difference (i.e. power difference) is less than some threshold
                        if (value <= threshold)
                        {
                            tempPolynomial.Power = tempPolynomial.Power + tPolynomial[j].Power*tPolynomial[j].Probablity;
                            tempPolynomial.Probablity = tempPolynomial.Probablity + tPolynomial[j].Probablity;
                            tPolynomial[i] = new Polynomial {Power = tempPolynomial.Power/tempPolynomial.Probablity, Probablity = tempPolynomial.Probablity};
                            tPolynomial[j] = new Polynomial();
                        }
                        else
                        {
                            break;
                        }
                    }

                    tPolynomial[i] = new Polynomial {Power = tempPolynomial.Power/tempPolynomial.Probablity, Probablity = tempPolynomial.Probablity};
                }
            }

            // return only non-zero terms
            return tPolynomial.Where(poly => poly.Power != 0).ToList();
        }