File indexing completed on 2025-12-16 10:29:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef ROOSTATS_MetropolisHastings
0013 #define ROOSTATS_MetropolisHastings
0014
0015 #include "RooStats/RooStatsUtils.h"
0016 #include "Rtypes.h"
0017 #include "TObject.h"
0018 #include "RooArgSet.h"
0019 #include "RooStats/ProposalFunction.h"
0020 #include "RooStats/MarkovChain.h"
0021
0022 namespace RooStats {
0023
0024 class MetropolisHastings : public TObject {
0025
0026
0027 public:
0028 enum FunctionSign {kNegative, kPositive, kSignUnset};
0029 enum FunctionType {kRegular, kLog, kTypeUnset};
0030
0031
0032 MetropolisHastings() = default;
0033
0034
0035 MetropolisHastings(RooAbsReal& function, const RooArgSet& paramsOfInterest,
0036 ProposalFunction& proposalFunction, Int_t numIters);
0037
0038
0039
0040 virtual MarkovChain* ConstructChain();
0041
0042
0043
0044 virtual void SetChainParameters(const RooArgSet& set)
0045 { fChainParams.removeAll(); fChainParams.add(set); RemoveConstantParameters(&fChainParams); }
0046
0047 virtual void SetParameters(const RooArgSet& set)
0048 { fParameters.removeAll(); fParameters.add(set); RemoveConstantParameters(&fParameters); }
0049
0050 virtual void SetProposalFunction(ProposalFunction& proposalFunction)
0051 { fPropFunc = &proposalFunction; }
0052
0053 virtual void SetNumIters(Int_t numIters)
0054 { fNumIters = numIters; }
0055
0056
0057 virtual void SetNumBurnInSteps(Int_t numBurnInSteps)
0058 { fNumBurnInSteps = numBurnInSteps; }
0059
0060 virtual void SetFunction(RooAbsReal& function) { fFunction = &function; }
0061
0062 virtual void SetSign(enum FunctionSign sign) { fSign = sign; }
0063
0064 virtual void SetType(enum FunctionType type) { fType = type; }
0065
0066
0067 protected:
0068 RooAbsReal *fFunction = nullptr;
0069 RooArgSet fParameters;
0070 RooArgSet fChainParams;
0071 ProposalFunction *fPropFunc = nullptr;
0072 Int_t fNumIters = 0;
0073 Int_t fNumBurnInSteps = 0;
0074 enum FunctionSign fSign = kSignUnset;
0075 enum FunctionType fType = kTypeUnset;
0076
0077
0078 virtual bool ShouldTakeStep(double d);
0079 virtual double CalcNLL(double xL);
0080
0081 ClassDefOverride(MetropolisHastings,2)
0082 };
0083 }
0084
0085
0086 #endif