80 ClassImp(RooNumConvPdf);
87 RooNumConvPdf::RooNumConvPdf() :
97 RooNumConvPdf::RooNumConvPdf(
const char *name,
const char *title, RooRealVar& convVar, RooAbsPdf& inPdf, RooAbsPdf& resmodel) :
98 RooAbsPdf(name,title),
101 _origVar(
"!origVar",
"Original Convolution variable",this,convVar),
102 _origPdf(
"!origPdf",
"Original Input PDF",this,inPdf),
103 _origModel(
"!origModel",
"Original Resolution model",this,resmodel)
120 RooNumConvPdf::RooNumConvPdf(
const RooNumConvPdf& other,
const char* name) :
121 RooAbsPdf(other,name),
123 _origVar(
"!origVar",this,other._origVar),
124 _origPdf(
"!origPdf",this,other._origPdf),
125 _origModel(
"!origModel",this,other._origModel)
131 _conv =
new RooNumConvolution(*other._conv,Form(
"%s_CONV",name?name:GetName())) ;
142 RooNumConvPdf::~RooNumConvPdf()
154 Double_t RooNumConvPdf::evaluate()
const
156 if (!_init) initialize() ;
158 return _conv->evaluate() ;
166 void RooNumConvPdf::initialize()
const
170 RooNumConvolution* protoConv = _conv ;
173 _conv =
new RooNumConvolution(Form(
"%s_CONV",GetName()),GetTitle(),var(),pdf(),model(),protoConv) ;
191 RooAbsGenContext* RooNumConvPdf::genContext(
const RooArgSet &vars,
const RooDataSet *prototype,
192 const RooArgSet* auxProto, Bool_t verbose)
const
194 if (!_init) initialize() ;
197 RooArgSet* modelDep = _conv->model().getObservables(&vars) ;
198 modelDep->remove(_conv->var(),kTRUE,kTRUE) ;
199 Int_t numAddDep = modelDep->getSize() ;
203 Bool_t pdfCanDir = (((RooAbsPdf&)_conv->pdf()).getGenerator(_conv->var(),dummy) != 0 && \
204 ((RooAbsPdf&)_conv->pdf()).isDirectGenSafe(_conv->var())) ;
205 Bool_t resCanDir = (((RooAbsPdf&)_conv->model()).getGenerator(_conv->var(),dummy) !=0 &&
206 ((RooAbsPdf&)_conv->model()).isDirectGenSafe(_conv->var())) ;
208 if (numAddDep>0 || !pdfCanDir || !resCanDir) {
211 return new RooGenContext(*
this,vars,prototype,auxProto,verbose) ;
215 return new RooConvGenContext(*
this,vars,prototype,auxProto,verbose) ;
224 void RooNumConvPdf::printMetaArgs(ostream& os)
const
226 os << _origPdf.arg().GetName() <<
"(" << _origVar.arg().GetName() <<
") (*) " << _origModel.arg().GetName() <<
"(" << _origVar.arg().GetName() <<
") " ;