11 #include "BCModelOutput.h"
14 #include "BCParameter.h"
19 #include <TDirectory.h>
55 modeloutput.Copy(*
this);
61 if (
this != &modeloutput)
62 modeloutput.Copy(*
this);
68 void BCModelOutput::Init()
82 fModel->MCMCInitialize();
83 fModel->SAInitialize();
90 BCLog::OutError(
"BCModelOutput::SetFile : Cannot set file if model is not set.");
101 TDirectory * dir = gDirectory;
104 fFileName =
const_cast<char *
>(filename);
105 fOutputFile = TFile::Open(fFileName,
"RECREATE");
108 InitializeAnalysisTree();
109 fModel->MCMCInitializeMarkovChainTrees();
110 fModel->InitializeSATree();
120 fModel->WriteMarkovChain(flag);
127 BCLog::OutError(
"BCModelOutput::FillAnalysisTree : No file to write to.");
132 fNParameters = fModel->GetNParameters();
136 fMode_global.clear();
137 fMode_marginalized.clear();
138 fMean_marginalized.clear();
139 fMedian_marginalized.clear();
140 fQuantile_05.clear();
141 fQuantile_10.clear();
142 fQuantile_16.clear();
143 fQuantile_84.clear();
144 fQuantile_90.clear();
145 fQuantile_95.clear();
148 int nparameters = fModel->GetNParameters();
149 for (
int i = 0; i < nparameters; ++i) {
150 const BCParameter * parameter = fModel->GetParameter(i);
151 if (fModel->GetBestFitParameters().size() > 0)
152 fMode_global.push_back(fModel->GetBestFitParameters().at(i));
153 if (fModel->GetMarginalized(parameter->
GetName().data())) {
154 fMode_marginalized.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetMode());
155 fMean_marginalized.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetMean());
156 fMedian_marginalized.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetMedian());
157 fQuantile_05.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.05));
158 fQuantile_10.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.10));
159 fQuantile_16.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.16));
160 fQuantile_84.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.84));
161 fQuantile_90.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.90));
162 fQuantile_95.push_back(fModel->GetMarginalized(parameter->
GetName().data())->GetQuantile(0.95));
167 fAnalysisTree->Fill();
177 BCLog::OutError(
"BCModelOutput::WriteMarginalizedDistributions : No file to write to.");
181 if (!fOutputFile->IsOpen())
185 TDirectory * dir = gDirectory;
190 int nparameters = fModel->GetNParameters();
191 for (
int i = 0; i < nparameters; ++i) {
192 BCH1D* bchist = fModel->GetMarginalized(fModel->GetParameter(i));
201 for (
int i = 0; i < nparameters - 1; ++i) {
202 for (
int j = i + 1; j < nparameters; ++j) {
203 BCH2D* bchist = fModel->GetMarginalized(fModel->GetParameter(i),
204 fModel->GetParameter(j));
221 BCLog::OutError(
"BCModelOutput::Write : No file to write to.");
226 TDirectory * dir = gDirectory;
243 if (!fOutputFile->IsOpen())
247 TDirectory * dir = gDirectory;
254 if (fAnalysisTree->GetEntries() > 0)
255 fAnalysisTree->Write();
259 for (
unsigned i = 0; i < fModel->MCMCGetNChains(); ++i) {
260 if (fModel->MCMCGetMarkovChainTree(i)){
261 if (fModel->MCMCGetMarkovChainTree(i)->GetEntries() > 0) {
262 fModel->MCMCGetMarkovChainTree(i)->Write();
270 if (fModel->GetSATree()->GetEntries() > 0)
271 fModel->GetSATree()->Write();
274 fOutputFile->Close();
281 void BCModelOutput::InitializeAnalysisTree()
284 fAnalysisTree =
new TTree(
"AnalysisTree",
"AnalysisTree");
287 fAnalysisTree->Branch(
"fIndex", &fIndex,
"index/I");
288 fAnalysisTree->Branch(
"fNParameters", &fNParameters,
"parameters/I");
289 fAnalysisTree->Branch(
"fProbability_apriori" , &fProbability_apriori,
"apriori probability/D");
290 fAnalysisTree->Branch(
"fProbability_aposteriori", &fProbability_aposteriori,
"aposteriori probability/D");
291 fAnalysisTree->Branch(
"fMode_global", &fMode_global);
292 fAnalysisTree->Branch(
"fMode_marginalized", &fMode_marginalized);
293 fAnalysisTree->Branch(
"fMean_marginalized", &fMean_marginalized);
294 fAnalysisTree->Branch(
"fMedian_marginalized", &fMedian_marginalized);
295 fAnalysisTree->Branch(
"fQuantile_5" , &fQuantile_05);
296 fAnalysisTree->Branch(
"fQuantile_10" , &fQuantile_10);
297 fAnalysisTree->Branch(
"fQuantile_16" , &fQuantile_16);
298 fAnalysisTree->Branch(
"fQuantile_84" , &fQuantile_84);
299 fAnalysisTree->Branch(
"fQuantile_90" , &fQuantile_90);
300 fAnalysisTree->Branch(
"fQuantile_95" , &fQuantile_95);
307 modeloutput.fModel = fModel;
308 modeloutput.fAnalysisTree = fAnalysisTree;
void SetFile(const char *filename)
The base class for all user-defined models.
A class for handling 2D distributions.
void WriteMarginalizedDistributions()
double GetModelAPosterioriProbability() const
void WriteMarkovChain(bool flag=true)
A class for creating an (ROOT) output file.
A class representing a parameter of a model.
BCModelOutput & operator=(const BCModelOutput &modeloutput)
A class for handling 1D distributions.
void SetModel(BCModel *model)
double GetModelAPrioriProbability() const
const std::string & GetName() const