Logo ROOT  
Reference Guide
RooAddPdf.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_PDF
17#define ROO_ADD_PDF
18
19#include "RooAbsPdf.h"
20#include "RooListProxy.h"
21#include "RooSetProxy.h"
22#include "RooAICRegistry.h"
23#include "RooNormSetCache.h"
24#include "RooObjCacheManager.h"
25#include "RooNameReg.h"
26#include "RooTrace.h"
27
28#include <vector>
29#include <list>
30#include <utility>
31
32class RooAddPdf : public RooAbsPdf {
33public:
34
36 RooAddPdf(const char *name, const char *title=0);
37 RooAddPdf(const char *name, const char *title,
38 RooAbsPdf& pdf1, RooAbsPdf& pdf2, RooAbsReal& coef1) ;
39 RooAddPdf(const char *name, const char *title, const RooArgList& pdfList) ;
40 RooAddPdf(const char *name, const char *title, const RooArgList& pdfList, const RooArgList& coefList, bool recursiveFraction=false) ;
41
42 RooAddPdf(const RooAddPdf& other, const char* name=0) ;
43 TObject* clone(const char* newname) const override { return new RooAddPdf(*this,newname) ; }
45
46 bool checkObservables(const RooArgSet* nset) const override;
47
48 /// Force RooRealIntegral to offer all observables for internal integration.
49 bool forceAnalyticalInt(const RooAbsArg& /*dep*/) const override {
50 return true ;
51 }
52 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& numVars, const RooArgSet* normSet, const char* rangeName=0) const override;
53 Double_t analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName=0) const override;
54 bool selfNormalized() const override {
55 // P.d.f is self normalized
56 return true ;
57 }
58
59 ExtendMode extendMode() const override {
60 // Return extended mode capabilities
62 }
63 /// Return expected number of events for extended likelihood calculation, which
64 /// is the sum of all coefficients.
65 Double_t expectedEvents(const RooArgSet* nset) const override;
66
67 const RooArgList& pdfList() const {
68 // Return list of component p.d.fs
69 return _pdfList ;
70 }
71 const RooArgList& coefList() const {
72 // Return list of coefficients of component p.d.f.s
73 return _coefList ;
74 }
75
76 void fixCoefNormalization(const RooArgSet& refCoefNorm) ;
77 void fixCoefRange(const char* rangeName) ;
78
79 const RooArgSet& getCoefNormalization() const { return _refCoefNorm ; }
81
82 void resetErrorCounters(Int_t resetValue=10) override;
83
84 std::list<Double_t>* plotSamplingHint(RooAbsRealLValue& obs, Double_t xlo, Double_t xhi) const override;
85 std::list<Double_t>* binBoundaries(RooAbsRealLValue& /*obs*/, Double_t /*xlo*/, Double_t /*xhi*/) const override;
86 bool isBinnedDistribution(const RooArgSet& obs) const override;
87
88 void printMetaArgs(std::ostream& os) const override;
89
90 CacheMode canNodeBeCached() const override { return RooAbsArg::NotAdvised ; };
91 void setCacheAndTrackHints(RooArgSet&) override;
92
93protected:
94
95 void selectNormalization(const RooArgSet* depSet=0, bool force=false) override;
96 void selectNormalizationRange(const char* rangeName=0, bool force=false) override;
97
98 mutable RooSetProxy _refCoefNorm ; // Reference observable set for coefficient interpretation
99 mutable TNamed* _refCoefRangeName = nullptr ; // Reference range name for coefficient interpreation
100
101 bool _projectCoefs = false; // If true coefficients need to be projected for use in evaluate()
102 std::vector<double> _coefCache; //! Transient cache with transformed values of coefficients
103
104
106 public:
107 virtual ~CacheElem() {} ;
108
109 RooArgList _suppNormList ; // Supplemental normalization list
110 bool _needSupNorm ; // Does the above list contain any non-unit entries?
111
112 RooArgList _projList ; // Projection integrals to be multiplied with coefficients
113 RooArgList _suppProjList ; // Projection integrals to be multiplied with coefficients for supplemental normalization terms
114 RooArgList _refRangeProjList ; // Range integrals to be multiplied with coefficients (reference range)
115 RooArgList _rangeProjList ; // Range integrals to be multiplied with coefficients (target range)
116
118
119 } ;
120 mutable RooObjCacheManager _projCacheMgr ; //! Manager of cache with coefficient projections and transformations
121 CacheElem* getProjCache(const RooArgSet* nset, const RooArgSet* iset=0, const char* rangeName=0) const ;
122 void updateCoefficients(CacheElem& cache, const RooArgSet* nset) const ;
123
124
125 friend class RooAddGenContext ;
126 RooAbsGenContext* genContext(const RooArgSet &vars, const RooDataSet *prototype=0,
127 const RooArgSet* auxProto=0, bool verbose= false) const override;
128
129
130 Double_t evaluate() const override;
131 RooSpan<double> evaluateSpan(RooBatchCompute::RunContext& evalData, const RooArgSet* normSet) const override;
132
133
134 mutable RooAICRegistry _codeReg; //! Registry of component analytical integration codes
135
136 RooListProxy _pdfList ; // List of component PDFs
137 RooListProxy _coefList ; // List of coefficients
138 mutable RooArgList* _snormList{nullptr}; //! List of supplemental normalization factors
139
140 bool _haveLastCoef = false; // Flag indicating if last PDFs coefficient was supplied in the ctor
141 bool _allExtendable = false; // Flag indicating if all PDF components are extendable
142 bool _recursive = false; // Flag indicating is fractions are treated recursively
143
144 mutable Int_t _coefErrCount ; //! Coefficient error counter
145
146private:
147 std::pair<const RooArgSet*, CacheElem*> getNormAndCache(const RooArgSet* defaultNorm = nullptr) const;
149 mutable std::unique_ptr<const RooArgSet> _copyOfLastNormSet = nullptr; //!
150
152
153 ClassDefOverride(RooAddPdf,4) // PDF representing a sum of PDFs
154};
155
156#endif
#define TRACE_DESTROY
Definition: RooTrace.h:24
#define TRACE_CREATE
Definition: RooTrace.h:23
int Int_t
Definition: RtypesCore.h:45
double Double_t
Definition: RtypesCore.h:59
#define ClassDefOverride(name, id)
Definition: Rtypes.h:329
char name[80]
Definition: TGX11.cxx:110
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 and a "shape" in RooFi...
Definition: RooAbsArg.h:72
@ NotAdvised
Definition: RooAbsArg.h:390
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:257
@ CanNotBeExtended
Definition: RooAbsPdf.h:257
RooAbsRealLValue is the common abstract base class for objects that represent a real value that may a...
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
Definition: RooAbsReal.h:61
RooAddGenContext is an efficient implementation of the generator context specific for RooAddPdf PDFs.
Transient cache with transformed values of coefficients.
Definition: RooAddPdf.h:105
virtual RooArgList containedArgs(Action)
List all RooAbsArg derived contents in this cache element.
Definition: RooAddPdf.cxx:1075
virtual ~CacheElem()
Definition: RooAddPdf.h:107
RooArgList _rangeProjList
Definition: RooAddPdf.h:115
RooArgList _refRangeProjList
Definition: RooAddPdf.h:114
RooArgList _projList
Definition: RooAddPdf.h:112
RooArgList _suppNormList
Definition: RooAddPdf.h:107
RooArgList _suppProjList
Definition: RooAddPdf.h:113
RooAddPdf is an efficient implementation of a sum of PDFs of the form.
Definition: RooAddPdf.h:32
RooListProxy _coefList
Definition: RooAddPdf.h:137
RooAbsGenContext * genContext(const RooArgSet &vars, const RooDataSet *prototype=0, const RooArgSet *auxProto=0, bool verbose=false) const override
Return specialized context to efficiently generate toy events from RooAddPdfs return RooAbsPdf::genCo...
Definition: RooAddPdf.cxx:1064
RooArgList * _snormList
Definition: RooAddPdf.h:138
bool _allExtendable
Definition: RooAddPdf.h:141
RooAICRegistry _codeReg
Definition: RooAddPdf.h:134
const char * getCoefRange() const
Definition: RooAddPdf.h:80
std::pair< const RooArgSet *, CacheElem * > getNormAndCache(const RooArgSet *defaultNorm=nullptr) const
Coefficient error counter.
Definition: RooAddPdf.cxx:704
std::unique_ptr< const RooArgSet > _copyOfLastNormSet
Definition: RooAddPdf.h:149
TObject * clone(const char *newname) const override
Definition: RooAddPdf.h:43
Int_t _coefErrCount
Definition: RooAddPdf.h:144
bool _haveLastCoef
List of supplemental normalization factors.
Definition: RooAddPdf.h:140
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &numVars, const RooArgSet *normSet, const char *rangeName=0) const override
Determine which part (if any) of given integral can be performed analytically.
Definition: RooAddPdf.cxx:865
void updateCoefficients(CacheElem &cache, const RooArgSet *nset) const
Update the coefficient values in the given cache element: calculate new remainder fraction,...
Definition: RooAddPdf.cxx:580
void printMetaArgs(std::ostream &os) const override
Customized printing of arguments of a RooAddPdf to more intuitively reflect the contents of the produ...
Definition: RooAddPdf.cxx:1210
CacheElem * getProjCache(const RooArgSet *nset, const RooArgSet *iset=0, const char *rangeName=0) const
Manager of cache with coefficient projections and transformations.
Definition: RooAddPdf.cxx:366
void selectNormalization(const RooArgSet *depSet=0, bool force=false) override
Interface function used by test statistics to freeze choice of observables for interpretation of frac...
Definition: RooAddPdf.cxx:1028
void finalizeConstruction()
Definition: RooAddPdf.cxx:104
void setCacheAndTrackHints(RooArgSet &) override
Label OK'ed components of a RooAddPdf with cache-and-track.
Definition: RooAddPdf.cxx:1192
const RooArgList & coefList() const
Definition: RooAddPdf.h:71
bool _recursive
Definition: RooAddPdf.h:142
RooObjCacheManager _projCacheMgr
Definition: RooAddPdf.h:120
Double_t analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=0) const override
Return analytical integral defined by given scenario code.
Definition: RooAddPdf.cxx:930
RooSpan< double > evaluateSpan(RooBatchCompute::RunContext &evalData, const RooArgSet *normSet) const override
Compute addition of PDFs in batches.
Definition: RooAddPdf.cxx:788
std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &obs, Double_t xlo, Double_t xhi) const override
Loop over components for plot sampling hints and merge them if there are multiple.
Definition: RooAddPdf.cxx:1091
bool checkObservables(const RooArgSet *nset) const override
Check if PDF is valid for given normalization set.
Definition: RooAddPdf.cxx:837
RooAddPdf()
Definition: RooAddPdf.h:35
void selectNormalizationRange(const char *rangeName=0, bool force=false) override
Interface function used by test statistics to freeze choice of range for interpretation of fraction c...
Definition: RooAddPdf.cxx:1049
bool selfNormalized() const override
Shows if a PDF is self-normalized, which means that no attempt is made to add a normalization term.
Definition: RooAddPdf.h:54
void fixCoefNormalization(const RooArgSet &refCoefNorm)
By default the interpretation of the fraction coefficients is performed in the contextual choice of o...
Definition: RooAddPdf.cxx:320
UniqueId< RooArgSet >::Value_t _idOfLastUsedNormSet
Definition: RooAddPdf.h:148
RooSetProxy _refCoefNorm
Definition: RooAddPdf.h:98
void resetErrorCounters(Int_t resetValue=10) override
Reset error counter to given value, limiting the number of future error messages for this pdf to 'res...
Definition: RooAddPdf.cxx:824
ExtendMode extendMode() const override
Returns ability of PDF to provide extended likelihood terms.
Definition: RooAddPdf.h:59
bool forceAnalyticalInt(const RooAbsArg &) const override
Force RooRealIntegral to offer all observables for internal integration.
Definition: RooAddPdf.h:49
void fixCoefRange(const char *rangeName)
By default, fraction coefficients are assumed to refer to the default fit range.
Definition: RooAddPdf.cxx:347
CacheMode canNodeBeCached() const override
Definition: RooAddPdf.h:90
Double_t evaluate() const override
Calculate and return the current value.
Definition: RooAddPdf.cxx:760
RooListProxy _pdfList
Registry of component analytical integration codes.
Definition: RooAddPdf.h:136
TNamed * _refCoefRangeName
Definition: RooAddPdf.h:99
const RooArgList & pdfList() const
Definition: RooAddPdf.h:67
bool isBinnedDistribution(const RooArgSet &obs) const override
If all components that depend on obs are binned, so is their sum.
Definition: RooAddPdf.cxx:1176
std::list< Double_t > * binBoundaries(RooAbsRealLValue &, Double_t, Double_t) const override
Loop over components for plot sampling hints and merge them if there are multiple.
Definition: RooAddPdf.cxx:1134
Double_t expectedEvents(const RooArgSet *nset) const override
Return expected number of events for extended likelihood calculation, which is the sum of all coeffic...
Definition: RooAddPdf.cxx:987
~RooAddPdf() override
Definition: RooAddPdf.h:44
bool _projectCoefs
Definition: RooAddPdf.h:101
std::vector< double > _coefCache
Definition: RooAddPdf.h:102
const RooArgSet & getCoefNormalization() const
Definition: RooAddPdf.h:79
RooArgList is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgList.h:22
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition: RooArgSet.h:35
RooDataSet is a container class to hold unbinned data.
Definition: RooDataSet.h:36
RooListProxy is the concrete proxy for RooArgList objects.
Definition: RooListProxy.h:24
static const char * str(const TNamed *ptr)
Return C++ string corresponding to given TNamed pointer.
Definition: RooNameReg.cxx:103
Class RooObjCacheManager is an implementation of class RooCacheManager<RooAbsCacheElement> and specia...
RooSetProxy is the concrete proxy for RooArgSet objects.
Definition: RooSetProxy.h:23
A simple container to hold a batch of data values.
Definition: RooSpan.h:34
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
This struct enables passing computation data around between elements of a computation graph.
Definition: RunContext.h:31
A UniqueId can be added as a class member to enhance any class with a unique identifier for each inst...
Definition: UniqueId.h:27
unsigned long Value_t
Definition: UniqueId.h:29