12 #ifndef ROOSTATS_MetropolisHastings
13 #define ROOSTATS_MetropolisHastings
24 class MetropolisHastings :
public TObject {
28 enum FunctionSign {kNegative, kPositive, kSignUnset};
29 enum FunctionType {kRegular, kLog, kTypeUnset};
35 MetropolisHastings(RooAbsReal&
function,
const RooArgSet& paramsOfInterest,
36 ProposalFunction& proposalFunction, Int_t numIters);
38 virtual ~MetropolisHastings() {}
42 virtual MarkovChain* ConstructChain();
46 virtual void SetChainParameters(
const RooArgSet& set)
47 { fChainParams.removeAll(); fChainParams.add(set); RemoveConstantParameters(&fChainParams); }
49 virtual void SetParameters(
const RooArgSet& set)
50 { fParameters.removeAll(); fParameters.add(set); RemoveConstantParameters(&fParameters); }
52 virtual void SetProposalFunction(ProposalFunction& proposalFunction)
53 { fPropFunc = &proposalFunction; }
55 virtual void SetNumIters(Int_t numIters)
56 { fNumIters = numIters; }
59 virtual void SetNumBurnInSteps(Int_t numBurnInSteps)
60 { fNumBurnInSteps = numBurnInSteps; }
62 virtual void SetFunction(RooAbsReal&
function) { fFunction = &
function; }
64 virtual void SetSign(
enum FunctionSign sign) { fSign = sign; }
66 virtual void SetType(
enum FunctionType type) { fType = type; }
70 RooAbsReal* fFunction;
71 RooArgSet fParameters;
72 RooArgSet fChainParams;
73 ProposalFunction* fPropFunc;
75 Int_t fNumBurnInSteps;
76 enum FunctionSign fSign;
77 enum FunctionType fType;
80 virtual Bool_t ShouldTakeStep(Double_t d);
81 virtual Double_t CalcNLL(Double_t xL);
83 ClassDef(MetropolisHastings,2)