Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooWrapperPdf.h
Go to the documentation of this file.
1// Author: Stephan Hageboeck, CERN
2/*****************************************************************************
3 * Project: RooFit *
4 * Package: RooFitCore *
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-2018, 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_WRAPPER_PDF
17#define ROO_WRAPPER_PDF
18
19#include "RooAbsReal.h"
20#include "RooRealProxy.h"
21#include "RooAbsPdf.h"
22#include <list>
23
24class RooWrapperPdf final : public RooAbsPdf {
25public:
26
28 /// Construct a new RooWrapperPdf.
29 /// \param[in] name A name to identify this object.
30 /// \param[in] title Title (for e.g. plotting)
31 /// \param[in] inputFunction Any RooAbsReal that should be converted into a PDF. Although it's possible
32 /// \param[in] selfNormalized The return value the RooAbsPdf::selfNormalized() function for the wrapped PDF object.
33 /// If it is `true`, then no automatic normalization will be
34 /// performed when evaluating the function. In this case, the
35 /// effect RooWrapperPdf is not to change the evaluated values,
36 /// but only to wrap the function in something that is of type
37 /// RooAbsPdf, which can be useful if some interface reqiures it.
38 /// to pass a PDF, it only makes sense for non-PDF functions.
39 RooWrapperPdf(const char *name, const char *title, RooAbsReal& inputFunction, bool selfNormalized=false) :
40 RooAbsPdf(name, title),
41 _func("inputFunction", "Function to be converted into a PDF", this, inputFunction),
43 ~RooWrapperPdf() override {};
44
45 RooWrapperPdf(const RooWrapperPdf& other, const char *name = nullptr) :
46 RooAbsPdf(other, name),
47 _func("inputFunction", this, other._func),
49
50 TObject* clone(const char* newname) const override {
51 return new RooWrapperPdf(*this, newname);
52 }
53
54 bool selfNormalized() const override { return _selfNormalized; }
55
56 // Analytical Integration handling
57 bool forceAnalyticalInt(const RooAbsArg& dep) const override {
58 return _func->forceAnalyticalInt(dep);
59 }
60 Int_t getAnalyticalIntegralWN(RooArgSet& allVars, RooArgSet& analVars, const RooArgSet* normSet,
61 const char* rangeName=nullptr) const override {
62 return _func->getAnalyticalIntegralWN(allVars, analVars, normSet, rangeName);
63 }
65 const char* rangeName=nullptr) const override {
66 return _func->getAnalyticalIntegral(allVars, numVars, rangeName);
67 }
68 double analyticalIntegralWN(Int_t code, const RooArgSet* normSet, const char* rangeName) const override {
69 return _func->analyticalIntegralWN(code, normSet, rangeName);
70 }
71 double analyticalIntegral(Int_t code, const char* rangeName=nullptr) const override {
72 return _func->analyticalIntegral(code, rangeName);
73 }
74
75
76 // Internal toy generation. Since our _func is not a PDF (if it is, it doesn't make sense to use this wrapper),
77 // we cannot do anything.
78 /// Get specialised generator. Since the underlying function is not a PDF, this will always return zero.
79// Int_t getGenerator(const RooArgSet& /*directVars*/, RooArgSet& /*generateVars*/,
80// bool /*staticInitOK = true*/) const override { return 0; }
81// void initGenerator(Int_t /*code*/) override { }
82// void generateEvent(Int_t /*code*/) override { }
83// bool isDirectGenSafe(const RooAbsArg& /*arg*/) const override { return false; }
84
85
86 // Hints for optimized brute-force sampling
87 Int_t getMaxVal(const RooArgSet& vars) const override {
88 return _func.arg().getMaxVal(vars);
89 }
90 double maxVal(Int_t code) const override {
91 return _func.arg().maxVal(code);
92 }
93 Int_t minTrialSamples(const RooArgSet& arGenObs) const override {
94 return _func.arg().minTrialSamples(arGenObs);
95 }
96
97 // Plotting and binning hints
98 bool isBinnedDistribution(const RooArgSet& obs) const override {
99 return _func.arg().isBinnedDistribution(obs);
100 }
101 std::list<double>* binBoundaries(RooAbsRealLValue& obs, double xlo, double xhi) const override {
102 return _func.arg().binBoundaries(obs, xlo, xhi);
103 }
104 std::list<double>* plotSamplingHint(RooAbsRealLValue& obs, double xlo, double xhi) const override {
105 return _func.arg().plotSamplingHint(obs, xlo, xhi);
106 }
107
108
109
110private:
112 bool _selfNormalized = false;
113
114 double evaluate() const override {
115 return _func;
116 }
117
119};
120
121#endif
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
char name[80]
Definition TGX11.cxx:110
RooAbsArg is the common abstract base class for objects that represent a value and a "shape" in RooFi...
Definition RooAbsArg.h:74
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:62
virtual std::list< double > * binBoundaries(RooAbsRealLValue &obs, double xlo, double xhi) const
Retrieve bin boundaries if this distribution is binned in obs.
virtual Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
virtual Int_t minTrialSamples(const RooArgSet &) const
Definition RooAbsReal.h:246
virtual bool forceAnalyticalInt(const RooAbsArg &) const
Definition RooAbsReal.h:168
virtual double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
virtual Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
virtual double maxVal(Int_t code) const
Return maximum value for set of observables identified by code assigned in getMaxVal.
virtual double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName=nullptr) const
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
virtual bool isBinnedDistribution(const RooArgSet &) const
Tests if the distribution is binned. Unless overridden by derived classes, this always returns false.
Definition RooAbsReal.h:358
virtual std::list< double > * plotSamplingHint(RooAbsRealLValue &obs, double xlo, double xhi) const
Interface for returning an optional hint for initial sampling points when constructing a curve projec...
virtual Int_t getMaxVal(const RooArgSet &vars) const
Advertise capability to determine maximum value of function for given set of observables.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:55
const T & arg() const
Return reference to object held in proxy.
The RooWrapperPdf is a class that can be used to convert a function into a PDF.
RooWrapperPdf(const char *name, const char *title, RooAbsReal &inputFunction, bool selfNormalized=false)
Construct a new RooWrapperPdf.
RooWrapperPdf(const RooWrapperPdf &other, const char *name=nullptr)
double maxVal(Int_t code) const override
Return maximum value for set of observables identified by code assigned in getMaxVal.
Int_t getMaxVal(const RooArgSet &vars) const override
Get specialised generator. Since the underlying function is not a PDF, this will always return zero.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &numVars, const char *rangeName=nullptr) const override
Interface function getAnalyticalIntergral advertises the analytical integrals that are supported.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *normSet, const char *rangeName=nullptr) const override
Variant of getAnalyticalIntegral that is also passed the normalization set that should be applied to ...
RooRealProxy _func
bool isBinnedDistribution(const RooArgSet &obs) const override
Tests if the distribution is binned. Unless overridden by derived classes, this always returns false.
std::list< double > * plotSamplingHint(RooAbsRealLValue &obs, double xlo, double xhi) const override
Interface for returning an optional hint for initial sampling points when constructing a curve projec...
bool selfNormalized() const override
Shows if a PDF is self-normalized, which means that no attempt is made to add a normalization term.
TObject * clone(const char *newname) const override
double analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Implements the actual analytical integral(s) advertised by getAnalyticalIntegral.
bool forceAnalyticalInt(const RooAbsArg &dep) const override
double analyticalIntegralWN(Int_t code, const RooArgSet *normSet, const char *rangeName) const override
Analytical integral with normalization (see RooAbsReal::analyticalIntegralWN() for further informatio...
double evaluate() const override
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
std::list< double > * binBoundaries(RooAbsRealLValue &obs, double xlo, double xhi) const override
Retrieve bin boundaries if this distribution is binned in obs.
Int_t minTrialSamples(const RooArgSet &arGenObs) const override
~RooWrapperPdf() override
Mother of all ROOT objects.
Definition TObject.h:41