Einige Funktionen sind vordefiniert in ROOT:
Fitten mit Benutzer definierten Funktionen
Für viele Fälle kann man auf weitere in ROOT eingebaute Funktionen zurückgreifen.
TF1 *myfit = new TF1("myfit","[0]*sin(x) + [1]*exp(-[2]*x)", 0, 2); |
Und für den allgemeinen Fall kann man eigene C++-Funktionen definieren:
double BreitWig( double *x, double *par) { // Breit- Wigner function double mw = par[0], gw = par[1], spk=par[2], mw2, gw2, eb2; mw2 = mw*mw; gw2 = gw*gw; eb2 = x[0]*x[0]; return( spk * gw2*mw2 / ( pow( eb2 - mw2, 2 ) + mw2 * gw2 ) ); // return( spk * gw2*mw2 / ( pow( eb2 - mw2, 2 ) + eb2*eb2/mw2 * gw2 ) ); } void bwfit() { const int np = 7; double xv[np] = { 88.396, 89.376, 90.234, 91.238, 92.068, 93.080, 93.912 }; double *ex = 0; double yv[np] = { 6.943, 13.183, 25.724, 40.724, 27.031, 12.273, 6.980 }; double ey[np] = { 0.087, 0.119, 0.178, 0.087, 0.159, 0.095, 0.064}; TGraphErrors *tg = new TGraphErrors( 7, xv, yv, ex, ey ); tg->Draw("AP"); TF1 *bw = new TF1("bw",BreitWig, 70, 110, 3); // set parameters bw->SetParameters(80.,2. , 10.); // do the fit tg->Fit("bw"); // retrieve fit function TF1 *f = bw; }