Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RooNormalizedPdf.cxx
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
14
15#include "RooBatchCompute.h"
16
17#include <array>
18
19
20/**
21 * \class RooNormalizedPdf
22 *
23 * A RooNormalizedPdf wraps a pdf divided by its integral for a given
24 * normalization set into a new self-normalized pdf.
25 */
26
27namespace RooFit {
28namespace Detail {
29
31{
32 auto nums = ctx.at(_pdf);
33 auto integralSpan = ctx.at(_normIntegral);
34
35 // We use the extraArgs as output parameter to count evaluation errors.
36 std::array<double, 3> extraArgs{0.0, 0.0, 0.0};
37
38 RooBatchCompute::compute(ctx.config(this), RooBatchCompute::NormalizedPdf, ctx.output(), {nums, integralSpan},
39 extraArgs);
40
41 std::size_t nEvalErrorsType0 = extraArgs[0];
42 std::size_t nEvalErrorsType1 = extraArgs[1];
43 std::size_t nEvalErrorsType2 = extraArgs[2];
44
45 for (std::size_t i = 0; i < nEvalErrorsType0; ++i) {
46 logEvalError("p.d.f normalization integral is zero or negative");
47 }
48 for (std::size_t i = 0; i < nEvalErrorsType1; ++i) {
49 logEvalError("p.d.f value is less than zero, trying to recover");
50 }
51 for (std::size_t i = 0; i < nEvalErrorsType2; ++i) {
52 logEvalError("p.d.f value is Not-a-Number");
53 }
54}
55
56} // namespace Detail
57} // namespace RooFit
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
void logEvalError(const char *message, const char *serverValueString=nullptr) const
Log evaluation error message.
RooTemplateProxy< RooAbsPdf > _pdf
void doEval(RooFit::EvalContext &) const override
Base function for computing multiple values of a RooAbsReal.
std::span< const double > at(RooAbsArg const *arg, RooAbsArg const *caller=nullptr)
std::span< double > output()
RooBatchCompute::Config config(RooAbsArg const *arg) const
void compute(Config cfg, Computer comp, std::span< double > output, VarSpan vars, ArgSpan extraArgs={})
The namespace RooFit contains mostly switches that change the behaviour of functions of PDFs (or othe...
Definition CodegenImpl.h:65