Dear Expert,
I am trying to perform a fit using as model an exponential PDF convoluted with a double gaussian. Here is my code
RooRealVar t_val("t","t",22.15,22.65);
RooRealVar sigma("#sigma","#sigma core",0.015,0.,0.03);
RooRealVar sigma1("#sigma1","#sigma tail",0.2,0.,0.4);
RooRealVar mean("#mu","#mu",22.36,22.35,23.38);
RooRealVar alpha("#alpha","#alpha",-25,-30.,0.);
RooRealVar frac1("fraction1","fraction",0.8,0,1);
RooExponential Expo("Expo","laser flash",t_val,alpha);
RooGaussian Gauss("Gauss","ph distribution",t_val,mean,sigma);
RooGaussian Gauss1("Gauss1","ph distribution",t_val,mean,sigma1);
RooAddPdf res("resolution","resolution function",RooArgList(Gauss,Gauss1),RooArgList(frac1));
RooFFTConvPdf conv("conv","convolution",t_val,Expo,Gauss);
RooDataHist jitter_data("data","dataset",t_val,Import(*hdata));
t_val.setBins(10000,"fft");
RooPlot* frame=t_val.frame();
//jitter_data.plotOn(frame);//Normalization(tot_data.numEntries(),RooAbsReal::NumEvent));
sigma.setVal(0.015);
sigma1.setVal(0.2);
mean.setVal(22.36);
alpha.setVal(-25);
frac1.setVal(0.8);
//mean.setConstant();
// sigmaG.setConstant();
//alpha.setConstant();
//RooFitResult *r=conv.fitTo(jitter_data);
conv.plotOn(frame);
frame->Draw();
the problem is not the fit itself, but the fact that when I try to plot just the convolution function, even without fitting, I get a constant PDF with 0 value. I tried to do the convolution with one gaussian and between the two gaussian, but the result is the same. I think I am doing a systematic error I can’t figure out. On the other hand I tested the model with this code
RooRealVar dt("dt","dt",22.15,22.65) ;
RooRealVar tau("tau","tau",0.04) ;
//Gaussian model
RooRealVar mean("mean","mean",22.36) ;
RooRealVar sigma("sigma","sigma",0.015) ;
RooRealVar sigma1("sigma1","sigma",0.2) ;
RooRealVar gm1frac("gm1frac","fraction of gm1",0.8);
RooGaussModel gaussm("gaussm","gauss model",dt,mean,sigma) ;
RooGaussModel gaussm1("gaussm1","gauss model",dt,mean,sigma1) ;
RooAddModel gmsum("gmsum","sum of gm1 and gm2",RooArgList(gaussm,gaussm1),gm1frac);
//Create basis function
RooFormulaVar basis("basis","exp(-@0/@1)",RooArgList(dt,tau));
// Construct decay(t) (x) gauss1(t)
RooAbsReal* decayConvGauss=gmsum.convolution(&basis,&basis);
RooPlot* frame1 = dt.frame(Title("Bdecay (x) resolution"));
// Plot p.d.f.
decayConvGauss->plotOn(frame1);
TCanvas *c2=new TCanvas();
frame1->Draw();
and I saw that the curve I want to see is corrected described.
Thanks for helping.
regards,
Eamanuele