BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
parameters.cc
1/*
2Beam Delivery Simulation (BDSIM) Copyright (C) Royal Holloway,
3University of London 2001 - 2023.
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 "parameters.h"
20
21#include <cstdio>
22#include <iomanip>
23#include <iostream>
24#include <list>
25#include <string>
26
27#include "array.h"
28
29using namespace GMAD;
30
32{
33 // fill setMap, needs to match published member names
34 // usually same but some exceptions, those are commented
35 setMap["userTypeName"] = false;
36 setMap["userParameters"] = false;
37
38 setMap["l"] = false;
39 setMap["scaling"] = false;
40 setMap["scalingFieldOuter"] = false;
41 setMap["ks"] = false;
42 setMap["k1"] = false;
43 setMap["k2"] = false;
44 setMap["k3"] = false;
45 setMap["k4"] = false;
46 setMap["angle"] = false;
47 setMap["B"] = false;
48 setMap["e1"] = false;
49 setMap["e2"] = false;
50 setMap["fint"] = false;
51 setMap["fintx"] = false;
52 setMap["fintK2"] = false;
53 setMap["fintxK2"] = false;
54 setMap["h1"] = false;
55 setMap["h2"] = false;
56 setMap["hgap"] = false;
57 setMap["kick"] = false;
58 setMap["hkick"] = false;
59 setMap["vkick"] = false;
60 setMap["knl"] = false;
61 setMap["ksl"] = false;
62 setMap["gradient"] = false;
63 setMap["E"] = false;
64 setMap["gradient"] = false;
65 setMap["frequency"] = false;
66 setMap["phase"] = false;
67 setMap["tOffset"] = false;
68 setMap["fieldModulator"] = false;
69
70 setMap["kick1"] = false;
71 setMap["kick2"] = false;
72 setMap["kick3"] = false;
73 setMap["kick4"] = false;
74 setMap["rmat11"] = false;
75 setMap["rmat12"] = false;
76 setMap["rmat13"] = false;
77 setMap["rmat14"] = false;
78 setMap["rmat21"] = false;
79 setMap["rmat22"] = false;
80 setMap["rmat23"] = false;
81 setMap["rmat24"] = false;
82 setMap["rmat31"] = false;
83 setMap["rmat32"] = false;
84 setMap["rmat33"] = false;
85 setMap["rmat34"] = false;
86 setMap["rmat41"] = false;
87 setMap["rmat42"] = false;
88 setMap["rmat43"] = false;
89 setMap["rmat44"] = false;
90
91 setMap["beampipeThickness"] = false;
92 setMap["aper1"] = false;
93 setMap["aper2"] = false;
94 setMap["aper3"] = false;
95 setMap["aper4"] = false;
96 setMap["apertureType"] = false;
97 setMap["beampipeMaterial"] = false;
98 setMap["vacuumMaterial"] = false;
99
100 setMap["magnetGeometryType"] = false;
101 setMap["horizontalWidth"] = false;
102 setMap["yokeOnInside"] = false;
103 setMap["hStyle"] = false;
104 setMap["vhRatio"] = false;
105 setMap["coilWidthFraction"] = false;
106 setMap["coilHeightFraction"] = false;
107 setMap["tilt"] = false;
108 setMap["xsize"] = false;
109 setMap["ysize"] = false;
110 setMap["xsizeOut"] = false;
111 setMap["ysizeOut"] = false;
112 setMap["xsizeLeft"] = false;
113 setMap["xsizeRight"] = false;
114 setMap["offsetX"] = false;
115 setMap["offsetY"] = false;
116
117 setMap["tscint"] = false;
118 setMap["twindow"] = false;
119 setMap["tmount"] = false;
120 setMap["windowScreenGap"] = false;
121 setMap["screenXSize"] = false;
122 setMap["screenYSize"] = false;
123 setMap["layerThicknesses"] = false;
124 setMap["layerMaterials"] = false;
125 setMap["layerIsSampler"] = false;
126
127 setMap["screenPSize"] = false;
128 setMap["screenEndZ"] = false;
129 setMap["poleStartZ"] = false;
130 setMap["screenWidth"] = false;
131 setMap["awakeMagnetOffsetX"] = false;
132 setMap["scintmaterial"] = false;
133 setMap["windowmaterial"] = false;
134 setMap["mountmaterial"] = false;
135
136 setMap["xdir"] = false;
137 setMap["ydir"] = false;
138 setMap["zdir"] = false;
139 setMap["waveLength"] = false;
140 setMap["phi"] = false;
141 setMap["theta"] = false;
142 setMap["psi"] = false;
143 setMap["axisX"] = false;
144 setMap["axisY"] = false;
145 setMap["axisZ"] = false;
146 setMap["axisAngle"] = false;
147
148 setMap["numberWedges"] = false;
149 setMap["wedgeLength"] = false;
150 setMap["degraderHeight"] = false;
151 setMap["materialThickness"] = false;
152 setMap["degraderOffset"] = false;
153
154 setMap["wireDiameter"] = false;
155 setMap["wireLength"] = false;
156 setMap["wireOffsetX"] = false;
157 setMap["wireOffsetY"] = false;
158 setMap["wireOffsetZ"] = false;
159 setMap["wireAngle"] = false;
160
161 setMap["undulatorPeriod"] = false;
162 setMap["undulatorGap"] = false;
163 setMap["undulatorMagnetHeight"] = false;
164
165 setMap["bias"] = false;
166 setMap["biasMaterial"] = false;
167 setMap["biasVacuum"] = false;
168
169 setMap["minimumKineticEnergy"] = false;
170
171 setMap["samplerName"] = false;
172 setMap["samplerType"] = false;
173 setMap["samplerRadius"] = false;
174 setMap["region"] = false;
175 setMap["fieldOuter"] = false;
176 setMap["fieldVacuum"] = false;
177 setMap["fieldAll"] = false;
178
179 setMap["geometryFile"] = false;
180 setMap["stripOuterVolume"] = false;
181 setMap["autoColour"] = false;
182 setMap["elementLengthIsArcLength"] = false;
183 setMap["material"] = false;
184 setMap["namedVacuumVolumes"] = false;
185 setMap["markAsCollimator"] = false;
186 setMap["spec"] = false;
187 setMap["cavityModel"] = false;
188 setMap["cavityFieldType"] = false;
189
190 setMap["dicomDataPath"] = false;
191 setMap["dicomDataFile"] = false;
192
193 setMap["colour"] = false;
194
195 setMap["jawTiltLeft"] = false;
196 setMap["jawTiltRight"] = false;
197
198 setMap["crystalLeft"] = false;
199 setMap["crystalRight"] = false;
200 setMap["crystalBoth"] = false;
201 setMap["crystalAngleYAxisLeft"] = false;
202 setMap["crystalAngleYAxisRight"] = false;
203}
204
206{
208
209 for (auto& i : setMap)
210 {i.second = false;}
211}
212
214{
215 // copy parameters into temporary buffer params from element e
216 // parameters already set in params have priority and are not overridden
217 // this is used for the inheritance / newinstance mechanism
218
219 for (auto& i : setMap)
220 {
221 if(i.second == false)
222 {
223 std::string property = i.first;
224 // method can in theory throw runtime_error (shouldn't happen), catch and exit gracefully
225 try
226 {Published<Element>::set(this,(Element*)&e,property);}
227 catch(const std::runtime_error&)
228 {
229 std::cerr << "Error: element> unknown property \"" << property
230 << "\" from element " << e.name << std::endl;
231 exit(1);
232 }
233 i.second = true;
234 }
235 }
236}
void set(C *instance, const std::string &name, double value)
Definition: published.h:99
Parser namespace for GMAD language. Combination of Geant4 and MAD.
Element class.
Definition: element.h:43
void flush()
flush method
Definition: element.cc:439
std::map< std::string, bool > setMap
Map that holds booleans for every member of element.
Definition: parameters.h:47
void inherit_properties(const Element &e)
Definition: parameters.cc:213
void flush()
Reset the parameters to defaults and setMap.
Definition: parameters.cc:205
Parameters()
Constructor.
Definition: parameters.cc:31