CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_6/src/HiggsAnalysis/CombinedLimit/interface/MarkovChainMC.h

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   // return number of items in chain, 0 for error
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 /* -1 = use default */) ;
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