19#include "BDSFieldType.hh"
21#include "BDSException.hh"
22#include "BDSUtilities.hh"
33 new std::map<BDSFieldType, std::string> ({
34 {BDSFieldType::none,
"none"},
35 {BDSFieldType::bfieldzero,
"bfieldzero"},
36 {BDSFieldType::efieldzero,
"efieldzero"},
37 {BDSFieldType::ebfieldzero,
"ebfieldzero"},
38 {BDSFieldType::teleporter,
"teleporter"},
39 {BDSFieldType::bmap1d,
"bmap1d"},
40 {BDSFieldType::bmap2d,
"bmap2d"},
41 {BDSFieldType::bmap3d,
"bmap3d"},
42 {BDSFieldType::bmap4d,
"bmap4d"},
43 {BDSFieldType::emap1d,
"emap1d"},
44 {BDSFieldType::emap2d,
"emap2d"},
45 {BDSFieldType::emap3d,
"emap3d"},
46 {BDSFieldType::emap4d,
"emap4d"},
47 {BDSFieldType::ebmap1d,
"ebmap1d"},
48 {BDSFieldType::ebmap2d,
"ebmap2d"},
49 {BDSFieldType::ebmap3d,
"ebmap3d"},
50 {BDSFieldType::ebmap4d,
"ebmap4d"},
51 {BDSFieldType::mokka,
"mokka"},
52 {BDSFieldType::solenoid,
"solenoid"},
53 {BDSFieldType::solenoidsheet,
"solenoidsheet"},
54 {BDSFieldType::dipole,
"dipole"},
55 {BDSFieldType::quadrupole,
"quadrupole"},
56 {BDSFieldType::dipolequadrupole,
"dipolequadrupole"},
57 {BDSFieldType::sextupole,
"sextupole"},
58 {BDSFieldType::octupole,
"octupole"},
59 {BDSFieldType::decapole,
"decapole"},
60 {BDSFieldType::multipole,
"multipole"},
61 {BDSFieldType::muonspoiler,
"muonspoiler"},
62 {BDSFieldType::skewquadrupole,
"skewquadrupole"},
63 {BDSFieldType::skewsextupole,
"skewsextupole"},
64 {BDSFieldType::skewoctupole,
"skewoctupole"},
65 {BDSFieldType::skewdecapole,
"skewdecapole"},
66 {BDSFieldType::rfpillbox,
"rfpillbox"},
67 {BDSFieldType::rfconstantinx,
"rfconstantinx"},
68 {BDSFieldType::rfconstantiny,
"rfconstantiny"},
69 {BDSFieldType::rfconstantinz,
"rfconstantinz"},
70 {BDSFieldType::undulator,
"undulator"},
71 {BDSFieldType::rmatrix,
"rmatrix"},
72 {BDSFieldType::paralleltransporter,
"paralleltransporter"},
73 {BDSFieldType::cavityfringe,
"cavityfringe"},
74 {BDSFieldType::dipole3d,
"dipole3d"},
75 {BDSFieldType::multipoleouterdipole,
"multipoleouterdipole"},
76 {BDSFieldType::multipoleouterquadrupole,
"multipoleouterquadrupole"},
77 {BDSFieldType::multipoleoutersextupole,
"multipoleoutersextupole"},
78 {BDSFieldType::multipoleouteroctupole,
"multipoleouteroctupole"},
79 {BDSFieldType::multipoleouterdecapole,
"multipoleouterdecapole"},
80 {BDSFieldType::skewmultipoleouterquadrupole,
"skewmultipoleouterquadrupole"},
81 {BDSFieldType::skewmultipoleoutersextupole,
"skewmultipoleoutersextupole"},
82 {BDSFieldType::skewmultipoleouteroctupole,
"skewmultipoleouteroctupole"},
83 {BDSFieldType::skewmultipoleouterdecapole,
"skewmultipoleouterdecapole"},
84 {BDSFieldType::multipoleouterdipole3d,
"multipoleouterdipole3d"},
85 {BDSFieldType::multipoleouterdipolelhc,
"multipoleouterdipolelhc"},
86 {BDSFieldType::multipoleouterquadrupolelhc,
"multipoleouterquadrupolelhc"},
87 {BDSFieldType::multipoleoutersextupolelhc,
"multipoleoutersextupolelhc"}
92 std::map<G4String, BDSFieldType> types;
93 types[
"none"] = BDSFieldType::none;
94 types[
"bfieldzero"] = BDSFieldType::bfieldzero;
95 types[
"efieldzero"] = BDSFieldType::efieldzero;
96 types[
"ebfieldzero"] = BDSFieldType::ebfieldzero;
97 types[
"teleporter"] = BDSFieldType::teleporter;
98 types[
"bmap1d"] = BDSFieldType::bmap1d;
99 types[
"bmap2d"] = BDSFieldType::bmap2d;
100 types[
"bmap3d"] = BDSFieldType::bmap3d;
101 types[
"bmap4d"] = BDSFieldType::bmap4d;
102 types[
"emap1d"] = BDSFieldType::emap1d;
103 types[
"emap2d"] = BDSFieldType::emap2d;
104 types[
"emap3d"] = BDSFieldType::emap3d;
105 types[
"emap4d"] = BDSFieldType::emap4d;
106 types[
"ebmap1d"] = BDSFieldType::ebmap1d;
107 types[
"ebmap2d"] = BDSFieldType::ebmap2d;
108 types[
"ebmap3d"] = BDSFieldType::ebmap3d;
109 types[
"ebmap4d"] = BDSFieldType::ebmap4d;
110 types[
"mokka"] = BDSFieldType::mokka;
111 types[
"solenoid"] = BDSFieldType::solenoid;
112 types[
"solenoidsheet"] = BDSFieldType::solenoidsheet;
113 types[
"dipole"] = BDSFieldType::dipole;
114 types[
"quadrupole"] = BDSFieldType::quadrupole;
115 types[
"dipolequadrupole"] = BDSFieldType::dipolequadrupole;
116 types[
"sextupole"] = BDSFieldType::sextupole;
117 types[
"octupole"] = BDSFieldType::octupole;
118 types[
"decapole"] = BDSFieldType::decapole;
119 types[
"multipole"] = BDSFieldType::multipole;
120 types[
"muonspoiler"] = BDSFieldType::muonspoiler;
121 types[
"skewquadrupole"] = BDSFieldType::skewquadrupole;
122 types[
"skewsextupole"] = BDSFieldType::skewsextupole;
123 types[
"skewoctupole"] = BDSFieldType::skewoctupole;
124 types[
"skewdecapole"] = BDSFieldType::skewdecapole;
125 types[
"rfpillbox"] = BDSFieldType::rfpillbox;
126 types[
"rfconstantinx"] = BDSFieldType::rfconstantinx;
127 types[
"rfconstantiny"] = BDSFieldType::rfconstantiny;
128 types[
"rfconstantinz"] = BDSFieldType::rfconstantinz;
129 types[
"undulator"] = BDSFieldType::undulator;
130 types[
"rmatrix"] = BDSFieldType::rmatrix;
131 types[
"paralleltransporter"] = BDSFieldType::paralleltransporter;
132 types[
"cavityfringe"] = BDSFieldType::cavityfringe;
133 types[
"dipole3d"] = BDSFieldType::dipole3d;
134 types[
"multipoleouterdipole"] = BDSFieldType::multipoleouterdipole;
135 types[
"multipoleouterquadrupole"] = BDSFieldType::multipoleouterquadrupole;
136 types[
"multipoleoutersextupole"] = BDSFieldType::multipoleoutersextupole;
137 types[
"multipoleouteroctupole"] = BDSFieldType::multipoleouteroctupole;
138 types[
"multipoleouterdecapole"] = BDSFieldType::multipoleouterdecapole;
139 types[
"skewmultipoleouterquadrupole"] = BDSFieldType::skewmultipoleouterquadrupole;
140 types[
"skewmultipoleoutersextupole"] = BDSFieldType::skewmultipoleoutersextupole;
141 types[
"skewmultipoleouteroctupole"] = BDSFieldType::skewmultipoleouteroctupole;
142 types[
"skewmultipoleouterdecapole"] = BDSFieldType::skewmultipoleouterdecapole;
143 types[
"multipoleouterdipole3d"] = BDSFieldType::multipoleouterdipole3d;
144 types[
"multipoleouterdipolelhc"] = BDSFieldType::multipoleouterdipolelhc;
145 types[
"multipoleouterquadrupolelhc"] = BDSFieldType::multipoleouterquadrupolelhc;
146 types[
"multipoleoutersextupolelhc"] = BDSFieldType::multipoleoutersextupolelhc;
150 auto result = types.find(bType);
151 if (result == types.end())
153 G4String msg =
"\"" + bType +
"\" is not a valid field type\n";
154 msg +=
"Available field types are:\n";
155 for (
const auto& it : types)
156 {msg +=
"\"" + it.first +
"\"\n";}
161 G4cout << __METHOD_NAME__ <<
"determined field type to be " << result->second << G4endl;
163 return result->second;
General exception with possible name of object and message.
static std::map< BDSTypeSafeEnum< fieldtypes_def, int >, std::string > * dictionary
BDSFieldType DetermineFieldType(G4String fieldType)
Function that gives corresponding enum value for string (case-insensitive)
G4String LowerCase(const G4String &str)
Utility function to simplify lots of syntax changes for pedantic g4 changes.