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