File indexing completed on 2025-09-18 09:32:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef ROO_HIST_PDF
0017 #define ROO_HIST_PDF
0018
0019 #include "RooAbsPdf.h"
0020 #include "RooRealProxy.h"
0021 #include "RooSetProxy.h"
0022 #include "RooAICRegistry.h"
0023 #include "RooDataHist.h"
0024
0025 #include <list>
0026
0027 class RooRealVar;
0028 class RooAbsReal;
0029
0030 class RooHistPdf : public RooAbsPdf {
0031 public:
0032 RooHistPdf() {}
0033 RooHistPdf(const char *name, const char *title, const RooArgSet& vars, const RooDataHist& dhist, Int_t intOrder=0);
0034 RooHistPdf(const char *name, const char *title, const RooArgList& pdfObs, const RooArgList& histObs, const RooDataHist& dhist, Int_t intOrder=0);
0035 RooHistPdf(const char *name, const char *title, const RooArgSet& vars,
0036 std::unique_ptr<RooDataHist> dhist, int intOrder=0);
0037 RooHistPdf(const char *name, const char *title, const RooArgList& pdfObs, const RooArgList& histObs,
0038 std::unique_ptr<RooDataHist> dhist, int intOrder=0);
0039 RooHistPdf(const RooHistPdf& other, const char* name=nullptr);
0040 TObject* clone(const char* newname=nullptr) const override { return new RooHistPdf(*this,newname); }
0041
0042 RooDataHist& dataHist() {
0043
0044 return *_dataHist ;
0045 }
0046 const RooDataHist& dataHist() const {
0047
0048 return *_dataHist ;
0049 }
0050
0051
0052
0053 RooDataHist* cloneAndOwnDataHist(const char* newname="");
0054
0055 void setInterpolationOrder(Int_t order) {
0056
0057 _intOrder = order ;
0058 }
0059 Int_t getInterpolationOrder() const {
0060
0061 return _intOrder ;
0062 }
0063
0064 Int_t getAnalyticalIntegral(RooArgSet& allVars, RooArgSet& analVars, const char* rangeName=nullptr) const override ;
0065 double analyticalIntegral(Int_t code, const char* rangeName=nullptr) const override ;
0066
0067 bool forceAnalyticalInt(const RooAbsArg& dep) const override;
0068
0069 void setCdfBoundaries(bool flag) {
0070
0071 _cdfBoundaries = flag ;
0072 }
0073 bool getCdfBoundaries() const {
0074
0075 return _cdfBoundaries ;
0076 }
0077
0078 void setUnitNorm(bool flag) {
0079
0080 _unitNorm = flag ;
0081 }
0082 bool haveUnitNorm() const {
0083
0084 return _unitNorm ;
0085 }
0086
0087 bool selfNormalized() const override { return _unitNorm ; }
0088
0089 Int_t getMaxVal(const RooArgSet& vars) const override ;
0090 double maxVal(Int_t code) const override ;
0091
0092 std::list<double>* plotSamplingHint(RooAbsRealLValue& obs, double xlo, double xhi) const override ;
0093 std::list<double>* binBoundaries(RooAbsRealLValue& , double , double ) const override ;
0094 bool isBinnedDistribution(const RooArgSet&) const override { return _intOrder==0 ; }
0095
0096 void doEval(RooFit::EvalContext &) const override;
0097
0098 RooArgSet const &variables() const { return _pdfObsList; }
0099
0100 protected:
0101 bool areIdentical(const RooDataHist& dh1, const RooDataHist& dh2) ;
0102
0103 bool importWorkspaceHook(RooWorkspace& ws) override ;
0104
0105 double evaluate() const override;
0106 double totalVolume() const ;
0107 friend class RooAbsCachedPdf ;
0108 double totVolume() const ;
0109
0110 RooArgSet _histObsList;
0111 RooSetProxy _pdfObsList;
0112 RooDataHist* _dataHist = nullptr;
0113 std::unique_ptr<RooDataHist> _ownedDataHist;
0114 mutable RooAICRegistry _codeReg ;
0115 Int_t _intOrder = 0;
0116 bool _cdfBoundaries = false;
0117 mutable double _totVolume = 0.0;
0118 bool _unitNorm = false;
0119
0120 private:
0121
0122 friend class RooHistFunc;
0123
0124 static bool forceAnalyticalInt(RooArgSet const& pdfObsList, RooAbsArg const& dep);
0125
0126 static Int_t getAnalyticalIntegral(RooArgSet& allVars,
0127 RooArgSet& analVars,
0128 const char* rangeName,
0129 RooArgSet const& histObsList,
0130 RooArgSet const& pdfObsList,
0131 Int_t intOrder) ;
0132
0133 static double analyticalIntegral(Int_t code,
0134 const char* rangeName,
0135 RooArgSet const& histObsList,
0136 RooArgSet const& pdfObsList,
0137 RooDataHist& dataHist,
0138 bool histFuncMode) ;
0139
0140 static std::list<double>* plotSamplingHint(RooDataHist const& dataHist,
0141 RooArgSet const& pdfObsList,
0142 RooArgSet const& histObsList,
0143 int intOrder,
0144 RooAbsRealLValue& obs,
0145 double xlo,
0146 double xhi);
0147
0148 inline void initializeOwnedDataHist(std::unique_ptr<RooDataHist> &&dataHist)
0149 {
0150 _ownedDataHist = std::move(dataHist);
0151 }
0152
0153 ClassDefOverride(RooHistPdf,4)
0154 };
0155
0156 #endif