28 typedef RooArgList* pRooArgList ;
29 typedef RooLinkedList* pRooLinkedList ;
31 class RooProdPdf :
public RooAbsPdf {
34 RooProdPdf(
const char *name,
const char *title, Double_t cutOff=0);
35 RooProdPdf(
const char *name,
const char *title,
36 RooAbsPdf& pdf1, RooAbsPdf& pdf2, Double_t cutOff=0) ;
37 RooProdPdf(
const char* name,
const char* title,
const RooArgList& pdfList, Double_t cutOff=0) ;
38 RooProdPdf(
const char* name,
const char* title,
const RooArgSet& fullPdfSet,
const RooLinkedList& cmdArgList) ;
40 RooProdPdf(
const char* name,
const char* title,
const RooArgSet& fullPdfSet,
41 const RooCmdArg& arg1 ,
const RooCmdArg& arg2=RooCmdArg(),
42 const RooCmdArg& arg3=RooCmdArg(),
const RooCmdArg& arg4=RooCmdArg(),
43 const RooCmdArg& arg5=RooCmdArg(),
const RooCmdArg& arg6=RooCmdArg(),
44 const RooCmdArg& arg7=RooCmdArg(),
const RooCmdArg& arg8=RooCmdArg()) ;
46 RooProdPdf(
const char* name,
const char* title,
47 const RooCmdArg& arg1,
const RooCmdArg& arg2=RooCmdArg(),
48 const RooCmdArg& arg3=RooCmdArg(),
const RooCmdArg& arg4=RooCmdArg(),
49 const RooCmdArg& arg5=RooCmdArg(),
const RooCmdArg& arg6=RooCmdArg(),
50 const RooCmdArg& arg7=RooCmdArg(),
const RooCmdArg& arg8=RooCmdArg()) ;
52 RooProdPdf(
const RooProdPdf& other,
const char* name=0) ;
53 virtual TObject* clone(
const char* newname)
const {
return new RooProdPdf(*
this,newname) ; }
54 virtual ~RooProdPdf() ;
56 virtual Double_t getValV(
const RooArgSet* set=0)
const ;
57 virtual Bool_t checkObservables(
const RooArgSet* nset)
const ;
59 virtual Bool_t forceAnalyticalInt(
const RooAbsArg& dep)
const ;
60 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
61 Double_t analyticalIntegralWN(Int_t code,
const RooArgSet* normSet,
const char* rangeName=0)
const ;
62 virtual Bool_t selfNormalized()
const {
return _selfNorm ; }
64 virtual ExtendMode extendMode()
const ;
65 virtual Double_t expectedEvents(
const RooArgSet* nset)
const ;
66 virtual Double_t expectedEvents(
const RooArgSet& nset)
const {
return expectedEvents(&nset) ; }
68 const RooArgList& pdfList()
const {
return _pdfList ; }
70 virtual Int_t getGenerator(
const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE)
const;
71 virtual void initGenerator(Int_t code) ;
72 virtual void generateEvent(Int_t code);
73 virtual Bool_t isDirectGenSafe(
const RooAbsArg& arg)
const ;
76 virtual RooArgSet* getConstraints(
const RooArgSet& observables, RooArgSet& constrainedParams, Bool_t stripDisconnected)
const ;
78 virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi)
const ;
79 virtual std::list<Double_t>* binBoundaries(RooAbsRealLValue& , Double_t , Double_t )
const ;
80 Bool_t isBinnedDistribution(
const RooArgSet& obs)
const ;
82 void printMetaArgs(std::ostream& os)
const ;
84 virtual void selectNormalizationRange(
const char* rangeName=0, Bool_t force=kFALSE) ;
85 void fixRefRange(
const char* rangeName) ;
87 void setSelfNormalized(Bool_t flag) { _selfNorm = flag ; }
88 void setDefNormSet(
const RooArgSet& nset) { _defNormSet.removeAll() ; _defNormSet.addClone(nset) ; }
91 Bool_t redirectServersHook(
const RooAbsCollection& , Bool_t , Bool_t , Bool_t ) ;
93 RooArgSet* getConnectedParameters(
const RooArgSet& observables)
const ;
95 RooArgSet* findPdfNSet(RooAbsPdf& pdf)
const ;
100 Double_t evaluate()
const ;
101 virtual RooSpan<double> evaluateBatch(std::size_t begin, std::size_t size)
const;
103 RooAbsReal* makeCondPdfRatioCorr(RooAbsReal& term,
const RooArgSet& termNset,
const RooArgSet& termImpSet,
const char* normRange,
const char* refRange)
const ;
105 virtual void getParametersHook(
const RooArgSet* , RooArgSet* , Bool_t stripDisconnected)
const ;
107 void initializeFromCmdArgList(
const RooArgSet& fullPdfSet,
const RooLinkedList& l) ;
109 void factorizeProduct(
const RooArgSet& normSet,
const RooArgSet& intSet,
110 RooLinkedList& termList, RooLinkedList& normList,
111 RooLinkedList& impDepList, RooLinkedList& crossDepList,
112 RooLinkedList& intList)
const;
113 std::string makeRGPPName(
const char* pfx,
const RooArgSet& term,
const RooArgSet& iset,
const RooArgSet& nset,
const char* isetRangeName)
const ;
114 void groupProductTerms(RooLinkedList& groupedTerms, RooArgSet& outerIntDeps,
115 const RooLinkedList& terms,
const RooLinkedList& norms,
116 const RooLinkedList& imps,
const RooLinkedList& ints,
const RooLinkedList& cross)
const ;
120 Int_t getPartIntList(
const RooArgSet* nset,
const RooArgSet* iset,
const char* isetRangeName=0)
const ;
122 std::vector<RooAbsReal*> processProductTerm(
const RooArgSet* nset,
const RooArgSet* iset,
const char* isetRangeName,
123 const RooArgSet* term,
const RooArgSet& termNSet,
const RooArgSet& termISet,
124 Bool_t& isOwned, Bool_t forceWrap=kFALSE)
const ;
127 virtual CacheMode canNodeBeCached()
const {
return RooAbsArg::NotAdvised ; } ;
128 virtual void setCacheAndTrackHints(RooArgSet&) ;
131 class CacheElem :
public RooAbsCacheElement {
133 CacheElem() : _isRearranged(kFALSE) { }
134 virtual ~CacheElem() =
default;
136 RooArgList _partList ;
137 RooArgList _numList ;
138 RooArgList _denList ;
139 RooArgList _ownedList ;
140 std::vector<std::unique_ptr<RooArgSet>> _normList;
141 Bool_t _isRearranged ;
142 std::unique_ptr<RooAbsReal> _rearrangedNum{};
143 std::unique_ptr<RooAbsReal> _rearrangedDen{};
145 virtual RooArgList containedArgs(Action) ;
146 virtual void printCompactTreeHook(std::ostream&,
const char *, Int_t, Int_t) ;
148 CacheElem(
const CacheElem&) ;
150 mutable RooObjCacheManager _cacheMgr ;
152 void rearrangeProduct(CacheElem&)
const;
153 RooAbsReal* specializeIntegral(RooAbsReal& orig,
const char* targetRangeName)
const ;
154 RooAbsReal* specializeRatio(RooFormulaVar& input,
const char* targetRangeName)
const ;
155 Double_t calculate(
const RooProdPdf::CacheElem& cache, Bool_t verbose=kFALSE)
const ;
158 friend class RooProdGenContext ;
159 virtual RooAbsGenContext* genContext(
const RooArgSet &vars,
const RooDataSet *prototype=0,
160 const RooArgSet *auxProto=0, Bool_t verbose= kFALSE)
const ;
163 mutable RooAICRegistry _genCode ;
165 mutable RooArgSet* _curNormSet =
nullptr;
167 RooListProxy _pdfList ;
168 RooLinkedList _pdfNSetList ;
169 Int_t _extendedIndex ;
171 void useDefaultGen(Bool_t flag=kTRUE) { _useDefaultGen = flag ; }
172 Bool_t _useDefaultGen ;
174 mutable TNamed* _refRangeName ;
177 RooArgSet _defNormSet ;
181 ClassDef(RooProdPdf,4)