gsystem
Loading...
Searching...
No Matches
gsystem_options.cc
Go to the documentation of this file.
1
8// gemc
9#include "gfactory_options.h"
10
11// gsystem
12#include "gsystem_options.h"
13#include "gsystemConventions.h"
14
15// project goption to a system
16namespace gsystem {
17// See gsystem_options.h for API docs.
18SystemList getSystems(const std::shared_ptr<GOptions>& gopts) {
19 auto gsystem_node = gopts->getOptionNode("gsystem");
20
21 SystemList systems;
22 systems.reserve(gsystem_node.size());
23
24 auto exp = gopts->getScalarString("experiment");
25 auto run = gopts->getScalarInt("runno");
26 auto dbhost = gopts->getScalarString("sql");
27 auto ascii_db = gopts->getScalarString("ascii_db");
28
29 for (auto gsystem_item : gsystem_node) {
30 auto factory = gopts->get_variable_in_option<std::string>(gsystem_item, "factory", GSYSTEMSQLITETFACTORYLABEL);
31
32 // ASCII factory can use an alternate search root (ascii_db).
33 if (factory == GSYSTEMASCIIFACTORYLABEL) { dbhost = ascii_db; }
34
35 systems.emplace_back(
36 std::make_shared<GSystem>(
37 gopts,
38 dbhost,
39 gopts->get_variable_in_option<std::string>(gsystem_item, "name", goptions::NODFLT),
40 factory,
41 exp,
42 run,
43 gopts->get_variable_in_option<std::string>(gsystem_item, "variation", "default"),
44 gopts->get_variable_in_option<std::string>(gsystem_item, "annotations",
46 ));
47 }
48
49 return systems;
50}
51
52
53// See gsystem_options.h for API docs.
54std::vector<GModifier> getModifiers(const std::shared_ptr<GOptions>& gopts) {
55 std::vector<GModifier> gmods;
56
57 auto gmodifier_node = gopts->getOptionNode("gmodifier");
58
59 for (auto gmodifier_item : gmodifier_node) {
60 gmods.emplace_back(
61 gopts->get_variable_in_option<std::string>(gmodifier_item, "name", goptions::NODFLT),
62 gopts->get_variable_in_option<std::string>(gmodifier_item, "shift", GSYSTEMNOMODIFIER),
63 gopts->get_variable_in_option<std::string>(gmodifier_item, "tilt", GSYSTEMNOMODIFIER),
64 gopts->get_variable_in_option<bool>(gmodifier_item, "isPresent", true));
65 }
66
67 return gmods;
68}
69
70
71// See gsystem_options.h for API docs.
79
80 // System
81 std::string help;
82 help = "A system definition includes the geometry location, factory and variation \n \n";
83 help += "Possible factories are: \n";
84 help += " - " + std::string(GSYSTEMASCIIFACTORYLABEL) + "\n";
85 help += " - " + std::string(GSYSTEMSQLITETFACTORYLABEL) + "\n";
86 help += " - " + std::string(GSYSTEMMYSQLTFACTORYLABEL) + "\n";
87 help += " - " + std::string(GSYSTEMCADTFACTORYLABEL) + "\n";
88 help +=
89 R"RAWS(Example: -gsystem="[{name: b1}]")RAWS";
90
91 std::vector<GVariable> gsystem = {
92 {"name", goptions::NODFLT, "system name (mandatory). For ascii factories, it may include the path to the file"},
93 {"factory", GSYSTEMSQLITETFACTORYLABEL, "factory name."},
94 {"variation", "default", "geometry variation"},
95 {"annotations", UNINITIALIZEDSTRINGQUANTITY, "optional system annotations. Examples: \"mats_only\" "},
96 {"digitization", UNINITIALIZEDSTRINGQUANTITY, "optional digitization plugin name when it differs from the system name (shared plugin, e.g. \"ecal\" for the EC and PCAL systems)"}
97 };
98 goptions.defineOption(GSYSTEM_LOGGER, "defines the group of volumes in a system", gsystem, help);
99
100 // Modifier
101 help = "The volume modifier can shift, tilt, or delete a volume from the gworld \n \n";
102 help += R"RAWS(Example: -gmodifier="[{name: targetCell, tilt: '0*deg, 0*deg, -10*deg'}]")RAWS";
103
104 std::vector<GVariable> gmodifier = {
105 {"name", goptions::NODFLT, "volume name (mandatory)"},
106 {"shift", GSYSTEMNOMODIFIER, "volume shift added to existing position"},
107 {"tilt", GSYSTEMNOMODIFIER, "volume tilt added to existing rotation"},
108 {"isPresent", true, "If set to false, remove the volume from the world"}
109 };
110 goptions.defineOption("gmodifier", "modify volume existence or placement", gmodifier, help);
111
112 help = "root volume definition. Default is: " + std::string(ROOTDEFINITION) + ". \n\n";
113 help += "Command line Example: -root=\"G4Box 25*cm 24*cm 40*cm G4_WATER\"\n";
114 help += "YAML file example: root: G4Box, 24*cm, 24*cm, 40*cm, G4_WATER\n";
115 goptions.defineOption(GVariable(ROOTWORLDGVOLUMENAME, ROOTDEFINITION, "root volume definition"),
116 help);
117
118 // add sql option to define host or sqlite file
119 help = "sqlite file or sql host. Default is: " + std::string(GSYSTEMSQLITETDEFAULTFILE) + ". \n\n";
120 help += "Example (sqlite file): -sql=myGeometry.sqlite\n";
121 goptions.defineOption(GVariable("sql", GSYSTEMSQLITETDEFAULTFILE, "sql host or sqlite file"),
122 help);
123
124 // add ascii_db option to define an alternative search path for the ascii factory
125 help = "ascii search path. Default is: " + std::string(GSYSTEMSASCIISEARCHDIR) + ". \n\n";
126 help += "Example: -ascii_db=/path/to/geometry/text/files\n";
127 goptions.defineOption(GVariable("ascii_db", GSYSTEMSASCIISEARCHDIR, "ascii factory search path"),
128 help);
129
130 // add the experiment option to define the experiment, common for all systems
131 goptions.defineOption(GVariable("experiment", "examples", "experiment selection"),
132 "Each experiment has a subset of unique systems.\n \nExample: -experiment=clas12\n");
133
134 // add run number options, common for all systems
135 goptions.defineOption(GVariable("runno", 1, "geometry/conditions run number"),
136 "Run number used to select the geometry/conditions variation loaded from the\n"
137 "database; all systems share it. This is distinct from -run, the run number\n"
138 "assigned to generated events.\n \nExample: -runno=11\n");
139
140 return goptions;
141}
142}
run
Conventions and shared constants for the detector-system module.
#define GSYSTEMSQLITETFACTORYLABEL
#define GSYSTEMMYSQLTFACTORYLABEL
#define GSYSTEMSASCIISEARCHDIR
Default search directory for ASCII factory files.
#define GSYSTEMCADTFACTORYLABEL
#define ROOTDEFINITION
#define GSYSTEMASCIIFACTORYLABEL
#define GSYSTEMSQLITETDEFAULTFILE
Default sqlite DB filename used when the user does not specify one.
#define GSYSTEMNOMODIFIER
#define ROOTWORLDGVOLUMENAME
Canonical name for the ROOT/world gvolume entry.
std::vector< SystemPtr > SystemList
Definition gsystem.h:249
Option definitions and extraction helpers for the gsystem module.
constexpr const char * GSFACTORY_LOGGER
constexpr const char * GSYSTEM_LOGGER
constexpr const char * GVOLUME_LOGGER
constexpr const char * GWORLD_LOGGER
constexpr const char * GMATERIAL_LOGGER
#define UNINITIALIZEDSTRINGQUANTITY
GOptions defineOptions()
const std::string NODFLT
GOptions defineOptions()
Define and return all option groups required by the gsystem module.
std::vector< GModifier > getModifiers(const std::shared_ptr< GOptions > &gopts)
Build a list of volume modifiers from options.
SystemList getSystems(const std::shared_ptr< GOptions > &gopts)
Build a list of systems from options.