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 - 2024.
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;
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
121 void SetBranchToBeActivated(const std::string& treeName, const std::string& branchName);
122
124 inline std::string InputFilePath() const {return optionsString.at("inputfilepath");}
125 inline std::string OutputFileName() const {return optionsString.at("outputfilename");}
126 inline std::string CalculateOpticalFunctionsFileName() const {return optionsString.at("opticslfilename");}
127 inline bool AllBranchesToBeActivated() const {return optionsBool.at("allbranchesactivated");}
128 inline bool Debug() const {return optionsBool.at("debug");}
129 inline bool CalculateOpticalFunctions() const {return optionsBool.at("calculateoptics");}
130 inline bool EmittanceOnTheFly() const {return optionsBool.at("emittanceonthefly");}
131 inline bool ProcessSamplers() const {return optionsBool.at("processsamplers");}
132 inline bool PrintOut() const {return optionsBool.at("printout");}
133 inline double PrintModuloFraction() const {return optionsNumber.at("printmodulofraction");}
136 inline bool PerEntryBeam() const {return optionsBool.at("perentrybeam");}
137 inline bool PerEntryEvent() const {return optionsBool.at("perentryevent");}
138 inline bool PerEntryRun() const {return optionsBool.at("perentryrun");}
139 inline bool PerEntryOption() const {return optionsBool.at("perentryoption");}
140 inline bool PerEntryModel() const {return optionsBool.at("perentrymodel");}
142
145 void PrintHistogramSetDefinitions() const;
146
152 void FixCylindricalAndSphericalSamplerVariablesInSets(const std::set<std::string>& allCNames,
153 const std::set<std::string>& allSNames);
154
155 protected:
157 Config() = delete;
159 Config(const std::string& inputFilePathIn,
160 const std::string& outputFileNameIn,
161 const std::string& defaultOutputFileSuffix = "_ana");
163 Config(const std::string& fileNameIn,
164 const std::string& inputFilePathIn,
165 const std::string& outputFileNameIn,
166 const std::string& defaultOutputFileSuffix);
167
170 void InitialiseOptions(const std::string& analysisFile);
171
173 void ParseHistogramLine(const std::string& line);
174
176 void ParseSpectraLine(const std::string& line);
177
179 void ParseParticleSetLine(const std::string& line);
180
182 void ParseHistogram(const std::string& line, const int nDim);
183
186 void ParsePerEntry(const std::string& name, bool& perEntry) const;
187
189 bool ContainsWordCI(const std::string& input,
190 const std::string& word) const;
191
193 void ParseLog(const std::string& definition,
194 bool& xLog,
195 bool& yLog,
196 bool& zLog) const;
197
202 void UpdateRequiredBranches(const HistogramDef* def);
203
206 void UpdateRequiredBranches(const std::string& treeName,
207 const std::string& var);
208
211 bool InvalidTreeName(const std::string& treeName) const;
212
215 void CheckValidTreeName(std::string& treeName) const;
216
219 void ParseBins(const std::string& bins,
220 int nDim,
221 BinSpecification& xBinning,
222 BinSpecification& yBinning,
223 BinSpecification& zBinning) const;
224
227 void ParseBinning(const std::string& binning,
228 int nDim,
229 BinSpecification& xBinning,
230 BinSpecification& yBinning,
231 BinSpecification& zBinning,
232 bool xLog,
233 bool yLog,
234 bool zLog) const;
236 std::vector<std::string> SplitOnWhiteSpace(const std::string& line) const;
237
239 std::set<ParticleSpec> ParseParticles(const std::string& word) const;
240
242 void ParseSetting(const std::string& line);
243
245 std::string LowerCase(const std::string& st) const;
246
249 bool RegisterHistogramName(const std::string& newHistName);
250
251 static Config* instance;
252
254 static std::vector<std::string> treeNames;
255
257 int lineCounter = 0;
258
260 RBDS::BranchMap branches;
261
264 std::map<std::string, int> spectraNames;
265
266 std::set<std::string> histogramNames;
267
268 ClassDef(Config,1);
269};
270
271#endif
Binning specification for a single dimension.
Configuration and configuration parser class.
Definition Config.hh:43
std::string InputFilePath() const
Accessor.
Definition Config.hh:124
bool PerEntryEvent() const
Definition Config.hh:137
std::string CalculateOpticalFunctionsFileName() const
Accessor.
Definition Config.hh:126
bool AllBranchesToBeActivated() const
Accessor.
Definition Config.hh:127
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:794
void PrintHistogramSetDefinitions() const
Definition Config.cc:555
void ParseHistogramLine(const std::string &line)
Parse a line beginning with histogram. Uses other functions if appropriately defined.
Definition Config.cc:251
double PrintModuloFraction() const
Accessor.
Definition Config.hh:133
std::map< std::string, double > optionsNumber
Storage of options.
Definition Config.hh:52
void FixCylindricalAndSphericalSamplerVariablesInSets(const std::set< std::string > &allCNames, const std::set< std::string > &allSNames)
Definition Config.cc:566
std::string LowerCase(const std::string &st) const
Return a lower case copy of a string.
Definition Config.cc:787
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:547
void CheckValidTreeName(std::string &treeName) const
Definition Config.cc:588
bool InvalidTreeName(const std::string &treeName) const
Definition Config.cc:604
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:264
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:154
std::map< std::string, std::string > optionsString
Storage of options.
Definition Config.hh:51
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:627
const std::vector< HistogramDef * > & HistogramDefinitions(const std::string &treeName) const
Access all histogram definitions.
Definition Config.hh:91
bool PerEntryModel() const
Definition Config.hh:140
std::vector< std::string > SplitOnWhiteSpace(const std::string &line) const
Return a vector of strings by splitting on whitespace.
Definition Config.cc:707
bool PerEntryOption() const
Definition Config.hh:139
bool PrintOut() const
Accessor.
Definition Config.hh:132
std::set< ParticleSpec > ParseParticles(const std::string &word) const
Parser a list of particle PDG IDs into a set.
Definition Config.cc:722
double GetOptionNumber(const std::string &key) const
General accessor for option.
Definition Config.hh:87
bool CalculateOpticalFunctions() const
Accessor.
Definition Config.hh:129
void ParseLog(const std::string &definition, bool &xLog, bool &yLog, bool &zLog) const
Parse whether each dimension is log or linear.
Definition Config.cc:504
bool RegisterHistogramName(const std::string &newHistName)
Definition Config.cc:834
std::string GetOptionString(const std::string &key) const
General accessor for option.
Definition Config.hh:85
bool Debug() const
Accessor.
Definition Config.hh:128
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:260
int lineCounter
Index of which line in the file we're on while parsing - for feedback.
Definition Config.hh:257
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:522
bool EmittanceOnTheFly() const
Accessor.
Definition Config.hh:130
bool ContainsWordCI(const std::string &input, const std::string &word) const
Return true if 'input' contains 'word' - CI = case insensitive.
Definition Config.cc:496
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:136
static std::vector< std::string > treeNames
Vector of permitted tree names.
Definition Config.hh:48
void ParseParticleSetLine(const std::string &line)
Parse a particle set line.
Definition Config.cc:471
void InitialiseOptions(const std::string &analysisFile)
Definition Config.cc:112
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:390
std::string OutputFileName() const
Accessor.
Definition Config.hh:125
void ParseHistogram(const std::string &line, const int nDim)
Parse everything after the histogram declaration and check all parameters.
Definition Config.cc:277
std::map< std::string, bool > optionsBool
Storage of options.
Definition Config.hh:50
bool ProcessSamplers() const
Accessor.
Definition Config.hh:131
void ParsePerEntry(const std::string &name, bool &perEntry) const
Definition Config.cc:490
void ParseBins(const std::string &bins, int nDim, BinSpecification &xBinning, BinSpecification &yBinning, BinSpecification &zBinning) const
Definition Config.cc:609
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:138
const RBDS::VectorString & BranchesToBeActivated(const std::string &treeName) const
Definition Config.hh:114
Specification for a set of histograms.
Common specification for a histogram.