93 _refCoefNorm(
"!refCoefNorm",
"Reference coefficient normalization set",this,
kFALSE,
kFALSE),
114 _refCoefNorm(
"!refCoefNorm",
"Reference coefficient normalization set",this,
kFALSE,
kFALSE),
115 _refCoefRangeName(0),
117 _projCacheMgr(this,10),
119 _pdfList(
"!pdfs",
"List of PDFs",this),
120 _coefList(
"!coefficients",
"List of coefficients",this),
142 _refCoefNorm(
"!refCoefNorm",
"Reference coefficient normalization set",this,
kFALSE,
kFALSE),
143 _refCoefRangeName(0),
145 _projCacheMgr(this,10),
147 _pdfList(
"!pdfs",
"List of PDFs",this),
148 _coefList(
"!coefficients",
"List of coefficients",this),
180 _refCoefNorm(
"!refCoefNorm",
"Reference coefficient normalization set",this,
kFALSE,
kFALSE),
181 _refCoefRangeName(0),
183 _projCacheMgr(this,10),
185 _pdfList(
"!pdfs",
"List of PDFs",this),
186 _coefList(
"!coefficients",
"List of coefficients",this),
193 <<
") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
197 if (recursiveFractions && inPdfList.
getSize()!=inCoefList.
getSize()+1) {
199 <<
") WARNING inconsistent input: recursive fractions options can only be used if Npdf=Ncoef+1, ignoring recursive fraction setting" << endl ;
220 <<
") number of pdfs and coefficients inconsistent, must have Npdf=Ncoef or Npdf=Ncoef+1" << endl ;
234 if (recursiveFractions) {
235 partinCoefList.
add(*coef) ;
265 if (recursiveFractions) {
301 _refCoefNorm(
"!refCoefNorm",
"Reference coefficient normalization set",this,
kFALSE,
kFALSE),
302 _refCoefRangeName(0),
304 _projCacheMgr(this,10),
305 _pdfList(
"!pdfs",
"List of PDFs",this),
306 _coefList(
"!coefficients",
"List of coefficients",this),
308 _allExtendable(
kTRUE),
345 _refCoefNorm(
"!refCoefNorm",this,other._refCoefNorm),
346 _refCoefRangeName((
TNamed*)other._refCoefRangeName),
347 _projectCoefs(other._projectCoefs),
348 _projCacheMgr(other._projCacheMgr,this),
349 _codeReg(other._codeReg),
350 _pdfList(
"!pdfs",this,other._pdfList),
351 _coefList(
"!coefficients",this,other._coefList),
352 _haveLastCoef(other._haveLastCoef),
353 _allExtendable(other._allExtendable),
354 _recursive(other._recursive)
391 if (refCoefNorm.
getSize()==0) {
480 name.Append(
"_SupNorm") ;
484 cxcoutD(
Caching) <<
"RooAddPdf " <<
GetName() <<
" making supplemental normalization set " << supNSet <<
" for pdf component " << pdf->
GetName() << endl ;
487 snorm =
new RooRealVar(
name,
"Unit Supplemental normalization integral",1.0) ;
495 cxcoutD(
Caching) <<
"RooAddPdf::syncSuppNormList(" <<
GetName() <<
") synching supplemental normalization list for norm" << (nset?*nset:
RooArgSet()) << endl ;
535 cxcoutD(
Caching) <<
"ALEX: RooAddPdf::syncCoefProjList(" <<
GetName() <<
") projecting coefficients from "
536 << *nset2 << (rangeName?
":":
"") << (rangeName?rangeName:
"")
555 name.Append(
"_ProjectNorm") ;
556 pdfProj =
new RooRealVar(
name,
"Unit Projection normalization integral",1.0) ;
573 name.Append(
"_ProjSupNorm") ;
578 snorm =
new RooRealVar(
name,
"Unit Projection Supplemental normalization integral",1.0) ;
624 theName.Append(
"_") ;
625 theName.Append(thePdf->
GetName()) ;
626 theName.Append(
"_RangeNorm1") ;
627 rangeProj1 =
new RooRealVar(theName,
"Unit range normalization integral",1.0) ;
636 cxcoutD(
Caching) <<
"RooAddPdf::syncCoefProjList(" <<
GetName() <<
") rangename = " << (rangeName?rangeName:
"<null>")
637 <<
" nset = " << (nset?*nset:
RooArgSet()) << endl ;
652 theName.Append(
"_") ;
653 theName.Append(thePdf->
GetName()) ;
654 theName.Append(
"_RangeNorm2") ;
655 rangeProj2 =
new RooRealVar(theName,
"Unit range normalization integral",1.0) ;
699 coutW(
Eval) <<
"RooAddPdf::updateCoefCache(" <<
GetName() <<
") WARNING: total number of expected events is 0" << endl ;
702 for (i=0 ; i<siz ; i++) {
720 coutW(
Eval) <<
"RooAddPdf::updateCoefCache(" <<
GetName() <<
") WARNING: sum of coefficients is zero 0" << endl ;
723 for (i=0 ; i<siz ; i++) {
746 <<
" WARNING: sum of PDF coefficients not in range [0-1], value="
749 coutW(
Eval) <<
" (no more will be printed)" ;
803 <<
" ( _coefCache[i]/coefSum = " <<
_coefCache[i]*coefSum <<
"/" << coefSum <<
" ) "<< endl ;
820 if (nset==0 || nset->
getSize()==0) {
892 <<
" and PDF " << pdf->
GetName() <<
" have one or more dependents in common" << endl ;
912 const RooArgSet* normSet,
const char* rangeName)
const
942 if (allAnalVars.
getSize()==0) {
957 if (subCode[
n]==0 && allAnalVars2->
getSize()>0) {
959 <<
" advertises inconsistent set of integrals (e.g. (X,Y) but not X or Y individually."
960 <<
" Distributed analytical integration disabled. Please fix PDF" << endl ;
963 delete allAnalVars2 ;
972 analVars.
add(allAnalVars) ;
998 if (subCode.empty()) {
999 coutE(
InputArguments) <<
"RooAddPdf::analyticalIntegral(" <<
GetName() <<
"): ERROR unrecognized integration code, " << code << endl ;
1103 expectedTotal += ncomp ;
1109 return expectedTotal ;
1185 list<Double_t>* sumHint = 0 ;
1205 list<Double_t>* newSumHint =
new list<Double_t>(sumHint->size()+pdfHint->size()) ;
1208 merge(pdfHint->begin(),pdfHint->end(),sumHint->begin(),sumHint->end(),newSumHint->begin()) ;
1212 sumHint = newSumHint ;
1219 list<Double_t>::iterator new_end = unique(sumHint->begin(),sumHint->end()) ;
1220 sumHint->erase(new_end,sumHint->end()) ;
1232 list<Double_t>* sumBinB = 0 ;
1251 list<Double_t>* newSumBinB =
new list<Double_t>(sumBinB->size()+pdfBinB->size()) ;
1254 merge(pdfBinB->begin(),pdfBinB->end(),sumBinB->begin(),sumBinB->end(),newSumBinB->begin()) ;
1259 sumBinB = newSumBinB ;
1267 list<Double_t>::iterator new_end = unique(sumBinB->begin(),sumBinB->end()) ;
1268 sumBinB->erase(new_end,sumBinB->end()) ;
1299 while ((aarg=aiter.
next())) {
1301 trackNodes.
add(*aarg) ;
1333 os <<
" + [%] * " << pdf->
GetName() ;
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...
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
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 setOperMode(OperMode mode, Bool_t recurseADirty=kTRUE)
Change cache operation mode to given mode.
Bool_t addOwnedComponents(const RooArgSet &comps)
Take ownership of the contents of 'comps'.
OperMode operMode() const
Bool_t observableOverlaps(const RooAbsData *dset, const RooAbsArg &testArg) const
Test if any of the dependents of the arg tree (as determined by getObservables) overlaps with those o...
virtual Bool_t addOwned(RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
RooFIter fwdIterator() const
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Add the specified argument to list.
virtual void Print(Option_t *options=0) const
This method must be overridden when a class wants to print itself.
Bool_t equals(const RooAbsCollection &otherColl) const
Check if this and other collection have identically named contents.
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
RooAbsArg * find(const char *name) const
Find object with given name in list.
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
virtual void resetErrorCounters(Int_t resetValue=10)
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
TString _normRange
MC generator configuration specific for this object.
Bool_t canBeExtended() const
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Analytical integral with normalization (see RooAbsReal::analyticalIntegralWN() for further informatio...
friend class RooRealIntegral
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return expected number of events from this p.d.f for use in extended likelihood calculations.
RooArgSet * _normSet
Normalization integral (owned by _normMgr)
static Int_t _verboseEval
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
virtual Double_t getMax(const char *name=0) const
virtual Double_t getMin(const char *name=0) const
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=0) const
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
Bool_t isSelectedComp() const
If true, the current pdf is a selected component (for use in plotting)
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
static void globalSelectComp(Bool_t flag)
Global switch controlling the activation of the selectComp() functionality.
Double_t getVal(const RooArgSet *set=0) const
Evaluate object. Returns either cached value or triggers a recalculation.
static Bool_t _globalSelectComp
Component selection flag for RooAbsPdf::plotCompOn.
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 ...
virtual Bool_t isBinnedDistribution(const RooArgSet &) const
Transiet cache with transformed values of coefficients.
virtual RooArgList containedArgs(Action)
List all RooAbsArg derived contents in this cache element.
RooArgList _rangeProjList
RooArgList _refRangeProjList
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
virtual void resetErrorCounters(Int_t resetValue=10)
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
friend class RooAddGenContext
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components of a RooAddPdf with cache-and-track.
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return the number of expected events, which is either the sum of all coefficients or the sum of the c...
Bool_t isBinnedDistribution(const RooArgSet &obs) const
If all components that depend on obs are binned that so is the product.
virtual void selectNormalizationRange(const char *rangeName=0, Bool_t force=kFALSE)
Interface function used by test statistics to freeze choice of range for interpretation of fraction c...
Double_t evaluate() const
Calculate and return the current value.
void updateCoefficients(CacheElem &cache, const RooArgSet *nset) const
Update the coefficient values in the given cache element: calculate new remainder fraction,...
virtual ~RooAddPdf()
Destructor.
CacheElem * getProjCache(const RooArgSet *nset, const RooArgSet *iset=0, const char *rangeName=0) const
Retrieve cache element with for calculation of p.d.f value with normalization set nset and integrated...
TIterator * _pdfIter
List of supplemental normalization factors.
TIterator * _coefIter
Iterator over PDF list.
RooObjCacheManager _projCacheMgr
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooAddPdf to more intuitively reflect the contents of the produ...
RooAddPdf()
Default constructor used for persistence.
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &obs, Double_t xlo, Double_t xhi) const
Loop over components for plot sampling hints and merge them if there are multiple.
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Loop over components for plot sampling hints and merge them if there are multiple.
void fixCoefNormalization(const RooArgSet &refCoefNorm)
By default the interpretation of the fraction coefficients is performed in the contextual choice of o...
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Return specialized context to efficiently generate toy events from RooAddPdfs return RooAbsPdf::genCo...
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given scenario code.
virtual void selectNormalization(const RooArgSet *depSet=0, Bool_t force=kFALSE)
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
void fixCoefRange(const char *rangeName)
By default the interpretation of the fraction coefficients is performed in the default range.
RooListProxy _pdfList
Registry of component analytical integration codes.
TNamed * _refCoefRangeName
const RooArgList & pdfList() const
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const
Determine which part (if any) of given integral can be performed analytically.
Bool_t _haveLastCoef
Iterator over coefficient list.
virtual Bool_t checkObservables(const RooArgSet *nset) const
Check if PDF is valid for given normalization set.
RooAbsArg * at(Int_t idx) 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)
RooDataSet is a container class to hold unbinned data.
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Reimplementation of standard RooArgList::add()
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.
static RooConstVar & value(Double_t value)
Return a constant value object with given value.
RooRealVar represents a fundamental (non-derived) real valued object.
Class RooRecursiveFraction is a RooAbsReal implementation that calculates the plain fraction of sum o...
virtual Bool_t add(const RooAbsArg &var, Bool_t silent=kFALSE)
Overloaded RooArgSet::add() method inserts 'var' into set and registers 'var' as server to owner with...
virtual void removeAll()
Remove all argument inset using remove(const RooAbsArg&).
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.
RooConstVar & RooConst(Double_t val)
static constexpr double pi