Project
Loading...
Searching...
No Matches
SimConfig.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef O2_SIM_CONFIGURATION
13#define O2_SIM_CONFIGURATION
14
15#include <Rtypes.h>
16#ifndef __CLING__
17#include <boost/program_options.hpp>
18#else
20{
21class variables_map;
23} // namespace boost::program_options
24#endif
25
26namespace o2
27{
28namespace conf
29{
30
31enum class SimFieldMode {
32 kDefault = 0,
33 kUniform = 1,
34 kCCDB = 2
35};
36
37enum class VertexMode {
38 kNoVertex = 0, // no vertexing should be applied in the generator
39 kDiamondParam = 1, // Diamond param will influence vertexing
40 kCCDB = 2, // vertex should be taken from CCDB (Calib/MeanVertex object)
41 kCollCxt = 3 // vertex should be taken from collision context
42};
43
44enum class TimeStampMode {
45 kNow = 0,
46 kManual = 1,
47 kRun = 2
48};
49
50// configuration struct (which can be passed around)
52 std::vector<std::string> mActiveModules; // list of active modules
53 std::vector<std::string> mReadoutDetectors; // list of readout detectors
54 std::string mMCEngine; // chosen VMC engine
55 std::string mGenerator; // chosen VMC generator
56 std::string mTrigger; // chosen VMC generator trigger
57 unsigned int mNEvents; // number of events to be simulated
58 std::string mExtKinFileName; // file name of external kinematics file (needed for ext kinematics generator)
59 std::string mEmbedIntoFileName; // filename containing the reference events to be used for the embedding
60 unsigned int mStartEvent; // index of first event to be taken
61 float mBMax; // maximum for impact parameter sampling
62 bool mIsMT; // chosen MT mode (Geant4 only)
63 std::string mOutputPrefix; // prefix to be used for output files
64 std::string mLogSeverity; // severity for FairLogger
65 std::string mLogVerbosity; // loglevel for FairLogger
66 std::string mKeyValueTokens; // a string holding arbitrary sequence of key-value tokens
67 // Foo.parameter1=x,Bar.parameter2=y,Baz.paramter3=hello
68 // (can be used to **loosely** change any configuration parameter from command-line)
69 std::string mConfigFile; // path to a JSON or INI config file (file extension is required to determine type).
70 // values within the config file will override values set in code by the param classes
71 // but will themselves be overridden by any values given in mKeyValueTokens.
72 unsigned int mPrimaryChunkSize; // defining max granularity for input primaries of a sim job
74 ULong_t mStartSeed; // base for random number seeds
75 int mSimWorkers = 1; // number of parallel sim workers (when it applies)
76 bool mFilterNoHitEvents = false; // whether to filter out events not leaving any response
77 std::string mCCDBUrl; // the URL where to find CCDB
78 uint64_t mTimestamp; // timestamp in ms to anchor transport simulation to
79 TimeStampMode mTimestampMode = TimeStampMode::kNow; // telling of timestamp was given as option or defaulted to now
80 int mRunNumber = -1; // ALICE run number (if set != -1); the timestamp should be compatible
81 int mField; // L3 field setting in kGauss: +-2,+-5 and 0
82 SimFieldMode mFieldMode = SimFieldMode::kDefault; // uniform magnetic field
83 bool mAsService = false; // if simulation should be run as service/deamon (does not exit after run)
84 bool mNoGeant = false; // if Geant transport should be turned off (when one is only interested in the generated events)
85 bool mIsUpgrade = false; // true if the simulation is for Run 5
86 std::string mFromCollisionContext = ""; // string denoting a collision context file; If given, this file will be used to determine number of events
87 //
88 bool mForwardKine = false; // true if tracks and event headers are to be published on a FairMQ channel (for reading by other consumers)
89 bool mWriteToDisc = true; // whether we write simulation products (kine, hits) to disc
90 VertexMode mVertexMode = VertexMode::kDiamondParam; // by default we should use die InteractionDiamond parameter
91 std::string mExtGeomFile = ""; // optional path to a JSON file describing external (CAD) geometry modules to inject
92
94};
95
96// A singleton class which can be used
97// to centrally parse command line arguments and which can be queried
98// from the various algorithms that need access to this information
99// This is a quick/dirty solution allowing for some external configurability; A proper configuration scheme is currently
100// being worked out;
102{
103 private:
104 SimConfig()
105 {
106 // activate from default parameters
107 char* argv[] = {};
108 resetFromArguments(1, argv);
109 };
110
111 public:
113 {
114 static SimConfig conf;
115 return conf;
116 }
117
118 // makes a new instance that can be used as a local object
120 {
121 return SimConfig();
122 }
123
124 static void initOptions(boost::program_options::options_description&, bool isUpgrade = false);
125
126 // initializes the configuration from command line arguments
127 // returns true of correctly initialized and not --help called
128 bool resetFromArguments(int argc, char* argv[]);
129
130 // initializes from existing parsed map
131 bool resetFromParsedMap(boost::program_options::variables_map const&);
132
133 void resetFromConfigData(SimConfigData const& data) { mConfigData = data; }
134 SimConfigData const& getConfigData() const { return mConfigData; }
135 SimConfigData& getConfigData() { return mConfigData; }
136
137 // get MC engine
138 std::string getMCEngine() const { return mConfigData.mMCEngine; }
139 // get selected active detectors
140 std::vector<std::string> const& getActiveModules() const { return mConfigData.mActiveModules; }
141 std::vector<std::string> const& getReadoutDetectors() const { return mConfigData.mReadoutDetectors; }
142
143 // static helper functions to determine list of active / readout modules
144 // can also be used from outside
145 static void determineActiveModules(std::vector<std::string> const& input, std::vector<std::string> const& skipped, std::vector<std::string>& active, bool isUpgrade = false);
146 static bool determineActiveModulesList(const std::string& version, std::vector<std::string> const& input, std::vector<std::string> const& skipped, std::vector<std::string>& active);
147 static void determineReadoutDetectors(std::vector<std::string> const& active, std::vector<std::string> const& enabledRO, std::vector<std::string> const& skippedRO, std::vector<std::string>& finalRO);
148
149 // helper to parse field option
150 static bool parseFieldString(std::string const& fieldstring, int& fieldvalue, o2::conf::SimFieldMode& mode);
151 // helper to parse vertex option; returns true if parsing ok, false if failure
152 static bool parseVertexModeString(std::string const& vertexstring, o2::conf::VertexMode& mode);
153
154 // get selected generator (to be used to select a genconfig)
155 std::string getGenerator() const { return mConfigData.mGenerator; }
156 std::string getTrigger() const { return mConfigData.mTrigger; }
157 unsigned int getNEvents() const { return mConfigData.mNEvents; }
158
159 std::string getExtKinematicsFileName() const { return mConfigData.mExtKinFileName; }
160 std::string getEmbedIntoFileName() const { return mConfigData.mEmbedIntoFileName; }
161 unsigned int getStartEvent() const { return mConfigData.mStartEvent; }
162 float getBMax() const { return mConfigData.mBMax; }
163 bool getIsMT() const { return mConfigData.mIsMT; }
164 std::string getOutPrefix() const { return mConfigData.mOutputPrefix; }
165 std::string getLogVerbosity() const { return mConfigData.mLogVerbosity; }
166 std::string getLogSeverity() const { return mConfigData.mLogSeverity; }
167 std::string getKeyValueString() const { return mConfigData.mKeyValueTokens; }
168 std::string getConfigFile() const { return mConfigData.mConfigFile; }
169 int getPrimChunkSize() const { return mConfigData.mPrimaryChunkSize; }
170 int getInternalChunkSize() const { return mConfigData.mInternalChunkSize; }
171 ULong_t getStartSeed() const { return mConfigData.mStartSeed; }
172 int getNSimWorkers() const { return mConfigData.mSimWorkers; }
173 bool isFilterOutNoHitEvents() const { return mConfigData.mFilterNoHitEvents; }
174 bool asService() const { return mConfigData.mAsService; }
175 uint64_t getTimestamp() const { return mConfigData.mTimestamp; }
176 int getRunNumber() const { return mConfigData.mRunNumber; }
177 bool isNoGeant() const { return mConfigData.mNoGeant; }
178 void setRun5(bool value = true) { mConfigData.mIsUpgrade = value; }
179 bool forwardKine() const { return mConfigData.mForwardKine; }
180 bool writeToDisc() const { return mConfigData.mWriteToDisc; }
181 VertexMode getVertexMode() const { return mConfigData.mVertexMode; }
182 std::string getExtGeomFilename() const { return mConfigData.mExtGeomFile; }
183
184 // returns the pair of collision context filename as well as event prefix encoded
185 // in the mFromCollisionContext string. Returns empty string if information is not available or set.
186 std::pair<std::string, std::string> getCollContextFilenameAndEventPrefix() const;
187
188 private:
189 SimConfigData mConfigData;
190
191 // Filter out skipped elements in the list
192 static bool filterSkippedElements(std::vector<std::string>& elements, std::vector<std::string> const& skipped);
193
194 // adjust/overwrite some option settings when collision context is used
195 void adjustFromCollContext(std::string const& collcontextfile, std::string const& prefix);
196
197 ClassDefNV(SimConfig, 1);
198};
199
200// Configuration struct used for simulation reconfig (when processing
201// in batches and in "deamonized" mode. Note that in comparison to SimConfig,
202// fewer fields are offered (because many things are not easy to reconfigure).
204
206 std::string generator; // chosen VMC generator
207 std::string trigger; // chosen VMC generator trigger
208 unsigned int nEvents; // number of events to be simulated
209 std::string extKinfileName; // file name of external kinematics file (needed for ext kinematics generator)
210 std::string embedIntoFileName; // filename containing the reference events to be used for the embedding
211 unsigned int startEvent = 0; // index of first event to be taken
212 float mBMax; // maximum for impact parameter sampling
213 std::string outputPrefix; // prefix to be used for output files
214 std::string outputDir; // output directory
215 std::string keyValueTokens; // a string holding arbitrary sequence of key-value tokens (for ConfigurableParams)
216 // ** WE NEED TO BE CAREFUL: NOT EVERYTHING MAY BE RECONFIGURABLE VIA PARAMETER CHANGE **
217 // Foo.parameter1=x,Bar.parameter2=y,Baz.paramter3=hello
218 std::string configFile; // path to a JSON or INI config file (file extension is required to determine type).
219 // values within the config file will override values set in code by the param classes
220 // but will themselves be overridden by any values given in mKeyValueTokens.
221 unsigned int primaryChunkSize; // defining max granularity for input primaries of a sim job
222 ULong_t startSeed; // base for random number seeds
223 bool stop; // to shut down the service
224 std::string mFromCollisionContext = ""; // string denoting a collision context file; If given, this file will be used to determine number of events
225
227};
228
229// construct reconfig struct given a configuration string (boost program options format)
230// returns true if successful/ false otherwise
231bool parseSimReconfigFromString(std::string const& argumentstring, SimReconfigData& config);
232
233} // namespace conf
234} // namespace o2
235
236#endif
uint32_t version
Definition RawData.h:8
bool getIsMT() const
Definition SimConfig.h:163
std::string getConfigFile() const
Definition SimConfig.h:168
std::string getMCEngine() const
Definition SimConfig.h:138
static SimConfig make()
Definition SimConfig.h:119
std::string getEmbedIntoFileName() const
Definition SimConfig.h:160
std::string getExtKinematicsFileName() const
Definition SimConfig.h:159
std::string getKeyValueString() const
Definition SimConfig.h:167
void resetFromConfigData(SimConfigData const &data)
Definition SimConfig.h:133
bool resetFromParsedMap(boost::program_options::variables_map const &)
bool resetFromArguments(int argc, char *argv[])
bool writeToDisc() const
Definition SimConfig.h:180
unsigned int getStartEvent() const
Definition SimConfig.h:161
void setRun5(bool value=true)
Definition SimConfig.h:178
int getRunNumber() const
Definition SimConfig.h:176
std::string getExtGeomFilename() const
Definition SimConfig.h:182
std::string getTrigger() const
Definition SimConfig.h:156
static void determineActiveModules(std::vector< std::string > const &input, std::vector< std::string > const &skipped, std::vector< std::string > &active, bool isUpgrade=false)
Definition SimConfig.cxx:83
int getInternalChunkSize() const
Definition SimConfig.h:170
int getNSimWorkers() const
Definition SimConfig.h:172
static bool parseVertexModeString(std::string const &vertexstring, o2::conf::VertexMode &mode)
int getPrimChunkSize() const
Definition SimConfig.h:169
bool isNoGeant() const
Definition SimConfig.h:177
uint64_t getTimestamp() const
Definition SimConfig.h:175
std::vector< std::string > const & getActiveModules() const
Definition SimConfig.h:140
ULong_t getStartSeed() const
Definition SimConfig.h:171
VertexMode getVertexMode() const
Definition SimConfig.h:181
static bool parseFieldString(std::string const &fieldstring, int &fieldvalue, o2::conf::SimFieldMode &mode)
SimConfigData const & getConfigData() const
Definition SimConfig.h:134
bool isFilterOutNoHitEvents() const
Definition SimConfig.h:173
static void determineReadoutDetectors(std::vector< std::string > const &active, std::vector< std::string > const &enabledRO, std::vector< std::string > const &skippedRO, std::vector< std::string > &finalRO)
static bool determineActiveModulesList(const std::string &version, std::vector< std::string > const &input, std::vector< std::string > const &skipped, std::vector< std::string > &active)
bool asService() const
Definition SimConfig.h:174
std::pair< std::string, std::string > getCollContextFilenameAndEventPrefix() const
float getBMax() const
Definition SimConfig.h:162
SimConfigData & getConfigData()
Definition SimConfig.h:135
unsigned int getNEvents() const
Definition SimConfig.h:157
static void initOptions(boost::program_options::options_description &, bool isUpgrade=false)
Definition SimConfig.cxx:27
std::string getLogVerbosity() const
Definition SimConfig.h:165
bool forwardKine() const
Definition SimConfig.h:179
static SimConfig & Instance()
Definition SimConfig.h:112
std::string getLogSeverity() const
Definition SimConfig.h:166
std::string getOutPrefix() const
Definition SimConfig.h:164
std::string getGenerator() const
Definition SimConfig.h:155
std::vector< std::string > const & getReadoutDetectors() const
Definition SimConfig.h:141
GLenum mode
Definition glcorearb.h:266
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLboolean * data
Definition glcorearb.h:298
bool parseSimReconfigFromString(std::string const &argumentstring, SimReconfigData &config)
boost::program_options::options_description options_description
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
std::string mFromCollisionContext
Definition SimConfig.h:86
std::vector< std::string > mActiveModules
Definition SimConfig.h:52
std::string mOutputPrefix
Definition SimConfig.h:63
std::string mExtKinFileName
Definition SimConfig.h:58
unsigned int mPrimaryChunkSize
Definition SimConfig.h:72
std::vector< std::string > mReadoutDetectors
Definition SimConfig.h:53
std::string mKeyValueTokens
Definition SimConfig.h:66
TimeStampMode mTimestampMode
Definition SimConfig.h:79
unsigned int mNEvents
Definition SimConfig.h:57
std::string mGenerator
Definition SimConfig.h:55
SimFieldMode mFieldMode
Definition SimConfig.h:82
std::string mLogSeverity
Definition SimConfig.h:64
std::string mConfigFile
Definition SimConfig.h:69
ClassDefNV(SimConfigData, 5)
std::string mEmbedIntoFileName
Definition SimConfig.h:59
std::string mExtGeomFile
Definition SimConfig.h:91
std::string mLogVerbosity
Definition SimConfig.h:65
unsigned int mStartEvent
Definition SimConfig.h:60
std::string mMCEngine
Definition SimConfig.h:54
TODO: Make this a base class of SimConfigData?
Definition SimConfig.h:205
std::string mFromCollisionContext
Definition SimConfig.h:224
ClassDefNV(SimReconfigData, 1)
std::string embedIntoFileName
Definition SimConfig.h:210
unsigned int primaryChunkSize
Definition SimConfig.h:221