Loading [MathJax]/extensions/tex2jax.js
ROOT  6.06/09
Reference Guide
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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 ;
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 ; //!
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 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...
void initializeFromCmdArgList(const RooArgSet &fullPdfSet, const RooLinkedList &l)
Initialize RooProdPdf configuration from given list of RooCmdArg configuration arguments and set of '...
Definition: RooProdPdf.cxx:416
Bool_t _useDefaultGen
Definition: RooProdPdf.h:172
TVector3 cross(const TVector3 &v1, const TVector3 &v2)
Definition: CsgOps.cxx:816
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...
void setDefNormSet(const RooArgSet &nset)
Definition: RooProdPdf.h:89
RooArgSet _defNormSet
Definition: RooProdPdf.h:177
virtual ~CacheElem()
Destructor.
virtual Double_t expectedEvents(const RooArgSet &nset) const
Definition: RooProdPdf.h:67
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
virtual ~RooProdPdf()
Destructor.
Definition: RooProdPdf.cxx:483
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.
virtual void generateEvent(Int_t code)
Generate a single event with configuration specified by 'code' Defer internal generation to component...
void setSelfNormalized(Bool_t flag)
Definition: RooProdPdf.h:88
RooAbsReal * specializeRatio(RooFormulaVar &input, const char *targetRangeName) const
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.
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given scenario code.
RooAbsReal * makeCondPdfRatioCorr(RooAbsReal &term, const RooArgSet &termNset, const RooArgSet &termImpSet, const char *normRange, const char *refRange) const
For single normalization ranges.
RooArgSet * _curNormSet
Registry of composite direct generator codes.
Definition: RooProdPdf.h:165
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 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...
#define ClassDef(name, id)
Definition: Rtypes.h:254
virtual void removeAll()
Remove all arguments from our set, deleting them if we own them.
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:592
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
Double_t evaluate() const
Calculate current value of object.
Definition: RooProdPdf.cxx:505
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
Bool_t isBinnedDistribution(const RooArgSet &obs) const
If all components that depend on obs are binned that so is the product.
RooArgList _ownedList
Definition: RooProdPdf.h:138
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.
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooProdPdf to more intuitively reflect the contents of the prod...
RooLinkedList * pRooLinkedList
Definition: RooProdPdf.h:29
TNamed * _refRangeName
Definition: RooProdPdf.h:174
virtual ExtendMode extendMode() const
If this product contains exactly one extendable p.d.f return the extension abilities of that p...
RooAbsReal * _rearrangedDen
Definition: RooProdPdf.h:142
void rearrangeProduct(CacheElem &) const
virtual CacheMode canNodeBeCached() const
Definition: RooProdPdf.h:126
RooObjCacheManager _cacheMgr
Definition: RooProdPdf.h:149
bool verbose
RooProdPdf()
Default constructor.
Definition: RooProdPdf.cxx:104
TLine * l
Definition: textangle.C:4
RooArgSet * findPdfNSet(RooAbsPdf &pdf) const
Look up user specified normalization set for given input PDF component.
virtual RooArgList containedArgs(Action)
Return RooAbsArg components contained in the cache.
RooLinkedList _normList
Definition: RooProdPdf.h:139
virtual Bool_t forceAnalyticalInt(const RooAbsArg &dep) const
Force RooRealIntegral to offer all observables for internal integration.
RooListProxy _pdfList
Definition: RooProdPdf.h:167
void useDefaultGen(Bool_t flag=kTRUE)
Definition: RooProdPdf.h:171
const char * normRange() const
Definition: RooAbsPdf.h:243
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)
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() ...
virtual TObject * clone(const char *newname) const
Definition: RooProdPdf.h:53
RooArgSet * getConnectedParameters(const RooArgSet &observables) const
Return all parameter constraint p.d.f.s on parameters listed in constrainedParams The observables set...
#define name(a, b)
Definition: linkTestLib0.cpp:5
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:777
virtual void getParametersHook(const RooArgSet *, RooArgSet *, Bool_t stripDisconnected) const
virtual Double_t getValV(const RooArgSet *set=0) const
Overload getVal() to intercept normalization set for use in evaluate()
Definition: RooProdPdf.cxx:494
Mother of all ROOT objects.
Definition: TObject.h:58
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.
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...
RooAbsPdf is the abstract interface for all probability density functions The class provides hybrid a...
Definition: RooAbsPdf.h:41
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...
virtual Bool_t checkObservables(const RooArgSet *nset) const
Obsolete.
virtual Bool_t selfNormalized() const
Definition: RooProdPdf.h:63
Double_t calculate(const RooProdPdf::CacheElem &cache, Bool_t verbose=kFALSE) const
Calculate running product of pdfs terms, using the supplied normalization set in 'normSetList' for ea...
Definition: RooProdPdf.cxx:554
Double_t _cutOff
Definition: RooProdPdf.h:166
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 RooAbsArg * addClone(const RooAbsArg &var, Bool_t silent=kFALSE)
Add clone of specified element to an owning set.
Definition: RooArgSet.cxx:475
RooLinkedList _pdfNSetList
Definition: RooProdPdf.h:168
RooAbsReal * specializeIntegral(RooAbsReal &orig, const char *targetRangeName) const
virtual void setCacheAndTrackHints(RooArgSet &)
Label OK'ed components of a RooProdPdf with cache-and-track, and label all RooProdPdf descendants wit...
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
const RooArgList & pdfList() const
Definition: RooProdPdf.h:69
const Bool_t kTRUE
Definition: Rtypes.h:91
virtual void initGenerator(Int_t code)
Forward one-time initialization call to component generation initialization methods.