Logo ROOT  
Reference Guide
RooAddModel.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Project: RooFit *
3 * Package: RooFitCore *
4 * File: $Id: RooAddPdf.h,v 1.46 2007/07/12 20:30: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_ADD_MODEL
17#define ROO_ADD_MODEL
18
19#include "RooResolutionModel.h"
20#include "RooListProxy.h"
21#include "RooSetProxy.h"
22#include "RooAICRegistry.h"
23#include "RooNormSetCache.h"
24#include "RooNameSet.h"
25#include "RooCacheManager.h"
26#include "RooObjCacheManager.h"
27
29public:
30
31 RooAddModel() ;
32 RooAddModel(const char *name, const char *title, const RooArgList& pdfList, const RooArgList& coefList, Bool_t ownPdfList=kFALSE) ;
33 RooAddModel(const RooAddModel& other, const char* name=0) ;
34 virtual TObject* clone(const char* newname) const { return new RooAddModel(*this,newname) ; }
36 virtual ~RooAddModel() ;
37
38 Double_t evaluate() const ;
39 virtual Bool_t checkObservables(const RooArgSet* nset) const ;
40
41 virtual Int_t basisCode(const char* name) const ;
42
43 virtual Bool_t forceAnalyticalInt(const RooAbsArg& /*dep*/) const {
44 // Force RooRealIntegral to offer all observables for internal integration
45 return kTRUE ;
46 }
47 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=0) const ;
48 Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const ;
49 virtual Bool_t selfNormalized() const {
50 // Model is self normalized when used as p.d.f
51 return _basisCode==0 ? kTRUE : kFALSE ;
52 }
53
54 virtual ExtendMode extendMode() const {
55 // Return extended mode capabilities
57 }
58 virtual Double_t expectedEvents(const RooArgSet* nset) const ;
59 virtual Double_t expectedEvents(const RooArgSet& nset) const {
60 // Return expected number of events for extended likelihood calculation
61 // which is the sum of all coefficients
62 return expectedEvents(&nset) ;
63 }
64
65 const RooArgList& pdfList() const {
66 // Return list of component p.d.fs
67 return _pdfList ;
68 }
69 const RooArgList& coefList() const {
70 // Return list of coefficients of component p.d.f.s
71 return _coefList ;
72 }
73
74 Bool_t isDirectGenSafe(const RooAbsArg& arg) const ;
75
76 Int_t getGenerator(const RooArgSet& directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const;
77 void generateEvent(Int_t code);
78
79
80 void fixCoefNormalization(const RooArgSet& refCoefNorm) ;
81 void fixCoefRange(const char* rangeName) ;
82 virtual void resetErrorCounters(Int_t resetValue=10) ;
83
84 void printMetaArgs(std::ostream& os) const ;
85
86protected:
87
88 friend class RooAddGenContext ;
89 virtual RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
90 const RooArgSet* auxProto=0, Bool_t verbose= kFALSE) const ;
91
92 virtual void selectNormalization(const RooArgSet* depSet=0, Bool_t force=kFALSE) ;
93 virtual void selectNormalizationRange(const char* rangeName=0, Bool_t force=kFALSE) ;
94
95 mutable RooSetProxy _refCoefNorm ; //! Reference observable set for coefficient interpretation
96 mutable TNamed* _refCoefRangeName ; //! Reference range name for coefficient interpreation
97
98 Bool_t _projectCoefs ; // If true coefficients need to be projected for use in evaluate()
99 mutable Double_t* _coefCache ; //! Transiet cache with transformed values of coefficients
100
101
103 public:
104 virtual ~CacheElem() {} ;
105
106 RooArgList _suppNormList ; // Supplemental normalization list
107
108 RooArgList _projList ; // Projection integrals to be multiplied with coefficients
109 RooArgList _suppProjList ; // Projection integrals to be multiplied with coefficients for supplemental normalization terms
110 RooArgList _refRangeProjList ; // Range integrals to be multiplied with coefficients (reference range)
111 RooArgList _rangeProjList ; // Range integrals to be multiplied with coefficients (target range)
112
114
115 } ;
116 mutable RooObjCacheManager _projCacheMgr ; // Manager of cache with coefficient projections and transformations
117 CacheElem* getProjCache(const RooArgSet* nset, const RooArgSet* iset=0, const char* rangeName=0) const ;
118 void updateCoefficients(CacheElem& cache, const RooArgSet* nset) const ;
119
121 void getCompIntList(const RooArgSet* nset, const RooArgSet* iset, pRooArgList& compIntList, Int_t& code, const char* isetRangeName) const ;
123 public:
124 virtual ~IntCacheElem() {} ;
125 RooArgList _intList ; // List of component integrals
127 } ;
128
129 mutable RooObjCacheManager _intCacheMgr ; // Manager of cache with integrals
130
131 mutable RooAICRegistry _codeReg ; //! Registry of component analytical integration codes
132
133 RooListProxy _pdfList ; // List of component PDFs
134 RooListProxy _coefList ; // List of coefficients
135 mutable RooArgList* _snormList{nullptr}; //! List of supplemental normalization factors
136
137 Bool_t _haveLastCoef ; // Flag indicating if last PDFs coefficient was supplied in the ctor
138 Bool_t _allExtendable ; // Flag indicating if all PDF components are extendable
139
140 mutable Int_t _coefErrCount ; //! Coefficient error counter
141
142 mutable RooArgSet _ownedComps ; //! Owned components
143
144private:
145
146 ClassDef(RooAddModel,1) // Resolution model representing a sum of resolution models
147};
148
149#endif
int Int_t
Definition: RtypesCore.h:43
const Bool_t kFALSE
Definition: RtypesCore.h:90
bool Bool_t
Definition: RtypesCore.h:61
double Double_t
Definition: RtypesCore.h:57
const Bool_t kTRUE
Definition: RtypesCore.h:89
#define ClassDef(name, id)
Definition: Rtypes.h:322
char name[80]
Definition: TGX11.cxx:109
RooAICRegistry is a utility class for operator p.d.f classes that keeps track of analytical integrati...
RooAbsArg is the common abstract base class for objects that represent a value (of arbitrary type) an...
Definition: RooAbsArg.h:73
RooAbsCacheElement is the abstract base class for objects to be stored in RooAbsCache cache manager o...
RooAbsGenContext is the abstract base class for generator contexts of RooAbsPdf objects.
@ MustBeExtended
Definition: RooAbsPdf.h:229
@ CanNotBeExtended
Definition: RooAbsPdf.h:229
RooAddGenContext is an efficient implementation of the generator context specific for RooAddPdf PDFs.
Transiet cache with transformed values of coefficients.
Definition: RooAddModel.h:102
RooArgList _rangeProjList
Definition: RooAddModel.h:111
RooArgList _suppProjList
Definition: RooAddModel.h:109
RooArgList _refRangeProjList
Definition: RooAddModel.h:110
RooArgList _suppNormList
Definition: RooAddModel.h:104
virtual RooArgList containedArgs(Action)
List all RooAbsArg derived contents in this cache element.
virtual RooArgList containedArgs(Action)
List all RooAbsArg derived contents in this cache element.
Double_t evaluate() const
Calculate the current value.
virtual Double_t expectedEvents(const RooArgSet &nset) const
Definition: RooAddModel.h:59
RooAICRegistry _codeReg
Definition: RooAddModel.h:131
RooArgList * _snormList
Definition: RooAddModel.h:135
RooObjCacheManager _projCacheMgr
Definition: RooAddModel.h:116
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const
Return analytical integral defined by given scenario code.
CacheElem * getProjCache(const RooArgSet *nset, const RooArgSet *iset=0, const char *rangeName=0) const
Retrieve cache element with for calculation of p.d.f value with normalization set nset and integrated...
virtual RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, Bool_t verbose=kFALSE) const
Return specialized context to efficiently generate toy events from RooAddPdfs.
void getCompIntList(const RooArgSet *nset, const RooArgSet *iset, pRooArgList &compIntList, Int_t &code, const char *isetRangeName) const
Check if this configuration was created before.
const RooArgList & pdfList() const
Definition: RooAddModel.h:65
RooSetProxy _refCoefNorm
Definition: RooAddModel.h:95
virtual RooResolutionModel * convolution(RooFormulaVar *basis, RooAbsArg *owner) const
Instantiate a clone of this resolution model representing a convolution with given basis function.
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 fraction c...
Int_t _coefErrCount
Definition: RooAddModel.h:140
void updateCoefficients(CacheElem &cache, const RooArgSet *nset) const
Update the coefficient values in the given cache element: calculate new remainder fraction,...
virtual Bool_t forceAnalyticalInt(const RooAbsArg &) const
Definition: RooAddModel.h:43
RooArgSet _ownedComps
Coefficient error counter.
Definition: RooAddModel.h:142
virtual ~RooAddModel()
Destructor.
const RooArgList & coefList() const
Definition: RooAddModel.h:69
virtual void resetErrorCounters(Int_t resetValue=10)
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
RooListProxy _coefList
Definition: RooAddModel.h:134
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
virtual Double_t expectedEvents(const RooArgSet *nset) const
Return the number of expected events, which is either the sum of all coefficients or the sum of the c...
RooListProxy _pdfList
Registry of component analytical integration codes.
Definition: RooAddModel.h:133
RooObjCacheManager _intCacheMgr
Definition: RooAddModel.h:129
void fixCoefNormalization(const RooArgSet &refCoefNorm)
By default the interpretation of the fraction coefficients is performed in the contextual choice of o...
virtual void selectNormalization(const RooArgSet *depSet=0, Bool_t force=kFALSE)
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
void generateEvent(Int_t code)
This function should never be called as RooAddModel implements a custom generator context.
Bool_t _projectCoefs
Reference range name for coefficient interpreation.
Definition: RooAddModel.h:98
void fixCoefRange(const char *rangeName)
By default the interpretation of the fraction coefficients is performed in the default range.
TNamed * _refCoefRangeName
Reference observable set for coefficient interpretation.
Definition: RooAddModel.h:96
virtual Bool_t checkObservables(const RooArgSet *nset) const
Check if PDF is valid for given normalization set.
void printMetaArgs(std::ostream &os) const
Customized printing of arguments of a RooAddModel to more intuitively reflect the contents of the pro...
RooArgList * pRooArgList
Definition: RooAddModel.h:120
Bool_t _haveLastCoef
List of supplemental normalization factors.
Definition: RooAddModel.h:137
Int_t getGenerator(const RooArgSet &directVars, RooArgSet &generateVars, Bool_t staticInitOK=kTRUE) const
Return pseud-code that indicates if all components can do internal generation (1) or not (0)
Bool_t isDirectGenSafe(const RooAbsArg &arg) const
Direct generation is safe if all components say so.
Bool_t _allExtendable
Definition: RooAddModel.h:138
virtual TObject * clone(const char *newname) const
Definition: RooAddModel.h:34
virtual Int_t basisCode(const char *name) const
Return code for basis function representing by 'name' string.
virtual ExtendMode extendMode() const
Definition: RooAddModel.h:54
virtual Bool_t selfNormalized() const
Definition: RooAddModel.h:49
Double_t * _coefCache
Definition: RooAddModel.h:99
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:21
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:28
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:33
A RooFormulaVar is a generic implementation of a real-valued object, which takes a RooArgList of serv...
Definition: RooFormulaVar.h:29
RooListProxy is the concrete proxy for RooArgList objects.
Definition: RooListProxy.h:25
Class RooObjCacheManager is an implementation of class RooCacheManager<RooAbsCacheElement> and specia...
RooResolutionModel is the base class for PDFs that represent a resolution model that can be convolute...
const RooFormulaVar & basis() const
RooSetProxy is the concrete proxy for RooArgSet objects.
Definition: RooSetProxy.h:24
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
Mother of all ROOT objects.
Definition: TObject.h:37