Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooNormalizedPdf.h
Go to the documentation of this file.
1/*
2 * Project: RooFit
3 * Authors:
4 * Jonas Rembser, CERN 2022
5 *
6 * Copyright (c) 2022, CERN
7 *
8 * Redistribution and use in source and binary forms,
9 * with or without modification, are permitted according to the terms
10 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)
11 */
12
13#ifndef RooFit_RooNormalizedPdf_h
14#define RooFit_RooNormalizedPdf_h
15
16#include <RooAbsPdf.h>
17#include <RooRealProxy.h>
18
20public:
21 RooNormalizedPdf(RooAbsPdf &pdf, RooArgSet const &normSet)
22 : _pdf("numerator", "numerator", this, pdf),
24 "denominator", "denominator", this,
25 std::unique_ptr<RooAbsReal>{pdf.createIntegral(normSet, *pdf.getIntegratorConfig(), pdf.normRange())},
26 true, false),
27 _normSet{normSet}
28 {
29 auto name = std::string(pdf.GetName()) + "_over_" + _normIntegral->GetName();
30 SetName(name.c_str());
31 SetTitle(name.c_str());
32 }
33
34 RooNormalizedPdf(const RooNormalizedPdf &other, const char *name)
35 : RooAbsPdf(other, name),
36 _pdf("numerator", this, other._pdf),
37 _normIntegral("denominator", this, other._normIntegral),
38 _normSet{other._normSet}
39 {
40 }
41
42 TObject *clone(const char *newname) const override { return new RooNormalizedPdf(*this, newname); }
43
44 bool selfNormalized() const override { return true; }
45
46 bool forceAnalyticalInt(const RooAbsArg & /*dep*/) const override { return true; }
47 /// Forward determination of analytical integration capabilities to input p.d.f
48 Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet * /*normSet*/,
49 const char *rangeName = nullptr) const override
50 {
51 return _pdf->getAnalyticalIntegralWN(allVars, analVars, &_normSet, rangeName);
52 }
53 /// Forward calculation of analytical integrals to input p.d.f
54 double analyticalIntegralWN(Int_t code, const RooArgSet * /*normSet*/, const char *rangeName = nullptr) const override
55 {
56 return _pdf->analyticalIntegralWN(code, &_normSet, rangeName);
57 }
58
59 ExtendMode extendMode() const override { return static_cast<RooAbsPdf &>(*_pdf).extendMode(); }
60 double expectedEvents(const RooArgSet * /*nset*/) const override { return _pdf->expectedEvents(&_normSet); }
61
62 std::unique_ptr<RooAbsReal> createExpectedEventsFunc(const RooArgSet * /*nset*/) const override
63 {
64 return _pdf->createExpectedEventsFunc(&_normSet);
65 }
66
67 void translate(RooFit::Detail::CodeSquashContext &ctx) const override;
68
69 bool canComputeBatchWithCuda() const override { return true; }
70
71protected:
72 void doEval(RooFit::EvalContext &) const override;
73 double evaluate() const override
74 {
75 // The evaluate() function should not be called in the BatchMode, but we
76 // still need it to support printing of the object.
77 return getValV(nullptr);
78 }
79 double getValV(const RooArgSet * /*normSet*/) const override
80 {
81 return normalizeWithNaNPacking(_pdf->getVal(), _normIntegral->getVal());
82 };
83
84private:
88};
89
90#endif
char name[80]
Definition TGX11.cxx:110
Common abstract base class for objects that represent a value and a "shape" in RooFit.
Definition RooAbsArg.h:79
void SetName(const char *name) override
Set the name of the TNamed.
Abstract interface for all probability density functions.
Definition RooAbsPdf.h:40
const char * normRange() const
Definition RooAbsPdf.h:250
double normalizeWithNaNPacking(double rawVal, double normVal) const
virtual ExtendMode extendMode() const
Returns ability of PDF to provide extended likelihood terms.
Definition RooAbsPdf.h:216
Abstract base class for objects that represent a real value and implements functionality common to al...
Definition RooAbsReal.h:59
RooFit::OwningPtr< RooAbsReal > createIntegral(const RooArgSet &iset, const RooCmdArg &arg1, const RooCmdArg &arg2={}, const RooCmdArg &arg3={}, const RooCmdArg &arg4={}, const RooCmdArg &arg5={}, const RooCmdArg &arg6={}, const RooCmdArg &arg7={}, const RooCmdArg &arg8={}) const
Create an object that represents the integral of the function over one or more observables listed in ...
const RooNumIntConfig * getIntegratorConfig() const
Return the numeric integration configuration used for this object.
RooArgSet is a container object that can hold multiple RooAbsArg objects.
Definition RooArgSet.h:24
A class to maintain the context for squashing of RooFit models into code.
A RooNormalizedPdf wraps a pdf divided by its integral for a given normalization set into a new self-...
std::unique_ptr< RooAbsReal > createExpectedEventsFunc(const RooArgSet *) const override
Returns an object that represents the expected number of events for a given normalization set,...
void translate(RooFit::Detail::CodeSquashContext &ctx) const override
This function defines a translation for each RooAbsReal based object that can be used to express the ...
RooRealProxy _normIntegral
RooNormalizedPdf(RooAbsPdf &pdf, RooArgSet const &normSet)
bool selfNormalized() const override
Shows if a PDF is self-normalized, which means that no attempt is made to add a normalization term.
double expectedEvents(const RooArgSet *) const override
Return expected number of events to be used in calculation of extended likelihood.
Int_t getAnalyticalIntegralWN(RooArgSet &allVars, RooArgSet &analVars, const RooArgSet *, const char *rangeName=nullptr) const override
Forward determination of analytical integration capabilities to input p.d.f.
double analyticalIntegralWN(Int_t code, const RooArgSet *, const char *rangeName=nullptr) const override
Forward calculation of analytical integrals to input p.d.f.
double evaluate() const override
Evaluate this PDF / function / constant. Needs to be overridden by all derived classes.
bool canComputeBatchWithCuda() const override
void doEval(RooFit::EvalContext &) const override
Base function for computing multiple values of a RooAbsReal.
RooTemplateProxy< RooAbsPdf > _pdf
double getValV(const RooArgSet *) const override
Return current value, normalized by integrating over the observables in nset.
TObject * clone(const char *newname) const override
ExtendMode extendMode() const override
Returns ability of PDF to provide extended likelihood terms.
bool forceAnalyticalInt(const RooAbsArg &) const override
RooNormalizedPdf(const RooNormalizedPdf &other, const char *name)
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
Definition TNamed.cxx:164
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
Mother of all ROOT objects.
Definition TObject.h:41