#include "RooAbsPdf.h" #include "RooExtendPdf.h" #include "RooDataHist.h" #include "RooArgList.h" #include "RooRealVar.h" #include "RooAddModel.h" #include "RooAddPdf.h" #include "RooFFTConvPdf.h" #include "RooPlot.h" #include "RooGaussian.h" #include "RooPolynomial.h" RooAbsPdf *Model_Gaussian (RooRealVar *var_x, double mean, double sigma1, double sigma2, double area1, double area2) { vector para_val; para_val . push_back (mean); para_val . push_back (sigma1); para_val . push_back (sigma2); para_val . push_back (area1); para_val . push_back (area2); TString para_name[5] = { "mean", "sigma1", "sigma2", "area1", "area2" }; TString para_title[5] = { "Gaussian mean", "Gaussian sigma1", "Gaussian sigma2", "Gaussian area1", "Gaussian area2" }; RooRealVar *parameter[5]; for (int i=0; i<5; i++) { parameter[i] = new RooRealVar (para_name[i], para_title[i], para_val[i], para_val[i]*0.8, para_val[i]*1.2); if (para_val[i] == 0) parameter[i] -> setConstant (1); } RooRealVar roo_area1 (para_name[3], para_title[3], para_val[3], para_val[3]*0.8, para_val[3]*1.2); RooRealVar roo_area2 (para_name[4], para_title[4], para_val[4], para_val[4]*0.8, para_val[4]*1.2); RooRealVar *gaussfrac = new RooRealVar ("gaussfrac", "Fraction between 2 gauss area", 1, 0.8, 1.2); RooGaussian *func_Gaussian1 = new RooGaussian ("func_Gaussian1", "Gaussian 1 function", *var_x, *parameter[0], *parameter[1]); RooGaussian *func_Gaussian2 = new RooGaussian ("func_Gaussian2", "Gaussian 2 function", *var_x, *parameter[0], *parameter[2]); RooFFTConvPdf *conv_Gaussian = new RooFFTConvPdf ("conv_Gaussian", "Convolution of 2 gaussians", *var_x, *func_Gaussian1, *func_Gaussian2); //RooAbsPdf *model = new RooAddPdf ("model", "Simple Gaussian", RooArgList(*func_Gaussian1, *func_Gaussian2), RooArgList(*parameter[3], *parameter[4])); RooAbsPdf *model = new RooExtendPdf ("model", "Non-normalized convolution", *conv_Gaussian, *parameter[3]); //RooAbsPdf *model = new RooAddPdf ("model", "Simple Gaussian", RooArgList(*func_Gaussian1, *func_Gaussian2), RooArgList(roo_area1, roo_area2)); //RooAbsPdf *model = new RooAddPdf ("model", "Simple Gaussian", RooArgList(*func_Gaussian1, *func_Gaussian2), *gaussfrac); //RooAbsPdf *model = new RooGaussian ("func_Gaussian", "Gaussian function", *var_x, *parameter[0], *parameter[1]); printf ("Still ok\n"); return model; }