11 #include "BCModelManager.h"
13 #include "BCDataPoint.h"
25 fModelContainer =
new BCModelContainer();
33 delete fModelContainer;
41 modelmanager.Copy(*
this);
48 if (
this != &modelmanager)
49 modelmanager.Copy(*
this);
62 for (
unsigned int i = 0; i <
GetNModels(); i++)
101 fModelContainer->push_back(model);
105 void BCModelManager::SetNIterationsMax(
int niterations)
107 for (
unsigned int i = 0; i <
GetNModels(); i++)
108 GetModel(i)->SetNIterationsMax(niterations);
114 for (
unsigned int i = 0; i <
GetNModels(); i++)
115 GetModel(i)->SetNIterationsMin(niterations);
121 for (
unsigned int i = 0; i <
GetNModels(); i++)
122 GetModel(i)->SetNIterationsPrecisionCheck(niterations);
128 for (
unsigned int i = 0; i <
GetNModels(); i++)
129 GetModel(i)->SetNIterationsOutput(niterations);
138 for (
unsigned int i = 0; i <
GetNModels(); i++)
139 GetModel(i)->SetIntegrationMethod(method);
147 for (
unsigned int i = 0; i <
GetNModels(); i++)
148 GetModel(i)->SetMarginalizationMethod(method);
156 for (
unsigned int i = 0; i <
GetNModels(); i++)
157 GetModel(i)->SetOptimizationMethod(method);
165 for (
unsigned int i = 0; i <
GetNModels(); i++)
166 GetModel(i)->SetRelativePrecision(relprecision);
174 for (
unsigned int i = 0; i <
GetNModels(); i++)
175 GetModel(i)->SetAbsolutePrecision(absprecision);
183 for (
unsigned int i = 0; i <
GetNModels(); i++)
192 for (
unsigned int i = 0; i <
GetNModels(); i++)
201 for (
unsigned int i = 0; i <
GetNModels(); i++)
210 for (
unsigned int i = 0; i <
GetNModels(); i++)
219 for (
unsigned int i = 0; i <
GetNModels(); i++)
228 for (
unsigned int i = 0; i <
GetNModels(); i++)
229 GetModel(i)->SetDataBoundaries(index, lowerboundary, upperboundary);
236 for (
unsigned int i = 0; i <
GetNModels(); i++)
244 if (fModelContainer->size() == 0) {
245 BCLog::OutError(
"BCModelManager::ReadDataFromFileTree : No model defined.");
261 for (
unsigned int i = 0; i <
GetNModels(); i++)
262 fModelContainer->at(i)->SetDataSet(fDataSet);
264 else if (read_file == -1) {
276 if (fModelContainer->size() == 0) {
277 BCLog::OutError(
"BCModelManager::ReadDataFromFileTree. No model defined.");
293 for (
unsigned int i = 0; i <
GetNModels(); i++)
294 fModelContainer->at(i)->SetDataSet(fDataSet);
309 double normalization = 0.0;
311 BCLog::OutSummary(
"Running normalization of all models.");
313 for (
unsigned int i = 0; i <
GetNModels(); i++) {
314 fModelContainer->at(i)->Integrate();
317 normalization += (fModelContainer->at(i)->GetIntegral() * fModelContainer->at(i)->GetModelAPrioriProbability());
321 for (
unsigned int i = 0; i <
GetNModels(); i++)
322 fModelContainer->at(i)->SetModelAPosterioriProbability(
323 (fModelContainer->at(i)->GetIntegral() * fModelContainer->at(i)->GetModelAPrioriProbability()) /
336 const double norm1 = fModelContainer->at(imodel1)->GetIntegral();
337 const double norm2 = fModelContainer->at(imodel2)->GetIntegral();
342 Form(
"BCModelManager::BayesFactor : Model %s (index %d) not normalized. Cannot calculate Bayes factor.",
343 fModelContainer->at(imodel1)->GetName().data(),imodel1));
350 Form(
"BCModelManager::BayesFactor : Model %s (index %d) not normalized. Cannot calculate Bayes factor.",
351 fModelContainer->at(imodel2)->GetName().data(),imodel2));
356 if(norm2==0. && norm1!=0.) {
358 Form(
"BCModelManager::BayesFactor : Model %s (index %d) has ZERO probability. Bayes factor is infinite.",
359 fModelContainer->at(imodel2)->GetName().data(),imodel2));
364 if(norm2==0. && norm1==0.) {
366 Form(
"BCModelManager::BayesFactor : Models %s and %s have ZERO probability. Bayes factor is unknown. Returning 1.",
367 fModelContainer->at(imodel2)->GetName().data(),fModelContainer->at(imodel1)->GetName().data()));
380 for (
unsigned int i = 0; i <
GetNModels(); i++)
389 for (
unsigned int i = 0; i <
GetNModels(); i++)
398 for (
unsigned int i = 0; i <
GetNModels(); i++)
399 GetModel(i)->WriteMarkovChain(flag);
407 for (
unsigned int i = 0; i <
GetNModels(); i++)
408 GetModel(i)->CalculatePValue(
GetModel(i)->GetBestFitParameters(), flag_histogram);
416 std::streambuf * old_buffer = 0;
420 if (!out.is_open()) {
421 std::cerr<<
"Couldn't open file "<<file<<std::endl;
424 old_buffer = std::cout.rdbuf(out.rdbuf());
428 int nmodels = fModelContainer->size();
430 <<
"======================================"<<std::endl
431 <<
" Summary"<<std::endl
432 <<
"======================================"<<std::endl
434 <<
" Number of models : "<<nmodels<<std::endl
436 <<
" - Models:"<<std::endl;
438 for (
int i = 0; i < nmodels; i++)
439 fModelContainer->at(i)->PrintSummary();
442 std::cout<<
" - Data:"<<std::endl
447 std::cout<<
"======================================"<<std::endl
448 <<
" Model comparison"<<std::endl
452 std::cout<<
" - A priori probabilities:"<<std::endl<<std::endl;
454 for (
int i=0; i<nmodels; i++)
455 std::cout<<
" p("<< fModelContainer->at(i)->GetName()
456 <<
") = "<< fModelContainer->at(i)->GetModelAPrioriProbability()
458 std::cout<<std::endl;
460 std::cout<<
" - A posteriori probabilities:"<<std::endl<<std::endl;
462 for (
int i = 0; i < nmodels; i++)
463 std::cout<<
" p("<< fModelContainer->at(i)->GetName()
464 <<
" | data) = "<< fModelContainer->at(i)->GetModelAPosterioriProbability()
466 std::cout<<std::endl;
468 std::cout<<
"======================================"<<std::endl<<std::endl;
471 std::cout.rdbuf(old_buffer);
480 std::streambuf * old_buffer = 0;
484 if (!out.is_open()) {
485 std::cerr<<
"Couldn't open file "<<file<<std::endl;
488 old_buffer = std::cout.rdbuf(out.rdbuf());
492 int nmodels = fModelContainer->size();
494 <<
"==========================================="<<std::endl
495 <<
" Model Comparison Summary"<<std::endl
496 <<
"==========================================="<<std::endl
498 <<
" Number of models : "<<nmodels<<std::endl
502 std::cout<<
" - A priori probabilities:"<<std::endl<<std::endl;
504 for (
int i=0; i<nmodels; i++)
505 std::cout<<
" p("<< fModelContainer->at(i)->GetName()
506 <<
") = "<< fModelContainer->at(i)->GetModelAPrioriProbability()
508 std::cout<<std::endl;
510 std::cout<<
" - A posteriori probabilities:"<<std::endl<<std::endl;
512 for (
int i = 0; i < nmodels; i++)
513 std::cout<<
" p("<< fModelContainer->at(i)->GetName()
514 <<
" | data) = "<< fModelContainer->at(i)->GetModelAPosterioriProbability()
516 std::cout<<std::endl;
519 std::cout<<
" - Bayes factors:"<<std::endl<<std::endl;
520 for (
int i = 0; i < nmodels-1; i++)
521 for (
int j = i+1; j < nmodels; j++)
522 std::cout<<
" K = p(data | "<<fModelContainer->at(i)->GetName()<<
") / "
523 <<
"p(data | "<<fModelContainer->at(j)->GetName()<<
") = "
525 std::cout<<std::endl;
529 <<
" - p-values:"<<std::endl
532 for (
int i = 0; i < nmodels; i++)
534 double p = fModelContainer->at(i)->GetPValue();
535 std::cout <<
" "<< fModelContainer->at(i)->GetName();
537 std::cout<<
": p-value = "<< p;
539 std::cout<<
": p-value not calculated";
540 std::cout<<std::endl;
542 std::cout<<std::endl;
544 std::cout<<
"==========================================="<<std::endl<<std::endl;
547 std::cout.rdbuf(old_buffer);
556 for (
unsigned int i = 0; i <
GetNModels(); i++)
565 modelmanager.fModelContainer = fModelContainer;
566 modelmanager.fDataSet = fDataSet;
void SetDataPointUpperBoundary(int index, double upperboundary)
double BayesFactor(const unsigned int imodel1, const unsigned int imodel2)
void SetModelAPrioriProbability(double probability)
void SetAbsolutePrecision(double absprecision)
void SetDataPointLowerBoundaries(BCDataPoint *datasetlowerboundaries)
void SetRelativePrecision(double relprecision)
void SetOptimizationMethod(BCIntegrate::BCOptimizationMethod method)
void SetDataPointLowerBoundary(int index, double lowerboundary)
void CalculatePValue(bool flag_histogram=false)
BCModelManager & operator=(const BCModelManager &modelmanager)
void SetDataPointUpperBoundaries(BCDataPoint *datasetupperboundaries)
A class representing a data point.
void SetDataBoundaries(int index, double lowerboundary, double upperboundary)
void AddModel(BCModel *model, double probability=0.)
A class representing a set of BCModels.
void SetDataSet(BCDataSet *dataset)
void SetIntegrationMethod(BCIntegrate::BCIntegrationMethod method)
void SetNIterationsOutput(int niterations)
void PrintResults(const char *file)
The base class for all user-defined models.
void SetNChains(unsigned int n)
A class representing a set of data points.
int ReadDataFromFileTree(const char *filename, const char *treename, const char *branchnames)
void PrintModelComparisonSummary(const char *filename=0)
void SetMarginalizationMethod(BCIntegrate::BCMarginalizationMethod method)
void SetNIterationsPrecisionCheck(int niterations)
int ReadDataFromFileTxt(const char *filename, int nbranches)
void SetSingleDataPoint(BCDataPoint *datapoint)
void SetDataPointUpperBoundary(int index, double upperboundary)
void SetNbins(unsigned int n)
int ReadDataFromFileTxt(const char *filename, int nvariables)
int ReadDataFromFileTree(const char *filename, const char *treename, const char *branchnames)
BCDataPoint * GetDataPoint(unsigned int index)
BCModel * GetModel(int index)
unsigned int GetNDataPoints()
unsigned int GetNModels()
void SetDataPointUpperBoundaries(BCDataPoint *datasetupperboundaries)
void SetDataSet(BCDataSet *dataset)
void SetDataPointLowerBoundary(int index, double lowerboundary)
void WriteMarkovChain(bool flag)
void AddDataPoint(BCDataPoint *datapoint)
virtual ~BCModelManager()
void SetNIterationsMin(int niterations)
void SetDataPointLowerBoundaries(BCDataPoint *datasetlowerboundaries)
void PrintSummary(const char *filename=0)