BCEngineMCMC Class Reference

An engine class for Markov Chain Monte Carlo. More...

#include <BCEngineMCMC.h>

Inherited by BCIntegrate.

List of all members.

Public Member Functions

Constructors and destructors



 BCEngineMCMC (const BCEngineMCMC &enginemcmc)
 BCEngineMCMC (int n)
 BCEngineMCMC ()
virtual ~BCEngineMCMC ()
Miscellaneous methods



virtual double LogEval (std::vector< double > parameters)
int MCMCAddParameter (double min, double max)
bool MCMCGetNewPointMetropolis (int chain, int parameter)
bool MCMCGetNewPointMetropolis (int chain=0)
bool MCMCGetProposalPointMetropolis (int chain, int parameter, std::vector< double > &x)
bool MCMCGetProposalPointMetropolis (int chain, std::vector< double > &x)
int MCMCInitialize ()
void MCMCInitializeMarkovChains ()
virtual void MCMCIterationInterface ()
int MCMCMetropolis ()
int MCMCMetropolisPreRun ()
void MCMCResetRunStatistics ()
virtual void MCMCTrialFunction (int chain, std::vector< double > &x)
virtual void MCMCTrialFunctionSingle (int ichain, int iparameter, std::vector< double > &x)
void MCMCUpdateStatisticsCheckMaximum ()
void MCMCUpdateStatisticsFillHistograms ()
void MCMCUpdateStatisticsTestConvergenceAllChains ()
void MCMCUpdateStatisticsWriteChains ()
Getters



bool MCMCGetFlagConvergenceGlobal ()
int MCMCGetFlagInitialPosition ()
bool MCMCGetFlagRun ()
TH1D * MCMCGetH1Marginalized (int i)
TH2D * MCMCGetH2Marginalized (int i, int j)
double MCMCGetLogProbx (int ichain)
std::vector< double > MCMCGetLogProbx ()
TTree * MCMCGetMarkovChainTree (int i)
std::vector< double > MCMCGetMaximumLogProb ()
std::vector< double > MCMCGetMaximumPoint (int i)
std::vector< double > MCMCGetMaximumPoints ()
std::vector< double > MCMCGetMean ()
int MCMCGetNChains ()
std::vector< int > MCMCGetNIterations ()
int MCMCGetNIterationsBurnIn ()
int MCMCGetNIterationsConvergenceGlobal ()
int MCMCGetNIterationsMax ()
int MCMCGetNIterationsRun ()
int MCMCGetNLag ()
int MCMCGetNParameters ()
std::vector< int > MCMCGetNTrialsFalse ()
std::vector< int > MCMCGetNTrialsTrue ()
std::vector< double > * MCMCGetP2LogProbx ()
std::vector< int > * MCMCGetP2NIterations ()
std::vector< double > * MCMCGetP2x ()
double MCMCGetRValue ()
double MCMCGetRValueCriterion ()
double MCMCGetRValueParameters (int i)
double MCMCGetRValueParametersCriterion ()
TRandom3 * MCMCGetTRandom3 ()
double MCMCGetTrialFunctionScaleFactor (int ichain, int ipar)
std::vector< double > MCMCGetTrialFunctionScaleFactor (int ichain)
std::vector< double > MCMCGetTrialFunctionScaleFactor ()
std::vector< double > MCMCGetVariance ()
double MCMCGetx (int ichain, int ipar)
std::vector< double > MCMCGetx (int ichain)
std::vector< double > MCMCGetx ()
Setters



void MCMCSetFlagFillHistograms (int index, bool flag)
void MCMCSetFlagFillHistograms (bool flag)
void MCMCSetFlagInitialPosition (int flag)
void MCMCSetFlagOrderParameters (bool flag)
void MCMCSetInitialPositions (std::vector< std::vector< double > > x0s)
void MCMCSetInitialPositions (std::vector< double > x0s)
void MCMCSetMarkovChainTrees (std::vector< TTree * > trees)
void MCMCSetMaximumEfficiency (double efficiency)
void MCMCSetMinimumEfficiency (double efficiency)
void MCMCSetNChains (int n)
void MCMCSetNIterationsBurnIn (int n)
void MCMCSetNIterationsMax (int n)
void MCMCSetNIterationsPreRunMin (int n)
void MCMCSetNIterationsRun (int n)
void MCMCSetNIterationsUpdate (int n)
void MCMCSetNIterationsUpdateMax (int n)
void MCMCSetNLag (int n)
void MCMCSetRValueCriterion (double r)
void MCMCSetRValueParametersCriterion (double r)
void MCMCSetTrialFunctionScaleFactor (std::vector< double > scale)
void MCMCSetValuesDefault ()
void MCMCSetValuesDetail ()
void MCMCSetValuesQuick ()
void MCMCSetWriteChainToFile (bool flag)
int SetMarginalized (int index1, int index2, TH2D *h)
int SetMarginalized (int index, TH1D *h)
Assignment operators



BCEngineMCMCoperator= (const BCEngineMCMC &engineMCMC)

Protected Attributes

std::vector< double > fMCMCBoundaryMax
std::vector< double > fMCMCBoundaryMin
double fMCMCEfficiencyMax
double fMCMCEfficiencyMin
bool fMCMCFlagConvergenceGlobal
bool fMCMCFlagFillHistograms
int fMCMCFlagInitialPosition
bool fMCMCFlagOrderParameters
bool fMCMCFlagPreRun
bool fMCMCFlagRun
std::vector< bool > fMCMCFlagsFillHistograms
bool fMCMCFlagWriteChainToFile
std::vector< TH1D * > fMCMCH1Marginalized
std::vector< int > fMCMCH1NBins
std::vector< TH2D * > fMCMCH2Marginalized
std::vector< double > fMCMCInitialPosition
std::vector< double > fMCMCLogProbx
std::vector< double > fMCMCMaximumLogProb
std::vector< double > fMCMCMaximumPoints
std::vector< double > fMCMCMean
std::vector< double > fMCMCMeanx
int fMCMCNChains
std::vector< int > fMCMCNIterations
int fMCMCNIterationsBurnIn
int fMCMCNIterationsConvergenceGlobal
int fMCMCNIterationsMax
int fMCMCNIterationsPreRunMin
int fMCMCNIterationsRun
int fMCMCNIterationsUpdate
int fMCMCNIterationsUpdateMax
int fMCMCNLag
int fMCMCNParameters
std::vector< int > fMCMCNTrialsFalse
std::vector< int > fMCMCNTrialsTrue
TRandom3 * fMCMCRandom
double fMCMCRValue
double fMCMCRValueCriterion
std::vector< double > fMCMCRValueParameters
double fMCMCRValueParametersCriterion
std::vector< TTree * > fMCMCTrees
std::vector< double > fMCMCTrialFunctionScaleFactor
std::vector< double > fMCMCTrialFunctionScaleFactorStart
std::vector< double > fMCMCVariance
std::vector< double > fMCMCVariancex
std::vector< double > fMCMCx
std::vector< double > fMCMCxLocal

Private Types

typedef bool(BCEngineMCMC::* MCMCPointerToGetProposalPoint )(int chain, std::vector< double > xnew, std::vector< double > xold) const

Private Member Functions

void Copy (BCEngineMCMC &enginemcmc) const

Private Attributes

MCMCPointerToGetProposalPoint fMCMCPointerToGetProposalPoint

Detailed Description

An engine class for Markov Chain Monte Carlo.

Author:
Daniel Kollar
Kevin Kröninger
Version:
1.0
Date:
08.2008 This class represents an engine class for Markov Chain Monte Carlo (MCMC). One or more chains can be defined simultaneously.

Definition at line 35 of file BCEngineMCMC.h.


Member Typedef Documentation

typedef bool(BCEngineMCMC::* BCEngineMCMC::MCMCPointerToGetProposalPoint)(int chain, std::vector< double > xnew, std::vector< double > xold) const [private]

Definition at line 510 of file BCEngineMCMC.h.


Constructor & Destructor Documentation

BCEngineMCMC::BCEngineMCMC (  ) 

Default constructor.

Definition at line 25 of file BCEngineMCMC.cxx.

00026 {
00027    // set default parameters for the mcmc
00028    this -> MCMCSetValuesDefault();
00029 
00030    // initialize random number generator
00031    fMCMCRandom = new TRandom3(0);
00032 }

BCEngineMCMC::BCEngineMCMC ( int  n  ) 

Constructor.

Parameters:
n number of chains

Definition at line 35 of file BCEngineMCMC.cxx.

00036 {
00037    // set number of chains to n
00038    fMCMCNChains = n;
00039 
00040    // call default constructor
00041    BCEngineMCMC();
00042 }

BCEngineMCMC::BCEngineMCMC ( const BCEngineMCMC enginemcmc  ) 

Default copy constructor.

Definition at line 118 of file BCEngineMCMC.cxx.

00119 {
00120    enginemcmc.Copy(*this);
00121 }

BCEngineMCMC::~BCEngineMCMC (  )  [virtual]

Default destructor.

Definition at line 98 of file BCEngineMCMC.cxx.

00099 {
00100    // delete random number generator
00101    if (fMCMCRandom)
00102       delete fMCMCRandom;
00103 
00104    // delete 1-d marginalized distributions
00105    for (int i = 0; i < int(fMCMCH1Marginalized.size()); ++i)
00106       if (fMCMCH1Marginalized[i])
00107          delete fMCMCH1Marginalized[i];
00108    fMCMCH1Marginalized.clear();
00109 
00110    // delete 2-d marginalized distributions
00111    for (int i = 0; i < int(fMCMCH2Marginalized.size()); ++i)
00112       if (fMCMCH2Marginalized[i])
00113          delete fMCMCH2Marginalized[i];
00114    fMCMCH2Marginalized.clear();
00115 }


Member Function Documentation

void BCEngineMCMC::Copy ( BCEngineMCMC enginemcmc  )  const [private]

Definition at line 261 of file BCEngineMCMC.cxx.

00262 {}

double BCEngineMCMC::LogEval ( std::vector< double >  parameters  )  [virtual]

Reimplemented in BCIntegrate, and BCModel.

Definition at line 684 of file BCEngineMCMC.cxx.

00685 {
00686    // test function for now
00687    // this will be overloaded by the user
00688    return 0.0;
00689 }

int BCEngineMCMC::MCMCAddParameter ( double  min,
double  max 
)

Definition at line 1175 of file BCEngineMCMC.cxx.

01176 {
01177    // add the boundaries to the corresponding vectors
01178    fMCMCBoundaryMin.push_back(min);
01179    fMCMCBoundaryMax.push_back(max);
01180 
01181    // set flag for individual parameters
01182    fMCMCFlagsFillHistograms.push_back(true);
01183 
01184    // increase the number of parameters by one
01185    fMCMCNParameters++;
01186 
01187    // return the number of parameters
01188    return fMCMCNParameters;
01189 }

bool BCEngineMCMC::MCMCGetFlagConvergenceGlobal (  )  [inline]

Definition at line 105 of file BCEngineMCMC.h.

00106          { return fMCMCFlagConvergenceGlobal; };

int BCEngineMCMC::MCMCGetFlagInitialPosition (  )  [inline]

Definition at line 215 of file BCEngineMCMC.h.

00216          { return fMCMCFlagInitialPosition; };

bool BCEngineMCMC::MCMCGetFlagRun (  )  [inline]

Definition at line 241 of file BCEngineMCMC.h.

00242       { return fMCMCFlagRun; };

TH1D * BCEngineMCMC::MCMCGetH1Marginalized ( int  i  ) 

Definition at line 133 of file BCEngineMCMC.cxx.

00134 {
00135       // check index
00136    if (index < 0 || index >= int(fMCMCH1Marginalized.size()))
00137    {
00138       BCLog::OutWarning("BCEngineMCMC::MCMCGetH1Marginalized. Index out of range.");
00139       return 0;
00140    }
00141 
00142    return fMCMCH1Marginalized[index];
00143 }

TH2D * BCEngineMCMC::MCMCGetH2Marginalized ( int  i,
int  j 
)

Definition at line 146 of file BCEngineMCMC.cxx.

00147 {
00148    int counter = 0;
00149    int index = 0;
00150 
00151    // search for correct combination
00152    for(int i = 0; i < fMCMCNParameters; i++)
00153       for (int j = 0; j < i; ++j)
00154       {
00155          if(j == index1 && i == index2)
00156             index = counter;
00157          counter++;
00158       }
00159 
00160    // check index
00161    if (index < 0 || index >= int(fMCMCH2Marginalized.size()))
00162    {
00163       BCLog::OutWarning("BCEngineMCMC::MCMCGetH2Marginalized. Index out of range.");
00164       return 0;
00165    }
00166 
00167    return fMCMCH2Marginalized[index];
00168 }

double BCEngineMCMC::MCMCGetLogProbx ( int  ichain  ) 

Definition at line 353 of file BCEngineMCMC.cxx.

00354 {
00355    // check if ichain is in range
00356    if (ichain < 0 || ichain >= fMCMCNChains)
00357       return -1;
00358 
00359    // return log of the probability at the current point in the ith chain
00360    return fMCMCLogProbx.at(ichain);
00361 }

std::vector<double> BCEngineMCMC::MCMCGetLogProbx (  )  [inline]

Definition at line 185 of file BCEngineMCMC.h.

00186          { return fMCMCLogProbx; };

TTree* BCEngineMCMC::MCMCGetMarkovChainTree ( int  i  )  [inline]

Definition at line 248 of file BCEngineMCMC.h.

00249          { return fMCMCTrees.at(i); };

std::vector<double> BCEngineMCMC::MCMCGetMaximumLogProb (  )  [inline]

Definition at line 210 of file BCEngineMCMC.h.

00211          { return fMCMCMaximumLogProb; };

std::vector< double > BCEngineMCMC::MCMCGetMaximumPoint ( int  i  ) 

Definition at line 171 of file BCEngineMCMC.cxx.

00172 {
00173    // create a new vector with the lenght of fMCMCNParameters
00174    std::vector <double> x;
00175 
00176    // check if i is in range
00177    if (i < 0 || i >= fMCMCNChains)
00178       return x;
00179 
00180    // copy the point in the ith chain into the temporary vector
00181    for (int j = 0; j < fMCMCNParameters; ++j)
00182    x.push_back(fMCMCMaximumPoints.at(i * fMCMCNParameters + j));
00183 
00184    return x;
00185 }

std::vector<double> BCEngineMCMC::MCMCGetMaximumPoints (  )  [inline]

Definition at line 200 of file BCEngineMCMC.h.

00201          { return fMCMCMaximumPoints; };

std::vector<double> BCEngineMCMC::MCMCGetMean (  )  [inline]

Definition at line 137 of file BCEngineMCMC.h.

00138          { return fMCMCMean; };

int BCEngineMCMC::MCMCGetNChains (  )  [inline]

Definition at line 79 of file BCEngineMCMC.h.

00080          { return fMCMCNChains; };

bool BCEngineMCMC::MCMCGetNewPointMetropolis ( int  chain,
int  parameter 
)

Definition at line 405 of file BCEngineMCMC.cxx.

00406 {
00407    // calculate index
00408    int index = chain * fMCMCNParameters;
00409 
00410    // increase counter
00411    fMCMCNIterations[chain]++;
00412 
00413    // get proposal point
00414    if (!this -> MCMCGetProposalPointMetropolis(chain, parameter, fMCMCxLocal))
00415    {
00416       // increase counter
00417       fMCMCNTrialsFalse[chain * fMCMCNParameters + parameter]++;
00418 
00419       return false;
00420    }
00421 
00422    // calculate probabilities of the old and new points
00423    double p0 = fMCMCLogProbx[chain];
00424    double p1 = this -> LogEval(fMCMCxLocal);
00425 
00426    // flag for accept
00427    bool accept = false;
00428 
00429    // if the new point is more probable, keep it ...
00430    if (p1 >= p0)
00431       accept = true;
00432    // ... or else throw dice.
00433    else
00434    {
00435       double r = log(fMCMCRandom -> Rndm());
00436 
00437       if(r < p1 - p0)
00438          accept = true;
00439    }
00440 
00441    // fill the new point
00442    if(accept)
00443    {
00444       // increase counter
00445       fMCMCNTrialsTrue[chain * fMCMCNParameters + parameter]++;
00446 
00447       // copy the point
00448       for(int i = 0; i < fMCMCNParameters; ++i)
00449       {
00450          // save the point
00451          fMCMCx[index + i] = fMCMCxLocal[i];
00452 
00453          // save the probability of the point
00454          fMCMCLogProbx[chain] = p1;
00455       }
00456    }
00457    else
00458    {
00459       // increase counter
00460       fMCMCNTrialsFalse[chain * fMCMCNParameters + parameter]++;
00461    }
00462 
00463    return accept;
00464 }

bool BCEngineMCMC::MCMCGetNewPointMetropolis ( int  chain = 0  ) 

Definition at line 467 of file BCEngineMCMC.cxx.

00468 {
00469    // calculate index
00470    int index = chain * fMCMCNParameters;
00471 
00472    // increase counter
00473    fMCMCNIterations[chain]++;
00474 
00475    // get proposal point
00476    if (!this -> MCMCGetProposalPointMetropolis(chain, fMCMCxLocal))
00477    {
00478       // increase counter
00479       for (int i = 0; i < fMCMCNParameters; ++i)
00480          fMCMCNTrialsFalse[chain * fMCMCNParameters + i]++;
00481 
00482       return false;
00483    }
00484 
00485    // calculate probabilities of the old and new points
00486    double p0 = fMCMCLogProbx[chain];
00487    double p1 = this -> LogEval(fMCMCxLocal);
00488 
00489    // flag for accept
00490    bool accept = false;
00491 
00492    // if the new point is more probable, keep it ...
00493    if (p1 >= p0)
00494       accept = true;
00495 
00496    // ... or else throw dice.
00497    else
00498    {
00499       double r = log(fMCMCRandom -> Rndm());
00500 
00501       if(r < p1 - p0)
00502          accept = true;
00503    }
00504 
00505    // fill the new point
00506    if(accept)
00507    {
00508       // increase counter
00509       for (int i = 0; i < fMCMCNParameters; ++i)
00510          fMCMCNTrialsTrue[chain * fMCMCNParameters + i]++;
00511 
00512       // copy the point
00513       for(int i = 0; i < fMCMCNParameters; ++i)
00514       {
00515          // save the point
00516          fMCMCx[index + i] = fMCMCxLocal[i];
00517 
00518          // save the probability of the point
00519          fMCMCLogProbx[chain] = p1;
00520       }
00521    }
00522    else
00523    {
00524       // increase counter
00525       for (int i = 0; i < fMCMCNParameters; ++i)
00526          fMCMCNTrialsFalse[chain * fMCMCNParameters + i]++;
00527    }
00528 
00529    return accept;
00530 }

std::vector<int> BCEngineMCMC::MCMCGetNIterations (  )  [inline]

Definition at line 89 of file BCEngineMCMC.h.

00090          { return fMCMCNIterations; };

int BCEngineMCMC::MCMCGetNIterationsBurnIn (  )  [inline]

Definition at line 121 of file BCEngineMCMC.h.

00122          { return fMCMCNIterationsBurnIn; };

int BCEngineMCMC::MCMCGetNIterationsConvergenceGlobal (  )  [inline]

Definition at line 100 of file BCEngineMCMC.h.

int BCEngineMCMC::MCMCGetNIterationsMax (  )  [inline]

Definition at line 110 of file BCEngineMCMC.h.

00111          { return fMCMCNIterationsMax; };

int BCEngineMCMC::MCMCGetNIterationsRun (  )  [inline]

Definition at line 115 of file BCEngineMCMC.h.

00116          { return fMCMCNIterationsRun; };

int BCEngineMCMC::MCMCGetNLag (  )  [inline]

Definition at line 84 of file BCEngineMCMC.h.

00085          { return fMCMCNLag; };

int BCEngineMCMC::MCMCGetNParameters (  )  [inline]

Definition at line 74 of file BCEngineMCMC.h.

00075          { return fMCMCNParameters; };

std::vector<int> BCEngineMCMC::MCMCGetNTrialsFalse (  )  [inline]

Definition at line 131 of file BCEngineMCMC.h.

00132          { return fMCMCNTrialsFalse; };

std::vector<int> BCEngineMCMC::MCMCGetNTrialsTrue (  )  [inline]

Definition at line 126 of file BCEngineMCMC.h.

00127          { return fMCMCNTrialsTrue; };

std::vector<double>* BCEngineMCMC::MCMCGetP2LogProbx (  )  [inline]

Definition at line 195 of file BCEngineMCMC.h.

00196          { return &fMCMCLogProbx; };

std::vector<int>* BCEngineMCMC::MCMCGetP2NIterations (  )  [inline]

Definition at line 94 of file BCEngineMCMC.h.

00095          { return &fMCMCNIterations; };

std::vector<double>* BCEngineMCMC::MCMCGetP2x (  )  [inline]

Definition at line 169 of file BCEngineMCMC.h.

00170          { return &fMCMCx; };

bool BCEngineMCMC::MCMCGetProposalPointMetropolis ( int  chain,
int  parameter,
std::vector< double > &  x 
)

Definition at line 382 of file BCEngineMCMC.cxx.

00383 {
00384    // get unscaled random point in the dimension of the chosen
00385    // parameter. this point might not be in the correct volume.
00386    this -> MCMCTrialFunctionSingle(chain, parameter, x);
00387 
00388    // copy the old point into the new
00389    for (int i = 0; i < fMCMCNParameters; ++i)
00390       if (i != parameter)
00391          x[i] = fMCMCx[chain * fMCMCNParameters + i];
00392 
00393    // modify the parameter under study
00394    x[parameter] = fMCMCx[chain * fMCMCNParameters + parameter] + x[parameter] * (fMCMCBoundaryMax.at(parameter) - fMCMCBoundaryMin.at(parameter));
00395 
00396    // check if the point is in the correct volume.
00397    for (int i = 0; i < fMCMCNParameters; ++i)
00398       if ((x[i] < fMCMCBoundaryMin[i]) || (x[i] > fMCMCBoundaryMax[i]))
00399          return false;
00400 
00401    return true;
00402 }

bool BCEngineMCMC::MCMCGetProposalPointMetropolis ( int  chain,
std::vector< double > &  x 
)

Definition at line 364 of file BCEngineMCMC.cxx.

00365 {
00366    // get unscaled random point. this point might not be in the correct volume.
00367    this -> MCMCTrialFunction(chain, x);
00368 
00369    // get a proposal point from the trial function and scale it
00370    for (int i = 0; i < fMCMCNParameters; ++i)
00371       x[i] = fMCMCx[chain * fMCMCNParameters + i] + x[i] * (fMCMCBoundaryMax.at(i) - fMCMCBoundaryMin.at(i));
00372 
00373    // check if the point is in the correct volume.
00374    for (int i = 0; i < fMCMCNParameters; ++i)
00375       if ((x[i] < fMCMCBoundaryMin[i]) || (x[i] > fMCMCBoundaryMax[i]))
00376          return false;
00377 
00378    return true;
00379 }

double BCEngineMCMC::MCMCGetRValue (  )  [inline]

Definition at line 230 of file BCEngineMCMC.h.

00231          { return fMCMCRValue; };

double BCEngineMCMC::MCMCGetRValueCriterion (  )  [inline]

Definition at line 220 of file BCEngineMCMC.h.

00221          { return fMCMCRValueCriterion; };

double BCEngineMCMC::MCMCGetRValueParameters ( int  i  )  [inline]

Definition at line 236 of file BCEngineMCMC.h.

00237          { return fMCMCRValueParameters.at(i); };

double BCEngineMCMC::MCMCGetRValueParametersCriterion (  )  [inline]

Definition at line 225 of file BCEngineMCMC.h.

00226          { return fMCMCRValueParametersCriterion; };

TRandom3* BCEngineMCMC::MCMCGetTRandom3 (  )  [inline]

Definition at line 266 of file BCEngineMCMC.h.

00267       { return fMCMCRandom; };

double BCEngineMCMC::MCMCGetTrialFunctionScaleFactor ( int  ichain,
int  ipar 
)

Definition at line 306 of file BCEngineMCMC.cxx.

00307 {
00308    // check if ichain is in range
00309    if (ichain < 0 || ichain >= fMCMCNChains)
00310       return 0;
00311 
00312    // check if ipar is in range
00313    if (ipar < 0 || ipar >= fMCMCNParameters)
00314       return 0;
00315 
00316    // return component of ipar point in the ichain chain
00317    return fMCMCTrialFunctionScaleFactor.at(ichain *  fMCMCNChains + ipar);
00318 }

std::vector< double > BCEngineMCMC::MCMCGetTrialFunctionScaleFactor ( int  ichain  ) 

Definition at line 289 of file BCEngineMCMC.cxx.

00290 {
00291    // create a new vector with the length of fMCMCNParameters
00292    std::vector <double> x;
00293 
00294    // check if ichain is in range
00295    if (ichain < 0 || ichain >= fMCMCNChains)
00296       return x;
00297 
00298    // copy the scale factors into the temporary vector
00299    for (int j = 0; j < fMCMCNParameters; ++j)
00300       x.push_back(fMCMCTrialFunctionScaleFactor.at(ichain * fMCMCNParameters + j));
00301 
00302    return x;
00303 }

std::vector<double> BCEngineMCMC::MCMCGetTrialFunctionScaleFactor (  )  [inline]

Definition at line 148 of file BCEngineMCMC.h.

00149          { return fMCMCTrialFunctionScaleFactor; };

std::vector<double> BCEngineMCMC::MCMCGetVariance (  )  [inline]

Definition at line 143 of file BCEngineMCMC.h.

00144          { return fMCMCVariance; };

double BCEngineMCMC::MCMCGetx ( int  ichain,
int  ipar 
)

Definition at line 338 of file BCEngineMCMC.cxx.

00339 {
00340    // check if ichain is in range
00341    if (ichain < 0 || ichain >= fMCMCNChains)
00342       return 0;
00343 
00344    // check if ipar is in range
00345    if (ipar < 0 || ipar >= fMCMCNParameters)
00346       return 0;
00347 
00348    // return component of jth point in the ith chain
00349    return fMCMCx.at(ichain *  fMCMCNParameters + ipar);
00350 }

std::vector< double > BCEngineMCMC::MCMCGetx ( int  ichain  ) 

Definition at line 321 of file BCEngineMCMC.cxx.

00322 {
00323    // create a new vector with the length of fMCMCNParameters
00324    std::vector <double> x;
00325 
00326    // check if ichain is in range
00327    if (ichain < 0 || ichain >= fMCMCNChains)
00328       return x;
00329 
00330    // copy the point in the ichain chain into the temporary vector
00331    for (int j = 0; j < fMCMCNParameters; ++j)
00332       x.push_back(fMCMCx.at(ichain * fMCMCNParameters + j));
00333 
00334    return x;
00335 }

std::vector<double> BCEngineMCMC::MCMCGetx (  )  [inline]

Definition at line 164 of file BCEngineMCMC.h.

00165          { return fMCMCx; };

int BCEngineMCMC::MCMCInitialize (  ) 

Definition at line 1209 of file BCEngineMCMC.cxx.

01210 {
01211    // reset variables
01212    fMCMCNIterations.clear();
01213    fMCMCNTrialsTrue.clear();
01214    fMCMCNTrialsFalse.clear();
01215    fMCMCTrialFunctionScaleFactor.clear();
01216    fMCMCMean.clear();
01217    fMCMCVariance.clear();
01218    fMCMCMeanx.clear();
01219    fMCMCVariancex.clear();
01220    fMCMCx.clear();
01221    fMCMCLogProbx.clear();
01222    fMCMCMaximumPoints.clear();
01223    fMCMCMaximumLogProb.clear();
01224    fMCMCNIterationsConvergenceGlobal = -1;
01225    fMCMCFlagConvergenceGlobal = false;
01226    fMCMCRValueParameters.clear();
01227 
01228    for (int i = 0; i < int(fMCMCH1Marginalized.size()); ++i)
01229       if (fMCMCH1Marginalized[i])
01230          delete fMCMCH1Marginalized[i];
01231 
01232    for (int i = 0; i < int(fMCMCH2Marginalized.size()); ++i)
01233       if (fMCMCH2Marginalized[i])
01234          delete fMCMCH2Marginalized[i];
01235 
01236    // clear plots
01237    fMCMCH1Marginalized.clear();
01238    fMCMCH2Marginalized.clear();
01239 
01240 // free memory for vectors
01241    fMCMCNIterations.assign(fMCMCNChains, 0);
01242    fMCMCMean.assign(fMCMCNChains, 0);
01243    fMCMCVariance.assign(fMCMCNChains, 0);
01244    fMCMCLogProbx.assign(fMCMCNChains, -1.0);
01245    fMCMCMaximumLogProb.assign(fMCMCNChains, -1.0);
01246 
01247    fMCMCNTrialsTrue.assign(fMCMCNChains * fMCMCNParameters, 0);
01248    fMCMCNTrialsFalse.assign(fMCMCNChains * fMCMCNParameters, 0);
01249    fMCMCMaximumPoints.assign(fMCMCNChains * fMCMCNParameters, 0.);
01250    fMCMCMeanx.assign(fMCMCNChains * fMCMCNParameters, 0);
01251    fMCMCVariancex.assign(fMCMCNChains * fMCMCNParameters, 0);
01252 
01253    fMCMCRValueParameters.assign(fMCMCNParameters, 0.);
01254 
01255    if (fMCMCTrialFunctionScaleFactorStart.size() == 0)
01256       fMCMCTrialFunctionScaleFactor.assign(fMCMCNChains * fMCMCNParameters, 1.0);
01257    else
01258       for (int i = 0; i < fMCMCNChains; ++i)
01259          for (int j = 0; j < fMCMCNParameters; ++j)
01260             fMCMCTrialFunctionScaleFactor.push_back(fMCMCTrialFunctionScaleFactorStart.at(j));
01261 
01262    // set initial position
01263    if (fMCMCFlagInitialPosition == 2) // user defined points
01264    {
01265       // define flag
01266       bool flag = true;
01267 
01268       // check the length of the array of initial positions
01269       if (int(fMCMCInitialPosition.size()) != (fMCMCNChains * fMCMCNParameters))
01270       {
01271          BCLog::OutError("BCEngine::MCMCInitialize : Length of vector containing initial positions does not have required length.");
01272          flag = false;
01273       }
01274 
01275       // check the boundaries
01276       if (flag)
01277       {
01278          for (int j = 0; j < fMCMCNChains; ++j)
01279             for (int i = 0; i < fMCMCNParameters; ++i)
01280                if (fMCMCInitialPosition[j * fMCMCNParameters + i] < fMCMCBoundaryMin[i] ||
01281                      fMCMCInitialPosition[j * fMCMCNParameters + i] > fMCMCBoundaryMax[i])
01282                {
01283                   BCLog::OutError("BCEngine::MCMCInitialize : Initial position out of boundaries.");
01284                   flag = false;
01285                }
01286       }
01287 
01288       // check flag
01289       if (!flag)
01290          fMCMCFlagInitialPosition = 1;
01291    }
01292 
01293    if (fMCMCFlagInitialPosition == 0) // center of the interval
01294       for (int j = 0; j < fMCMCNChains; ++j)
01295          for (int i = 0; i < fMCMCNParameters; ++i)
01296             fMCMCx.push_back(fMCMCBoundaryMin[i] + .5 * (fMCMCBoundaryMax[i] - fMCMCBoundaryMin[i]));
01297 
01298    else if (fMCMCFlagInitialPosition == 2) // user defined
01299    {
01300       for (int j = 0; j < fMCMCNChains; ++j)
01301          for (int i = 0; i < fMCMCNParameters; ++i)
01302             fMCMCx.push_back(fMCMCInitialPosition.at(j * fMCMCNParameters + i));
01303    }
01304 
01305    else
01306       for (int j = 0; j < fMCMCNChains; ++j) // random number (default)
01307          for (int i = 0; i < fMCMCNParameters; ++i)
01308             fMCMCx.push_back(fMCMCBoundaryMin[i] + fMCMCRandom->Rndm() * (fMCMCBoundaryMax[i] - fMCMCBoundaryMin[i]));
01309 
01310    // copy the point of the first chain
01311    fMCMCxLocal.clear();
01312    for (int i = 0; i < fMCMCNParameters; ++i)
01313       fMCMCxLocal.push_back(fMCMCx[i]);
01314 
01315    // define 1-dimensional histograms for marginalization
01316    for(int i = 0; i < fMCMCNParameters; ++i)
01317    {
01318       TH1D * h1 = 0;
01319       if (fMCMCFlagsFillHistograms.at(i))
01320          h1 = new TH1D(TString::Format("h1_%d_parameter_%i", BCLog::GetHIndex() ,i), "",
01321                fMCMCH1NBins[i], fMCMCBoundaryMin[i], fMCMCBoundaryMax[i]);
01322       fMCMCH1Marginalized.push_back(h1);
01323    }
01324 
01325    for(int i = 0; i < fMCMCNParameters; ++i)
01326       for (int k = 0; k < i; ++k)
01327       {
01328          TH2D * h2 = 0;
01329          if (fMCMCFlagsFillHistograms.at(i) && fMCMCFlagsFillHistograms.at(k))
01330             h2 = new TH2D(Form("h2_%d_parameters_%i_vs_%i", BCLog::GetHIndex(), i, k), "",
01331                   fMCMCH1NBins[k], fMCMCBoundaryMin[k], fMCMCBoundaryMax[k],
01332                   fMCMCH1NBins[i], fMCMCBoundaryMin[i], fMCMCBoundaryMax[i] );
01333          fMCMCH2Marginalized.push_back(h2);
01334       }
01335 
01336    fMCMCFlagPreRun = false;
01337    fMCMCFlagRun = false;
01338 
01339    return 1;
01340 }

void BCEngineMCMC::MCMCInitializeMarkovChains (  ) 

Definition at line 1192 of file BCEngineMCMC.cxx.

01193 {
01194    // evaluate function at the starting point
01195    std::vector <double> x0;
01196 
01197    for (int j = 0; j < fMCMCNChains; ++j)
01198    {
01199       x0.clear();
01200       for (int i = 0; i < fMCMCNParameters; ++i)
01201          x0.push_back(fMCMCx[j * fMCMCNParameters + i]);
01202       fMCMCLogProbx[j] = this -> LogEval(x0);
01203    }
01204 
01205    x0.clear();
01206 }

virtual void BCEngineMCMC::MCMCIterationInterface (  )  [inline, virtual]

Reimplemented in BCIntegrate.

Definition at line 497 of file BCEngineMCMC.h.

00498          {};

int BCEngineMCMC::MCMCMetropolis (  ) 

Definition at line 1016 of file BCEngineMCMC.cxx.

01017 {
01018    // check if prerun has been performed
01019    if (!fMCMCFlagPreRun)
01020       this -> MCMCMetropolisPreRun();
01021 
01022    // print to screen
01023    BCLog::OutSummary( "Run Metropolis MCMC...");
01024 
01025    // reset run statistics
01026    this -> MCMCResetRunStatistics();
01027 
01028    // perform run
01029    BCLog::OutSummary(Form(" --> Perform MCMC run with %i chains, each with %i iterations.", fMCMCNChains, fMCMCNIterationsRun));
01030 
01031 // int counterupdate = 0;
01032 // bool convergence = false;
01033 // bool flagefficiency = false;
01034 
01035 // std::vector <double> efficiency;
01036 
01037 // for (int i = 0; i < fMCMCNParameters; ++i)
01038 //    for (int j = 0; j < fMCMCNChains; ++j)
01039 //       efficiency.push_back(0.0);
01040 
01041    int nwrite = fMCMCNIterationsRun/10;
01042    if(nwrite < 100)
01043       nwrite=100;
01044    else if(nwrite < 500)
01045       nwrite=1000;
01046    else if(nwrite < 10000)
01047       nwrite=1000;
01048    else
01049       nwrite=10000;
01050 
01051    // start the run
01052    for (int iiterations = 0; iiterations < fMCMCNIterationsRun; ++iiterations)
01053    {
01054       if ( (iiterations+1)%nwrite == 0 )
01055          BCLog::OutDetail(Form(" --> iteration number %i (%.2f%%)", iiterations+1, (double)(iiterations+1)/(double)fMCMCNIterationsRun*100.));
01056 
01057       // if the flag is set then run over the parameters one after the other.
01058       if (fMCMCFlagOrderParameters)
01059       {
01060          // loop over parameters
01061          for (int iparameters = 0; iparameters < fMCMCNParameters; ++iparameters)
01062          {
01063             // loop over chains
01064             for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
01065                this -> MCMCGetNewPointMetropolis(ichains, iparameters);
01066 
01067             // update search for maximum
01068             this -> MCMCUpdateStatisticsCheckMaximum();
01069 
01070             // check if the current iteration is consistent with the lag
01071             if ( (fMCMCNParameters * iiterations + iparameters) % (fMCMCNLag * fMCMCNParameters) == 0)
01072             {
01073                // fill histograms
01074                this -> MCMCUpdateStatisticsFillHistograms();
01075 
01076                // write chain to file
01077                if (fMCMCFlagWriteChainToFile)
01078                   this -> MCMCUpdateStatisticsWriteChains();
01079 
01080                // do anything interface
01081                this -> MCMCIterationInterface();
01082             }
01083 
01084          } // end loop over all parameters
01085       }
01086       // if the flag is not set then run over the parameters at the same time.
01087       else
01088       {
01089          // loop over chains
01090          for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
01091             // get new point
01092             this -> MCMCGetNewPointMetropolis(ichains);
01093 
01094          // update search for maximum
01095          this -> MCMCUpdateStatisticsCheckMaximum();
01096 
01097          // check if the current iteration is consistent with the lag
01098          if (iiterations % fMCMCNLag == 0)
01099          {
01100             // fill histograms
01101             this -> MCMCUpdateStatisticsFillHistograms();
01102 
01103             // write chain to file
01104             if (fMCMCFlagWriteChainToFile)
01105                this -> MCMCUpdateStatisticsWriteChains();
01106 
01107             // do anything interface
01108             this -> MCMCIterationInterface();
01109          }
01110       }
01111 
01112    } // end run
01113 
01114    // print convergence status
01115    BCLog::OutSummary(Form(" --> Markov chains ran for %i iterations.", fMCMCNIterationsRun));
01116 
01117    // print modes
01118 
01119    // find global maximum
01120    double probmax = fMCMCMaximumLogProb.at(0);
01121    int probmaxindex = 0;
01122 
01123    // loop over all chains and find the maximum point
01124    for (int i = 1; i < fMCMCNChains; ++i)
01125       if (fMCMCMaximumLogProb.at(i) > probmax)
01126       {
01127          probmax = fMCMCMaximumLogProb.at(i);
01128          probmaxindex = i;
01129       }
01130 
01131    BCLog::OutDetail(" --> Global mode from MCMC:");
01132    int ndigits = (int) log10(fMCMCNParameters);
01133    for (int i = 0; i < fMCMCNParameters; ++i)
01134       BCLog::OutDetail(Form( TString::Format(" -->      parameter %%%di:   %%.4g", ndigits+1),
01135             i, fMCMCMaximumPoints[probmaxindex * fMCMCNParameters + i]));
01136 
01137    // set flags
01138    fMCMCFlagPreRun = false;
01139    fMCMCFlagRun = true;
01140 
01141    return 1;
01142 }

int BCEngineMCMC::MCMCMetropolisPreRun (  ) 

Definition at line 692 of file BCEngineMCMC.cxx.

00693 {
00694    // print on screen
00695    BCLog::OutSummary("Pre-run Metropolis MCMC...");
00696 
00697    // initialize Markov chain
00698    this -> MCMCInitialize();
00699    this -> MCMCInitializeMarkovChains();
00700 
00701    // helper variable containing number of digits in the number of parameters
00702    int ndigits = (int)log10(fMCMCNParameters) +1;
00703    if(ndigits<4)
00704       ndigits=4;
00705 
00706    // perform burn-in run
00707    if (fMCMCNIterationsBurnIn > 0)
00708       BCLog::OutDetail(Form(" --> Start burn-in run with %i iterations", fMCMCNIterationsBurnIn));
00709 
00710    // if the flag is set then run over the parameters one after the other.
00711    if (fMCMCFlagOrderParameters)
00712    {
00713       for (int i = 0; i < fMCMCNIterationsBurnIn; ++i)
00714          for (int j = 0; j < fMCMCNChains; ++j)
00715             for (int k = 0; k < fMCMCNParameters; ++k)
00716                this -> MCMCGetNewPointMetropolis(j, k);
00717    }
00718    // if the flag is not set then run over the parameters at the same time.
00719    else
00720    {
00721       for (int i = 0; i < fMCMCNIterationsBurnIn; ++i)
00722          // loop over chains
00723          for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
00724             // get new point
00725             this -> MCMCGetNewPointMetropolis(ichains);
00726    }
00727 
00728    // reset run statistics
00729    this -> MCMCResetRunStatistics();
00730    fMCMCNIterationsConvergenceGlobal = -1;
00731 
00732    // perform run
00733    BCLog::OutSummary(Form(" --> Perform MCMC pre-run with %i chains, each with maximum %i iterations", fMCMCNChains, fMCMCNIterationsMax));
00734 
00735 
00736    // don't write to file during pre run
00737    bool tempflag_writetofile = fMCMCFlagWriteChainToFile;
00738    fMCMCFlagWriteChainToFile = false;
00739 
00740    // initialize counter variables and flags
00741    int counter = 0;
00742    int counterupdate = 0;
00743    bool convergence = false;     // convergence reached?
00744    bool flagefficiency = false;  // efficiency reached?
00745 
00746    // array of efficiencies
00747    std::vector <double> efficiency;
00748    efficiency.assign(fMCMCNParameters * fMCMCNChains, 0.0);
00749 
00750    // how often to check convergence and efficiencies?
00751    int updateLimit = ( fMCMCNIterationsUpdateMax<fMCMCNIterationsUpdate*(fMCMCNParameters+1)  && fMCMCNIterationsUpdateMax>0 ) ?
00752          fMCMCNIterationsUpdateMax : fMCMCNIterationsUpdate*(fMCMCNParameters+1);
00753 
00754    // run chain ...
00755    // (a) for at least a minimum number of iterations,
00756    // (b) until a maximum number of iterations is reached,
00757    // (c) or until convergence is reached and the efficiency is in the
00758    //     specified region
00759    while (counter < fMCMCNIterationsPreRunMin || (counter < fMCMCNIterationsMax && !(convergence && flagefficiency)))
00760    {
00761       // set convergence to false by default
00762       convergence = false;
00763 
00764       // set number of iterations needed to converge to negative
00765       fMCMCNIterationsConvergenceGlobal = -1;
00766 
00767       // if the flag is set then run over the parameters one after the other.
00768       if (fMCMCFlagOrderParameters)
00769       {
00770          // loop over parameters
00771          for (int iparameters = 0; iparameters < fMCMCNParameters; ++iparameters)
00772          {
00773             // loop over chains
00774             for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
00775                this -> MCMCGetNewPointMetropolis(ichains, iparameters);
00776 
00777             // search for global maximum
00778             this -> MCMCUpdateStatisticsCheckMaximum();
00779          } // end loop over parameters
00780       } // end if fMCMCFlagOrderParameters
00781 
00782       // if the flag is not set then run over the parameters at the same time.
00783       else
00784       {
00785          // loop over chains
00786          for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
00787             // get new point
00788             this -> MCMCGetNewPointMetropolis(ichains);
00789 
00790          // search for global maximum
00791          this -> MCMCUpdateStatisticsCheckMaximum();
00792       }
00793 
00794       // progress printout
00795       if ( counter > 0 && counter % fMCMCNIterationsUpdate == 0 )
00796          BCLog::OutDetail(Form(" --> Iteration %i", fMCMCNIterations[0]/fMCMCNParameters - 1));
00797 
00798       //-------------------------------------------
00799       // update scale factors and check convergence
00800       //-------------------------------------------
00801       if (counterupdate % updateLimit == 0 && counterupdate > 0 && counter >= fMCMCNIterationsPreRunMin)
00802       {
00803          bool rvalues_ok = true;
00804          static bool has_converged = false;
00805 
00806          // -----------------------------
00807          // check convergence status
00808          // -----------------------------
00809 
00810          // reset the number of iterations needed for convergence to
00811          // negative
00812          fMCMCNIterationsConvergenceGlobal = -1;
00813 
00814          this -> MCMCUpdateStatisticsTestConvergenceAllChains();
00815 
00816          // check convergence
00817          if (fMCMCNIterationsConvergenceGlobal > 0)
00818             convergence = true;
00819 
00820          // print convergence status:
00821          if (convergence && fMCMCNChains > 1)
00822             BCLog::OutDetail(Form("     * Convergence status: Set of %i Markov chains converged within %i iterations.", fMCMCNChains, fMCMCNIterationsConvergenceGlobal));
00823          else if (!convergence && fMCMCNChains > 1)
00824          {
00825             BCLog::OutDetail(Form("     * Convergence status: Set of %i Markov chains did not converge after %i iterations.", fMCMCNChains, counter));
00826 
00827             BCLog::OutDetail("       - R-Values:");
00828             for (int iparameter = 0; iparameter < fMCMCNParameters; ++iparameter)
00829             {
00830                if(fabs(fMCMCRValueParameters[iparameter]-1.) < fMCMCRValueParametersCriterion)
00831                   BCLog::OutDetail(Form( TString::Format("         parameter %%%di :  %%.06f",ndigits), iparameter, fMCMCRValueParameters.at(iparameter)));
00832                else
00833                {
00834                   BCLog::OutDetail(Form( TString::Format("         parameter %%%di :  %%.06f <--",ndigits), iparameter, fMCMCRValueParameters.at(iparameter)));
00835                   rvalues_ok = false;
00836                }
00837             }
00838             if(fabs(fMCMCRValue-1.) < fMCMCRValueCriterion)
00839                BCLog::OutDetail(Form("         log-likelihood :  %.06f", fMCMCRValue));
00840             else
00841             {
00842                BCLog::OutDetail(Form("         log-likelihood :  %.06f <--", fMCMCRValue));
00843                rvalues_ok = false;
00844             }
00845          }
00846 
00847          if(!has_converged)
00848             if(rvalues_ok)
00849                has_converged = true;
00850 
00851          // -----------------------------
00852          // check efficiency status
00853          // -----------------------------
00854 
00855          // set flag
00856          flagefficiency = true;
00857 
00858          bool flagprintefficiency = true;
00859 
00860          // loop over chains
00861          for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
00862          {
00863             // loop over parameters
00864             for (int iparameter = 0; iparameter < fMCMCNParameters; ++iparameter)
00865             {
00866                // global index of the parameter (throughout all the chains)
00867                int ipc = ichains * fMCMCNParameters + iparameter;
00868 
00869                // calculate efficiency
00870                efficiency[ipc] = double(fMCMCNTrialsTrue[ipc]) / double(fMCMCNTrialsTrue[ipc] + fMCMCNTrialsFalse[ipc]);
00871 
00872                // adjust scale factors if efficiency is too low
00873                if (efficiency[ipc] < fMCMCEfficiencyMin && fMCMCTrialFunctionScaleFactor[ipc] > .01)
00874                {
00875                   if (flagprintefficiency)
00876                   {
00877                      BCLog::OutDetail(Form("     * Efficiency status: Efficiencies not within pre-defined range."));
00878                      BCLog::OutDetail(Form("       - Efficiencies:"));
00879                      flagprintefficiency = false;
00880                   }
00881 
00882                   double fscale=2.;
00883                   if(has_converged && fMCMCEfficiencyMin/efficiency[ipc] > 2.)
00884                      fscale = 4.;
00885                   fMCMCTrialFunctionScaleFactor[ipc] /= fscale;
00886 
00887                   BCLog::OutDetail(Form("         Efficiency of parameter %i dropped below %.2lf%% (eps = %.2lf%%) in chain %i. Set scale to %.4g",
00888                         iparameter, 100. * fMCMCEfficiencyMin, 100. * efficiency[ipc], ichains, fMCMCTrialFunctionScaleFactor[ipc]));
00889                }
00890 
00891                // adjust scale factors if efficiency is too high
00892                else if (efficiency[ipc] > fMCMCEfficiencyMax && fMCMCTrialFunctionScaleFactor[ipc] < 1.0)
00893                {
00894                   if (flagprintefficiency)
00895                   {
00896                      BCLog::OutDetail(Form("   * Efficiency status: Efficiencies not within pre-defined ranges."));
00897                      BCLog::OutDetail(Form("     - Efficiencies:"));
00898                      flagprintefficiency = false;
00899                   }
00900 
00901                   fMCMCTrialFunctionScaleFactor[ipc] *= 2.;
00902 
00903                   BCLog::OutDetail(Form("         Efficiency of parameter %i above %.2lf%% (eps = %.2lf%%) in chain %i. Set scale to %.4g",
00904                         iparameter, 100.0 * fMCMCEfficiencyMax, 100.0 * efficiency[ipc], ichains, fMCMCTrialFunctionScaleFactor[ipc]));
00905                }
00906 
00907                // check flag
00908                if ((efficiency[ipc] < fMCMCEfficiencyMin && fMCMCTrialFunctionScaleFactor[ipc] > .01)
00909                      || (efficiency[ipc] > fMCMCEfficiencyMax && fMCMCTrialFunctionScaleFactor[ipc] < 1.))
00910                   flagefficiency = false;
00911 
00912                // reset counters
00913                counterupdate = 0;
00914                fMCMCNTrialsTrue[ipc] = 0;
00915                fMCMCNTrialsFalse[ipc] = 0;
00916             } // end of running over all parameters
00917 
00918             // reset counters
00919             fMCMCMean[ichains] = 0;
00920             fMCMCVariance[ichains] = 0;
00921          } // end of running over all chains
00922 
00923          // print to scrren
00924          if (flagefficiency)
00925             BCLog::OutDetail(Form("     * Efficiency status: Efficiencies within pre-defined ranges."));
00926 
00927       } // end if update scale factors and check convergence
00928 
00929       // increase counter
00930       counter++;
00931       counterupdate++;
00932    } // end of running
00933 
00934    // did we check convergence at least once ?
00935    if (counter-1<updateLimit)
00936    {
00937       BCLog::OutWarning(" Convergence never checked !");
00938       BCLog::OutWarning("   Increase maximum number of iterations in the pre-run /MCMCSetNIterationsMax()/");
00939       BCLog::OutWarning("   or decrease maximum number of iterations for update  /MCMCSetNIterationsUpdateMax()/");
00940    }
00941 
00942    // ---------------
00943    // after chain run
00944    // ---------------
00945 
00946    // define convergence status
00947    if (fMCMCNIterationsConvergenceGlobal > 0)
00948       fMCMCFlagConvergenceGlobal = true;
00949    else
00950       fMCMCFlagConvergenceGlobal = false;
00951 
00952    // print convergence status
00953    if (fMCMCFlagConvergenceGlobal && fMCMCNChains > 1 && !flagefficiency)
00954       BCLog::OutSummary(Form(" --> Set of %i Markov chains converged within %i iterations but could not adjust scales.", fMCMCNChains, fMCMCNIterationsConvergenceGlobal));
00955 
00956    else if (fMCMCFlagConvergenceGlobal && fMCMCNChains > 1 && flagefficiency)
00957       BCLog::OutSummary(Form(" --> Set of %i Markov chains converged within %i iterations and could adjust scales.", fMCMCNChains, fMCMCNIterationsConvergenceGlobal));
00958 
00959    else if (!fMCMCFlagConvergenceGlobal && (fMCMCNChains > 1) && flagefficiency)
00960       BCLog::OutSummary(Form(" --> Set of %i Markov chains did not converge within %i iterations.", fMCMCNChains, fMCMCNIterationsMax));
00961 
00962    else if (!fMCMCFlagConvergenceGlobal && (fMCMCNChains > 1) && !flagefficiency)
00963       BCLog::OutSummary(Form(" --> Set of %i Markov chains did not converge within %i iterations and could not adjust scales.", fMCMCNChains, fMCMCNIterationsMax));
00964 
00965    else if(fMCMCNChains == 1)
00966       BCLog::OutSummary(" --> No convergence criterion for a single chain defined.");
00967 
00968    else
00969       BCLog::OutSummary(" --> Only one Markov chain. No global convergence criterion defined.");
00970 
00971    BCLog::OutSummary(Form(" --> Markov chains ran for %i iterations.", counter));
00972 
00973 
00974    // print efficiencies
00975    std::vector <double> efficiencies;
00976 
00977    for (int i = 0; i < fMCMCNParameters; ++i)
00978       efficiencies.push_back(0.);
00979 
00980    BCLog::OutDetail(" --> Average efficiencies:");
00981    for (int i = 0; i < fMCMCNParameters; ++i)
00982    {
00983       for (int j = 0; j < fMCMCNChains; ++j)
00984          efficiencies[i] += efficiency[j * fMCMCNParameters + i] / double(fMCMCNChains);
00985 
00986       BCLog::OutDetail(Form(TString::Format(" -->      parameter %%%di :  %%.02f%%%%",ndigits), i, 100. * efficiencies[i]));
00987    }
00988 
00989 
00990    // print scale factors
00991    std::vector <double> scalefactors;
00992 
00993    for (int i = 0; i < fMCMCNParameters; ++i)
00994       scalefactors.push_back(0.0);
00995 
00996    BCLog::OutDetail(" --> Average scale factors:");
00997    for (int i = 0; i < fMCMCNParameters; ++i)
00998    {
00999       for (int j = 0; j < fMCMCNChains; ++j)
01000          scalefactors[i] += fMCMCTrialFunctionScaleFactor[j * fMCMCNParameters + i] / double(fMCMCNChains);
01001 
01002       BCLog::OutDetail(Form( TString::Format(" -->      parameter %%%di :  %%.02f%%%%",ndigits), i, 100. * scalefactors[i]));
01003    }
01004 
01005    // reset flag
01006    fMCMCFlagWriteChainToFile = tempflag_writetofile;
01007 
01008    // set pre-run flag
01009    fMCMCFlagPreRun = true;
01010 
01011    // no error
01012    return 1;
01013 }

void BCEngineMCMC::MCMCResetRunStatistics (  ) 

Definition at line 1145 of file BCEngineMCMC.cxx.

01146 {
01147    for (int j = 0; j < fMCMCNChains; ++j)
01148    {
01149       fMCMCNIterations[j]  = 0;
01150       fMCMCNTrialsTrue[j]  = 0;
01151       fMCMCNTrialsFalse[j] = 0;
01152       fMCMCMean[j]         = 0;
01153       fMCMCVariance[j]     = 0;
01154 
01155       for (int k = 0; k < fMCMCNParameters; ++k)
01156       {
01157          fMCMCNTrialsTrue[j * fMCMCNParameters + k]  = 0;
01158          fMCMCNTrialsFalse[j * fMCMCNParameters + k] = 0;
01159       }
01160    }
01161 
01162    // reset marginalized distributions
01163    for (int i = 0; i < int(fMCMCH1Marginalized.size()); ++i)
01164       if (fMCMCH1Marginalized[i])
01165          fMCMCH1Marginalized[i] -> Reset();
01166 
01167    for (int i = 0; i < int(fMCMCH2Marginalized.size()); ++i)
01168       if (fMCMCH2Marginalized[i])
01169          fMCMCH2Marginalized[i] -> Reset();
01170 
01171    fMCMCRValue = 100;
01172 }

void BCEngineMCMC::MCMCSetFlagFillHistograms ( int  index,
bool  flag 
)

Definition at line 236 of file BCEngineMCMC.cxx.

00237 {
00238    // check if index is within range
00239    if (index < 0 || index > fMCMCNParameters)
00240    {
00241       BCLog::OutWarning("BCEngineMCMC :MCMCSetFlagFillHistograms. Index out of range.");
00242       return;
00243    }
00244 
00245    // set flag
00246    fMCMCFlagsFillHistograms[index] = flag;
00247 }

void BCEngineMCMC::MCMCSetFlagFillHistograms ( bool  flag  ) 

Definition at line 227 of file BCEngineMCMC.cxx.

00228 {
00229    fMCMCFlagFillHistograms = flag;
00230 
00231    for (int i = 0; i < fMCMCNParameters; ++i)
00232       fMCMCFlagsFillHistograms[i] = flag;
00233 }

void BCEngineMCMC::MCMCSetFlagInitialPosition ( int  flag  )  [inline]

Definition at line 350 of file BCEngineMCMC.h.

00351          { fMCMCFlagInitialPosition = flag; };

void BCEngineMCMC::MCMCSetFlagOrderParameters ( bool  flag  )  [inline]

Definition at line 356 of file BCEngineMCMC.h.

00357       { fMCMCFlagOrderParameters = flag; };

void BCEngineMCMC::MCMCSetInitialPositions ( std::vector< std::vector< double > >  x0s  ) 

Definition at line 213 of file BCEngineMCMC.cxx.

00214 {
00215    // create new vector
00216    std::vector <double> y0s;
00217 
00218    // loop over vector elements
00219    for (int i = 0; i < int(x0s.size()); ++i)
00220       for (int j = 0; j < int((x0s.at(i)).size()); ++j)
00221          y0s.push_back((x0s.at(i)).at(j));
00222 
00223    this -> MCMCSetInitialPositions(y0s);
00224 }

void BCEngineMCMC::MCMCSetInitialPositions ( std::vector< double >  x0s  ) 

Definition at line 197 of file BCEngineMCMC.cxx.

00198 {
00199    // clear the existing initial position vector
00200    fMCMCInitialPosition.clear();
00201 
00202    // copy the initial positions
00203    int n = int(x0s.size());
00204 
00205    for (int i = 0; i < n; ++i)
00206       fMCMCInitialPosition.push_back(x0s.at(i));
00207 
00208    // use these intial positions for the Markov chain
00209    this -> MCMCSetFlagInitialPosition(2);
00210 }

void BCEngineMCMC::MCMCSetMarkovChainTrees ( std::vector< TTree * >  trees  ) 

Definition at line 250 of file BCEngineMCMC.cxx.

00251 {
00252 // clear vector
00253    fMCMCTrees.clear();
00254 
00255    // copy tree
00256    for (int i = 0; i < int(trees.size()); ++i)
00257       fMCMCTrees.push_back(trees[i]);
00258 }

void BCEngineMCMC::MCMCSetMaximumEfficiency ( double  efficiency  )  [inline]

Definition at line 330 of file BCEngineMCMC.h.

00331          { fMCMCEfficiencyMax = efficiency; };

void BCEngineMCMC::MCMCSetMinimumEfficiency ( double  efficiency  )  [inline]

Definition at line 325 of file BCEngineMCMC.h.

00326          { fMCMCEfficiencyMin = efficiency; };

void BCEngineMCMC::MCMCSetNChains ( int  n  ) 

Definition at line 188 of file BCEngineMCMC.cxx.

00189 {
00190    fMCMCNChains = n;
00191 
00192    // re-initialize
00193    this -> MCMCInitialize();
00194 }

void BCEngineMCMC::MCMCSetNIterationsBurnIn ( int  n  )  [inline]

Definition at line 300 of file BCEngineMCMC.h.

00301          { fMCMCNIterationsBurnIn = n; };

void BCEngineMCMC::MCMCSetNIterationsMax ( int  n  )  [inline]

Definition at line 290 of file BCEngineMCMC.h.

00291          { fMCMCNIterationsMax = n; };

void BCEngineMCMC::MCMCSetNIterationsPreRunMin ( int  n  )  [inline]

Definition at line 305 of file BCEngineMCMC.h.

00306          { fMCMCNIterationsPreRunMin = n; };

void BCEngineMCMC::MCMCSetNIterationsRun ( int  n  )  [inline]

Definition at line 295 of file BCEngineMCMC.h.

00296          { fMCMCNIterationsRun = n; };

void BCEngineMCMC::MCMCSetNIterationsUpdate ( int  n  )  [inline]

Definition at line 312 of file BCEngineMCMC.h.

00313          { fMCMCNIterationsUpdate = n; };

void BCEngineMCMC::MCMCSetNIterationsUpdateMax ( int  n  )  [inline]

Definition at line 320 of file BCEngineMCMC.h.

00321          { fMCMCNIterationsUpdateMax = n; };

void BCEngineMCMC::MCMCSetNLag ( int  n  )  [inline]

Definition at line 285 of file BCEngineMCMC.h.

00286       { fMCMCNLag = n; };

void BCEngineMCMC::MCMCSetRValueCriterion ( double  r  )  [inline]

Definition at line 367 of file BCEngineMCMC.h.

00368          { fMCMCRValueCriterion = r; };

void BCEngineMCMC::MCMCSetRValueParametersCriterion ( double  r  )  [inline]

Definition at line 372 of file BCEngineMCMC.h.

void BCEngineMCMC::MCMCSetTrialFunctionScaleFactor ( std::vector< double >  scale  )  [inline]

Definition at line 276 of file BCEngineMCMC.h.

void BCEngineMCMC::MCMCSetValuesDefault (  ) 

Definition at line 45 of file BCEngineMCMC.cxx.

00046 {
00047    fMCMCNParameters          = 0;
00048    fMCMCFlagWriteChainToFile = false;
00049    fMCMCFlagPreRun           = false;
00050    fMCMCFlagRun              = false;
00051    fMCMCFlagFillHistograms   = true;
00052    fMCMCEfficiencyMin        = 0.15;
00053    fMCMCEfficiencyMax        = 0.50;
00054    fMCMCFlagInitialPosition  = 1;
00055    fMCMCNLag                 = 1;
00056    fMCMCNIterationsUpdateMax = 10000;
00057 
00058    this -> MCMCSetValuesDetail();
00059 }

void BCEngineMCMC::MCMCSetValuesDetail (  ) 

Definition at line 80 of file BCEngineMCMC.cxx.

00081 {
00082    fMCMCNChains              = 5;
00083    fMCMCNIterationsMax       = 1000000;
00084    fMCMCNIterationsRun       = 100000;
00085    fMCMCNIterationsBurnIn    = 0;
00086    fMCMCNIterationsPreRunMin = 500;
00087    fMCMCFlagInitialPosition  = 1;
00088    fMCMCRValueCriterion      = 0.1;
00089    fMCMCRValueParametersCriterion = 0.1;
00090    fMCMCNIterationsConvergenceGlobal = -1;
00091    fMCMCFlagConvergenceGlobal = false;
00092    fMCMCRValue               = 100;
00093    fMCMCNIterationsUpdate    = 1000;
00094    fMCMCFlagOrderParameters  = true;
00095 }

void BCEngineMCMC::MCMCSetValuesQuick (  ) 

Definition at line 62 of file BCEngineMCMC.cxx.

00063 {
00064    fMCMCNChains              = 1;
00065    fMCMCNIterationsMax       = 1000;
00066    fMCMCNIterationsRun       = 10000;
00067    fMCMCNIterationsBurnIn    = 0;
00068    fMCMCNIterationsPreRunMin = 0;
00069    fMCMCFlagInitialPosition  = 1;
00070    fMCMCRValueCriterion      = 0.1;
00071    fMCMCRValueParametersCriterion = 0.1;
00072    fMCMCNIterationsConvergenceGlobal = -1;
00073    fMCMCFlagConvergenceGlobal = false;
00074    fMCMCRValue               = 100;
00075    fMCMCNIterationsUpdate    = 1000;
00076    fMCMCFlagOrderParameters  = true;
00077 }

void BCEngineMCMC::MCMCSetWriteChainToFile ( bool  flag  )  [inline]

Definition at line 335 of file BCEngineMCMC.h.

00336          { fMCMCFlagWriteChainToFile = flag; };

void BCEngineMCMC::MCMCTrialFunction ( int  chain,
std::vector< double > &  x 
) [virtual]

Definition at line 265 of file BCEngineMCMC.cxx.

00266 {
00267    // use uniform distribution for now
00268 // for (int i = 0; i < fMCMCNParameters; ++i)
00269 //    x[i] = fMCMCTrialFunctionScaleFactor[i] * 2.0 * (0.5 - fMCMCRandom -> Rndm());
00270 
00271    // Breit-Wigner with adjustable width
00272    for (int i = 0; i < fMCMCNParameters; ++i)
00273       x[i] = fMCMCRandom -> BreitWigner(0.0, fMCMCTrialFunctionScaleFactor[chain * fMCMCNParameters + i]);
00274 }

void BCEngineMCMC::MCMCTrialFunctionSingle ( int  ichain,
int  iparameter,
std::vector< double > &  x 
) [virtual]

Definition at line 277 of file BCEngineMCMC.cxx.

00278 {
00279    // no check of range for performance reasons
00280 
00281    // use uniform distribution
00282 // x[iparameter] = fMCMCTrialFunctionScaleFactor[ichain * fMCMCNParameters + iparameter] * 2.0 * (0.5 - fMCMCRandom -> Rndm());
00283 
00284    // Breit-Wigner width adjustable width
00285    x[iparameter] = fMCMCRandom -> BreitWigner(0.0, fMCMCTrialFunctionScaleFactor[ichain * fMCMCNParameters + iparameter]);
00286 }

void BCEngineMCMC::MCMCUpdateStatisticsCheckMaximum (  ) 

Definition at line 533 of file BCEngineMCMC.cxx.

00534 {
00535    // loop over all chains
00536    for (int i = 0; i < fMCMCNChains; ++i)
00537    {
00538       // check if new maximum is found or chain is at the beginning
00539       if (fMCMCLogProbx[i] > fMCMCMaximumLogProb[i] || fMCMCNIterations[i] == 1)
00540       {
00541          // copy maximum value
00542          fMCMCMaximumLogProb[i] = fMCMCLogProbx[i];
00543 
00544          // copy mode of chain
00545          for (int j = 0; j < fMCMCNParameters; ++j)
00546             fMCMCMaximumPoints[i * fMCMCNParameters + j] = fMCMCx[i * fMCMCNParameters + j];
00547       }
00548    }
00549 }

void BCEngineMCMC::MCMCUpdateStatisticsFillHistograms (  ) 

Definition at line 552 of file BCEngineMCMC.cxx.

00553 {
00554    // check if histograms are supposed to be filled
00555    if (!fMCMCFlagFillHistograms)
00556       return;
00557 
00558    // loop over chains
00559    for (int i = 0; i < fMCMCNChains; ++i)
00560    {
00561       // fill each 1-dimensional histogram (if supposed to be filled)
00562       for (int j = 0; j < fMCMCNParameters; ++j)
00563          if (fMCMCFlagsFillHistograms.at(j))
00564             fMCMCH1Marginalized[j] -> Fill(fMCMCx[i * fMCMCNParameters + j]);
00565 
00566       // fill each 2-dimensional histogram (if supposed to be filled)
00567       int counter = 0;
00568 
00569       for (int j = 0; j < fMCMCNParameters; ++j)
00570          for (int k = 0; k < j; ++k)
00571          {
00572             if (fMCMCFlagsFillHistograms.at(j) && fMCMCFlagsFillHistograms.at(k))
00573                fMCMCH2Marginalized[counter]->Fill(fMCMCx[i*fMCMCNParameters+k],fMCMCx[i* fMCMCNParameters+j]);
00574             counter ++;
00575          }
00576    }
00577 }

void BCEngineMCMC::MCMCUpdateStatisticsTestConvergenceAllChains (  ) 

Definition at line 580 of file BCEngineMCMC.cxx.

00581 {
00582    // calculate number of entries in this part of the chain
00583    int npoints = fMCMCNTrialsTrue[0] + fMCMCNTrialsFalse[0];
00584 
00585    if (fMCMCNChains > 1 && npoints > 1)
00586    {
00587       // define flag for convergence
00588       bool flag_convergence = true;
00589 
00590       // loop over parameters
00591       for (int iparameters = 0; iparameters < fMCMCNParameters; ++iparameters)
00592       {
00593          double sum = 0;
00594          double sum2 = 0;
00595          double sumv = 0;
00596 
00597          // loop over chains
00598          for (int ichains = 0; ichains < fMCMCNChains; ++ichains)
00599          {
00600             // get parameter index
00601             int index = ichains * fMCMCNParameters + iparameters;
00602 
00603             // calculate mean value of each parameter in the chain for this part
00604             fMCMCMeanx[index] += (fMCMCx[index] - fMCMCMeanx[index]) / double(npoints);
00605 
00606             // calculate variance of each chain for this part
00607             fMCMCVariancex[index] = (1.0 - 1/double(npoints)) * fMCMCVariancex[index]
00608                   + (fMCMCx[index] - fMCMCMeanx[index]) * (fMCMCx[index] - fMCMCMeanx[index]) / double(npoints - 1);
00609 
00610             sum  += fMCMCMeanx[index];
00611             sum2 += fMCMCMeanx[index] * fMCMCMeanx[index];
00612             sumv += fMCMCVariancex[index];
00613          }
00614 
00615          // calculate r-value for each parameter
00616          double mean = sum / double(fMCMCNChains);
00617          double B = (sum2 / double(fMCMCNChains) - mean * mean) * double(fMCMCNChains) / double(fMCMCNChains-1) * double(npoints);
00618          double W = sumv * double(npoints) / double(npoints - 1) / double(fMCMCNChains);
00619 
00620          double r = 100.0;
00621 
00622          if (W > 0)
00623          {
00624             r = sqrt( ( (1-1/double(npoints)) * W + 1/double(npoints) * B ) / W);
00625             fMCMCRValueParameters[iparameters] = r;
00626          }
00627          // set flag to false if convergence criterion is not fulfilled for the parameter
00628          if (! ((fMCMCRValueParameters[iparameters]-1.0) < fMCMCRValueParametersCriterion))
00629             flag_convergence = false;
00630       }
00631 
00632       // convergence criterion applied on the log-likelihood
00633       double sum = 0;
00634       double sum2 = 0;
00635       double sumv = 0;
00636 
00637       // loop over chains
00638       for (int i = 0; i < fMCMCNChains; ++i)
00639       {
00640          // calculate mean value of each chain for this part
00641          fMCMCMean[i] += (fMCMCLogProbx[i] - fMCMCMean[i]) / double(npoints);
00642 
00643          // calculate variance of each chain for this part
00644          if (npoints > 1)
00645             fMCMCVariance[i] = (1.0 - 1/double(npoints)) * fMCMCVariance[i]
00646                   + (fMCMCLogProbx[i] - fMCMCMean[i]) * (fMCMCLogProbx[i] - fMCMCMean[i]) / double(npoints - 1);
00647 
00648          sum  += fMCMCMean[i];
00649          sum2 += fMCMCMean[i] * fMCMCMean[i]; ;
00650          sumv += fMCMCVariance[i];
00651       }
00652 
00653       // calculate r-value for log-likelihood
00654       double mean = sum / double(fMCMCNChains);
00655       double B = (sum2 / double(fMCMCNChains) - mean * mean) * double(fMCMCNChains) / double(fMCMCNChains-1) * double(npoints);
00656       double W = sumv * double(npoints) / double(npoints - 1) / double(fMCMCNChains);
00657       double r = 100.0;
00658 
00659       if (W > 0)
00660       {
00661          r = sqrt( ( (1-1/double(npoints)) * W + 1/double(npoints) * B ) / W);
00662          fMCMCRValue = r;
00663       }
00664 
00665       // set flag to false if convergence criterion is not fulfilled for the log-likelihood
00666       if (! ((fMCMCRValue-1.0) < fMCMCRValueCriterion))
00667          flag_convergence = false;
00668 
00669       // remember number of iterations needed to converge
00670       if (fMCMCNIterationsConvergenceGlobal == -1 && flag_convergence == true)
00671          fMCMCNIterationsConvergenceGlobal = fMCMCNIterations[0] / fMCMCNParameters;
00672    }
00673 }

void BCEngineMCMC::MCMCUpdateStatisticsWriteChains (  ) 

Definition at line 676 of file BCEngineMCMC.cxx.

00677 {
00678    // loop over all chains
00679    for (int i = 0; i < fMCMCNChains; ++i)
00680       fMCMCTrees[i] -> Fill();
00681 }

BCEngineMCMC & BCEngineMCMC::operator= ( const BCEngineMCMC engineMCMC  ) 

Defaut assignment operator

Definition at line 124 of file BCEngineMCMC.cxx.

00125 {
00126    if (this != &enginemcmc)
00127       enginemcmc.Copy(* this);
00128 
00129    return * this;
00130 }

int BCEngineMCMC::SetMarginalized ( int  index1,
int  index2,
TH2D *  h 
)

Definition at line 1360 of file BCEngineMCMC.cxx.

01361 {
01362    int counter = 0;
01363    int index = 0;
01364 
01365    // search for correct combination
01366    for(int i = 0; i < fMCMCNParameters; i++)
01367       for (int j = 0; j < i; ++j)
01368       {
01369          if(j == index1 && i == index2)
01370             index = counter;
01371          counter++;
01372       }
01373 
01374    if((int)fMCMCH2Marginalized.size()<=index)
01375       return 0;
01376 
01377    if(h==0)
01378       return 0;
01379 
01380    if((int)fMCMCH2Marginalized.size()==index)
01381       fMCMCH2Marginalized.push_back(h);
01382    else
01383       fMCMCH2Marginalized[index]=h;
01384 
01385    return index;
01386 }

int BCEngineMCMC::SetMarginalized ( int  index,
TH1D *  h 
)

Definition at line 1343 of file BCEngineMCMC.cxx.

01344 {
01345    if((int)fMCMCH1Marginalized.size()<=index)
01346       return 0;
01347 
01348    if(h==0)
01349       return 0;
01350 
01351    if((int)fMCMCH1Marginalized.size()==index)
01352       fMCMCH1Marginalized.push_back(h);
01353    else
01354       fMCMCH1Marginalized[index]=h;
01355 
01356    return index;
01357 }


Member Data Documentation

std::vector<double> BCEngineMCMC::fMCMCBoundaryMax [protected]

Definition at line 525 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCBoundaryMin [protected]

Definition at line 524 of file BCEngineMCMC.h.

Definition at line 643 of file BCEngineMCMC.h.

Definition at line 639 of file BCEngineMCMC.h.

Definition at line 559 of file BCEngineMCMC.h.

Definition at line 658 of file BCEngineMCMC.h.

Definition at line 649 of file BCEngineMCMC.h.

Definition at line 654 of file BCEngineMCMC.h.

Definition at line 624 of file BCEngineMCMC.h.

bool BCEngineMCMC::fMCMCFlagRun [protected]

Definition at line 628 of file BCEngineMCMC.h.

std::vector<bool> BCEngineMCMC::fMCMCFlagsFillHistograms [protected]

Definition at line 529 of file BCEngineMCMC.h.

Definition at line 610 of file BCEngineMCMC.h.

std::vector<TH1D *> BCEngineMCMC::fMCMCH1Marginalized [protected]

Definition at line 712 of file BCEngineMCMC.h.

std::vector<int> BCEngineMCMC::fMCMCH1NBins [protected]

Definition at line 708 of file BCEngineMCMC.h.

std::vector<TH2D *> BCEngineMCMC::fMCMCH2Marginalized [protected]

Definition at line 713 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCInitialPosition [protected]

Definition at line 635 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCLogProbx [protected]

Definition at line 674 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCMaximumLogProb [protected]

Definition at line 685 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCMaximumPoints [protected]

Definition at line 680 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCMean [protected]

Definition at line 591 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCMeanx [protected]

Definition at line 601 of file BCEngineMCMC.h.

int BCEngineMCMC::fMCMCNChains [protected]

Definition at line 533 of file BCEngineMCMC.h.

std::vector<int> BCEngineMCMC::fMCMCNIterations [protected]

Definition at line 542 of file BCEngineMCMC.h.

Definition at line 576 of file BCEngineMCMC.h.

Definition at line 555 of file BCEngineMCMC.h.

Definition at line 563 of file BCEngineMCMC.h.

Definition at line 571 of file BCEngineMCMC.h.

Definition at line 567 of file BCEngineMCMC.h.

Definition at line 546 of file BCEngineMCMC.h.

Definition at line 550 of file BCEngineMCMC.h.

int BCEngineMCMC::fMCMCNLag [protected]

Definition at line 537 of file BCEngineMCMC.h.

Definition at line 520 of file BCEngineMCMC.h.

std::vector<int> BCEngineMCMC::fMCMCNTrialsFalse [protected]

Definition at line 586 of file BCEngineMCMC.h.

std::vector<int> BCEngineMCMC::fMCMCNTrialsTrue [protected]

Definition at line 581 of file BCEngineMCMC.h.

Definition at line 514 of file BCEngineMCMC.h.

TRandom3* BCEngineMCMC::fMCMCRandom [protected]

Definition at line 704 of file BCEngineMCMC.h.

double BCEngineMCMC::fMCMCRValue [protected]

Definition at line 697 of file BCEngineMCMC.h.

Definition at line 689 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCRValueParameters [protected]

Definition at line 700 of file BCEngineMCMC.h.

Definition at line 693 of file BCEngineMCMC.h.

std::vector<TTree *> BCEngineMCMC::fMCMCTrees [protected]

Definition at line 718 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCTrialFunctionScaleFactor [protected]

Definition at line 615 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCTrialFunctionScaleFactorStart [protected]

Definition at line 620 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCVariance [protected]

Definition at line 596 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCVariancex [protected]

Definition at line 606 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCx [protected]

Definition at line 665 of file BCEngineMCMC.h.

std::vector<double> BCEngineMCMC::fMCMCxLocal [protected]

Definition at line 669 of file BCEngineMCMC.h.


The documentation for this class was generated from the following files:

Generated on Tue Oct 6 09:48:21 2009 for Bayesian Analysis Toolkit by  doxygen 1.6.1