19#include "BinGeneration.hh"
21#include "HistogramDef.hh"
22#include "HistogramDef1D.hh"
23#include "HistogramDef2D.hh"
24#include "HistogramDef3D.hh"
25#include "HistogramDef4D.hh"
26#include "HistogramFactory.hh"
27#include "HistogramMeanFromFile.hh"
28#include "PerEntryHistogram.hh"
36#include "BDSBH4DBase.hh"
44 const std::string& mergedHistogramNameIn,
45 bool perEntryAnalysis,
49 mergedHistogramName(mergedHistogramNameIn),
52 entries(chain->GetEntries()),
53 perEntry(perEntryAnalysis)
59 for (
auto pe : perEntryHistograms)
65 std::cout <<
"Analysis on \"" << treeName <<
"\" beginning" << std::endl;
70 TH1::AddDirectory(kTRUE);
71 TH2::AddDirectory(kTRUE);
72 TH3::AddDirectory(kTRUE);
73 BDSBH4DBase::AddDirectory(kTRUE);
79 std::cout <<
"Analysis on \"" << treeName <<
"\" complete" << std::endl;
94 for (
auto definition : definitions)
104 const auto& definitions = c->HistogramDefinitionsPerEntry(treeName);
105 for (
const auto& def : definitions)
112 for (
auto& peHist : perEntryHistograms)
113 {peHist->AccumulateCurrentEntry(entryNumber);}
118 for (
auto& peHist : perEntryHistograms)
119 {peHist->Terminate();}
133 std::string cleanedName = treeName.erase(treeName.size() - 1);
134 std::string perEntryDirName =
"PerEntryHistograms";
135 std::string simpleDirName =
"SimpleHistograms";
136 std::string mergedDirName =
"MergedHistograms";
137 TDirectory* rebdsimDir = outputFile->mkdir(cleanedName.c_str());
138 TDirectory* perEntryDir = rebdsimDir->mkdir(perEntryDirName.c_str());
139 TDirectory* simpleDir = rebdsimDir->mkdir(simpleDirName.c_str());
140 TDirectory* mergedDir = rebdsimDir->mkdir(mergedDirName.c_str());
144 for (
auto h : perEntryHistograms)
145 {h->Write(perEntryDir);}
149 for (
auto& h : simpleHistograms)
151 for (
auto& h : simpleHistograms)
158 std::cout <<
"Merging histograms from \"" << treeName <<
"\" analysis" << std::endl;
166 std::vector<TH1*>* outputHistograms)
170 TH1::AddDirectory(kTRUE);
171 TH2::AddDirectory(kTRUE);
172 TH3::AddDirectory(kTRUE);
173 BDSBH4DBase::AddDirectory(kTRUE);
177 std::string name = definition->histName;
178 std::string command = definition->variable +
" >> " + definition->histName;
179 std::string selection = definition->selection;
183 chain->Draw(command.c_str(), selection.c_str(),
"goff");
185 if (outputHistograms)
186 {outputHistograms->push_back(h);}
188 {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.