BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
BDSFieldClassType.cc
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) BDSIM Collaboration, 2001 - 2026.
3
4This file is part of BDSIM.
5
6BDSIM is free software: you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published
8by the Free Software Foundation version 3 of the License.
9
10BDSIM is distributed in the hope that it will be useful, but
11WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with BDSIM. If not, see <http://www.gnu.org/licenses/>.
17*/
18#include "BDSFieldClassType.hh"
19
20#include <map>
21#include <string>
22
23// dictionary for BDSFieldClassType for reflexivity
24template<>
25std::map<BDSFieldClassType, std::string>* BDSFieldClassType::dictionary =
26 new std::map<BDSFieldClassType, std::string> ({
27 {BDSFieldClassType::magnetic, "magnetic"},
28 {BDSFieldClassType::electric, "electric"},
29 {BDSFieldClassType::electromagnetic, "electromagnetic"},
30 {BDSFieldClassType::irregular, "irregular"}
31 });
32
34{
35 switch (fType.underlying())
36 {
37 case BDSFieldType::bfieldzero:
38 case BDSFieldType::bmap1d:
39 case BDSFieldType::bmap2d:
40 case BDSFieldType::bmap3d:
41 case BDSFieldType::bmap4d:
42 case BDSFieldType::mokka:
43 case BDSFieldType::solenoid:
44 case BDSFieldType::solenoidsheet:
45 case BDSFieldType::solenoidloop:
46 case BDSFieldType::solenoidblock:
47 case BDSFieldType::dipole:
48 case BDSFieldType::dipole3d:
49 case BDSFieldType::quadrupole:
50 case BDSFieldType::dipolequadrupole:
51 case BDSFieldType::sextupole:
52 case BDSFieldType::octupole:
53 case BDSFieldType::decapole:
54 case BDSFieldType::multipole:
55 case BDSFieldType::muonspoiler:
56 case BDSFieldType::skewquadrupole:
57 case BDSFieldType::skewsextupole:
58 case BDSFieldType::skewoctupole:
59 case BDSFieldType::skewdecapole:
60 case BDSFieldType::undulator:
61 case BDSFieldType::multipoleouterdipole:
62 case BDSFieldType::multipoleouterquadrupole:
63 case BDSFieldType::multipoleoutersextupole:
64 case BDSFieldType::multipoleouteroctupole:
65 case BDSFieldType::multipoleouterdecapole:
66 case BDSFieldType::skewmultipoleouterquadrupole:
67 case BDSFieldType::skewmultipoleoutersextupole:
68 case BDSFieldType::skewmultipoleouteroctupole:
69 case BDSFieldType::skewmultipoleouterdecapole:
70 case BDSFieldType::multipoleouterdipole3d:
71 case BDSFieldType::multipoleouterdipolelhc:
72 case BDSFieldType::multipoleouterquadrupolelhc:
73 case BDSFieldType::multipoleoutersextupolelhc:
74 {return BDSFieldClassType::magnetic;}
75 case BDSFieldType::efieldzero:
76 case BDSFieldType::emap1d:
77 case BDSFieldType::emap2d:
78 case BDSFieldType::emap3d:
79 case BDSFieldType::emap4d:
80 case BDSFieldType::rfconstantinx:
81 case BDSFieldType::rfconstantiny:
82 case BDSFieldType::rfconstantinz:
83 {return BDSFieldClassType::electric;}
84 case BDSFieldType::none:
85 case BDSFieldType::ebfieldzero:
86 case BDSFieldType::ebmap1d:
87 case BDSFieldType::ebmap2d:
88 case BDSFieldType::ebmap3d:
89 case BDSFieldType::ebmap4d:
90 case BDSFieldType::rfpillbox:
91 case BDSFieldType::muoncooler:
92 {return BDSFieldClassType::electromagnetic;}
93 case BDSFieldType::teleporter:
94 case BDSFieldType::rmatrix:
95 case BDSFieldType::cavityfringe:
96 case BDSFieldType::paralleltransporter:
97 {return BDSFieldClassType::irregular;}
98 default:
99 {return BDSFieldClassType::electromagnetic;}
100 }
101}
Improve type-safety of native enum data type in C++.
static std::map< BDSTypeSafeEnum< def, inner >, std::string > * dictionary
type underlying() const
return underlying value (can be used in switch statement)
BDSFieldClassType DetermineFieldClassType(BDSFieldType fieldType)
Function that gives the corresponding enum value for a field type enum.