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 };
97 goptions.defineOption(GSYSTEM_LOGGER, "defines the group of volumes in a system", gsystem, help);
98
99 // Modifier
100 help = "The volume modifer can shift, tilt, or delete a volume from the gworld \n \n";
101 help += R"RAWS(Example: +gmodifier={volume: "targetCell", tilt: "0*deg, 0*deg, -10*deg" })RAWS";
102
103 std::vector<GVariable> gmodifier = {
104 {"name", goptions::NODFLT, "volume name (optional)"},
105 {"shift", GSYSTEMNOMODIFIER, "volume shift added to existing position"},
106 {"tilt", GSYSTEMNOMODIFIER, "volume tilt added to existing rotation"},
107 {"isPresent", true, "f set to false, remove volume from world i"}
108 };
109 goptions.defineOption("gmodifier", "modify volume existence or placement", gmodifier, help);
110
111 help = "root volume definition. Default is: " + std::string(ROOTDEFINITION) + ". \n\n";
112 help += "Command line Example: -root=\"G4Box 25*cm 24*cm 40*cm G4_WATER\"\n";
113 help += "YAML file example: root: G4Box, 24*cm, 24*cm, 40*cm, G4_WATER\n";
114 goptions.defineOption(GVariable(ROOTWORLDGVOLUMENAME, ROOTDEFINITION, "root volume definition"),
115 help);
116
117 // add sql option to define host or sqlite file
118 help = "sqlite file or sql host. Default is: " + std::string(GSYSTEMSQLITETDEFAULTFILE) + ". \n\n";
119 goptions.defineOption(GVariable("sql", GSYSTEMSQLITETDEFAULTFILE, "sql host or sqlite file"),
120 help);
121
122 // add ascii_db option to define an alternative search path for the ascii factory
123 help = "ascii search path. Default is: " + std::string(GSYSTEMSASCIISEARCHDIR) + ". \n\n";
124 goptions.defineOption(GVariable("ascii_db", GSYSTEMSASCIISEARCHDIR, "sql host or sqlite file"),
125 help);
126
127 // add the experiment option to define the experiment, common for all systems
128 goptions.defineOption(GVariable("experiment", "examples", "experiment selection"),
129 "Each experiment have a subset of unique systems");
130
131 // add run number options, common for all systems
132 goptions.defineOption(GVariable("runno", 1, "run number"),
133 "All systems share this run number");
134
135 return goptions;
136}
137}
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:237
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.