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

MultiplyFineFinalPolynomial() private method

private MultiplyFineFinalPolynomial ( List tPolynomial, List fPolynomial, List fgidPolynomial ) : void
tPolynomial List
fPolynomial List
fgidPolynomial List
return void
        private void MultiplyFineFinalPolynomial(List<Polynomial> tPolynomial, List<Polynomial> fPolynomial, List<Polynomial> fgidPolynomial)
        {
            int i = tPolynomial.Count;
            int j = fPolynomial.Count;

            if (i == 0 || j == 0)
                return;

            double deltaMass = (_fineResolution/_mwResolution);
            double minProbability = _fineMinProb;

            int index = 0;
            double minMass = tPolynomial[0].Power + fPolynomial[0].Power;
            double maxMass = tPolynomial[i - 1].Power + fPolynomial[j - 1].Power;

            int maxIndex = (int) (Math.Abs(maxMass - minMass)/deltaMass + 0.5);
            if (maxIndex >= fgidPolynomial.Count)
            {
                j = maxIndex - fgidPolynomial.Count;
                for (i = 0; i <= j; i++)
                {
                    fgidPolynomial.Add(new Polynomial());
                }
            }

            for (int t = 0; t < tPolynomial.Count; t++)
            {
                for (int f = 0; f < fPolynomial.Count; f++)
                {
                    double prob = tPolynomial[t].Probablity*fPolynomial[f].Probablity;
                    if (prob <= minProbability)
                        continue;

                    double power = tPolynomial[t].Power + fPolynomial[f].Power;
                    index = (int) (Math.Abs(power - minMass)/deltaMass + 0.5);

                    Polynomial tempPolynomial = fgidPolynomial[index];

                    fgidPolynomial[index] = new Polynomial {Power = tempPolynomial.Power + power*prob, Probablity = tempPolynomial.Probablity + prob};
                }
            }

            index = tPolynomial.Count;
            j = 0;
            for (i = 0; i < fgidPolynomial.Count; i++)
            {
                if (fgidPolynomial[i].Probablity != 0)
                {
                    if (j < index)
                    {
                        tPolynomial[j] = new Polynomial {Power = fgidPolynomial[i].Power/fgidPolynomial[i].Probablity, Probablity = fgidPolynomial[i].Probablity};
                        j++;
                    }
                    else
                    {
                        tPolynomial.Add(new Polynomial {Power = fgidPolynomial[i].Power/fgidPolynomial[i].Probablity, Probablity = fgidPolynomial[i].Probablity});
                    }
                }

                fgidPolynomial[i] = new Polynomial();
            }

            if (j < index)
            {
                tPolynomial.RemoveRange(j, tPolynomial.Count - j);
            }
        }