11 #include "BCGoFTest.h"
13 #include "BCDataPoint.h"
14 #include "BCDataSet.h"
16 #include "BCParameter.h"
26 fTemporaryDataSet = 0;
38 fLogLikelihoodMin = 1e99;
39 fLogLikelihoodMax = -1e99;
42 fHistogramLogProb = 0;
46 MCMCSetNIterationsMax(100000);
47 MCMCSetNIterationsRun(2000);
60 for (
int i = 0; i < ndatapoints; ++i)
61 for (
int j = 0; j < ndatavalues; ++j)
65 for (
unsigned int i = 0; i < GetNParameters(); ++i)
66 fTestModel->SetDataBoundaries(
68 GetParameter(i)->GetLowerLimit(),
69 GetParameter(i)->GetUpperLimit());
72 delete fTemporaryDataSet;
80 for (
int i = 0; i < int(parameters.size()); ++i)
92 void BCGoFTest::MCMCUserIterationInterface()
94 int nchains = MCMCGetNChains();
96 for (
int i = 0; i < nchains; ++i)
99 double loglikelihood = MCMCGetLogProbx(i);
102 if (loglikelihood < fLogLikelihood)
108 if (fHistogramLogProb)
109 fHistogramLogProb->Fill(loglikelihood);
113 if (loglikelihood > fLogLikelihoodMax)
114 fLogLikelihoodMax = loglikelihood;
115 else if (loglikelihood < fLogLikelihoodMin)
116 fLogLikelihoodMin = loglikelihood;
128 BCLog::OutError(
"BCGoFTest::SetTestDataPoint : Boundaries of the original data set are not defined.");
133 if (fHistogramLogProb)
135 delete fHistogramLogProb;
136 fHistogramLogProb = 0;
153 for (
int i = 0; i < ndatapoints; ++i)
160 fMapDataPoint.clear();
161 fMapDataValue.clear();
169 for (
int i = 0; i < ndatapoints; ++i)
170 for (
int j = 0; j < ndatavalues; ++j)
178 std::string parName = Form(
"parameter_%i", counter);
185 fMapDataPoint.push_back(i);
186 fMapDataValue.push_back(j);
195 BCLog::OutError(
"BCGoFTest::SetTestDataPoint : No non-fixed data values left.");
216 for (
int i = 0; i < int(parameters.size()); ++i)
219 fTestModel->GetParameter(i)->GetLowerLimit(),
220 fTestModel->GetParameter(i)->GetUpperLimit());
230 fHistogramLogProb = 0;
238 double D = fLogLikelihoodMax - fLogLikelihoodMin;
239 fHistogramLogProb =
new TH1D(Form(
"hist_%s_logprob",
GetName().data()),
";ln(prob);N", 100, fLogLikelihoodMin - 0.1*D, fLogLikelihoodMax + 0.1*D);
240 fHistogramLogProb->SetStats(kFALSE);
250 if (MCMCGetNIterationsConvergenceGlobal() < 0.)
252 BCLog::OutDetail(
" --> MCMC did not converge in evaluation of the p-value.");
257 fPValue = double(fPValueBelow) / double(fPValueBelow + fPValueAbove);
virtual double LogLikelihood(const std::vector< double > ¶ms)=0
int SetTestPoint(std::vector< double > parameters)
double GetDataPointLowerBoundary(unsigned int index) const
A class representing a data point.
unsigned int GetNValues() const
BCDataSet * GetDataSet() const
bool GetFlagBoundaries() const
The base class for all user-defined models.
double GetDataPointUpperBoundary(unsigned int index) const
const std::vector< double > & GetValues() const
A class representing a set of data points.
virtual int AddParameter(BCParameter *parameter)
BCGoFTest(const char *name)
double GetValue(unsigned index) const
double GetCalculatedPValue(bool flag_histogram=false)
BCDataPoint * GetDataPoint(unsigned int index)
unsigned int GetNDataPoints()
double LogLikelihood(const std::vector< double > ¶meters)
void AddDataPoint(BCDataPoint *datapoint)
void SetValue(unsigned index, double value)
const std::string & GetName() const