gfields
gfieldOptions.cc
Go to the documentation of this file.
1 #include "gfieldOptions.h"
2 #include "gfieldConventions.h"
3 
4 // gemc
5 #include "gutilities.h"
6 
7 // namespace to define options
8 namespace gfields {
9 
10 vector <GFieldDefinition> get_GFieldDefinition(GOptions *gopts) {
11 
12  vector <GFieldDefinition> gfield_defs;
13 
14  // multipoles
15  auto gmultipoles_node = gopts->getOptionNode("gmultipoles");
16  for (auto gmultipoles_item: gmultipoles_node) {
17  GFieldDefinition gfield_def = GFieldDefinition();
18 
19  gfield_def.name = gopts->get_variable_in_option<string>(gmultipoles_item, "name", goptions::NODFLT);
20  gfield_def.integration_stepper = gopts->get_variable_in_option<string>(gmultipoles_item, "integration_stepper", GFIELD_DEFAULT_INTEGRATION_STEPPER);
21  gfield_def.minimum_step = gutilities::getG4Number(
22  gopts->get_variable_in_option<string>(gmultipoles_item, "minimum_step", GFIELD_DEFAULT_MINIMUM_STEP));
23 
24  // if present, add remaining multipoles parameters
25  gfield_def.add_map_parameter("pole_number", gopts->get_variable_in_option<string>(gmultipoles_item, "pole_number", GFIELD_DEFAULT_POLE_NUMBER));
26  gfield_def.add_map_parameter("vx", gopts->get_variable_in_option<string>(gmultipoles_item, "vx", GFIELD_DEFAULT_VERTEX));
27  gfield_def.add_map_parameter("vy", gopts->get_variable_in_option<string>(gmultipoles_item, "vy", GFIELD_DEFAULT_VERTEX));
28  gfield_def.add_map_parameter("vz", gopts->get_variable_in_option<string>(gmultipoles_item, "vz", GFIELD_DEFAULT_VERTEX));
29  gfield_def.add_map_parameter("rotation_angle", gopts->get_variable_in_option<string>(gmultipoles_item, "rotation_angle", GFIELD_DEFAULT_ROTANGLE));
30  gfield_def.add_map_parameter("rotaxis", gopts->get_variable_in_option<string>(gmultipoles_item, "rotaxis", GFIELD_DEFAULT_ROTAXIS));
31  gfield_def.add_map_parameter("strength", gopts->get_variable_in_option<string>(gmultipoles_item, "strength", GFIELD_DEFAULT_STRENGTH));
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
41 GOptions defineOptions() {
42 
43  GOptions goptions;
44 
45  string help;
46  help = "Adds gmultipoles field(s) to the simulation \n ";
47  vector <GVariable> gmultipoles = {
48  {"name", goptions::NODFLT, "Field name"},
49  {"integration_stepper", GFIELD_DEFAULT_INTEGRATION_STEPPER, "Integration stepper"},
50  {"minimum_step", GFIELD_DEFAULT_MINIMUM_STEP, "Minimum step for the G4ChordFinder"},
51  {"pole_number", GFIELD_DEFAULT_POLE_NUMBER, "Pole numner"},
52  {"vx", GFIELD_DEFAULT_VERTEX, "x component of the origin of the multipole"},
53  {"vy", GFIELD_DEFAULT_VERTEX, "y component of the origin of the multipole"},
54  {"vz", GFIELD_DEFAULT_VERTEX, "z component of the origin of the multipole"},
55  {"rotation_angle", GFIELD_DEFAULT_ROTANGLE, "rotation angle of the multipole"},
56  {"rotaxis", GFIELD_DEFAULT_ROTAXIS, "rotation axis of the multipole"},
57  {"strength", GFIELD_DEFAULT_STRENGTH, "strength of the multipole"}
58  };
59  goptions.defineOption("gmultipoles", "define the e.m. gmultipoles", gmultipoles, help);
60 
61  return goptions;
62 }
63 }
#define GFIELD_DEFAULT_ROTANGLE
#define GFIELD_DEFAULT_VERTEX
#define GFIELD_DEFAULT_INTEGRATION_STEPPER
#define GFIELD_DEFAULT_ROTAXIS
#define GFIELD_DEFAULT_MINIMUM_STEP
#define GFIELD_DEFAULT_POLE_NUMBER
#define GFIELD_DEFAULT_STRENGTH
vector< GFieldDefinition > get_GFieldDefinition(GOptions *gopts)
GOptions defineOptions()
Utility struct to load GFields from options.
Definition: gfield.h:17
double minimum_step
Minimum step size for integration.
Definition: gfield.h:25
std::string name
Key in the gmagneto maps.
Definition: gfield.h:23
void add_map_parameter(std::string key, 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:24
std::string type
Type of the field.
Definition: gfield.h:26