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) BDSIM Collaboration, 2001 - 2026.
3
4This file is part of BDSIM.
5
6BDSIM is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published
8by the Free Software Foundation version 3 of the License.
9
10BDSIM is distributed in the hope that it will be useful, but
11WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef CONFIG_H
19#define CONFIG_H
20#include "BinSpecification.hh"
21
22#include "Rtypes.h" // for classdef
23
24#include "RebdsimTypes.hh"
25#include "SpectraParticles.hh"
26
27#include <map>
28#include <set>
29#include <string>
30#include <vector>
31
32class HistogramDef;
33class HistogramDefSet;
34
41class Config
42{
44private:
46 std::map<std::string, std::string> alternateKeys;
49 std::map<std::string, bool> optionsBool;
50 std::map<std::string, std::string> optionsString;
51 std::map<std::string, double> optionsNumber;
53
56 std::map<std::string, std::vector<HistogramDef*> > histoDefs;
57
59 std::map<std::string, std::vector<HistogramDef*> > histoDefsSimple;
60
62 std::map<std::string, std::vector<HistogramDef*> > histoDefsPerEntry;
63
65 std::vector<HistogramDefSet*> eventHistoDefSetsSimple;
66 std::vector<HistogramDefSet*> eventHistoDefSetsPerEntry;
67
69 std::vector<std::string> eventParticleSetBranches;
70 std::vector<std::string> eventParticleSetSimpleBranches;
71
72public:
73 virtual ~Config();
74
76 static Config* Instance(const std::string& fileName = "",
77 const std::string& inputFilePath = "",
78 const std::string& outputFileName = "",
79 const std::string& defaultOutputFileSuffix = "_ana");
80
81 void ParseInputFile();
82
84 inline std::string GetOptionString(const std::string& key) const {return optionsString.at(key);}
85 inline bool GetOptionBool(const std::string& key) const {return optionsBool.at(key);}
86 inline double GetOptionNumber(const std::string& key) const {return optionsNumber.at(key);}
88
90 inline const std::vector<HistogramDef*>& HistogramDefinitions(const std::string& treeName) const
91 {return histoDefs.at(treeName);}
92
94 inline const std::vector<HistogramDef*>& HistogramDefinitionsSimple(const std::string& treeName) const
95 {return histoDefsSimple.at(treeName);}
96
98 inline const std::vector<HistogramDef*>& HistogramDefinitionsPerEntry(const std::string& treeName) const
99 {return histoDefsPerEntry.at(treeName);}
100
101 inline const std::vector<HistogramDefSet*>& EventHistogramSetDefinitionsSimple() const
103
104 inline const std::vector<HistogramDefSet*>& EventHistogramSetDefinitionsPerEntry() const
105 {return eventHistoDefSetsPerEntry;}
106
107 inline const std::vector<std::string>& EventParticleSetNamesSimple() const {return eventParticleSetSimpleBranches;}
108 inline const std::vector<std::string>& EventParticleSetNamesPerEntry() const {return eventParticleSetBranches;}
109
113 const RBDS::VectorString& BranchesToBeActivated(const std::string& treeName) const
114 {return branches.at(treeName);}
115
117 inline const RBDS::BranchMap& BranchesToBeActivated() const {return branches;}
118
120 void SetBranchToBeActivated(const std::string& treeName, const std::string& branchName);
121
123 inline std::string InputFilePath() const {return optionsString.at("inputfilepath");}
124 inline std::string OutputFileName() const {return optionsString.at("outputfilename");}
125 inline std::string CalculateOpticalFunctionsFileName() const {return optionsString.at("opticslfilename");}
126 inline bool AllBranchesToBeActivated() const {return optionsBool.at("allbranchesactivated");}
127 inline bool Debug() const {return optionsBool.at("debug");}
128 inline bool CalculateOpticalFunctions() const {return optionsBool.at("calculateoptics");}
129 inline bool EmittanceOnTheFly() const {return optionsBool.at("emittanceonthefly");}
130 inline bool ProcessSamplers() const {return optionsBool.at("processsamplers");}
131 inline bool PrintOut() const {return optionsBool.at("printout");}
132 inline double PrintModuloFraction() const {return optionsNumber.at("printmodulofraction");}
135 inline bool PerEntryBeam() const {return optionsBool.at("perentrybeam");}
136 inline bool PerEntryEvent() const {return optionsBool.at("perentryevent");}
137 inline bool PerEntryRun() const {return optionsBool.at("perentryrun");}
138 inline bool PerEntryOption() const {return optionsBool.at("perentryoption");}
139 inline bool PerEntryModel() const {return optionsBool.at("perentrymodel");}
141
144 void PrintHistogramSetDefinitions() const;
145
151 void FixCylindricalAndSphericalSamplerVariablesInSets(const std::set<std::string>& allCNames,
152 const std::set<std::string>& allSNames);
153
154 protected:
156 Config() = delete;
158 Config(const std::string& inputFilePathIn,
159 const std::string& outputFileNameIn,
160 const std::string& defaultOutputFileSuffix = "_ana");
162 Config(const std::string& fileNameIn,
163 const std::string& inputFilePathIn,
164 const std::string& outputFileNameIn,
165 const std::string& defaultOutputFileSuffix);
166
169 void InitialiseOptions(const std::string& analysisFile);
170
172 void ParseHistogramLine(const std::string& line);
173
175 void ParseSpectraLine(const std::string& line);
176
178 void ParseParticleSetLine(const std::string& line);
179
181 void ParseHistogram(const std::string& line, const int nDim);
182
185 void ParsePerEntry(const std::string& name, bool& perEntry) const;
186
188 bool ContainsWordCI(const std::string& input,
189 const std::string& word) const;
190
192 void ParseLog(const std::string& definition,
193 bool& xLog,
194 bool& yLog,
195 bool& zLog) const;
196
201 void UpdateRequiredBranches(const HistogramDef* def);
202
205 void UpdateRequiredBranches(const std::string& treeName,
206 const std::string& var);
207
210 bool InvalidTreeName(const std::string& treeName) const;
211
214 void CheckValidTreeName(std::string& treeName) const;
215
218 void ParseBins(const std::string& bins,
219 int nDim,
220 BinSpecification& xBinning,
221 BinSpecification& yBinning,
222 BinSpecification& zBinning) const;
223
226 void ParseBinning(const std::string& binning,
227 int nDim,
228 BinSpecification& xBinning,
229 BinSpecification& yBinning,
230 BinSpecification& zBinning,
231 bool xLog,
232 bool yLog,
233 bool zLog) const;
235 std::vector<std::string> SplitOnWhiteSpace(const std::string& line) const;
236
238 std::set<ParticleSpec> ParseParticles(const std::string& word) const;
239
241 void ParseSetting(const std::string& line);
242
244 std::string LowerCase(const std::string& st) const;
245
248 bool RegisterHistogramName(const std::string& newHistName);
249
250 static Config* instance;
251
253 static std::vector<std::string> treeNames;
254
256 int lineCounter = 0;
257
259 RBDS::BranchMap branches;
260
263 std::map<std::string, int> spectraNames;
264
265 std::set<std::string> histogramNames;
266
267 ClassDef(Config,1);
268};
269
270#endif
Binning specification for a single dimension.
Configuration and configuration parser class.
Definition Config.hh:42
std::string InputFilePath() const
Accessor.
Definition Config.hh:123
bool PerEntryEvent() const
Definition Config.hh:136
std::string CalculateOpticalFunctionsFileName() const
Accessor.
Definition Config.hh:125
bool AllBranchesToBeActivated() const
Accessor.
Definition Config.hh:126
bool GetOptionBool(const std::string &key) const
General accessor for option.
Definition Config.hh:85
std::map< std::string, std::vector< HistogramDef * > > histoDefs
Definition Config.hh:56
void ParseSetting(const std::string &line)
Parse a settings line in input file and appropriate update member map.
Definition Config.cc:792
void PrintHistogramSetDefinitions() const
Definition Config.cc:554
void ParseHistogramLine(const std::string &line)
Parse a line beginning with histogram. Uses other functions if appropriately defined.
Definition Config.cc:250
double PrintModuloFraction() const
Accessor.
Definition Config.hh:132
std::map< std::string, double > optionsNumber
Storage of options.
Definition Config.hh:51
void FixCylindricalAndSphericalSamplerVariablesInSets(const std::set< std::string > &allCNames, const std::set< std::string > &allSNames)
Definition Config.cc:565
std::string LowerCase(const std::string &st) const
Return a lower case copy of a string.
Definition Config.cc:785
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:98
void SetBranchToBeActivated(const std::string &treeName, const std::string &branchName)
Set a branch to be activated if not already.
Definition Config.cc:546
void CheckValidTreeName(std::string &treeName) const
Definition Config.cc:587
bool InvalidTreeName(const std::string &treeName) const
Definition Config.cc:603
std::vector< std::string > eventParticleSetBranches
List of branches in event tree to produce ParticleSet objects on. (per event and simple).
Definition Config.hh:69
std::map< std::string, int > spectraNames
Definition Config.hh:263
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:153
std::map< std::string, std::string > optionsString
Storage of options.
Definition Config.hh:50
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:626
const std::vector< HistogramDef * > & HistogramDefinitions(const std::string &treeName) const
Access all histogram definitions.
Definition Config.hh:90
bool PerEntryModel() const
Definition Config.hh:139
std::vector< std::string > SplitOnWhiteSpace(const std::string &line) const
Return a vector of strings by splitting on whitespace.
Definition Config.cc:705
bool PerEntryOption() const
Definition Config.hh:138
bool PrintOut() const
Accessor.
Definition Config.hh:131
std::set< ParticleSpec > ParseParticles(const std::string &word) const
Parser a list of particle PDG IDs into a set.
Definition Config.cc:720
double GetOptionNumber(const std::string &key) const
General accessor for option.
Definition Config.hh:86
bool CalculateOpticalFunctions() const
Accessor.
Definition Config.hh:128
void ParseLog(const std::string &definition, bool &xLog, bool &yLog, bool &zLog) const
Parse whether each dimension is log or linear.
Definition Config.cc:503
bool RegisterHistogramName(const std::string &newHistName)
Definition Config.cc:832
std::string GetOptionString(const std::string &key) const
General accessor for option.
Definition Config.hh:84
bool Debug() const
Accessor.
Definition Config.hh:127
std::vector< HistogramDefSet * > eventHistoDefSetsSimple
Sets of histogram definitions per particle. Only for event branch.
Definition Config.hh:65
RBDS::BranchMap branches
Cache of which branches need to be activated for this analysis.
Definition Config.hh:259
int lineCounter
Index of which line in the file we're on while parsing - for feedback.
Definition Config.hh:256
std::map< std::string, std::string > alternateKeys
Private members first as required in accessors.
Definition Config.hh:46
void UpdateRequiredBranches(const HistogramDef *def)
Definition Config.cc:521
bool EmittanceOnTheFly() const
Accessor.
Definition Config.hh:129
bool ContainsWordCI(const std::string &input, const std::string &word) const
Return true if 'input' contains 'word' - CI = case insensitive.
Definition Config.cc:495
const std::vector< HistogramDef * > & HistogramDefinitionsSimple(const std::string &treeName) const
Access all simple histogram definitions - throws exception if out of range.
Definition Config.hh:94
std::map< std::string, std::vector< HistogramDef * > > histoDefsSimple
Copy of definition used to identify only 'simple' histogram definitions. Doesn't own.
Definition Config.hh:59
bool PerEntryBeam() const
Definition Config.hh:135
static std::vector< std::string > treeNames
Vector of permitted tree names.
Definition Config.hh:47
void ParseParticleSetLine(const std::string &line)
Parse a particle set line.
Definition Config.cc:470
void InitialiseOptions(const std::string &analysisFile)
Definition Config.cc:111
const RBDS::BranchMap & BranchesToBeActivated() const
Access the map of all branches to be activated per tree.
Definition Config.hh:117
void ParseSpectraLine(const std::string &line)
Parse a spectra definition line.
Definition Config.cc:389
std::string OutputFileName() const
Accessor.
Definition Config.hh:124
void ParseHistogram(const std::string &line, const int nDim)
Parse everything after the histogram declaration and check all parameters.
Definition Config.cc:276
std::map< std::string, bool > optionsBool
Storage of options.
Definition Config.hh:49
bool ProcessSamplers() const
Accessor.
Definition Config.hh:130
void ParsePerEntry(const std::string &name, bool &perEntry) const
Definition Config.cc:489
void ParseBins(const std::string &bins, int nDim, BinSpecification &xBinning, BinSpecification &yBinning, BinSpecification &zBinning) const
Definition Config.cc:608
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:62
bool PerEntryRun() const
Definition Config.hh:137
const RBDS::VectorString & BranchesToBeActivated(const std::string &treeName) const
Definition Config.hh:113
Specification for a set of histograms.
Common specification for a histogram.