Go to the documentation of this file.00001 #ifndef __BCENGINEMCMC__H
00002 #define __BCENGINEMCMC__H
00003
00023
00024
00025 #include <vector>
00026
00027
00028 class TH1D;
00029 class TH2D;
00030 class TTree;
00031 class TRandom3;
00032
00033
00034
00035 class BCEngineMCMC
00036 {
00037
00038 public:
00039
00044 enum Precision{ kLow, kMedium, kHigh, kVeryHigh };
00045
00052 BCEngineMCMC();
00053
00057 BCEngineMCMC(int n);
00058
00061 BCEngineMCMC(const BCEngineMCMC & enginemcmc);
00062
00065 virtual ~BCEngineMCMC();
00066
00073 BCEngineMCMC & operator = (const BCEngineMCMC & engineMCMC);
00074
00081 int MCMCGetNParameters()
00082 { return fMCMCNParameters; }
00083
00086 int MCMCGetNChains()
00087 { return fMCMCNChains; }
00088
00091 int MCMCGetNLag()
00092 { return fMCMCNLag; }
00093
00096 std::vector<int> MCMCGetNIterations()
00097 { return fMCMCNIterations; }
00098
00101 int MCMCGetCurrentIteration()
00102 { return fMCMCCurrentIteration; }
00103
00106 int MCMCGetCurrentChain()
00107 { return fMCMCCurrentChain; }
00108
00112 int MCMCGetNIterationsConvergenceGlobal()
00113 { return fMCMCNIterationsConvergenceGlobal; }
00114
00117 bool MCMCGetFlagConvergenceGlobal()
00118 { return fMCMCFlagConvergenceGlobal; }
00119
00122 int MCMCGetNIterationsMax()
00123 { return fMCMCNIterationsMax; }
00124
00127 int MCMCGetNIterationsRun()
00128 { return fMCMCNIterationsRun; }
00129
00132 int MCMCGetNIterationsPreRunMin()
00133 { return fMCMCNIterationsPreRunMin; }
00134
00137 int MCMCGetNIterationsUpdate()
00138 { return fMCMCNIterationsUpdate; }
00139
00142 int MCMCGetNIterationsUpdateMax()
00143 { return fMCMCNIterationsUpdateMax; }
00144
00147 std::vector<int> MCMCGetNTrialsTrue()
00148 { return fMCMCNTrialsTrue; }
00149
00152 std::vector<int> MCMCGetNTrialsFalse()
00153 { return fMCMCNTrialsFalse; }
00154
00158 std::vector<double> MCMCGetprobMean()
00159 { return fMCMCprobMean; }
00160
00164 std::vector<double> MCMCGetVariance()
00165 { return fMCMCprobVar; }
00166
00169 std::vector<double> MCMCGetTrialFunctionScaleFactor()
00170 { return fMCMCTrialFunctionScaleFactor; }
00171
00175 std::vector<double> MCMCGetTrialFunctionScaleFactor(int ichain);
00176
00181 double MCMCGetTrialFunctionScaleFactor(int ichain, int ipar);
00182
00185 std::vector<double> MCMCGetx()
00186 { return fMCMCx; }
00187
00191 std::vector<double> MCMCGetx(int ichain);
00192
00197 double MCMCGetx(int ichain, int ipar);
00198
00201 std::vector<double> MCMCGetLogProbx()
00202 { return fMCMCprob; }
00203
00207 double MCMCGetLogProbx(int ichain);
00208
00211 int MCMCGetPhase()
00212 { return fMCMCPhase; }
00213
00216 int MCMCGetCycle()
00217 { return fMCMCCycle; }
00218
00221 std::vector<double> MCMCGetMaximumPoints()
00222 { return fMCMCxMax; }
00223
00227 std::vector<double> MCMCGetMaximumPoint(int i);
00228
00231 std::vector<double> MCMCGetMaximumLogProb()
00232 { return fMCMCprobMax; }
00233
00236 int MCMCGetFlagInitialPosition()
00237 { return fMCMCFlagInitialPosition; }
00238
00241 double MCMCGetRValueCriterion()
00242 { return fMCMCRValueCriterion; }
00243
00246 double MCMCGetRValueParametersCriterion()
00247 { return fMCMCRValueParametersCriterion; }
00248
00251 double MCMCGetRValue()
00252 { return fMCMCRValue; }
00253
00257 double MCMCGetRValueParameters(int i)
00258 { return fMCMCRValueParameters.at(i); }
00259
00261 bool MCMCGetRValueStrict()
00262 { return fMCMCRValueUseStrict; }
00263
00266 bool MCMCGetFlagRun()
00267 { return fMCMCFlagRun; }
00268
00273 TTree * MCMCGetMarkovChainTree(int i)
00274 { return fMCMCTrees.at(i); }
00275
00280 TH1D * MCMCGetH1Marginalized(int i);
00281
00287 TH2D * MCMCGetH2Marginalized(int i, int j);
00288
00293 TRandom3 * MCMCGetTRandom3()
00294 { return fRandom; }
00295
00303 void MCMCSetTrialFunctionScaleFactor(std::vector<double> scale)
00304 { fMCMCTrialFunctionScaleFactorStart = scale; }
00305
00308 void MCMCSetNChains(int n);
00309
00312 void MCMCSetNLag(int n)
00313 { fMCMCNLag = n; }
00314
00317 void MCMCSetNIterationsMax(int n)
00318 { fMCMCNIterationsMax = n; }
00319
00322 void MCMCSetNIterationsRun(int n)
00323 { fMCMCNIterationsRun = n; }
00324
00327 void MCMCSetNIterationsPreRunMin(int n)
00328 { fMCMCNIterationsPreRunMin = n; }
00329
00334 void MCMCSetNIterationsUpdate(int n)
00335 { fMCMCNIterationsUpdate = n; }
00336
00342 void MCMCSetNIterationsUpdateMax(int n)
00343 { fMCMCNIterationsUpdateMax = n; }
00344
00347 void MCMCSetMinimumEfficiency(double efficiency)
00348 { fMCMCEfficiencyMin = efficiency; }
00349
00352 void MCMCSetMaximumEfficiency(double efficiency)
00353 { fMCMCEfficiencyMax = efficiency; }
00354
00357 void MCMCSetWriteChainToFile(bool flag)
00358 { fMCMCFlagWriteChainToFile = flag; }
00359
00362 void MCMCSetWritePreRunToFile(bool flag)
00363 { fMCMCFlagWritePreRunToFile = flag; }
00364
00368 void MCMCSetInitialPositions(const std::vector<double> &x0s);
00369
00373 void MCMCSetInitialPositions(std::vector< std::vector<double> > x0s);
00374
00377 void MCMCSetFlagInitialPosition(int flag)
00378 { fMCMCFlagInitialPosition = flag; }
00379
00383 void MCMCSetFlagOrderParameters(bool flag)
00384 { fMCMCFlagOrderParameters = flag; }
00385
00387 void MCMCSetFlagFillHistograms(bool flag);
00388
00390 void MCMCSetFlagFillHistograms(int index, bool flag);
00391
00393 void MCMCSetFlagPreRun(bool flag)
00394 { fMCMCFlagPreRun = flag; }
00395
00398 void MCMCSetRValueCriterion(double r)
00399 { fMCMCRValueCriterion = r; }
00400
00403 void MCMCSetRValueParametersCriterion(double r)
00404 { fMCMCRValueParametersCriterion = r; }
00405
00407 void MCMCSetRValueStrict(bool strict=true)
00408 { fMCMCRValueUseStrict = strict; }
00409
00412 void MCMCSetMarkovChainTrees(std::vector<TTree *> trees);
00413
00416 void MCMCInitializeMarkovChainTrees();
00417
00422 int SetMarginalized(int index, TH1D * h);
00423
00429 int SetMarginalized(int index1, int index2, TH2D * h);
00430
00433 void MCMCSetValuesDefault();
00434
00437 void MCMCSetValuesQuick();
00438
00441 void MCMCSetValuesDetail();
00442
00445 void MCMCSetPrecision(BCEngineMCMC::Precision precision);
00446
00447
00457 int MCMCAddParameter(double min, double max);
00458
00465 virtual void MCMCTrialFunction(int ichain, std::vector<double> &x);
00466
00474 virtual double MCMCTrialFunctionSingle(int ichain, int ipar);
00475
00481 bool MCMCGetProposalPointMetropolis(int chain, std::vector<double> &x);
00482
00488 bool MCMCGetProposalPointMetropolis(int chain, int parameter, std::vector<double> &x);
00489
00493 bool MCMCGetNewPointMetropolis(int chain = 0);
00494 bool MCMCGetNewPointMetropolis(int chain, int parameter);
00495
00498 void MCMCInChainCheckMaximum();
00499
00502 void MCMCInChainUpdateStatistics();
00503
00506 void MCMCInChainFillHistograms();
00507
00510 void MCMCInChainTestConvergenceAllChains();
00511
00514 void MCMCInChainWriteChains();
00515
00519 virtual double LogEval(const std::vector<double> & parameters);
00520
00523 int MCMCMetropolis();
00524
00527 int MCMCMetropolisPreRun();
00528
00531 void MCMCResetRunStatistics();
00532
00535 void MCMCInitializeMarkovChains();
00536
00540 int MCMCInitialize();
00541
00545 int MCMCResetResults();
00546
00553 virtual void MCMCIterationInterface()
00554 {}
00555
00564 virtual void MCMCCurrentPointInterface(std::vector<double> & point, int ichain, bool accepted)
00565 {
00566
00567
00568 (void)point;
00569 (void)ichain;
00570 (void)accepted;
00571 }
00572
00575 private:
00576
00579 typedef bool (BCEngineMCMC::*MCMCPointerToGetProposalPoint) (int chain, std::vector<double> xnew, std::vector<double> xold) const;
00580
00583 MCMCPointerToGetProposalPoint fMCMCPointerToGetProposalPoint;
00584
00585 protected:
00586
00589 int fMCMCNParameters;
00590
00593 std::vector<double> fMCMCBoundaryMin;
00594 std::vector<double> fMCMCBoundaryMax;
00595
00598 std::vector<bool> fMCMCFlagsFillHistograms;
00599
00602 int fMCMCNChains;
00603
00606 int fMCMCNLag;
00607
00611 std::vector<int> fMCMCNIterations;
00612
00616 int fMCMCCurrentIteration;
00617
00621 int fMCMCCurrentChain;
00622
00625 int fMCMCNIterationsUpdate;
00626
00629 int fMCMCNIterationsUpdateMax;
00630
00634 int fMCMCNIterationsConvergenceGlobal;
00635
00638 bool fMCMCFlagConvergenceGlobal;
00639
00642 int fMCMCNIterationsMax;
00643
00646 int fMCMCNIterationsRun;
00647
00650 int fMCMCNIterationsPreRunMin;
00651
00655 std::vector<int> fMCMCNTrialsTrue;
00656
00660 std::vector<int> fMCMCNTrialsFalse;
00661
00664 bool fMCMCFlagWriteChainToFile;
00665
00668 bool fMCMCFlagWritePreRunToFile;
00669
00673 std::vector<double> fMCMCTrialFunctionScaleFactor;
00674
00675
00678 std::vector<double> fMCMCTrialFunctionScaleFactorStart;
00679
00682 bool fMCMCFlagPreRun;
00683
00686 bool fMCMCFlagRun;
00687
00693 std::vector<double> fMCMCInitialPosition;
00694
00697 double fMCMCEfficiencyMin;
00698
00701 double fMCMCEfficiencyMax;
00702
00707 int fMCMCFlagInitialPosition;
00708
00712 bool fMCMCFlagOrderParameters;
00713
00716 bool fMCMCFlagFillHistograms;
00717
00722 int fMCMCPhase;
00723
00727 int fMCMCCycle;
00728
00734 std::vector<double> fMCMCx;
00735
00740 std::vector<double> fMCMCxMax;
00741
00745 std::vector<double> fMCMCxMean;
00746
00750 std::vector<double> fMCMCxVar;
00751
00754 std::vector<double> fMCMCxLocal;
00755
00759 std::vector<double> fMCMCprob;
00760
00764 std::vector<double> fMCMCprobMax;
00765
00769 std::vector<double> fMCMCprobMean;
00770
00774 std::vector<double> fMCMCprobVar;
00775
00782 bool fMCMCRValueUseStrict;
00783
00786 double fMCMCRValueCriterion;
00787
00790 double fMCMCRValueParametersCriterion;
00791
00794 double fMCMCRValue;
00795
00797 std::vector<double> fMCMCRValueParameters;
00798
00801 TRandom3 * fRandom;
00802
00805 std::vector<int> fMCMCH1NBins;
00806
00809 std::vector<TH1D *> fMCMCH1Marginalized;
00810 std::vector<TH2D *> fMCMCH2Marginalized;
00811
00815 std::vector<TTree *> fMCMCTrees;
00816 };
00817
00818
00819
00820 #endif