using namespace RooFit; void bruno() { RooRealVar mass("mass","invariant mass (GeV/c2)",0,12); //Breit-Wigner for the phi RooRealVar mean_phi("mean_phi","mean_phi",1.0,0.9,1.1); RooRealVar g("sigma_phi","sigma_phi",1,0,2); RooBreitWigner *phi_BW = new RooBreitWigner("phi_BW","Breit Wigner PDF",mass,mean_phi,g); //Crystal ball for the J/psi RooRealVar mean_jpsi("mean_jpsi","mean_jpsi",3,2.9,3.2); RooRealVar sigma_jpsi("sigma_jpsi","sigma_jpsi",0.07,0,0.1); RooRealVar alpha("alpha","alpha",1); RooRealVar n("n","n",5); RooCBShape *jpsi = new RooCBShape("jpsi","crystal ball PDF",mass,mean_jpsi,sigma_jpsi,alpha,n); //Crystal ball for the psi RooRealVar mean_psi("mean_psi","mean_psi",3.6,3.4,3.8); RooRealVar sigma_psi("sigma_psi","sigma_psi",0.07,0,0.1); RooRealVar alpha_psi("alpha","alpha",1.5); RooRealVar n_psi("n","n",1); RooCBShape *psi = new RooCBShape("psi","crystal ball PDF",mass,mean_psi,sigma_psi,alpha_psi,n_psi); //Crystal ball for the Upsilon RooRealVar mean_up("mean_up","mean_up",9.4,9.3,9.5); RooRealVar sigma_up("sigma_up","sigma_up",0.07,0,0.1); RooRealVar alpha_up("alpha_up","alpha_up",1,0,5); RooRealVar n_up("n_up","n_up",1,0,10); RooCBShape *upsilon = new RooCBShape("upsilon","crystal ball PDF",mass,mean_up,sigma_up,alpha_up,n_up); //Exponential background RooRealVar a("a","a",-0.85,-0.8,-0.9); RooExponential bkg("exp","exp",mass,a); RooRealVar fsig("fsig","signal",0.1,0.,1.); RooRealVar fsig2("fsig2","signal2",0.1,0.,1.); RooRealVar fsig3("fsig3","signal3",0.1,0.,1.); RooRealVar fsig4("fsig4","signal4",0.1,0.,1.); RooAddPdf sum("sum","sum",RooArgList(*phi_BW,*jpsi,*psi,*upsilon,bkg),RooArgList(fsig,fsig2,fsig3,fsig4),kTRUE); RooDataSet* data = sum.generate(mass,10000) ; sum.getParameters(data)->setAttribAll("Constant",kTRUE) ; fsig.setConstant(kFALSE) ; sum.fitTo(*data,Range(2.2,5)); RooPlot* mframe = mass.frame(Title("Fit of invariant mass")); data->plotOn(mframe); sum.plotOn(mframe); sum.plotOn(mframe,Components(bkg),LineStyle(kDashed)); mframe->Draw(); }