-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathRooEvaluatorWrapper.h
More file actions
97 lines (69 loc) · 2.66 KB
/
RooEvaluatorWrapper.h
File metadata and controls
97 lines (69 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/// \cond ROOFIT_INTERNAL
/*
* Project: RooFit
* Authors:
* Jonas Rembser, CERN 2023
*
* Copyright (c) 2023, CERN
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted according to the terms
* listed in LICENSE (http://roofit.sourceforge.net/license.txt)
*/
#ifndef RooFit_RooEvaluatorWrapper_h
#define RooFit_RooEvaluatorWrapper_h
#include <RooAbsData.h>
#include <RooFit/Evaluator.h>
#include <RooGlobalFunc.h>
#include <RooRealProxy.h>
#include <RooSetProxy.h>
#include <stack>
class RooAbsArg;
class RooAbsCategory;
class RooAbsPdf;
namespace RooFit::Experimental {
class RooFuncWrapper;
class RooEvaluatorWrapper final : public RooAbsReal {
public:
RooEvaluatorWrapper(RooAbsReal &topNode, RooAbsData *data, bool useGPU, std::string const &rangeName,
RooAbsPdf const *simPdf, bool takeGlobalObservablesFromData);
RooEvaluatorWrapper(const RooEvaluatorWrapper &other, const char *name = nullptr);
~RooEvaluatorWrapper();
TObject *clone(const char *newname) const override { return new RooEvaluatorWrapper(*this, newname); }
double defaultErrorLevel() const override { return _topNode->defaultErrorLevel(); }
bool getParameters(const RooArgSet *observables, RooArgSet &outputSet, bool stripDisconnected = true) const override;
bool setData(RooAbsData &data, bool cloneData) override;
double getValV(const RooArgSet *) const override { return evaluate(); }
void applyWeightSquared(bool flag) override { _topNode->applyWeightSquared(flag); }
void printMultiline(std::ostream &os, Int_t /*contents*/, bool /*verbose*/ = false,
TString /*indent*/ = "") const override
{
_evaluator->print(os);
}
bool hasGradient() const override;
bool hasHessian() const override;
void gradient(double *out) const override;
void hessian(double *out) const override;
void generateGradient();
void generateHessian();
void setUseGeneratedFunctionCode(bool);
void writeDebugMacro(std::string const &) const;
protected:
double evaluate() const override;
private:
void createFuncWrapper();
std::shared_ptr<RooFit::Evaluator> _evaluator;
std::shared_ptr<RooFuncWrapper> _funcWrapper;
RooRealProxy _topNode;
RooAbsData *_data = nullptr;
RooSetProxy _paramSet;
std::string _rangeName;
RooAbsPdf const *_pdf = nullptr;
const bool _takeGlobalObservablesFromData;
bool _useGeneratedFunctionCode = false;
std::stack<std::vector<double>> _vectorBuffers; // used for preserving resources
std::map<RooFit::Detail::DataKey, std::span<const double>> _dataSpans;
};
} // namespace RooFit::Experimental
#endif
/// \endcond