29 class RooAddPdf :
public RooAbsPdf {
33 RooAddPdf(
const char *name,
const char *title=0);
34 RooAddPdf(
const char *name,
const char *title,
35 RooAbsPdf& pdf1, RooAbsPdf& pdf2, RooAbsReal& coef1) ;
36 RooAddPdf(
const char *name,
const char *title,
const RooArgList& pdfList) ;
37 RooAddPdf(
const char *name,
const char *title,
const RooArgList& pdfList,
const RooArgList& coefList, Bool_t recursiveFraction=kFALSE) ;
39 RooAddPdf(
const RooAddPdf& other,
const char* name=0) ;
40 virtual TObject* clone(
const char* newname)
const {
return new RooAddPdf(*
this,newname) ; }
41 virtual ~RooAddPdf() ;
43 virtual Bool_t checkObservables(
const RooArgSet* nset)
const ;
45 virtual Bool_t forceAnalyticalInt(
const RooAbsArg& )
const {
49 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
50 Double_t analyticalIntegralWN(Int_t code,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
51 virtual Bool_t selfNormalized()
const {
56 virtual ExtendMode extendMode()
const {
58 return ((_haveLastCoef&&!_recursive) || _allExtendable) ? MustBeExtended : CanNotBeExtended;
60 virtual Double_t expectedEvents(
const RooArgSet* nset)
const ;
61 virtual Double_t expectedEvents(
const RooArgSet& nset)
const {
64 return expectedEvents(&nset) ;
67 const RooArgList& pdfList()
const {
71 const RooArgList& coefList()
const {
76 void fixCoefNormalization(
const RooArgSet& refCoefNorm) ;
77 void fixCoefRange(
const char* rangeName) ;
79 const RooArgSet& getCoefNormalization()
const {
return _refCoefNorm ; }
80 const char* getCoefRange()
const {
return _refCoefRangeName?RooNameReg::str(_refCoefRangeName):
"" ; }
82 virtual void resetErrorCounters(Int_t resetValue=10) ;
84 virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi)
const ;
85 virtual std::list<Double_t>* binBoundaries(RooAbsRealLValue& , Double_t , Double_t )
const ;
86 Bool_t isBinnedDistribution(
const RooArgSet& obs)
const ;
88 void printMetaArgs(std::ostream& os)
const ;
90 virtual CacheMode canNodeBeCached()
const {
return RooAbsArg::NotAdvised ; } ;
91 virtual void setCacheAndTrackHints(RooArgSet&) ;
95 virtual void selectNormalization(
const RooArgSet* depSet=0, Bool_t force=kFALSE) ;
96 virtual void selectNormalizationRange(
const char* rangeName=0, Bool_t force=kFALSE) ;
98 mutable RooSetProxy _refCoefNorm ;
99 mutable TNamed* _refCoefRangeName ;
101 Bool_t _projectCoefs ;
102 std::vector<double> _coefCache;
105 class CacheElem :
public RooAbsCacheElement {
107 virtual ~CacheElem() {} ;
109 RooArgList _suppNormList ;
110 Bool_t _needSupNorm ;
112 RooArgList _projList ;
113 RooArgList _suppProjList ;
114 RooArgList _refRangeProjList ;
115 RooArgList _rangeProjList ;
117 virtual RooArgList containedArgs(Action) ;
120 mutable RooObjCacheManager _projCacheMgr ;
121 CacheElem* getProjCache(
const RooArgSet* nset,
const RooArgSet* iset=0,
const char* rangeName=0)
const ;
122 void updateCoefficients(CacheElem& cache,
const RooArgSet* nset)
const ;
125 friend class RooAddGenContext ;
126 virtual RooAbsGenContext* genContext(
const RooArgSet &vars,
const RooDataSet *prototype=0,
127 const RooArgSet* auxProto=0, Bool_t verbose= kFALSE)
const ;
130 Double_t evaluate()
const;
131 virtual RooSpan<double> evaluateBatch(std::size_t begin, std::size_t batchSize)
const;
134 mutable RooAICRegistry _codeReg ;
136 RooListProxy _pdfList ;
137 RooListProxy _coefList ;
138 mutable RooArgList* _snormList{
nullptr};
140 Bool_t _haveLastCoef ;
141 Bool_t _allExtendable ;
144 mutable Int_t _coefErrCount ;
147 std::pair<const RooArgSet*, CacheElem*> getNormAndCache()
const;
149 ClassDef(RooAddPdf,3)