Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 09:15:11

0001 // Author: Jonas Rembser, CERN  02/2021
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    // Optimized accept/reject generator support
0029    Int_t getMaxVal(const RooArgSet &vars) const override;
0030    double maxVal(Int_t code) const override;
0031 
0032    // Getters for non-optional parameters
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    // Getters for optional parameter: return nullptr if parameter is not set
0041    RooAbsReal const *alphaR() const { return alphaR_ ? &**alphaR_ : nullptr; }
0042    RooAbsReal const *nR() const { return nR_ ? &**nR_ : nullptr; }
0043 
0044    // Convenience functions to check if optional parameters are set
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    // optional parameters
0060    std::unique_ptr<RooRealProxy> alphaR_ = nullptr;
0061    std::unique_ptr<RooRealProxy> nR_ = nullptr;
0062 
0063    ClassDefOverride(RooCrystalBall, 2)
0064 };
0065 
0066 #endif