gfields
Loading...
Searching...
No Matches
gfield_options.cc
Go to the documentation of this file.
1#include "gfield_options.h"
2#include "gfieldConventions.h"
3
4// gemc
5#include "gutilities.h"
6#include "gfactory_options.h"
7
8// namespace to define options
9namespace gfields {
10
11std::vector<GFieldDefinition> get_GFieldDefinition(const std::shared_ptr<GOptions>& gopts) {
12 std::vector<GFieldDefinition> gfield_defs;
13
14 // multipoles
15 auto gmultipoles_node = gopts->getOptionNode("gmultipoles");
16 for (auto gmultipoles_item : gmultipoles_node) {
18
19 gfield_def.name = gopts->get_variable_in_option<std::string>(gmultipoles_item, "name", goptions::NODFLT);
20 gfield_def.integration_stepper = gopts->get_variable_in_option<std::string>(gmultipoles_item, "integration_stepper", GFIELD_DEFAULT_INTEGRATION_STEPPER);
21 gfield_def.minimum_step = gutilities::getG4Number(gopts->get_variable_in_option<std::string>(gmultipoles_item, "minimum_step", GFIELD_DEFAULT_MINIMUM_STEP));
22
23 // if present, add remaining multipoles parameters
24 gfield_def.add_map_parameter("pole_number", gopts->get_variable_in_option<std::string>(gmultipoles_item, "pole_number", goptions::NODFLT));
25 gfield_def.add_map_parameter("vx", gopts->get_variable_in_option<std::string>(gmultipoles_item, "vx", GFIELD_DEFAULT_VERTEX));
26 gfield_def.add_map_parameter("vy", gopts->get_variable_in_option<std::string>(gmultipoles_item, "vy", GFIELD_DEFAULT_VERTEX));
27 gfield_def.add_map_parameter("vz", gopts->get_variable_in_option<std::string>(gmultipoles_item, "vz", GFIELD_DEFAULT_VERTEX));
28 gfield_def.add_map_parameter("rotation_angle", gopts->get_variable_in_option<std::string>(gmultipoles_item, "rotation_angle", GFIELD_DEFAULT_ROTANGLE));
29 gfield_def.add_map_parameter("rotaxis", gopts->get_variable_in_option<std::string>(gmultipoles_item, "rotaxis", goptions::NODFLT));
30 gfield_def.add_map_parameter("strength", gopts->get_variable_in_option<std::string>(gmultipoles_item, "strength", goptions::NODFLT));
31 gfield_def.add_map_parameter("longitudinal", gopts->get_variable_in_option<std::string>(gmultipoles_item, "longitudinal", "false"));
32 gfield_def.type = "multipoles";
33 gfield_defs.push_back(gfield_def);
34 }
35
36 return gfield_defs;
37}
38
39
40// returns array of options definitions
41GOptions defineOptions() {
42 GOptions goptions(GFIELD_LOGGER);
43 goptions += GOptions(GMAGNETO_LOGGER);
44 goptions += GOptions(PLUGIN_LOGGER);
45
46
47 std::string help;
48 help = "Adds gmultipoles field(s) to the simulation \n ";
49 std::vector<GVariable> gmultipoles = {
50 {"name", goptions::NODFLT, "Field name"},
51 {"integration_stepper", GFIELD_DEFAULT_INTEGRATION_STEPPER, "Integration stepper"},
52 {"minimum_step", GFIELD_DEFAULT_MINIMUM_STEP, "Minimum step for the G4ChordFinder"},
53 {"pole_number", goptions::NODFLT, "Pole numner"},
54 {"vx", GFIELD_DEFAULT_VERTEX, "x component of the origin of the multipole"},
55 {"vy", GFIELD_DEFAULT_VERTEX, "y component of the origin of the multipole"},
56 {"vz", GFIELD_DEFAULT_VERTEX, "z component of the origin of the multipole"},
57 {"rotation_angle", GFIELD_DEFAULT_ROTANGLE, "rotation angle of the multipole"},
58 {"rotaxis", goptions::NODFLT, "rotation axis (roll) of the multipole"},
59 {"strength", goptions::NODFLT, "strength of the multipole in tesla at radius of 1m"},
60 {"longitudinal", "false", "if set to true, the field is aligned with rotaxis (solenoid like)"}
61 };
62 goptions.defineOption("gmultipoles", "define the e.m. gmultipoles", gmultipoles, help);
63
64 return goptions;
65}
66}
#define GFIELD_DEFAULT_ROTANGLE
#define GFIELD_DEFAULT_VERTEX
#define GFIELD_DEFAULT_INTEGRATION_STEPPER
#define GFIELD_DEFAULT_MINIMUM_STEP
constexpr const char * GFIELD_LOGGER
Definition gfield.h:12
constexpr const char * GMAGNETO_LOGGER
Definition gfield.h:13
std::vector< GFieldDefinition > get_GFieldDefinition(const std::shared_ptr< GOptions > &gopts)
GOptions defineOptions()
Utility struct to load GFields from options.
Definition gfield.h:18
double minimum_step
Minimum step size for integration.
Definition gfield.h:26
std::string name
Key in the gmagneto maps.
Definition gfield.h:24
void add_map_parameter(const std::string &key, const std::string &value)
Adds a parameter to the field parameters map.
Definition gfield.h:36
std::string integration_stepper
Type of integration stepper.
Definition gfield.h:25
std::string type
Type of the field.
Definition gfield.h:27