101 _convVar(
"!convVar",
"Convolution variable",this,cVar,
kFALSE,
kFALSE),
102 _convSet(
"!convSet",
"Set of resModel X basisFunc convolutions",this),
103 _coefNormMgr(this,10),
115 _model(
"!model",this,other._model),
116 _convVar(
"!convVar",this,other._convVar),
117 _convSet(
"!convSet",this,other._convSet),
118 _coefNormMgr(other._coefNormMgr,this),
119 _codeReg(other._codeReg)
138 for (
auto arg : tmp) {
163 coutE(InputArguments) <<
"RooAbsAnaConvPdf::declareBasis(" <<
GetName() <<
"): ERROR attempt to "
164 <<
" declare basis functions in a copied RooAbsAnaConvPdf" << endl ;
170 coutE(InputArguments) <<
"RooAbsAnaConvPdf::declareBasis(" <<
GetName() <<
"): resolution model "
172 <<
" doesn't support basis function " << expression << endl ;
178 basisArgs.
add(params) ;
180 TString basisName(expression) ;
181 for (
const auto arg : basisArgs) {
183 basisName.
Append(arg->GetName()) ;
195 coutE(InputArguments) <<
"RooAbsAnaConvPdf::declareBasis(" <<
GetName() <<
"): unable to construct convolution with basis function '"
196 << expression <<
"'" << endl ;
218 if (!newConvSet.
add(*newConv)) {
227 std::for_each(newConvSet.
begin(), newConvSet.
end(), [](
RooAbsArg* arg){delete arg;});
270 if (numAddDep>0 || !pdfCanDir || !resCanDir) {
274 if (numAddDep>0) reason +=
"Resolution model has more observables than the convolution variable. " ;
275 if (!pdfCanDir) reason +=
"PDF does not support internal generation of convolution observable. " ;
276 if (!resCanDir) reason +=
"Resolution model does not support internal generation of convolution observable. " ;
278 coutI(Generation) <<
"RooAbsAnaConvPdf::genContext(" <<
GetName() <<
") Using regular accept/reject generator for convolution p.d.f because: " << reason.c_str() << endl ;
279 return new RooGenContext(*
this,vars,prototype,auxProto,verbose) ;
283 if (context)
return context;
316 if (!conv)
return 0 ;
334 auto conv =
static_cast<RooAbsPdf*
>(convArg);
339 cxcoutD(Eval) <<
"RooAbsAnaConvPdf::evaluate(" <<
GetName() <<
") val += coef*conv [" << index-1 <<
"/"
341 result += conv->getVal(0)*coef ;
369 if (allVars.
getSize()==0)
return 0 ;
396 intCoefSet->
add(*arg) ;
398 intConvSet->
add(*arg) ;
419 normCoefSet->
add(*arg) ;
421 normConvSet->
add(*arg) ;
429 if (intCoefSet->
getSize()==0) {
430 delete intCoefSet ; intCoefSet=0 ;
432 if (intConvSet->
getSize()==0) {
433 delete intConvSet ; intConvSet=0 ;
435 if (normCoefSet->
getSize()==0) {
436 delete normCoefSet ; normCoefSet=0 ;
438 if (normConvSet->
getSize()==0) {
439 delete normConvSet ; normConvSet=0 ;
445 Int_t masterCode(0) ;
446 std::vector<Int_t> tmp(1, 0) ;
448 masterCode =
_codeReg.
store(tmp, intCoefSet, intConvSet, normCoefSet, normConvSet) + 1 ;
450 analVars.
add(*allDeps) ;
452 if (normSet)
delete normSet ;
453 if (normSetAll)
delete normSetAll ;
497 if (code==0)
return getVal(normSet) ;
500 RooArgSet *intCoefSet, *intConvSet, *normCoefSet, *normConvSet ;
506 if (normCoefSet==0&&normConvSet==0) {
516 integral += coef* conv->getNormObj(0,intConvSet,_rangeName)->getVal();
517 cxcoutD(Eval) <<
"RooAbsAnaConv::aiWN(" <<
GetName() <<
") [" << index-1 <<
"] integral += " << conv->getNorm(intConvSet) << endl ;
535 Double_t term = conv->getNormObj(0,intConvSet,_rangeName)->getVal();
536 integral += coefInt*term ;
542 Double_t term = conv->getNormObj(0,normConvSet)->getVal();
543 norm += coefNorm*term ;
548 answer = integral/norm ;
577 coutE(InputArguments) <<
"RooAbsAnaConvPdf::coefAnalyticalIntegral(" <<
GetName() <<
") ERROR: unrecognized integration code: " << code << endl ;
653 std::vector<RooAbsArg*> tmp;
654 for (
auto arg : *cVars) {
656 if (convSetArg->dependsOn(*arg)) {
662 cVars->
remove(tmp.begin(), tmp.end(),
true,
true);
680 os <<
indent <<
"--- RooAbsAnaConvPdf ---" << endl;
695 while ((carg=citer.
next())) {
697 trackNodes.
add(*carg) ;
static void indent(ostringstream &buf, int indent_level)
char * Form(const char *fmt,...)
const std::vector< Int_t > & retrieve(Int_t masterCode) const
Retrieve the array of integer codes associated with the given master code.
Int_t store(const std::vector< Int_t > &codeList, RooArgSet *set1=0, RooArgSet *set2=0, RooArgSet *set3=0, RooArgSet *set4=0)
Store given arrays of integer codes, and up to four RooArgSets in the registry (each setX pointer may...
List of created basis functions.
RooAbsAnaConvPdf is the base class for PDFs that represent a physics model that can be analytically c...
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
This function forces RooRealIntegral to offer all integration dependents to RooAbsAnaConvPdf::getAnal...
Double_t getCoefNorm(Int_t coefIdx, const RooArgSet &nset, const char *rangeName) const
friend class RooConvGenContext
virtual Bool_t changeModel(const RooResolutionModel &newModel)
Change the current resolution model to newModel.
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Advertise capability to perform (analytical) integrals internally.
virtual Int_t getCoefAnalyticalIntegral(Int_t coef, RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=0) const
Default implementation of function advertising integration capabilities.
virtual void printMultiline(std::ostream &stream, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Print info about this object to the specified stream.
RooObjCacheManager _coefNormMgr
void makeCoefVarList(RooArgList &) const
Build complete list of coefficient variables.
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Create a generator context for this p.d.f.
RooAICRegistry _codeReg
Coefficient normalization manager.
virtual ~RooAbsAnaConvPdf()
Destructor.
virtual Double_t evaluate() const
Calculate the current unnormalized value of the PDF.
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components with cache-and-track.
RooAbsRealLValue * convVar()
Retrieve the convolution variable.
virtual Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given code, which is returned by getAnalyticalIntegralWN()
virtual Double_t coefAnalyticalIntegral(Int_t coef, Int_t code, const char *rangeName=0) const
Default implementation of function implementing advertised integrals.
virtual RooArgSet * coefVars(Int_t coefIdx) const
Return set of parameters with are used exclusively by the coefficient functions.
RooAbsAnaConvPdf()
Default constructor, required for persistence.
virtual Double_t coefficient(Int_t basisIndex) const =0
Int_t declareBasis(const char *expression, const RooArgList ¶ms)
Declare a basis function for use in this physics model.
virtual Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Return true if it is safe to generate the convolution observable from the internal generator (this is...
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
Given a set of possible observables, return the observables that this PDF depends on.
Bool_t dependsOn(const RooAbsCollection &serverList, const RooAbsArg *ignoreArg=0, Bool_t valueOnly=kFALSE) const
Test whether we depend on (ie, are served by) any object in the specified collection.
virtual CacheMode canNodeBeCached() const
void setAttribute(const Text_t *name, Bool_t value=kTRUE)
Set (default) or clear a named boolean attribute of this object.
void setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Set the operation mode of this node.
void replaceServer(RooAbsArg &oldServer, RooAbsArg &newServer, Bool_t valueProp, Bool_t shapeProp)
Replace 'oldServer' with 'newServer'.
RooArgSet * getParameters(const RooAbsData *data, bool stripDisconnected=true) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
OperMode operMode() const
Query the operation mode of this node.
RooAbsCollection * snapshot(Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in the collection.
RooFIter fwdIterator() const
One-time forward iterator.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
const_iterator end() const
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add an argument and transfer the ownership to the collection.
const_iterator begin() const
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator * createIterator(Bool_t dir=kIterForward) const
TIterator-style iteration over contained elements.
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
virtual Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const
Load generatedVars with the subset of directVars that we can generate events for, and return a code t...
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Print multi line detailed information of this RooAbsPdf.
virtual Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Check if given observable can be safely generated using the pdfs internal generator mechanism (if tha...
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooAbsReal * createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2=RooCmdArg::none(), const RooCmdArg &arg3=RooCmdArg::none(), const RooCmdArg &arg4=RooCmdArg::none(), const RooCmdArg &arg5=RooCmdArg::none(), const RooCmdArg &arg6=RooCmdArg::none(), const RooCmdArg &arg7=RooCmdArg::none(), const RooCmdArg &arg8=RooCmdArg::none()) const
Create an object that represents the integral of the function over one or more observables listed in ...
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
RooArgList is a container object that can hold multiple RooAbsArg objects.
RooAbsArg * at(Int_t idx) const
Return object at given index, or nullptr if index is out of range.
RooAbsArg * absArg() const
RooArgSet is a container object that can hold multiple RooAbsArg objects.
T * getObj(const RooArgSet *nset, Int_t *sterileIndex=0, const TNamed *isetRangeName=0)
Int_t setObj(const RooArgSet *nset, T *obj, const TNamed *isetRangeName=0)
RooConvCoefVar is an auxilary class that represents the coefficient of a RooAbsAnaConvPdf implementat...
RooDataSet is a container class to hold unbinned data.
A one-time forward iterator working on RooLinkedList or RooAbsCollection.
RooAbsArg * next()
Return next element or nullptr if at end.
Class RooGenContext implement a universal generator context for all RooAbsPdf classes that do not hav...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE) override
Reimplementation of standard RooArgList::addOwned()
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE) override
Reimplementation of standard RooArgList::add()
virtual void removeAll() override
Reimplementation of standard RooArgList::removeAll()
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE) override
Reimplementation of standard RooArgList::remove()
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
static const TNamed * ptr(const char *stringPtr)
Return a unique TNamed pointer for given C++ string.
RooRealVar represents a variable that can be changed from the outside.
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
virtual RooResolutionModel * convolution(RooFormulaVar *basis, RooAbsArg *owner) const
Instantiate a clone of this resolution model representing a convolution with given basis function.
virtual RooAbsGenContext * modelGenContext(const RooAbsAnaConvPdf &, const RooArgSet &, const RooDataSet *, const RooArgSet *, Bool_t) const
virtual void printMultiline(std::ostream &os, Int_t content, Bool_t verbose=kFALSE, TString indent="") const
Print info about this object to the specified stream.
RooAbsRealLValue & convVar() const
Return the convolution variable of the resolution model.
bool setArg(T &newRef)
Change object held in proxy into newRef.
const T & arg() const
Return reference to object held in proxy.
RooTruthModel is an implementation of RooResolution model that provides a delta-function resolution m...
Iterator abstract base class.
virtual TObject * Next()=0
The TNamed class is the base class for all named ROOT classes.
virtual const char * GetName() const
Returns name of object.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
TString & Append(const char *cs)