BAT  0.9.4
The Bayesian analysis toolkit
 All Classes Namespaces Functions Variables Enumerations
BCEngineMCMC.h
1 #ifndef __BCENGINEMCMC__H
2 #define __BCENGINEMCMC__H
3 
16 /*
17  * Copyright (C) 2007-2014, the BAT core developer team
18  * All rights reserved.
19  *
20  * For the licensing terms see doc/COPYING.
21  * For documentation see http://mpp.mpg.de/bat
22  */
23 
24 // ---------------------------------------------------------
25 
26 #include "BCParameterSet.h"
27 
28 #include <vector>
29 
30 class BCH1D;
31 class BCH2D;
32 
33 // ROOT classes
34 class TH1D;
35 class TH2D;
36 class TTree;
37 class TRandom3;
38 
39 // ---------------------------------------------------------
40 
42 {
43 
44  public:
45 
50  enum Precision{ kLow, kMedium, kHigh, kVeryHigh };
51 
58  BCEngineMCMC();
59 
62  BCEngineMCMC(const BCEngineMCMC & enginemcmc);
63 
66  virtual ~BCEngineMCMC();
67 
74  BCEngineMCMC & operator = (const BCEngineMCMC & engineMCMC);
75 
82  unsigned MCMCGetNChains() const
83  { return fMCMCNChains; }
84 
87  unsigned MCMCGetNLag() const
88  { return fMCMCNLag; }
89 
92  const std::vector<unsigned> & MCMCGetNIterations() const
93  { return fMCMCNIterations; }
94 
97  unsigned MCMCGetCurrentIteration() const
98  { return fMCMCCurrentIteration; }
99 
102  unsigned MCMCGetCurrentChain() const
103  { return fMCMCCurrentChain; }
104 
110 
114  { return fMCMCFlagConvergenceGlobal; }
115 
118  unsigned MCMCGetNIterationsMax() const
119  { return fMCMCNIterationsMax; }
120 
123  unsigned MCMCGetNIterationsRun() const
124  { return fMCMCNIterationsRun; }
125 
129  { return fMCMCNIterationsPreRunMin; }
130 
133  unsigned MCMCGetNIterationsUpdate() const
134  { return fMCMCNIterationsUpdate; }
135 
139  { return fMCMCNIterationsUpdateMax; }
140 
143  std::vector<int> MCMCGetNTrialsTrue() const
144  { return fMCMCNTrialsTrue; }
145 
148  int MCMCGetNTrials() const
149  { return fMCMCNTrials; }
150 
154  const std::vector<double> & MCMCGetprobMean() const
155  { return fMCMCprobMean; }
156 
160  const std::vector<double> & MCMCGetVariance() const
161  { return fMCMCprobVar; }
162 
165  const std::vector<double> & MCMCGetTrialFunctionScaleFactor() const
167 
171  std::vector<double> MCMCGetTrialFunctionScaleFactor(unsigned ichain) const;
172 
177  double MCMCGetTrialFunctionScaleFactor(unsigned ichain, unsigned ipar);
178 
181  const std::vector<double> & MCMCGetx() const
182  { return fMCMCx; }
183 
187  std::vector<double> MCMCGetx(unsigned ichain);
188 
193  double MCMCGetx(unsigned ichain, unsigned ipar) const;
194 
197  const std::vector<double> & MCMCGetLogProbx() const
198  { return fMCMCprob; }
199 
203  double MCMCGetLogProbx(unsigned ichain);
204 
207  int MCMCGetPhase() const
208  { return fMCMCPhase; }
209 
212  const std::vector<double> & MCMCGetMaximumPoints() const
213  { return fMCMCxMax; }
214 
218  std::vector<double> MCMCGetMaximumPoint(unsigned i) const;
219 
222  const std::vector<double> & MCMCGetMaximumLogProb() const
223  { return fMCMCprobMax; }
224 
228  { return fMCMCFlagInitialPosition; }
229 
232  double MCMCGetRValueCriterion() const
233  { return fMCMCRValueCriterion; }
234 
239 
242  double MCMCGetRValue() const
243  { return fMCMCRValue; }
244 
248  double MCMCGetRValueParameters(unsigned i)
249  { return fMCMCRValueParameters.at(i); }
250 
252  bool MCMCGetRValueStrict() const
253  { return fMCMCRValueUseStrict; }
254 
257  bool MCMCGetFlagRun() const
258  { return fMCMCFlagRun; }
259 
264  TTree * MCMCGetMarkovChainTree(unsigned i)
265  { if (i < fMCMCTrees.size())
266  return fMCMCTrees.at(i);
267  else
268  return 0; }
269 
274  BCH1D * MCMCGetH1Marginalized(unsigned i);
275 
281  BCH2D * MCMCGetH2Marginalized(unsigned i, unsigned j);
282 
286  { return fParameters; }
287 
291  BCParameter * GetParameter(int index) const
292  { return fParameters.Get(index); }
293 
297  BCParameter * GetParameter(const char * name) const
298  { return fParameters.Get(name); }
299 
302  unsigned int GetNParameters() const
303  { return fParameters.Size(); }
304 
307  unsigned int GetNFixedParameters();
308 
311  unsigned int GetNFreeParameters();
312 
317  const std::vector<double> & GetBestFitParametersMarginalized() const;
318 
326  void MCMCSetTrialFunctionScaleFactor(std::vector<double> scale)
328 
331  void MCMCSetNChains(unsigned n);
332 
335  void MCMCSetNLag(unsigned n)
336  { fMCMCNLag = n; }
337 
340  void MCMCSetNIterationsMax(unsigned n)
341  { fMCMCNIterationsMax = n; }
342 
345  void MCMCSetNIterationsRun(unsigned n)
346  { fMCMCNIterationsRun = n; }
347 
352 
357  void MCMCSetNIterationsUpdate(unsigned n)
358  { fMCMCNIterationsUpdate = n; }
359 
367 
370  void MCMCSetMinimumEfficiency(double efficiency)
371  { fMCMCEfficiencyMin = efficiency; }
372 
375  void MCMCSetMaximumEfficiency(double efficiency)
376  { fMCMCEfficiencyMax = efficiency; }
377 
380  void MCMCSetRandomSeed(unsigned seed);
381 
384  void MCMCSetWriteChainToFile(bool flag)
385  { fMCMCFlagWriteChainToFile = flag; }
386 
389  void MCMCSetWritePreRunToFile(bool flag)
390  { fMCMCFlagWritePreRunToFile = flag; }
391 
395  void MCMCSetInitialPositions(const std::vector<double> &x0s);
396 
400  void MCMCSetInitialPositions(std::vector< std::vector<double> > x0s);
401 
405  { fMCMCFlagInitialPosition = flag; }
406 
411  { fMCMCFlagOrderParameters = flag; }
412 
414  void MCMCSetFlagFillHistograms(bool flag);
415 
417  void MCMCSetFlagPreRun(bool flag)
418  { fMCMCFlagPreRun = flag; }
419 
422  void MCMCSetRValueCriterion(double r)
423  { fMCMCRValueCriterion = r; }
424 
429 
431  void MCMCSetRValueStrict(bool strict=true)
432  { fMCMCRValueUseStrict = strict; }
433 
436  void MCMCSetMarkovChainTrees(const std::vector<TTree *> & trees);
437 
441 
446  int SetMarginalized(unsigned index, TH1D * h);
447 
453  int SetMarginalized(unsigned index1, unsigned index2, TH2D * h);
454 
457  void MCMCSetValuesDefault();
458 
461  void MCMCSetValuesQuick();
462 
465  void MCMCSetValuesDetail();
466 
470 #if 0
471 
477  void SetParameterRange(unsigned int index, double parmin, double parmax);
478 #endif
479 
482  void SetNbins(unsigned int nbins);
483 
492  void WriteMarkovChain(bool flag)
493  {
496  }
497 
498 #if 0
499 
501  void SetMarkovChainInitialPosition(const std::vector<double> & position)
502  { fXmetro0 = position; }
503 
506  void SetMarkovChainStepSize(double stepsize)
507  { fMarkovChainStepSize = stepsize; }
508 
511  void SetMarkovChainNIterations(int niterations)
512  { fMarkovChainNIterations = niterations;
513  fMarkovChainAutoN = false; }
514 
517  void SetMarkovChainAutoN(bool flag)
518  { fMarkovChainAutoN = flag; }
519 #endif
520 
528  void Copy(const BCEngineMCMC & enginemcmc);
529 
536  virtual int AddParameter(const char * name, double min, double max, const char * latexname = "");
537 
542  virtual int AddParameter(BCParameter* parameter);
543 
550  virtual void MCMCTrialFunction(unsigned ichain, std::vector<double> &x);
551 
559  virtual double MCMCTrialFunctionSingle(unsigned ichain, unsigned ipar);
560 
566  bool MCMCGetProposalPointMetropolis(unsigned chain, std::vector<double> &x);
567 
573  bool MCMCGetProposalPointMetropolis(unsigned chain, unsigned parameter, std::vector<double> &x);
574 
578  bool MCMCGetNewPointMetropolis(unsigned chain = 0);
579  bool MCMCGetNewPointMetropolis(unsigned chain, unsigned parameter);
580 
584 
588 
592 
596 
599  void MCMCInChainWriteChains();
600 
604  virtual double LogEval(const std::vector<double> & parameters);
605 
608  int MCMCMetropolis();
609 
612  int MCMCMetropolisPreRun();
613 
616  void MCMCResetRunStatistics();
617 
621 
625  int MCMCInitialize();
626 
630  virtual void ResetResults();
631 
637  void ClearParameters(bool hard=false)
638  { fParameters.Clear(hard); }
639 
646  virtual void MCMCIterationInterface();
647 
652  {}
653 
662  virtual void MCMCCurrentPointInterface(std::vector<double> & /*point*/, int /*ichain*/, bool /*accepted*/)
663  {}
664 
667  private:
668 
669 
672  typedef bool (BCEngineMCMC::*MCMCPointerToGetProposalPoint) (int chain, std::vector<double> xnew, std::vector<double> xold) const;
673 
676  MCMCPointerToGetProposalPoint fMCMCPointerToGetProposalPoint;
677 
681  struct MCMCThreadLocalStorage
682  {
686  std::vector<double> xLocal;
687 
691  TRandom3 * rng;
692 
697  MCMCThreadLocalStorage(const unsigned & dim);
698 
699  MCMCThreadLocalStorage(const MCMCThreadLocalStorage & other);
700 
701  MCMCThreadLocalStorage & operator = (const MCMCThreadLocalStorage & other);
702 
703  virtual ~MCMCThreadLocalStorage();
704  };
705 
709  std::vector<MCMCThreadLocalStorage> fMCMCThreadLocalStorage;
710 
714  void SyncThreadStorage();
715 
716  protected:
720 
723  unsigned fMCMCNChains;
724 
727  unsigned fMCMCNLag;
728 
732  std::vector<unsigned> fMCMCNIterations;
733 
738 
743 
747 
751 
756 
760 
764 
768 
772 
776  std::vector<int> fMCMCNTrialsTrue;
777 
780  unsigned fMCMCNTrials;
781 
785 
789 
793  std::vector<double> fMCMCTrialFunctionScaleFactor;
794 
798 
802 
806 
812  std::vector<double> fMCMCInitialPosition;
813 
816  std::vector<double> fMCMCEfficiencies;
817 
821 
825 
831 
836 
842 
848  std::vector<double> fMCMCx;
849 
854  std::vector<double> fMCMCxMax;
855 
859  std::vector<double> fMCMCxMean;
860 
864  std::vector<double> fMCMCxVar;
865 
869  std::vector<double> fMCMCprob;
870 
874  std::vector<double> fMCMCprobMax;
875 
879  std::vector<double> fMCMCprobMean;
880 
884  std::vector<double> fMCMCprobVar;
885 
893 
897 
901 
904  double fMCMCRValue;
905 
907  std::vector<double> fMCMCRValueParameters;
908 
911  TRandom3 * fRandom;
912 
915  std::vector<TH1D *> fMCMCH1Marginalized;
916  std::vector<TH2D *> fMCMCH2Marginalized;
917 
921  std::vector<TTree *> fMCMCTrees;
922 
925  std::vector<double> fMCMCBestFitParameters;
926 
930 
933  std::vector<double> fMarginalModes;
934 };
935 
936 // ---------------------------------------------------------
937 
938 #endif
void MCMCSetValuesDetail()
const BCParameterSet & GetParameters() const
Definition: BCEngineMCMC.h:285
void MCMCSetWriteChainToFile(bool flag)
Definition: BCEngineMCMC.h:384
std::vector< double > MCMCGetMaximumPoint(unsigned i) const
int SetMarginalized(unsigned index, TH1D *h)
virtual void ResetResults()
std::vector< double > fMCMCBestFitParameters
Definition: BCEngineMCMC.h:925
void ClearParameters(bool hard=false)
Definition: BCEngineMCMC.h:637
void MCMCSetRValueCriterion(double r)
Definition: BCEngineMCMC.h:422
int fMCMCFlagInitialPosition
Definition: BCEngineMCMC.h:830
void MCMCSetTrialFunctionScaleFactor(std::vector< double > scale)
Definition: BCEngineMCMC.h:326
void MCMCSetFlagPreRun(bool flag)
Definition: BCEngineMCMC.h:417
void MCMCSetRandomSeed(unsigned seed)
void MCMCSetNLag(unsigned n)
Definition: BCEngineMCMC.h:335
virtual void MCMCTrialFunction(unsigned ichain, std::vector< double > &x)
virtual ~BCEngineMCMC()
unsigned MCMCGetNIterationsMax() const
Definition: BCEngineMCMC.h:118
BCH2D * MCMCGetH2Marginalized(unsigned i, unsigned j)
int MCMCMetropolisPreRun()
virtual void MCMCUserIterationInterface()
Definition: BCEngineMCMC.h:651
double MCMCGetRValueParameters(unsigned i)
Definition: BCEngineMCMC.h:248
void MCMCResetRunStatistics()
const std::vector< double > & MCMCGetx() const
Definition: BCEngineMCMC.h:181
void MCMCInitializeMarkovChains()
std::vector< double > fMCMCx
Definition: BCEngineMCMC.h:848
std::vector< double > fMCMCInitialPosition
Definition: BCEngineMCMC.h:812
void MCMCSetNIterationsPreRunMin(unsigned n)
Definition: BCEngineMCMC.h:350
int fMCMCCurrentChain
Definition: BCEngineMCMC.h:742
unsigned fMCMCNIterationsUpdate
Definition: BCEngineMCMC.h:746
int MCMCGetPhase() const
Definition: BCEngineMCMC.h:207
unsigned MCMCGetNIterationsRun() const
Definition: BCEngineMCMC.h:123
unsigned MCMCGetCurrentChain() const
Definition: BCEngineMCMC.h:102
void MCMCSetRValueStrict(bool strict=true)
Definition: BCEngineMCMC.h:431
std::vector< unsigned > fMCMCNIterations
Definition: BCEngineMCMC.h:732
unsigned int GetNFreeParameters()
void MCMCInChainCheckMaximum()
A class for handling 2D distributions.
Definition: BCH2D.h:37
void MCMCSetNIterationsUpdateMax(unsigned n)
Definition: BCEngineMCMC.h:365
std::vector< double > fMCMCprobMean
Definition: BCEngineMCMC.h:879
double fMCMCLogMaximum
Definition: BCEngineMCMC.h:929
void WriteMarkovChain(bool flag)
Definition: BCEngineMCMC.h:492
std::vector< int > MCMCGetNTrialsTrue() const
Definition: BCEngineMCMC.h:143
const std::vector< double > & GetBestFitParametersMarginalized() const
TRandom3 * fRandom
Definition: BCEngineMCMC.h:911
const std::vector< double > & MCMCGetMaximumPoints() const
Definition: BCEngineMCMC.h:212
int MCMCGetFlagInitialPosition() const
Definition: BCEngineMCMC.h:227
bool MCMCGetFlagRun() const
Definition: BCEngineMCMC.h:257
double MCMCGetRValueParametersCriterion() const
Definition: BCEngineMCMC.h:237
virtual double LogEval(const std::vector< double > &parameters)
void MCMCSetInitialPositions(const std::vector< double > &x0s)
unsigned MCMCGetNLag() const
Definition: BCEngineMCMC.h:87
void MCMCInChainTestConvergenceAllChains()
unsigned MCMCGetNIterationsConvergenceGlobal() const
Definition: BCEngineMCMC.h:108
const std::vector< unsigned > & MCMCGetNIterations() const
Definition: BCEngineMCMC.h:92
unsigned MCMCGetNChains() const
Definition: BCEngineMCMC.h:82
std::vector< double > fMCMCprobVar
Definition: BCEngineMCMC.h:884
double fMCMCEfficiencyMax
Definition: BCEngineMCMC.h:824
void MCMCSetFlagOrderParameters(bool flag)
Definition: BCEngineMCMC.h:410
void MCMCSetFlagFillHistograms(bool flag)
void MCMCSetFlagInitialPosition(int flag)
Definition: BCEngineMCMC.h:404
double fMCMCEfficiencyMin
Definition: BCEngineMCMC.h:820
unsigned fMCMCNIterationsPreRunMin
Definition: BCEngineMCMC.h:771
BCEngineMCMC & operator=(const BCEngineMCMC &engineMCMC)
void MCMCSetMaximumEfficiency(double efficiency)
Definition: BCEngineMCMC.h:375
int fMCMCNIterationsConvergenceGlobal
Definition: BCEngineMCMC.h:755
void MCMCInitializeMarkovChainTrees()
const std::vector< double > & MCMCGetprobMean() const
Definition: BCEngineMCMC.h:154
void Copy(const BCEngineMCMC &enginemcmc)
void SetNbins(unsigned int nbins)
bool fMCMCFlagWritePreRunToFile
Definition: BCEngineMCMC.h:788
bool fMCMCFlagPreRun
Definition: BCEngineMCMC.h:801
void MCMCSetMinimumEfficiency(double efficiency)
Definition: BCEngineMCMC.h:370
unsigned fMCMCNIterationsRun
Definition: BCEngineMCMC.h:767
A class representing a parameter of a model.
Definition: BCParameter.h:28
virtual double MCMCTrialFunctionSingle(unsigned ichain, unsigned ipar)
std::vector< double > fMCMCxMean
Definition: BCEngineMCMC.h:859
unsigned fMCMCNIterationsUpdateMax
Definition: BCEngineMCMC.h:750
std::vector< double > fMarginalModes
Definition: BCEngineMCMC.h:933
bool fMCMCRValueUseStrict
Definition: BCEngineMCMC.h:892
An engine class for Markov Chain Monte Carlo.
Definition: BCEngineMCMC.h:41
bool MCMCGetProposalPointMetropolis(unsigned chain, std::vector< double > &x)
unsigned int GetNFixedParameters()
std::vector< double > fMCMCEfficiencies
Definition: BCEngineMCMC.h:816
void MCMCInChainFillHistograms()
TTree * MCMCGetMarkovChainTree(unsigned i)
Definition: BCEngineMCMC.h:264
unsigned int GetNParameters() const
Definition: BCEngineMCMC.h:302
unsigned fMCMCNChains
Definition: BCEngineMCMC.h:723
const std::vector< double > & MCMCGetLogProbx() const
Definition: BCEngineMCMC.h:197
unsigned fMCMCNIterationsMax
Definition: BCEngineMCMC.h:763
unsigned MCMCGetCurrentIteration() const
Definition: BCEngineMCMC.h:97
const std::vector< double > & MCMCGetVariance() const
Definition: BCEngineMCMC.h:160
bool fMCMCFlagConvergenceGlobal
Definition: BCEngineMCMC.h:759
virtual int AddParameter(const char *name, double min, double max, const char *latexname="")
std::vector< double > fMCMCxVar
Definition: BCEngineMCMC.h:864
unsigned Size() const
bool MCMCGetFlagConvergenceGlobal() const
Definition: BCEngineMCMC.h:113
BCH1D * MCMCGetH1Marginalized(unsigned i)
void MCMCSetNChains(unsigned n)
A class for handling 1D distributions.
Definition: BCH1D.h:31
virtual void MCMCCurrentPointInterface(std::vector< double > &, int, bool)
Definition: BCEngineMCMC.h:662
BCParameterSet fParameters
Definition: BCEngineMCMC.h:719
void MCMCSetValuesQuick()
bool fMCMCFlagWriteChainToFile
Definition: BCEngineMCMC.h:784
void MCMCSetNIterationsMax(unsigned n)
Definition: BCEngineMCMC.h:340
void MCMCSetMarkovChainTrees(const std::vector< TTree * > &trees)
void MCMCSetNIterationsUpdate(unsigned n)
Definition: BCEngineMCMC.h:357
int fMCMCCurrentIteration
Definition: BCEngineMCMC.h:737
std::vector< double > fMCMCTrialFunctionScaleFactorStart
Definition: BCEngineMCMC.h:797
std::vector< int > fMCMCNTrialsTrue
Definition: BCEngineMCMC.h:776
std::vector< TTree * > fMCMCTrees
Definition: BCEngineMCMC.h:921
virtual void MCMCIterationInterface()
double MCMCGetRValueCriterion() const
Definition: BCEngineMCMC.h:232
void MCMCSetValuesDefault()
void MCMCSetNIterationsRun(unsigned n)
Definition: BCEngineMCMC.h:345
std::vector< double > fMCMCprobMax
Definition: BCEngineMCMC.h:874
bool MCMCGetRValueStrict() const
Definition: BCEngineMCMC.h:252
const std::vector< double > & MCMCGetMaximumLogProb() const
Definition: BCEngineMCMC.h:222
double fMCMCRValueParametersCriterion
Definition: BCEngineMCMC.h:900
BCParameter * Get(unsigned index) const
double fMCMCRValue
Definition: BCEngineMCMC.h:904
std::vector< double > fMCMCxMax
Definition: BCEngineMCMC.h:854
unsigned MCMCGetNIterationsUpdateMax() const
Definition: BCEngineMCMC.h:138
const std::vector< double > & MCMCGetTrialFunctionScaleFactor() const
Definition: BCEngineMCMC.h:165
bool fMCMCFlagOrderParameters
Definition: BCEngineMCMC.h:835
unsigned fMCMCNLag
Definition: BCEngineMCMC.h:727
std::vector< double > fMCMCRValueParameters
Definition: BCEngineMCMC.h:907
void MCMCSetWritePreRunToFile(bool flag)
Definition: BCEngineMCMC.h:389
BCParameter * GetParameter(int index) const
Definition: BCEngineMCMC.h:291
unsigned MCMCGetNIterationsPreRunMin() const
Definition: BCEngineMCMC.h:128
void MCMCInChainUpdateStatistics()
BCParameter * GetParameter(const char *name) const
Definition: BCEngineMCMC.h:297
void MCMCInChainWriteChains()
int MCMCGetNTrials() const
Definition: BCEngineMCMC.h:148
void MCMCSetRValueParametersCriterion(double r)
Definition: BCEngineMCMC.h:427
double fMCMCRValueCriterion
Definition: BCEngineMCMC.h:896
unsigned MCMCGetNIterationsUpdate() const
Definition: BCEngineMCMC.h:133
std::vector< TH1D * > fMCMCH1Marginalized
Definition: BCEngineMCMC.h:915
std::vector< double > fMCMCTrialFunctionScaleFactor
Definition: BCEngineMCMC.h:793
void MCMCSetPrecision(BCEngineMCMC::Precision precision)
std::vector< double > fMCMCprob
Definition: BCEngineMCMC.h:869
bool MCMCGetNewPointMetropolis(unsigned chain=0)
unsigned fMCMCNTrials
Definition: BCEngineMCMC.h:780
double MCMCGetRValue() const
Definition: BCEngineMCMC.h:242