BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
Config.hh
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2023.
4
5This file is part of BDSIM.
6
7BDSIM is free software: you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published
9by the Free Software Foundation version 3 of the License.
10
11BDSIM is distributed in the hope that it will be useful, but
12WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef CONFIG_H
20#define CONFIG_H
21#include "BinSpecification.hh"
22
23#include "Rtypes.h" // for classdef
24
25#include "RebdsimTypes.hh"
26#include "SpectraParticles.hh"
27
28#include <map>
29#include <set>
30#include <string>
31#include <vector>
32
33class HistogramDef;
34class HistogramDefSet;
35
42class Config
43{
45private:
47 std::map<std::string, std::string> alternateKeys;
48
50 std::map<std::string, bool> optionsBool;
51 std::map<std::string, std::string> optionsString;
52 std::map<std::string, double> optionsNumber;
54
57 std::map<std::string, std::vector<HistogramDef*> > histoDefs;
58
60 std::map<std::string, std::vector<HistogramDef*> > histoDefsSimple;
61
63 std::map<std::string, std::vector<HistogramDef*> > histoDefsPerEntry;
64
66 std::vector<HistogramDefSet*> eventHistoDefSetsSimple;
67 std::vector<HistogramDefSet*> eventHistoDefSetsPerEntry;
68
70 std::vector<std::string> eventParticleSetBranches;
71 std::vector<std::string> eventParticleSetSimpleBranches;
72
73public:
74 virtual ~Config();
75
77 static Config* Instance(const std::string& fileName = "",
78 const std::string& inputFilePath = "",
79 const std::string& outputFileName = "",
80 const std::string& defaultOutputFileSuffix = "_ana");
81
82 void ParseInputFile();
83
85 inline std::string GetOptionString(const std::string& key) const {return optionsString.at(key);}
86 inline bool GetOptionBool(const std::string& key) const {return optionsBool.at(key);}
87 inline double GetOptionNumber(const std::string& key) const {return optionsNumber.at(key);}
89
91 inline const std::vector<HistogramDef*>& HistogramDefinitions(const std::string& treeName) const
92 {return histoDefs.at(treeName);}
93
95 inline const std::vector<HistogramDef*>& HistogramDefinitionsSimple(const std::string& treeName) const
96 {return histoDefsSimple.at(treeName);}
97
99 inline const std::vector<HistogramDef*>& HistogramDefinitionsPerEntry(const std::string& treeName) const
100 {return histoDefsPerEntry.at(treeName);}
101
102 inline const std::vector<HistogramDefSet*>& EventHistogramSetDefinitionsSimple() const
104
105 inline const std::vector<HistogramDefSet*>& EventHistogramSetDefinitionsPerEntry() const
106 {return eventHistoDefSetsPerEntry;}
107
108 inline const std::vector<std::string>& EventParticleSetNamesSimple() const {return eventParticleSetSimpleBranches;}
109 inline const std::vector<std::string>& EventParticleSetNamesPerEntry() const {return eventParticleSetBranches;}
110
114 const RBDS::VectorString& BranchesToBeActivated(const std::string& treeName) const
115 {return branches.at(treeName);}
116
118 inline const RBDS::BranchMap& BranchesToBeActivated() const {return branches;}
119
122 inline bool AllBranchesToBeActivated() const {return allBranchesActivated;}
123
125 void SetBranchToBeActivated(const std::string& treeName, const std::string& branchName);
126
128 inline std::string InputFilePath() const {return optionsString.at("inputfilepath");}
129 inline std::string OutputFileName() const {return optionsString.at("outputfilename");}
130 inline std::string CalculateOpticalFunctionsFileName() const {return optionsString.at("opticslfilename");}
131 inline bool Debug() const {return optionsBool.at("debug");}
132 inline bool CalculateOpticalFunctions() const {return optionsBool.at("calculateoptics");}
133 inline bool EmittanceOnTheFly() const {return optionsBool.at("emittanceonthefly");}
134 inline bool ProcessSamplers() const {return optionsBool.at("processsamplers");}
135 inline bool PrintOut() const {return optionsBool.at("printout");}
136 inline double PrintModuloFraction() const {return optionsNumber.at("printmodulofraction");}
139 inline bool PerEntryBeam() const {return optionsBool.at("perentrybeam");}
140 inline bool PerEntryEvent() const {return optionsBool.at("perentryevent");}
141 inline bool PerEntryRun() const {return optionsBool.at("perentryrun");}
142 inline bool PerEntryOption() const {return optionsBool.at("perentryoption");}
143 inline bool PerEntryModel() const {return optionsBool.at("perentrymodel");}
145
148 void PrintHistogramSetDefinitions() const;
149
150 protected:
152 Config() = delete;
154 Config(const std::string& inputFilePathIn,
155 const std::string& outputFileNameIn,
156 const std::string& defaultOutputFileSuffix = "_ana");
158 Config(const std::string& fileNameIn,
159 const std::string& inputFilePathIn,
160 const std::string& outputFileNameIn,
161 const std::string& defaultOutputFileSuffix);
162
165 void InitialiseOptions(const std::string& analysisFile);
166
168 void ParseHistogramLine(const std::string& line);
169
171 void ParseSpectraLine(const std::string& line);
172
174 void ParseParticleSetLine(const std::string& line);
175
177 void ParseHistogram(const std::string& line, const int nDim);
178
181 void ParsePerEntry(const std::string& name, bool& perEntry) const;
182
184 bool ContainsWordCI(const std::string& input,
185 const std::string& word) const;
186
188 void ParseLog(const std::string& definition,
189 bool& xLog,
190 bool& yLog,
191 bool& zLog) const;
192
197 void UpdateRequiredBranches(const HistogramDef* def);
198
201 void UpdateRequiredBranches(const std::string& treeName,
202 const std::string& var);
203
206 bool InvalidTreeName(const std::string& treeName) const;
207
210 void CheckValidTreeName(std::string& treeName) const;
211
214 void ParseBins(const std::string& bins,
215 int nDim,
216 BinSpecification& xBinning,
217 BinSpecification& yBinning,
218 BinSpecification& zBinning) const;
219
222 void ParseBinning(const std::string& binning,
223 int nDim,
224 BinSpecification& xBinning,
225 BinSpecification& yBinning,
226 BinSpecification& zBinning,
227 bool xLog,
228 bool yLog,
229 bool zLog) const;
231 std::vector<std::string> SplitOnWhiteSpace(const std::string& line) const;
232
234 std::set<ParticleSpec> ParseParticles(const std::string& word) const;
235
237 void ParseSetting(const std::string& line);
238
240 std::string LowerCase(const std::string& st) const;
241
244 bool RegisterHistogramName(const std::string& newHistName);
245
246 static Config* instance;
247
249 static std::vector<std::string> treeNames;
250
252 int lineCounter = 0;
253
255 RBDS::BranchMap branches;
256
259
262 std::map<std::string, int> spectraNames;
263
264 std::set<std::string> histogramNames;
265
266 ClassDef(Config,1);
267};
268
269#endif
Binning specification for a single dimension.
Configuration and configuration parser class.
Definition: Config.hh:43
std::string InputFilePath() const
Accessor.
Definition: Config.hh:128
bool PerEntryEvent() const
Definition: Config.hh:140
std::string CalculateOpticalFunctionsFileName() const
Accessor.
Definition: Config.hh:130
bool AllBranchesToBeActivated() const
Definition: Config.hh:122
bool GetOptionBool(const std::string &key) const
General accessor for option.
Definition: Config.hh:86
std::map< std::string, std::vector< HistogramDef * > > histoDefs
Definition: Config.hh:57
void ParseSetting(const std::string &line)
Parse a settings line in input file and appropriate update member map.
Definition: Config.cc:769
void PrintHistogramSetDefinitions() const
Definition: Config.cc:553
void ParseHistogramLine(const std::string &line)
Parse a line beginning with histogram. Uses other functions if appropriately defined.
Definition: Config.cc:252
double PrintModuloFraction() const
Accessor.
Definition: Config.hh:136
std::map< std::string, double > optionsNumber
Storage of options.
Definition: Config.hh:52
std::string LowerCase(const std::string &st) const
Return a lower case copy of a string.
Definition: Config.cc:762
const std::vector< HistogramDef * > & HistogramDefinitionsPerEntry(const std::string &treeName) const
Access all per entry histogram definitions - throws exception if out of range.
Definition: Config.hh:99
void SetBranchToBeActivated(const std::string &treeName, const std::string &branchName)
Set a branch to be activated if not already.
Definition: Config.cc:545
void CheckValidTreeName(std::string &treeName) const
Definition: Config.cc:563
bool InvalidTreeName(const std::string &treeName) const
Definition: Config.cc:579
std::vector< std::string > eventParticleSetBranches
List of branches in event tree to produce ParticleSet objects on. (per event and simple).
Definition: Config.hh:70
std::map< std::string, int > spectraNames
Definition: Config.hh:262
static Config * Instance(const std::string &fileName="", const std::string &inputFilePath="", const std::string &outputFileName="", const std::string &defaultOutputFileSuffix="_ana")
Singleton accessor.
Definition: Config.cc:155
std::map< std::string, std::string > optionsString
Storage of options.
Definition: Config.hh:51
bool allBranchesActivated
Whether all branches will be activated - ie for optics.
Definition: Config.hh:258
Config()=delete
Private constructor for singleton pattern.
void ParseBinning(const std::string &binning, int nDim, BinSpecification &xBinning, BinSpecification &yBinning, BinSpecification &zBinning, bool xLog, bool yLog, bool zLog) const
Definition: Config.cc:602
const std::vector< HistogramDef * > & HistogramDefinitions(const std::string &treeName) const
Access all histogram definitions.
Definition: Config.hh:91
bool PerEntryModel() const
Definition: Config.hh:143
std::vector< std::string > SplitOnWhiteSpace(const std::string &line) const
Return a vector of strings by splitting on whitespace.
Definition: Config.cc:682
bool PerEntryOption() const
Definition: Config.hh:142
bool PrintOut() const
Accessor.
Definition: Config.hh:135
std::set< ParticleSpec > ParseParticles(const std::string &word) const
Parser a list of particle PDG IDs into a set.
Definition: Config.cc:697
double GetOptionNumber(const std::string &key) const
General accessor for option.
Definition: Config.hh:87
bool CalculateOpticalFunctions() const
Accessor.
Definition: Config.hh:132
void ParseLog(const std::string &definition, bool &xLog, bool &yLog, bool &zLog) const
Parse whether each dimension is log or linear.
Definition: Config.cc:502
bool RegisterHistogramName(const std::string &newHistName)
Definition: Config.cc:809
std::string GetOptionString(const std::string &key) const
General accessor for option.
Definition: Config.hh:85
bool Debug() const
Accessor.
Definition: Config.hh:131
std::vector< HistogramDefSet * > eventHistoDefSetsSimple
Sets of histogram definitions per particle. Only for event branch.
Definition: Config.hh:66
RBDS::BranchMap branches
Cache of which branches need to be activated for this analysis.
Definition: Config.hh:255
int lineCounter
Index of which line in the file we're on while parsing - for feedback.
Definition: Config.hh:252
std::map< std::string, std::string > alternateKeys
Private members first as required in accessors.
Definition: Config.hh:47
void UpdateRequiredBranches(const HistogramDef *def)
Definition: Config.cc:520
bool EmittanceOnTheFly() const
Accessor.
Definition: Config.hh:133
bool ContainsWordCI(const std::string &input, const std::string &word) const
Return true if 'input' contains 'word' - CI = case insensitive.
Definition: Config.cc:494
const std::vector< HistogramDef * > & HistogramDefinitionsSimple(const std::string &treeName) const
Access all simple histogram definitions - throws exception if out of range.
Definition: Config.hh:95
std::map< std::string, std::vector< HistogramDef * > > histoDefsSimple
Copy of definition used to identify only 'simple' histogram definitions. Doesn't own.
Definition: Config.hh:60
bool PerEntryBeam() const
Definition: Config.hh:139
static std::vector< std::string > treeNames
Vector of permitted tree names.
Definition: Config.hh:249
void ParseParticleSetLine(const std::string &line)
Parse a particle set line.
Definition: Config.cc:469
void InitialiseOptions(const std::string &analysisFile)
Definition: Config.cc:114
const RBDS::BranchMap & BranchesToBeActivated() const
Access the map of all branches to be activated per tree.
Definition: Config.hh:118
void ParseSpectraLine(const std::string &line)
Parse a spectra definition line.
Definition: Config.cc:391
std::string OutputFileName() const
Accessor.
Definition: Config.hh:129
void ParseHistogram(const std::string &line, const int nDim)
Parse everything after the histogram declaration and check all parameters.
Definition: Config.cc:278
std::map< std::string, bool > optionsBool
Storage of options.
Definition: Config.hh:50
bool ProcessSamplers() const
Accessor.
Definition: Config.hh:134
void ParsePerEntry(const std::string &name, bool &perEntry) const
Definition: Config.cc:488
void ParseBins(const std::string &bins, int nDim, BinSpecification &xBinning, BinSpecification &yBinning, BinSpecification &zBinning) const
Definition: Config.cc:584
std::map< std::string, std::vector< HistogramDef * > > histoDefsPerEntry
Copy of definition used to identify only 'per entry' histogram definitions. Doesn't own.
Definition: Config.hh:63
bool PerEntryRun() const
Definition: Config.hh:141
const RBDS::VectorString & BranchesToBeActivated(const std::string &treeName) const
Definition: Config.hh:114
Specification for a set of histograms.
Common specification for a histogram.
Definition: HistogramDef.hh:34