{ // Esempio tratto e riadattato da ROOT Users Guide 4.08 // Caricare il file f.C prima di eseguire const int nBins = 60; int data[nBins] = { 6, 1,10,12, 6,13,23,22,15,21, 23,26,36,25,27,35,40,44,66,81, 75,57,48,45,46,41,35,36,53,32, 40,37,38,31,36,44,42,37,32,32, 43,44,35,33,33,39,29,41,32,44, 26,39,29,35,32,21,21,15,25,15}; TCanvas c1("c1","Fitting Demo",10,10,700,500); c1.SetFillColor(33); c1.SetFrameFillColor(41); c1.SetGrid(); TH1F histo("histo","Lorentzian Peak on Quadratic Background",60,0,3); histo.SetMarkerStyle(21); histo.SetMarkerSize(0.8); histo.SetStats(0); for(int i=0; i < nBins; i++) histo.SetBinContent(i+1,data[i]); // Creazione di TF1 nell'intervallo [0,3] con 6 parametri TF1 fitFcn("fitFcn",fitFunction,0,3,6); fitFcn.SetNpx(500); fitFcn.SetLineWidth(4); fitFcn.SetLineColor(kMagenta); // Primo tentativo senza valori iniziali per i parametri // Il fit funziona per la parte polinomiale ma non per // quella non lineare (lorentziana) fitFcn.SetParameters(1,1,1,1,1,1); histo.Fit("fitFcn","0"); // Secondo tentativo fitFcn.SetParameter(4,0.2); // width fitFcn.SetParameter(5,1); // peak histo.Fit("fitFcn","V+","ep"); // Miglioramento della figura TF1 backFcn("backFcn",background,0,3,3); backFcn.SetLineColor(kRed); TF1 signalFcn("signalFcn",lorentzianPeak,0,3,3); signalFcn.SetLineColor(kBlue); signalFcn.SetNpx(500); // Scrittura del risultato del fit nel vettore par double par[6]; fitFcn.GetParameters(par); backFcn.SetParameters(par); backFcn.Draw("same"); signalFcn.SetParameters(&par[3]); signalFcn.Draw("same"); // Scrittura della legenda TLegend legend(0.6,0.65,0.88,0.85); legend.SetTextFont(72); legend.SetTextSize(0.04); legend.AddEntry(&histo,"Data","lpe"); legend.AddEntry(&backFcn,"Background fit","l"); legend.AddEntry(&signalFcn,"Signal fit","l"); legend.AddEntry(&fitFcn,"Global Fit","l"); legend.Draw(); // Salvataggio del grafico c1.SaveAs("LorentzianPeak.eps"); }