File indexing completed on 2025-09-17 09:15:11
0001
0002
0003 #ifndef RooFit_RooFit_RooCrystalBall_h
0004 #define RooFit_RooFit_RooCrystalBall_h
0005
0006 #include "RooAbsPdf.h"
0007 #include "RooRealProxy.h"
0008
0009 #include <memory>
0010
0011 class RooCrystalBall final : public RooAbsPdf {
0012 public:
0013 RooCrystalBall() {};
0014
0015 RooCrystalBall(const char *name, const char *title, RooAbsReal &x, RooAbsReal &x0, RooAbsReal &sigmaL,
0016 RooAbsReal &sigmaR, RooAbsReal &alphaL, RooAbsReal &nL, RooAbsReal &alphaR, RooAbsReal &nR);
0017 RooCrystalBall(const char *name, const char *title, RooAbsReal &x, RooAbsReal &x0, RooAbsReal &sigmaLR,
0018 RooAbsReal &alphaL, RooAbsReal &nL, RooAbsReal &alphaR, RooAbsReal &nR);
0019 RooCrystalBall(const char *name, const char *title, RooAbsReal &x, RooAbsReal &x0, RooAbsReal &sigmaLR,
0020 RooAbsReal &alpha, RooAbsReal &n, bool doubleSided = false);
0021
0022 RooCrystalBall(const RooCrystalBall &other, const char *name = nullptr);
0023 TObject *clone(const char *newname) const override { return new RooCrystalBall(*this, newname); }
0024
0025 Int_t getAnalyticalIntegral(RooArgSet &allVars, RooArgSet &analVars, const char *rangeName = nullptr) const override;
0026 double analyticalIntegral(Int_t code, const char *rangeName = nullptr) const override;
0027
0028
0029 Int_t getMaxVal(const RooArgSet &vars) const override;
0030 double maxVal(Int_t code) const override;
0031
0032
0033 RooAbsReal const &x() const { return *x_; }
0034 RooAbsReal const &x0() const { return *x0_; }
0035 RooAbsReal const &sigmaL() const { return *sigmaL_; }
0036 RooAbsReal const &sigmaR() const { return *sigmaR_; }
0037 RooAbsReal const &alphaL() const { return *alphaL_; }
0038 RooAbsReal const &nL() const { return *nL_; }
0039
0040
0041 RooAbsReal const *alphaR() const { return alphaR_ ? &**alphaR_ : nullptr; }
0042 RooAbsReal const *nR() const { return nR_ ? &**nR_ : nullptr; }
0043
0044
0045 bool hasAlphaR() const { return alphaR_ != nullptr; }
0046 bool hasNR() const { return nR_ != nullptr; }
0047
0048 protected:
0049 double evaluate() const override;
0050
0051 private:
0052 RooRealProxy x_;
0053 RooRealProxy x0_;
0054 RooRealProxy sigmaL_;
0055 RooRealProxy sigmaR_;
0056 RooRealProxy alphaL_;
0057 RooRealProxy nL_;
0058
0059
0060 std::unique_ptr<RooRealProxy> alphaR_ = nullptr;
0061 std::unique_ptr<RooRealProxy> nR_ = nullptr;
0062
0063 ClassDefOverride(RooCrystalBall, 2)
0064 };
0065
0066 #endif