Logo ROOT   6.12/07
Reference Guide
RooProdPdf.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooProdPdf.h,v 1.44 2007/07/16 21:04:28 wouter Exp $
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_PROD_PDF
17 #define ROO_PROD_PDF
18 
19 #include "RooAbsPdf.h"
20 #include "RooListProxy.h"
21 #include "RooLinkedList.h"
22 #include "RooAICRegistry.h"
23 #include "RooCacheManager.h"
24 #include "RooObjCacheManager.h"
25 #include "RooCmdArg.h"
26 #include <vector>
27 
30 
31 class RooProdPdf : public RooAbsPdf {
32 public:
33  RooProdPdf() ;
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) ;
39 
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()) ;
45 
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()) ;
51 
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() ;
55 
56  virtual Double_t getValV(const RooArgSet* set=0) const ;
57  Double_t evaluate() const ;
58  virtual Bool_t checkObservables(const RooArgSet* nset) const ;
59 
60  virtual Bool_t forceAnalyticalInt(const RooAbsArg& dep) const ;
61  Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=0) const ;
62  Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
63  virtual Bool_t selfNormalized() const { return _selfNorm ; }
64 
65  virtual ExtendMode extendMode() const ;
66  virtual Double_t expectedEvents(const RooArgSet* nset) const ;
67  virtual Double_t expectedEvents(const RooArgSet& nset) const { return expectedEvents(&nset) ; }
68 
69  const RooArgList& pdfList() const { return _pdfList ; }
70 
71  virtual Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
72  virtual void initGenerator(Int_t code) ;
73  virtual void generateEvent(Int_t code);
74  virtual Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
75 
76  // Constraint management
77  virtual RooArgSet* getConstraints(const RooArgSet& observables, RooArgSet& constrainedParams, Bool_t stripDisconnected) const ;
78 
79  virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const ;
80  virtual std::list<Double_t>* binBoundaries(RooAbsRealLValue& /*obs*/, Double_t /*xlo*/, Double_t /*xhi*/) const ;
81  Bool_t isBinnedDistribution(const RooArgSet& obs) const ;
82 
83  void printMetaArgs(std::ostream& os) const ;
84 
85  virtual void selectNormalizationRange(const char* rangeName=0, Bool_t force=kFALSE) ;
86  void fixRefRange(const char* rangeName) ;
87 
88  void setSelfNormalized(Bool_t flag) { _selfNorm = flag ; }
90 
91 
92  Bool_t redirectServersHook(const RooAbsCollection& /*newServerList*/, Bool_t /*mustReplaceAll*/, Bool_t /*nameChange*/, Bool_t /*isRecursive*/) ;
93 
94  RooArgSet* getConnectedParameters(const RooArgSet& observables) const ;
95 
96  RooArgSet* findPdfNSet(RooAbsPdf& pdf) const ;
97 
98 protected:
99 
100 
101  RooAbsReal* makeCondPdfRatioCorr(RooAbsReal& term, const RooArgSet& termNset, const RooArgSet& termImpSet, const char* normRange, const char* refRange) const ;
102 
103  virtual void getParametersHook(const RooArgSet* /*nset*/, RooArgSet* /*list*/, Bool_t stripDisconnected) const ;
104 
105  void initializeFromCmdArgList(const RooArgSet& fullPdfSet, const RooLinkedList& l) ;
106 
107  void factorizeProduct(const RooArgSet& normSet, const RooArgSet& intSet,
108  RooLinkedList& termList, RooLinkedList& normList,
109  RooLinkedList& impDepList, RooLinkedList& crossDepList,
110  RooLinkedList& intList) const;
111  std::string makeRGPPName(const char* pfx, const RooArgSet& term, const RooArgSet& iset, const RooArgSet& nset, const char* isetRangeName) const ;
112  void groupProductTerms(RooLinkedList& groupedTerms, RooArgSet& outerIntDeps,
113  const RooLinkedList& terms, const RooLinkedList& norms,
114  const RooLinkedList& imps, const RooLinkedList& ints, const RooLinkedList& cross) const ;
115 
116 
117 
118  void getPartIntList(const RooArgSet* nset, const RooArgSet* iset, pRooArgList& partList, pRooLinkedList& nsetList,
119  Int_t& code, const char* isetRangeName=0) const ;
120 
121  std::vector<RooAbsReal*> processProductTerm(const RooArgSet* nset, const RooArgSet* iset, const char* isetRangeName,
122  const RooArgSet* term,const RooArgSet& termNSet, const RooArgSet& termISet,
123  Bool_t& isOwned, Bool_t forceWrap=kFALSE) const ;
124 
125 
126  virtual CacheMode canNodeBeCached() const { return RooAbsArg::NotAdvised ; } ;
127  virtual void setCacheAndTrackHints(RooArgSet&) ;
128 
129  // The cache object
130  class CacheElem : public RooAbsCacheElement {
131  public:
133  virtual ~CacheElem() ;
134  // Payload
143  // Cache management functions
144  virtual RooArgList containedArgs(Action) ;
145  virtual void printCompactTreeHook(std::ostream&, const char *, Int_t, Int_t) ;
146  private:
147  CacheElem(const CacheElem&) ;
148  } ;
149  mutable RooObjCacheManager _cacheMgr ; // The cache manager
150 
151  void rearrangeProduct(CacheElem&) const;
152  RooAbsReal* specializeIntegral(RooAbsReal& orig, const char* targetRangeName) const ;
153  RooAbsReal* specializeRatio(RooFormulaVar& input, const char* targetRangeName) const ;
154  Double_t calculate(const RooProdPdf::CacheElem& cache, Bool_t verbose=kFALSE) const ;
155  Double_t calculate(const RooArgList* partIntList, const RooLinkedList* normSetList) const ;
156 
157 
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 ;
161 
162 
163  mutable RooAICRegistry _genCode ; //! Registry of composite direct generator codes
164 
165  mutable RooArgSet* _curNormSet = nullptr; //!
166  Double_t _cutOff ; // Cutoff parameter for running product
167  RooListProxy _pdfList ; // List of PDF components
168  RooLinkedList _pdfNSetList ; // List of PDF component normalization sets
169  Int_t _extendedIndex ; // Index of extended PDF (if any)
170 
171  void useDefaultGen(Bool_t flag=kTRUE) { _useDefaultGen = flag ; }
172  Bool_t _useDefaultGen ; // Use default or distributed event generator
173 
174  mutable TNamed* _refRangeName ; // Reference range name for interpretation of conditional products
175 
176  Bool_t _selfNorm ; // Is self-normalized
177  RooArgSet _defNormSet ; // Default normalization set
178 
179 private:
180 
181  ClassDef(RooProdPdf,4) // PDF representing a product of PDFs
182 };
183 
184 
185 #endif
Bool_t redirectServersHook(const RooAbsCollection &, Bool_t, Bool_t, Bool_t)
Implement support for node removal.
virtual std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return the expected number of events associated with the extentable input p.d.f in the product...
virtual Bool_t checkObservables(const RooArgSet *nset) const
Obsolete.
void initializeFromCmdArgList(const RooArgSet &fullPdfSet, const RooLinkedList &l)
Initialize RooProdPdf configuration from given list of RooCmdArg configuration arguments and set of &#39;...
Definition: RooProdPdf.cxx:390
Double_t calculate(const RooProdPdf::CacheElem &cache, Bool_t verbose=kFALSE) const
Calculate running product of pdfs terms, using the supplied normalization set in &#39;normSetList&#39; for ea...
Definition: RooProdPdf.cxx:528
Bool_t _useDefaultGen
Definition: RooProdPdf.h:172
RooProdPdf is an efficient implementation of a product of PDFs of the form.
Definition: RooProdPdf.h:31
void setDefNormSet(const RooArgSet &nset)
Definition: RooProdPdf.h:89
virtual void getParametersHook(const RooArgSet *, RooArgSet *, Bool_t stripDisconnected) const
RooArgSet _defNormSet
Definition: RooProdPdf.h:177
RooAbsReal * specializeRatio(RooFormulaVar &input, const char *targetRangeName) const
virtual ~CacheElem()
Destructor.
void getPartIntList(const RooArgSet *nset, const RooArgSet *iset, pRooArgList &partList, pRooLinkedList &nsetList, Int_t &code, const char *isetRangeName=0) const
Return list of (partial) integrals of product terms for integration of p.d.f over observables iset wh...
Definition: RooProdPdf.cxx:751
RooArgSet * findPdfNSet(RooAbsPdf &pdf) const
Look up user specified normalization set for given input PDF component.
void rearrangeProduct(CacheElem &) const
void groupProductTerms(RooLinkedList &groupedTerms, RooArgSet &outerIntDeps, const RooLinkedList &terms, const RooLinkedList &norms, const RooLinkedList &imps, const RooLinkedList &ints, const RooLinkedList &cross) const
Group product into terms that can be calculated independently.
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Bool_t isBinnedDistribution(const RooArgSet &obs) const
If all components that depend on obs are binned that so is the product.
virtual ~RooProdPdf()
Destructor.
Definition: RooProdPdf.cxx:457
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooProdPdf to more intuitively reflect the contents of the prod...
virtual void generateEvent(Int_t code)
Generate a single event with configuration specified by &#39;code&#39; Defer internal generation to component...
void setSelfNormalized(Bool_t flag)
Definition: RooProdPdf.h:88
RooArgSet * _curNormSet
Registry of composite direct generator codes.
Definition: RooProdPdf.h:165
RooAbsReal * specializeIntegral(RooAbsReal &orig, const char *targetRangeName) const
virtual Double_t getValV(const RooArgSet *set=0) const
Overload getVal() to intercept normalization set for use in evaluate()
Definition: RooProdPdf.cxx:468
const char * normRange() const
Definition: RooAbsPdf.h:243
#define ClassDef(name, id)
Definition: Rtypes.h:320
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
virtual Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Forward determination of safety of internal generator code to component p.d.f that would generate the...
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
RooAbsReal * _rearrangedNum
Definition: RooProdPdf.h:141
Int_t _extendedIndex
Definition: RooProdPdf.h:169
virtual void printCompactTreeHook(std::ostream &, const char *, Int_t, Int_t)
Hook function to print cache contents in tree printing of RooProdPdf.
RooArgList _partList
Definition: RooProdPdf.h:135
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
RooArgList _ownedList
Definition: RooProdPdf.h:138
virtual void addClone(const RooAbsCollection &col, Bool_t silent=kFALSE)
Add a collection of arguments to this collection by calling addOwned() for each element in the source...
Definition: RooArgSet.h:94
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.
RooLinkedList * pRooLinkedList
Definition: RooProdPdf.h:29
virtual Double_t expectedEvents(const RooArgSet &nset) const
Definition: RooProdPdf.h:67
TNamed * _refRangeName
Definition: RooProdPdf.h:174
RooAbsReal * _rearrangedDen
Definition: RooProdPdf.h:142
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
Force RooRealIntegral to offer all observables for internal integration.
virtual RooArgSet * getConstraints(const RooArgSet &observables, RooArgSet &constrainedParams, Bool_t stripDisconnected) const
Return all parameter constraint p.d.f.s on parameters listed in constrainedParams The observables set...
const RooArgList & pdfList() const
Definition: RooProdPdf.h:69
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
RooObjCacheManager _cacheMgr
Definition: RooProdPdf.h:149
RooProdPdf()
Default constructor.
Definition: RooProdPdf.cxx:103
virtual RooArgList containedArgs(Action)
Return RooAbsArg components contained in the cache.
RooAbsReal * makeCondPdfRatioCorr(RooAbsReal &term, const RooArgSet &termNset, const RooArgSet &termImpSet, const char *normRange, const char *refRange) const
For single normalization ranges.
void factorizeProduct(const RooArgSet &normSet, const RooArgSet &intSet, RooLinkedList &termList, RooLinkedList &normList, RooLinkedList &impDepList, RooLinkedList &crossDepList, RooLinkedList &intList) const
Factorize product in irreducible terms for given choice of integration/normalization.
Definition: RooProdPdf.cxx:566
RooLinkedList _normList
Definition: RooProdPdf.h:139
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:29
virtual CacheMode canNodeBeCached() const
Definition: RooProdPdf.h:126
virtual ExtendMode extendMode() const
If this product contains exactly one extendable p.d.f return the extension abilities of that p...
RooListProxy is the concrete proxy for RooArgList objects.
Definition: RooListProxy.h:25
RooListProxy _pdfList
Definition: RooProdPdf.h:167
const Bool_t kFALSE
Definition: RtypesCore.h:88
RooAICRegistry is a utility class for operator p.d.f classes that keeps track of analytical integrati...
RooLinkedList is an collection class for internal use, storing a collection of RooAbsArg pointers in ...
Definition: RooLinkedList.h:35
void useDefaultGen(Bool_t flag=kTRUE)
Definition: RooProdPdf.h:171
double Double_t
Definition: RtypesCore.h:55
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:53
RooArgList * pRooArgList
Definition: RooProdPdf.h:28
void fixRefRange(const char *rangeName)
Class RooObjCacheManager is an implementation of class RooCacheManager<RooAbsCacheElement> and specia...
Mother of all ROOT objects.
Definition: TObject.h:37
RooAbsCollection is an abstract container object that can hold multiple RooAbsArg objects...
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 conditiona...
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
auto * l
Definition: textangle.C:4
std::string makeRGPPName(const char *pfx, const RooArgSet &term, const RooArgSet &iset, const RooArgSet &nset, const char *isetRangeName) const
Make an appropriate automatic name for a RooGenProdProj object in getPartIntList() ...
Double_t evaluate() const
Calculate current value of object.
Definition: RooProdPdf.cxx:479
RooProdGenContext is an efficient implementation of the generator context specific for RooProdPdf PDF...
Double_t _cutOff
Definition: RooProdPdf.h:166
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &obs, Double_t xlo, Double_t xhi) const
Forward the plot sampling hint from the p.d.f. that defines the observable obs.
RooArgSet * getConnectedParameters(const RooArgSet &observables) const
Return all parameter constraint p.d.f.s on parameters listed in constrainedParams The observables set...
RooLinkedList _pdfNSetList
Definition: RooProdPdf.h:168
virtual TObject * clone(const char *newname) const
Definition: RooProdPdf.h:53
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK&#39;ed components of a RooProdPdf with cache-and-track, and label all RooProdPdf descendants wit...
virtual Bool_t selfNormalized() const
Definition: RooProdPdf.h:63
RooAICRegistry _genCode
Definition: RooProdPdf.h:163
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:66
Bool_t _selfNorm
Definition: RooProdPdf.h:176
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given scenario code.
const Bool_t kTRUE
Definition: RtypesCore.h:87
std::vector< RooAbsReal * > processProductTerm(const RooArgSet *nset, const RooArgSet *iset, const char *isetRangeName, const RooArgSet *term, const RooArgSet &termNSet, const RooArgSet &termISet, Bool_t &isOwned, Bool_t forceWrap=kFALSE) const
Calculate integrals of factorized product terms over observables iset while normalized to observables...
char name[80]
Definition: TGX11.cxx:109
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Return generator context optimized for generating events from product p.d.f.s.
virtual Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const
Query internal generation capabilities of component p.d.f.s and aggregate capabilities into master co...
RooCmdArg is a named container for two doubles, two integers two object points and three string point...
Definition: RooCmdArg.h:27
virtual void initGenerator(Int_t code)
Forward one-time initialization call to component generation initialization methods.