Пример #1
0
        public static double[][] Convolute(double[][] distrib1, double[][] distrib2,
                                           double massPrecision, double weightCutoff)
        {
            double[] masses1  = distrib1[0];
            double[] masses2  = distrib2[0];
            double[] weights1 = distrib1[1];
            double[] weights2 = distrib2[1];
            double[] masses   = new double[masses1.Length * masses2.Length];
            double[] weights  = new double[masses1.Length * masses2.Length];
            int      count    = 0;

            for (int i = 0; i < masses1.Length; i++)
            {
                for (int j = 0; j < masses2.Length; j++)
                {
                    masses[count]  = masses1[i] + masses2[j];
                    weights[count] = weights1[i] * weights2[j];
                    count++;
                }
            }
            int[] o = ArrayUtil.Order(masses);
            masses  = ArrayUtil.SubArray(masses, o);
            weights = ArrayUtil.SubArray(weights, o);
            double[][] x = ChemElement.FilterMasses(masses, weights, null, massPrecision);
            masses  = x[0];
            weights = x[1];
            if (!Double.IsNaN(weightCutoff))
            {
                x       = ChemElement.FilterWeights(masses, weights, null, weightCutoff);
                masses  = x[0];
                weights = x[1];
            }
            return(new double[][] { masses, weights });
        }
Пример #2
0
        public double[][] GetIsotopeDistribution(double massPrecision)
        {
            ChemElement element = ChemElement.elements[atomType[0]];

            double[][] distrib = element.GetIsotopeDistribution(atomCount[0]);
            for (int i = 1; i < atomType.Length; i++)
            {
                element = ChemElement.elements[atomType[i]];
                distrib = Convolute(distrib, element.GetIsotopeDistribution(atomCount[i]), massPrecision, 1e-6);
            }
            return(distrib);
        }