Analysis-Utilities 26.9.9
C++/ROOT utilities for nuclear measurement data analysis
Loading...
Searching...
No Matches
RooFitPhotopeakPdfs.hpp
Go to the documentation of this file.
1#ifndef ROOFITPHOTOPEAKPDFS_H
2#define ROOFITPHOTOPEAKPDFS_H
3
4#include <RooAbsPdf.h>
5#include <RooAbsReal.h>
6#include <RooFit/EvalContext.h>
7#include <RooRealProxy.h>
8
46
55class RooStepShelf : public RooAbsPdf {
56public:
67 RooStepShelf(const char *name, const char *title, RooAbsReal &x,
68 RooAbsReal &mu, RooAbsReal &sigma);
72 RooStepShelf(const RooStepShelf &other, const char *name = nullptr);
76 TObject *clone(const char *newname = nullptr) const override {
77 return new RooStepShelf(*this, newname);
78 }
79
87 Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars,
88 const char *rangeName = nullptr) const override;
96 Double_t analyticalIntegral(Int_t code,
97 const char *rangeName = nullptr) const override;
98
108 void doEval(RooFit::EvalContext &ctx) const override;
111#ifdef AU_ROOFIT_BACKEND_CUDA
112 inline bool canComputeBatchWithCuda() const override { return true; }
113#else
114 inline bool canComputeBatchWithCuda() const override { return false; }
115#endif
116
117protected:
118 RooRealProxy x_;
119 RooRealProxy mu_;
120 RooRealProxy sigma_;
124 Double_t evaluate() const override;
125
126 ClassDefOverride(RooStepShelf, 1)
127};
128
139class RooLowExpTail : public RooAbsPdf {
140public:
153 RooLowExpTail(const char *name, const char *title, RooAbsReal &x,
154 RooAbsReal &mu, RooAbsReal &sigma, RooAbsReal &tau_ratio);
158 RooLowExpTail(const RooLowExpTail &other, const char *name = nullptr);
162 TObject *clone(const char *newname = nullptr) const override {
163 return new RooLowExpTail(*this, newname);
164 }
165
173 Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars,
174 const char *rangeName = nullptr) const override;
182 Double_t analyticalIntegral(Int_t code,
183 const char *rangeName = nullptr) const override;
184
194 void doEval(RooFit::EvalContext &ctx) const override;
197#ifdef AU_ROOFIT_BACKEND_CUDA
198 inline bool canComputeBatchWithCuda() const override { return true; }
199#else
200 inline bool canComputeBatchWithCuda() const override { return false; }
201#endif
202
203protected:
204 RooRealProxy x_;
205 RooRealProxy mu_;
206 RooRealProxy sigma_;
207 RooRealProxy tau_ratio_;
211 Double_t evaluate() const override;
212
213 ClassDefOverride(RooLowExpTail, 1)
214};
215
225class RooLowLinTail : public RooAbsPdf {
226public:
239 RooLowLinTail(const char *name, const char *title, RooAbsReal &x,
240 RooAbsReal &mu, RooAbsReal &sigma, RooAbsReal &slope);
244 RooLowLinTail(const RooLowLinTail &other, const char *name = nullptr);
248 TObject *clone(const char *newname = nullptr) const override {
249 return new RooLowLinTail(*this, newname);
250 }
251
259 Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars,
260 const char *rangeName = nullptr) const override;
268 Double_t analyticalIntegral(Int_t code,
269 const char *rangeName = nullptr) const override;
270
280 void doEval(RooFit::EvalContext &ctx) const override;
283#ifdef AU_ROOFIT_BACKEND_CUDA
284 inline bool canComputeBatchWithCuda() const override { return true; }
285#else
286 inline bool canComputeBatchWithCuda() const override { return false; }
287#endif
288
289protected:
290 RooRealProxy x_;
291 RooRealProxy mu_;
292 RooRealProxy sigma_;
293 RooRealProxy slope_;
297 Double_t evaluate() const override;
298
299 ClassDefOverride(RooLowLinTail, 1)
300};
301
308class RooHighExpTail : public RooAbsPdf {
309public:
322 RooHighExpTail(const char *name, const char *title, RooAbsReal &x,
323 RooAbsReal &mu, RooAbsReal &sigma, RooAbsReal &tau_ratio);
327 RooHighExpTail(const RooHighExpTail &other, const char *name = nullptr);
331 TObject *clone(const char *newname = nullptr) const override {
332 return new RooHighExpTail(*this, newname);
333 }
334
342 Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars,
343 const char *rangeName = nullptr) const override;
351 Double_t analyticalIntegral(Int_t code,
352 const char *rangeName = nullptr) const override;
353
363 void doEval(RooFit::EvalContext &ctx) const override;
366#ifdef AU_ROOFIT_BACKEND_CUDA
367 inline bool canComputeBatchWithCuda() const override { return true; }
368#else
369 inline bool canComputeBatchWithCuda() const override { return false; }
370#endif
371
372protected:
373 RooRealProxy x_;
374 RooRealProxy mu_;
375 RooRealProxy sigma_;
376 RooRealProxy tau_ratio_;
380 Double_t evaluate() const override;
381
382 ClassDefOverride(RooHighExpTail, 1)
383};
384
385#endif
Exponential tail above the photopeak, convolved with the resolution.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Advertise the analytic integral over the observable.
bool canComputeBatchWithCuda() const override
Whether doEval() can consume device-resident buffers.
RooHighExpTail()
Default constructor for ROOT I/O; leaves proxies unbound.
Double_t evaluate() const override
Scalar evaluation for a single observable value.
Double_t analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Evaluate the analytic integral advertised above.
void doEval(RooFit::EvalContext &ctx) const override
Batched evaluation over every event in one pass.
TObject * clone(const char *newname=nullptr) const override
RooFit clone hook.
Exponential tail below the photopeak, convolved with the resolution.
Double_t evaluate() const override
Scalar evaluation for a single observable value.
RooLowExpTail()
Default constructor for ROOT I/O; leaves proxies unbound.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Advertise the analytic integral over the observable.
Double_t analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Evaluate the analytic integral advertised above.
TObject * clone(const char *newname=nullptr) const override
RooFit clone hook.
bool canComputeBatchWithCuda() const override
Whether doEval() can consume device-resident buffers.
void doEval(RooFit::EvalContext &ctx) const override
Batched evaluation over every event in one pass.
Linear tail below the photopeak, convolved with the resolution.
Double_t analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Evaluate the analytic integral advertised above.
RooLowLinTail()
Default constructor for ROOT I/O; leaves proxies unbound.
TObject * clone(const char *newname=nullptr) const override
RooFit clone hook.
void doEval(RooFit::EvalContext &ctx) const override
Batched evaluation over every event in one pass.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Advertise the analytic integral over the observable.
bool canComputeBatchWithCuda() const override
Whether doEval() can consume device-resident buffers.
Double_t evaluate() const override
Scalar evaluation for a single observable value.
Resolution-smeared step on the low side of the photopeak.
bool canComputeBatchWithCuda() const override
Whether doEval() can consume device-resident buffers.
Double_t analyticalIntegral(Int_t code, const char *rangeName=nullptr) const override
Evaluate the analytic integral advertised above.
void doEval(RooFit::EvalContext &ctx) const override
Batched evaluation over every event in one pass.
Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName=nullptr) const override
Advertise the analytic integral over the observable.
RooStepShelf()
Default constructor for ROOT I/O; leaves proxies unbound.
TObject * clone(const char *newname=nullptr) const override
RooFit clone hook.
Double_t evaluate() const override
Scalar evaluation for a single observable value.