20#include "BinGeneration.hh"
22#include "HistogramDef.hh"
23#include "HistogramDef1D.hh"
24#include "HistogramDef2D.hh"
25#include "HistogramDef3D.hh"
26#include "HistogramDef4D.hh"
27#include "HistogramFactory.hh"
28#include "HistogramMeanFromFile.hh"
29#include "PerEntryHistogram.hh"
37#include "BDSBH4DBase.hh"
45 const std::string& mergedHistogramNameIn,
46 bool perEntryAnalysis,
50 mergedHistogramName(mergedHistogramNameIn),
53 entries(chain->GetEntries()),
54 perEntry(perEntryAnalysis)
60 for (
auto pe : perEntryHistograms)
66 std::cout <<
"Analysis on \"" << treeName <<
"\" beginning" << std::endl;
71 TH1::AddDirectory(kTRUE);
72 TH2::AddDirectory(kTRUE);
73 TH3::AddDirectory(kTRUE);
74 BDSBH4DBase::AddDirectory(kTRUE);
80 std::cout <<
"Analysis on \"" << treeName <<
"\" complete" << std::endl;
95 for (
auto definition : definitions)
105 const auto& definitions = c->HistogramDefinitionsPerEntry(treeName);
106 for (
const auto& def : definitions)
113 for (
auto& peHist : perEntryHistograms)
114 {peHist->AccumulateCurrentEntry(entryNumber);}
119 for (
auto& peHist : perEntryHistograms)
120 {peHist->Terminate();}
134 std::string cleanedName = treeName.erase(treeName.size() - 1);
135 std::string perEntryDirName =
"PerEntryHistograms";
136 std::string simpleDirName =
"SimpleHistograms";
137 std::string mergedDirName =
"MergedHistograms";
138 TDirectory* rebdsimDir = outputFile->mkdir(cleanedName.c_str());
139 TDirectory* perEntryDir = rebdsimDir->mkdir(perEntryDirName.c_str());
140 TDirectory* simpleDir = rebdsimDir->mkdir(simpleDirName.c_str());
141 TDirectory* mergedDir = rebdsimDir->mkdir(mergedDirName.c_str());
145 for (
auto h : perEntryHistograms)
146 {h->Write(perEntryDir);}
150 for (
auto& h : simpleHistograms)
152 for (
auto& h : simpleHistograms)
159 std::cout <<
"Merging histograms from \"" << treeName <<
"\" analysis" << std::endl;
167 std::vector<TH1*>* outputHistograms)
171 TH1::AddDirectory(kTRUE);
172 TH2::AddDirectory(kTRUE);
173 TH3::AddDirectory(kTRUE);
174 BDSBH4DBase::AddDirectory(kTRUE);
178 std::string name = definition->histName;
179 std::string command = definition->variable +
" >> " + definition->histName;
180 std::string selection = definition->selection;
184 chain->Draw(command.c_str(), selection.c_str(),
"goff");
186 if (outputHistograms)
187 {outputHistograms->push_back(h);}
189 {simpleHistograms.push_back(h);}
virtual void Execute()
Method which calls all other methods in order.
virtual void SimpleHistograms()
Process histogram definitions from configuration instance.
void PreparePerEntryHistograms()
Create structures necessary for per entry histograms.
HistogramMeanFromFile * histoSum
Merge of per event stored histograms.
void AccumulatePerEntryHistograms(long int entryNumber)
Accumulate means and variances for per entry histograms.
virtual void Write(TFile *outputFile)
Write rebdsim histograms.
Analysis()=delete
No default constructor for this base class.
void TerminatePerEntryHistograms()
Prepare result of per entry histogram accumulation.
virtual void UserProcess()
Virtual function for user to overload and use. Does nothing by default.
bool perEntry
Whether to analyse each entry in the tree in a for loop or not.
void FillHistogram(HistogramDef *definition, std::vector< TH1 * > *outputHistograms=nullptr)
Create an individual histogram based on a definition.
static Config * Instance(const std::string &fileName="", const std::string &inputFilePath="", const std::string &outputFileName="", const std::string &defaultOutputFileSuffix="_ana")
Singleton accessor.
const std::vector< HistogramDef * > & HistogramDefinitionsSimple(const std::string &treeName) const
Access all simple histogram definitions - throws exception if out of range.
Common specification for a histogram.
Class to manufacture histograms.
TH1 * CreateHistogram(const HistogramDef *definition, const std::string &overRideName="", const std::string &overRideTitle="")
void Write(TDirectory *dir=nullptr)
Write to file.
void Terminate()
Finish calculation.
Holder for information to calculate per entry histograms.