File indexing completed on 2025-12-16 10:29:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef ROOSTATS_BayesianCalculator
0012 #define ROOSTATS_BayesianCalculator
0013
0014 #include "TNamed.h"
0015
0016 #include "Math/IFunctionfwd.h"
0017
0018 #include "RooArgSet.h"
0019
0020 #include "RooStats/IntervalCalculator.h"
0021
0022 #include "RooStats/SimpleInterval.h"
0023
0024 class RooAbsData;
0025 class RooAbsPdf;
0026 class RooPlot;
0027 class RooAbsReal;
0028 class TF1;
0029 class TH1;
0030
0031
0032 namespace RooStats {
0033
0034 class ModelConfig;
0035 class SimpleInterval;
0036
0037 class BayesianCalculator : public IntervalCalculator, public TNamed {
0038
0039 public:
0040
0041
0042 BayesianCalculator( );
0043
0044 BayesianCalculator( RooAbsData& data,
0045 RooAbsPdf& pdf,
0046 const RooArgSet& POI,
0047 RooAbsPdf& priorPdf,
0048 const RooArgSet* nuisanceParameters = nullptr );
0049
0050 BayesianCalculator( RooAbsData& data,
0051 ModelConfig& model );
0052
0053
0054 ~BayesianCalculator() override;
0055
0056
0057 RooPlot* GetPosteriorPlot(bool norm = false, double precision = 0.01) const;
0058
0059
0060 RooAbsPdf* GetPosteriorPdf() const;
0061
0062 RooAbsReal* GetPosteriorFunction() const;
0063
0064
0065 TH1 * GetPosteriorHistogram() const;
0066
0067
0068
0069
0070 SimpleInterval* GetInterval() const override ;
0071
0072 void SetData( RooAbsData & data ) override {
0073 fData = &data;
0074 ClearAll();
0075 }
0076
0077
0078
0079 void SetModel( const ModelConfig& model ) override;
0080
0081
0082 virtual void SetParameters(const RooArgSet& set) { fPOI.removeAll(); fPOI.add(set); }
0083
0084
0085 virtual void SetNuisanceParameters(const RooArgSet& set) {fNuisanceParameters.removeAll(); fNuisanceParameters.add(set);}
0086
0087
0088 virtual void SetPriorPdf(RooAbsPdf& pdf) { fPriorPdf = &pdf; }
0089
0090
0091
0092 virtual void SetConditionalObservables(const RooArgSet& set) {fConditionalObs.removeAll(); fConditionalObs.add(set);}
0093
0094
0095
0096 virtual void SetGlobalObservables(const RooArgSet& set) {fGlobalObs.removeAll(); fGlobalObs.add(set);}
0097
0098
0099 void SetTestSize( double size ) override {
0100 fSize = size;
0101 fValidInterval = false;
0102 }
0103
0104 void SetConfidenceLevel( double cl ) override { SetTestSize(1.-cl); }
0105
0106 double Size() const override { return fSize; }
0107
0108 double ConfidenceLevel() const override { return 1.-fSize; }
0109
0110
0111
0112
0113
0114 void SetLeftSideTailFraction(double leftSideFraction ) {fLeftSideFraction = leftSideFraction;}
0115
0116
0117
0118 void SetShortestInterval() { fLeftSideFraction = -1; }
0119
0120
0121 void SetBrfPrecision( double precision ) { fBrfPrecision = precision; }
0122
0123
0124
0125
0126 void SetScanOfPosterior(int nbin = 100) { fNScanBins = nbin; }
0127
0128
0129
0130
0131
0132
0133 virtual void SetNumIters(Int_t numIters) { fNumIterations = numIters; }
0134
0135
0136 void SetIntegrationType(const char * type);
0137
0138
0139 double GetMode() const;
0140
0141
0142 void ForceNuisancePdf(RooAbsPdf & pdf) { fNuisancePdf = &pdf; }
0143
0144 protected:
0145
0146 void ClearAll() const;
0147
0148 void ApproximatePosterior() const;
0149
0150 void ComputeIntervalFromApproxPosterior(double c1, double c2) const;
0151
0152 void ComputeIntervalFromCdf(double c1, double c2) const;
0153
0154 void ComputeIntervalUsingRooFit(double c1, double c2) const;
0155
0156 void ComputeShortestInterval() const;
0157
0158 private:
0159
0160
0161
0162
0163
0164 RooAbsData* fData;
0165 RooAbsPdf* fPdf;
0166 RooArgSet fPOI;
0167 RooAbsPdf* fPriorPdf;
0168 RooAbsPdf* fNuisancePdf;
0169 RooArgSet fNuisanceParameters;
0170 RooArgSet fConditionalObs ;
0171 RooArgSet fGlobalObs;
0172
0173 mutable RooAbsPdf* fProductPdf;
0174 mutable std::unique_ptr<RooAbsReal> fLogLike;
0175 mutable RooAbsReal* fLikelihood;
0176 mutable RooAbsReal* fIntegratedLikelihood;
0177 mutable RooAbsPdf* fPosteriorPdf;
0178 mutable ROOT::Math::IGenFunction * fPosteriorFunction;
0179 mutable TF1 * fApproxPosterior;
0180 mutable double fLower;
0181 mutable double fUpper;
0182 mutable double fNLLMin;
0183 double fSize;
0184 double fLeftSideFraction;
0185 double fBrfPrecision;
0186 mutable int fNScanBins;
0187 int fNumIterations;
0188 mutable bool fValidInterval;
0189
0190 TString fIntegrationType;
0191
0192 protected:
0193
0194 ClassDefOverride(BayesianCalculator,3)
0195
0196 };
0197 }
0198
0199 #endif