Go to the documentation of this file.00001 #ifndef HiggsAnalysis_CombinedLimit_MarkovChainMC_h
00002 #define HiggsAnalysis_CombinedLimit_MarkovChainMC_h
00003
00011 #include "../interface/LimitAlgo.h"
00012 #include <TList.h>
00013 class RooArgSet;
00014 namespace RooStats { class MarkovChain; }
00015
00016 class MarkovChainMC : public LimitAlgo {
00017 public:
00018 MarkovChainMC() ;
00019 virtual void applyOptions(const boost::program_options::variables_map &vm) ;
00020 bool run(RooWorkspace *w, RooStats::ModelConfig *mc_s, RooStats::ModelConfig *mc_b, RooAbsData &data, double &limit, double &limitErr, const double *hint);
00021 virtual const std::string & name() const {
00022 static const std::string name("MarkovChainMC");
00023 return name;
00024 }
00025 private:
00026 enum ProposalType { FitP, UniformP, MultiGaussianP, TestP };
00027 static std::string proposalTypeName_;
00028 static ProposalType proposalType_;
00029 static bool runMinos_, noReset_, updateProposalParams_, updateHint_;
00031 static unsigned int iterations_;
00033 static unsigned int burnInSteps_;
00035 static float burnInFraction_;
00037 static bool adaptiveBurnIn_;
00039 static unsigned int tries_;
00041 static float truncatedMeanFraction_;
00043 static bool adaptiveTruncation_;
00045 static float hintSafetyFactor_;
00047 static bool saveChain_;
00049 static bool noSlimChain_;
00051 static bool mergeChains_;
00053 static bool readChains_;
00055 float mass_;
00057 int modelNDF_;
00058
00059 static unsigned int numberOfBins_;
00060 static unsigned int proposalHelperCacheSize_;
00061 static bool alwaysStepPoi_;
00062 static float proposalHelperWidthRangeDivisor_, proposalHelperUniformFraction_;
00063 static float cropNSigmas_;
00064 static int debugProposal_;
00065
00066 mutable TList chains_;
00067
00068
00069 int runOnce(RooWorkspace *w, RooStats::ModelConfig *mc_s, RooStats::ModelConfig *mc_b, RooAbsData &data, double &limit, double &limitErr, const double *hint) const ;
00070
00071 RooStats::MarkovChain *mergeChains(const RooArgSet &poi, const std::vector<double> &limits) const;
00072 void readChains(const RooArgSet &poi, std::vector<double> &limits);
00073 void limitFromChain(double &limit, double &limitErr, const RooArgSet &poi, RooStats::MarkovChain &chain, int burnInSteps=-1 ) ;
00074 void limitAndError(double &limit, double &limitErr, const std::vector<double> &limits) const ;
00075 RooStats::MarkovChain *slimChain(const RooArgSet &poi, const RooStats::MarkovChain &chain) const;
00076 int guessBurnInSteps(const RooStats::MarkovChain &chain) const;
00077
00079 int stationarityTest(const RooStats::MarkovChain &chain, const RooArgSet &poi, int nchunks) const ;
00080 };
00081
00082 #endif