gfields
gmagneto.cc
Go to the documentation of this file.
1 // glibrary
2 #include "gfactory.h"
3 
4 // gsystem
5 #include "gmagneto.h"
6 
7 using namespace std;
8 
9 GMagneto::GMagneto(GOptions *gopts) : GStateMessage(gopts, "GMagneto", "gfield") {
10 
11  gFieldMap = new map<string, GField *>;
12  gFieldMgrMap = new map<string, G4FieldManager *>;
13 
14  GManager gFieldManager("GMagneto", verbosity);
15  string pluginPath = string(getenv("GEMC")) + "/lib/";
16 
17  // TODO: this should be done in gemc instead and passed to gmagneto, same as gopts.
18  vector <GFieldDefinition> field_definition_array = gfields::get_GFieldDefinition(gopts);
19 
20  for (auto &field_definition: field_definition_array) {
21  string name = field_definition.name;
22  string factory = field_definition.gfieldPluginName();
23 
24  cout << field_definition << endl;
25 
26  string pluginName = pluginPath + factory;
27 
28  if (gFieldMap->find(name) == gFieldMap->end()) {
29  (*gFieldMap)[name] = gFieldManager.LoadAndRegisterObjectFromLibrary<GField>(pluginName);
30  (*gFieldMap)[name]->load_field_definitions(field_definition);
31  (*gFieldMgrMap)[name] = (*gFieldMap)[name]->create_FieldManager();
32  }
33  }
34 
35 }
Abstract base class representing a magnetic field.
Definition: gfield.h:69
virtual void load_field_definitions(GFieldDefinition gfd)
Sets the field definition for the field.
Definition: gfield.h:99
GMagneto(GOptions *gopts)
Constructs a GMagneto object and loads field definitions from options.
Definition: gmagneto.cc:9
vector< GFieldDefinition > get_GFieldDefinition(GOptions *gopts)