Logo ROOT   master
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 Bool_t checkObservables(const RooArgSet* nset) const ;
57 
58  virtual Bool_t forceAnalyticalInt(const RooAbsArg& dep) const ;
59  Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=0) const ;
60  Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
61  virtual Bool_t selfNormalized() const { return _selfNorm ; }
62 
63  virtual ExtendMode extendMode() const ;
64  virtual Double_t expectedEvents(const RooArgSet* nset) const ;
65  virtual Double_t expectedEvents(const RooArgSet& nset) const { return expectedEvents(&nset) ; }
66 
67  const RooArgList& pdfList() const { return _pdfList ; }
68 
69  virtual Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
70  virtual void initGenerator(Int_t code) ;
71  virtual void generateEvent(Int_t code);
72  virtual Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
73 
74  // Constraint management
75  virtual RooArgSet* getConstraints(const RooArgSet& observables, RooArgSet& constrainedParams, Bool_t stripDisconnected) const ;
76 
77  virtual std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const ;
78  virtual std::list<Double_t>* binBoundaries(RooAbsRealLValue& /*obs*/, Double_t /*xlo*/, Double_t /*xhi*/) const ;
79  Bool_t isBinnedDistribution(const RooArgSet& obs) const ;
80 
81  void printMetaArgs(std::ostream& os) const ;
82 
83  virtual void selectNormalizationRange(const char* rangeName=0, Bool_t force=kFALSE) ;
84  void fixRefRange(const char* rangeName) ;
85 
86  void setSelfNormalized(Bool_t flag) { _selfNorm = flag ; }
88 
89 
90  Bool_t redirectServersHook(const RooAbsCollection& /*newServerList*/, Bool_t /*mustReplaceAll*/, Bool_t /*nameChange*/, Bool_t /*isRecursive*/) ;
91 
92  RooArgSet* getConnectedParameters(const RooArgSet& observables) const ;
93 
94  RooArgSet* findPdfNSet(RooAbsPdf& pdf) const ;
95 
96 
97 private:
98 
99  Double_t evaluate() const ;
100  virtual RooSpan<double> evaluateBatch(std::size_t begin, std::size_t size) const;
101 
102  RooAbsReal* makeCondPdfRatioCorr(RooAbsReal& term, const RooArgSet& termNset, const RooArgSet& termImpSet, const char* normRange, const char* refRange) const ;
103 
104  virtual void getParametersHook(const RooArgSet* /*nset*/, RooArgSet* /*list*/, Bool_t stripDisconnected) const ;
105 
106  void initializeFromCmdArgList(const RooArgSet& fullPdfSet, const RooLinkedList& l) ;
107 
108  void factorizeProduct(const RooArgSet& normSet, const RooArgSet& intSet,
109  RooLinkedList& termList, RooLinkedList& normList,
110  RooLinkedList& impDepList, RooLinkedList& crossDepList,
111  RooLinkedList& intList) const;
112  std::string makeRGPPName(const char* pfx, const RooArgSet& term, const RooArgSet& iset, const RooArgSet& nset, const char* isetRangeName) const ;
113  void groupProductTerms(RooLinkedList& groupedTerms, RooArgSet& outerIntDeps,
114  const RooLinkedList& terms, const RooLinkedList& norms,
115  const RooLinkedList& imps, const RooLinkedList& ints, const RooLinkedList& cross) const ;
116 
117 
118 
119  Int_t getPartIntList(const RooArgSet* nset, const RooArgSet* iset, 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() = default;
134  // Payload
139  std::vector<std::unique_ptr<RooArgSet>> _normList;
141  std::unique_ptr<RooAbsReal> _rearrangedNum{};
142  std::unique_ptr<RooAbsReal> _rearrangedDen{};
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 ;
155 
156 
157  friend class RooProdGenContext ;
158  virtual RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
159  const RooArgSet *auxProto=0, Bool_t verbose= kFALSE) const ;
160 
161 
162  mutable RooAICRegistry _genCode ; //! Registry of composite direct generator codes
163 
164  Double_t _cutOff ; // Cutoff parameter for running product
165  RooListProxy _pdfList ; // List of PDF components
166  RooLinkedList _pdfNSetList ; // List of PDF component normalization sets
167  Int_t _extendedIndex ; // Index of extended PDF (if any)
168 
169  void useDefaultGen(Bool_t flag=kTRUE) { _useDefaultGen = flag ; }
170  Bool_t _useDefaultGen ; // Use default or distributed event generator
171 
172  mutable TNamed* _refRangeName ; // Reference range name for interpretation of conditional products
173 
174  Bool_t _selfNorm ; // Is self-normalized
175  RooArgSet _defNormSet ; // Default normalization set
176 
177 private:
178 
179  ClassDef(RooProdPdf,4) // PDF representing a product of PDFs
180 };
181 
182 
183 #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.
A simple container to hold a batch of data values.
Definition: RooSpan.h:32
std::vector< std::unique_ptr< RooArgSet > > _normList
Definition: RooProdPdf.h:139
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return the expected number of events associated with the extendable input PDF in the product...
virtual Bool_t checkObservables(const RooArgSet *nset) const
Obsolete.
std::unique_ptr< RooAbsReal > _rearrangedNum
Definition: RooProdPdf.h:141
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:371
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:470
Bool_t _useDefaultGen
Definition: RooProdPdf.h:170
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
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:87
virtual void getParametersHook(const RooArgSet *, RooArgSet *, Bool_t stripDisconnected) const
RooArgSet _defNormSet
Definition: RooProdPdf.h:175
RooAbsReal * specializeRatio(RooFormulaVar &input, const char *targetRangeName) const
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.
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:438
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:86
RooAbsReal * specializeIntegral(RooAbsReal &orig, const char *targetRangeName) const
const char * normRange() const
Definition: RooAbsPdf.h:260
#define ClassDef(name, id)
Definition: Rtypes.h:322
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
virtual RooSpan< double > evaluateBatch(std::size_t begin, std::size_t size) const
Evaluate function for a batch of input data points.
Definition: RooProdPdf.cxx:501
Int_t _extendedIndex
Definition: RooProdPdf.h:167
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
std::unique_ptr< RooAbsReal > _rearrangedDen
Definition: RooProdPdf.h:142
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:96
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
Int_t getPartIntList(const RooArgSet *nset, const RooArgSet *iset, 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:735
virtual Double_t expectedEvents(const RooArgSet &nset) const
Definition: RooProdPdf.h:65
TNamed * _refRangeName
Definition: RooProdPdf.h:172
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.
const RooArgList & pdfList() const
Definition: RooProdPdf.h:67
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:78
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:550
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
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:165
const Bool_t kFALSE
Definition: RtypesCore.h:90
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:169
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:60
RooArgList * pRooArgList
Definition: RooProdPdf.h:28
void fixRefRange(const char *rangeName)
A RooFormulaVar is a generic implementation of a real-valued object, which takes a RooArgList of serv...
Definition: RooFormulaVar.h:29
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, the base class of all PDFs
Definition: RooAbsPdf.h:40
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:449
virtual ~CacheElem()=default
RooProdGenContext is an efficient implementation of the generator context specific for RooProdPdf PDF...
Double_t _cutOff
Registry of composite direct generator codes.
Definition: RooProdPdf.h:164
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.
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:21
RooLinkedList _pdfNSetList
Definition: RooProdPdf.h:166
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:61
RooAICRegistry _genCode
Definition: RooProdPdf.h:162
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:73
Bool_t _selfNorm
Definition: RooProdPdf.h:174
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:89
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:28
virtual void initGenerator(Int_t code)
Forward one-time initialization call to component generation initialization methods.