public void SimpleTest() { FCN f = (v)=>{ double x = v[0]; double y = v[1]; double z = v[2]; return (x-1)*(x-1) + (y-2)*(y-2) + (z-3)*(z-3); }; String[] pname = {"x", "y", "z"}; Minuit m = new Minuit(f, pname); m.migrad(); Assert.AreEqual(1.0, m.GetValue(0), 1e-7); Assert.AreEqual(2.0, m.GetValue(1), 1e-7); Assert.AreEqual(3.0, m.GetValue(2), 1e-7); }
/// <summary> /// Construct PeakFitter from initialpeakguess, histogam edges+values, /// </summary> /// <param name="guess">Initial peak guess.</param> /// <param name="edges">edges of the truncated histogram</param> /// <param name="y">histogram value</param> /// <param name="sigma">Uncertainty on Y</param> /// <returns>PeakFitter</returns> public static PeakFitter FromGuess(InitialPeakGuess guess, double[] edges, double[] y, double[] sigma = null) { PeakingPDF pdf = PeakingPDF.OfInitialPeakGuess(guess); BinChi2 x2 = new BinChi2(pdf.Compute, edges, y, sigma); string[] paramnames = pdf.ParamNames(); //full paramname with x string[] pname = new string[paramnames.Length - 1]; //Dock off x for (int i = 0; i < pname.Length; i++) { pname[i] = paramnames[i + 1]; } Minuit minuit = new Minuit((FCN)(x2.Compute), pname); minuit.SetInitialValue("mu", guess.mu); minuit.SetInitialValue("sigma", guess.sigma); minuit.SetInitialValue("nsig", guess.nsig); minuit.SetInitialValue("m", guess.m); minuit.SetInitialValue("c", guess.c); minuit.SetInitialValue("nbkg", guess.nbkg); PeakFitter ret = new PeakFitter() { pdf = pdf, minuit = minuit, edges=edges}; return ret; }
public FitResult(Minuit m, int nbin=1) { mu = m.GetValue("mu"); err_mu = m.GetError("mu"); sigma = m.GetValue("sigma"); err_sigma = m.GetError("sigma"); nsig = m.GetValue("nsig"); err_nsig = m.GetError("nsig"); this.m = m.GetValue("m"); err_m = m.GetError("m"); this.c = m.GetValue("c"); err_c = m.GetValue("c"); this.nbkg = m.GetValue("nbkg"); err_nbkg = m.GetValue("nbkg"); fmin = m.GetFmin(); this.nbin = nbin; Resolution = mu != 0 ? sigma / mu : 1; FitConverged = m.FitConverged(); }