103 _convVar(
"!convVar",
"Convolution variable",this,cVar,
kFALSE,
kFALSE),
104 _convSet(
"!convSet",
"Set of resModel X basisFunc convolutions",this),
105 _convNormSet(nullptr),
106 _coefNormMgr(this,10),
119 _model(
"!model",this,other._model),
120 _convVar(
"!convVar",this,other._convVar),
121 _convSet(
"!convSet",this,other._convSet),
123 _convNormSet(other._convNormSet? new
RooArgSet(*other._convNormSet) : new
RooArgSet() ),
124 _coefNormMgr(other._coefNormMgr,this),
125 _codeReg(other._codeReg)
148 for (
auto arg : tmp) {
174 <<
" declare basis functions in a copied RooAbsAnaConvPdf" << endl ;
182 <<
" doesn't support basis function " << expression << endl ;
188 basisArgs.
add(params) ;
190 TString basisName(expression) ;
208 coutE(
InputArguments) <<
"RooAbsAnaConvPdf::declareBasis(" <<
GetName() <<
"): unable to construct convolution with basis function '"
209 << expression <<
"'" << endl ;
231 if (!newConvSet.
add(*newConv)) {
240 std::for_each(newConvSet.
begin(), newConvSet.
end(), [](
RooAbsArg* arg){delete arg;});
283 if (numAddDep>0 || !pdfCanDir || !resCanDir) {
287 if (numAddDep>0) reason +=
"Resolution model has more observables than the convolution variable. " ;
288 if (!pdfCanDir) reason +=
"PDF does not support internal generation of convolution observable. " ;
289 if (!resCanDir) reason +=
"Resolution model does not support internal generation of convolution observable. " ;
291 coutI(
Generation) <<
"RooAbsAnaConvPdf::genContext(" <<
GetName() <<
") Using regular accept/reject generator for convolution p.d.f because: " << reason.c_str() << endl ;
296 if (context)
return context;
329 if (!conv)
return 0 ;
347 auto conv =
static_cast<RooAbsPdf*
>(convArg);
352 cxcoutD(
Eval) <<
"RooAbsAnaConvPdf::evaluate(" <<
GetName() <<
") val += coef*conv [" << index-1 <<
"/"
354 result += conv->getVal(0)*coef ;
382 if (allVars.
getSize()==0)
return 0 ;
409 intCoefSet->
add(*arg) ;
411 intConvSet->
add(*arg) ;
432 normCoefSet->
add(*arg) ;
434 normConvSet->
add(*arg) ;
442 if (intCoefSet->
getSize()==0) {
443 delete intCoefSet ; intCoefSet=0 ;
445 if (intConvSet->
getSize()==0) {
446 delete intConvSet ; intConvSet=0 ;
448 if (normCoefSet->
getSize()==0) {
449 delete normCoefSet ; normCoefSet=0 ;
451 if (normConvSet->
getSize()==0) {
452 delete normConvSet ; normConvSet=0 ;
458 Int_t masterCode(0) ;
459 std::vector<Int_t> tmp(1, 0) ;
461 masterCode =
_codeReg.
store(tmp, intCoefSet, intConvSet, normCoefSet, normConvSet) + 1 ;
463 analVars.
add(*allDeps) ;
465 if (normSet)
delete normSet ;
466 if (normSetAll)
delete normSetAll ;
510 if (code==0)
return getVal(normSet) ;
513 RooArgSet *intCoefSet, *intConvSet, *normCoefSet, *normConvSet ;
519 if (normCoefSet==0&&normConvSet==0) {
529 integral += coef*(_rangeName ? conv->getNormObj(0,intConvSet,_rangeName)->getVal() : conv->getNorm(intConvSet) ) ;
530 cxcoutD(
Eval) <<
"RooAbsAnaConv::aiWN(" <<
GetName() <<
") [" << index-1 <<
"] integral += " << conv->getNorm(intConvSet) << endl ;
548 Double_t term = (_rangeName ? conv->getNormObj(0,intConvSet,_rangeName)->getVal() : conv->getNorm(intConvSet) ) ;
549 integral += coefInt*term ;
555 Double_t term = conv->getNorm(normConvSet) ;
556 norm += coefNorm*term ;
561 answer = integral/norm ;
590 coutE(
InputArguments) <<
"RooAbsAnaConvPdf::coefAnalyticalIntegral(" <<
GetName() <<
") ERROR: unrecognized integration code: " << code << endl ;
666 std::vector<RooAbsArg*> tmp;
667 for (
auto arg : *cVars) {
669 if (convSetArg->dependsOn(*arg)) {
675 cVars->
remove(tmp.begin(), tmp.end(),
true,
true);
693 os <<
indent <<
"--- RooAbsAnaConvPdf ---" << endl;
708 while ((carg=citer.
next())) {
710 trackNodes.
add(*carg) ;
static RooMathCoreReg dummy
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...
Subset of last normalization that applies to convolutions.
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.
const RooRealVar * convVar() const
Return a pointer to the convolution variable instance used in the resolution model.
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.
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.
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.
RooArgSet * _convNormSet
List of created basis functions.
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 (of arbitrary type) an...
RooArgSet * getObservables(const RooArgSet &set, Bool_t valueOnly=kTRUE) const
Return the observables of this pdf given a set of observables.
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
RooArgSet * getParameters(const RooAbsData *data, Bool_t stripDisconnected=kTRUE) const
Create a list of leaf nodes in the arg tree starting with ourself as top node that don't match any of...
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)
Change cache operation mode to given mode.
void replaceServer(RooAbsArg &oldServer, RooAbsArg &newServer, Bool_t valueProp, Bool_t shapeProp)
Replace 'oldServer' with 'newServer'.
OperMode operMode() const
RooFIter fwdIterator() const R__SUGGEST_ALTERNATIVE("begin()
One-time forward iterator.
RooAbsCollection * snapshot(Bool_t deepCopy=kTRUE) const
Take a snap shot of current collection contents: An owning collection is returned containing clones o...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
const_iterator begin() const
TIterator * createIterator(Bool_t dir=kIterForward) const R__SUGGEST_ALTERNATIVE("begin()
TIterator-style iteration over contained elements.
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Remove the specified argument from our list.
TIterator end() and range-based for loops.")
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...
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Double_t getVal(const RooArgSet *normalisationSet=nullptr) const
Evaluate object.
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 ...
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.
Int_t index(const RooAbsArg *arg) const
Returns index of given arg, or -1 if arg is not in list.
RooAbsArg * absArg() const
RooArgSet is a container object that can hold multiple RooAbsArg objects.
virtual Bool_t add(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling add() for each element in the source coll...
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 add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
virtual Bool_t remove(const RooAbsArg &var, Bool_t silent=kFALSE, Bool_t matchByNameOnly=kFALSE)
Reimplementation of standard RooArgList::remove()
virtual void removeAll()
Reimplementation of standard RooArgList::removeAll()
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::addOwned()
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.
const RooAbsReal & arg() const
virtual Bool_t setArg(RooAbsReal &newRef)
Change object held in proxy into newRef.
RooRealVar represents a fundamental (non-derived) real valued object.
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.
RooRealVar & convVar() const
Return the convolution variable of the resolution model.
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)