Beispiel #1
0
        public TOFFitResults FitTOF(TOF t)
        {
            TOFFitResults results = new TOFFitResults();

            double[] coefficients = new double[4];
            // guess some reasonable values
            coefficients[0] = t.Data[0];
            coefficients[1] = ArrayOperation.GetMax(t.Data) - coefficients[0];
            double lastT = t.Times[t.Times.Length - 1];

            coefficients[2] = (t.Times[0] + lastT) / 2;
            coefficients[3] = (lastT - t.Times[0]) / 5;
            double mse = 0;

            // this is totally tedious!
            double[] times = new double[t.Times.Length];
            for (int i = 0; i < t.Times.Length; i++)
            {
                times[i] = (double)t.Times[i];
            }

            CurveFit.NonLinearFit(times, t.Data, new ModelFunctionCallback(gaussian), coefficients, out mse, 1000000);
            results.Background = coefficients[0];
            results.Amplitude  = coefficients[1];
            results.Centre     = coefficients[2];
            results.Width      = Math.Abs(coefficients[3]);

            return(results);
        }
Beispiel #2
0
        public static double[] FitLorenzianToSlaveData(CavityScanData data, double limitLow, double limitHigh)
        {
            double mse = 0;

            double[] voltages     = data.parameters.CalculateRampVoltages();
            double[] coefficients = new double[] { (data.parameters.High - data.parameters.Low) / 10, voltages[ArrayOperation.GetIndexOfMax(data.SlavePhotodiodeData)],
                                                   ArrayOperation.GetMax(data.SlavePhotodiodeData) - ArrayOperation.GetMin(data.SlavePhotodiodeData), 0 };
            CurveFit.NonLinearFit(voltages, data.SlavePhotodiodeData, new ModelFunctionCallback(lorentzianNarrow),
                                  coefficients, out mse, 4000);
            fitFailSafe(coefficients, limitLow, limitHigh);

            return(coefficients);
        }