• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

BCEngineMCMC.h

Go to the documentation of this file.
00001 #ifndef __BCENGINEMCMC__H
00002 #define __BCENGINEMCMC__H
00003 
00023 // ---------------------------------------------------------
00024 
00025 #include <vector>
00026 
00027 // ROOT classes
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             // suppress warnings for unused parameters
00567             // with optimization, no code should be generated
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

Generated by  doxygen 1.7.1