#include "TFile.h" #include "TH1.h" #include "TF1.h" #include "TMath.h" #include "TVirtualFitter.h" TF1 *fpol; Int_t npol; const Int_t npeaks = 8; Double_t fpeaks(Double_t *x, Double_t *par) { Double_t result = fpol->EvalPar(x,par); for (Int_t p=0;pGet("newhist"); //fit background with a polynomial fpol = new TF1("fpol","pol3",60,550); npol = fpol->GetNpar(); h->Fit("fpol","0"); Double_t xpeak[npeaks] = {73.5,84.7,310.5,339,398,415,482,509.7}; Double_t sigma[npeaks] = {2,2,2,2,2,2,20,1.5}; Double_t amp[npeaks] = {100,100,100,100,100,200,300,6000}; Double_t par[100]; for (Int_t ip=0;ipGetParameter(ip); TF1 *fp = new TF1("fp",fpeaks,60,550,npol+3*npeaks); for (Int_t i=0;iSetParameter(3*i+npol,1000*amp[i]); fp->SetParameter(3*i+npol+1, xpeak[i]); fp->SetParLimits(3*i+npol+1, xpeak[i]-5,xpeak[i]+5); fp->SetParameter(3*i+npol+2, sigma[i]); fp->SetParLimits(3*i+npol+2, 0.5,3*sigma[i]); } fp->SetNpx(10000); TVirtualFitter::SetMaxIterations(20000); h->Fit(fp,"rw"); }