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 - 2024.
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 setMap["kg"] = false;
70
71 setMap["kick1"] = false;
72 setMap["kick2"] = false;
73 setMap["kick3"] = false;
74 setMap["kick4"] = false;
75 setMap["rmat11"] = false;
76 setMap["rmat12"] = false;
77 setMap["rmat13"] = false;
78 setMap["rmat14"] = false;
79 setMap["rmat21"] = false;
80 setMap["rmat22"] = false;
81 setMap["rmat23"] = false;
82 setMap["rmat24"] = false;
83 setMap["rmat31"] = false;
84 setMap["rmat32"] = false;
85 setMap["rmat33"] = false;
86 setMap["rmat34"] = false;
87 setMap["rmat41"] = false;
88 setMap["rmat42"] = false;
89 setMap["rmat43"] = false;
90 setMap["rmat44"] = false;
91
92 setMap["beampipeThickness"] = false;
93 setMap["aper1"] = false;
94 setMap["aper2"] = false;
95 setMap["aper3"] = false;
96 setMap["aper4"] = false;
97 setMap["apertureType"] = false;
98 setMap["beampipeMaterial"] = false;
99 setMap["vacuumMaterial"] = false;
100
101 setMap["magnetGeometryType"] = false;
102 setMap["horizontalWidth"] = false;
103 setMap["yokeOnInside"] = false;
104 setMap["hStyle"] = false;
105 setMap["vhRatio"] = false;
106 setMap["coilWidthFraction"] = false;
107 setMap["coilHeightFraction"] = false;
108 setMap["tilt"] = false;
109 setMap["xsize"] = false;
110 setMap["ysize"] = false;
111 setMap["xsizeOut"] = false;
112 setMap["ysizeOut"] = false;
113 setMap["xsizeLeft"] = false;
114 setMap["xsizeRight"] = false;
115 setMap["offsetX"] = false;
116 setMap["offsetY"] = false;
117 setMap["xsize2"] = false;
118 setMap["ysize2"] = false;
119 setMap["offsetX2"] = false;
120 setMap["offsetY2"] = false;
121 setMap["tilt2"] = false;
122 setMap["outerShape"] = false;
123
124 setMap["tscint"] = false;
125 setMap["twindow"] = false;
126 setMap["tmount"] = false;
127 setMap["windowScreenGap"] = false;
128 setMap["screenXSize"] = false;
129 setMap["screenYSize"] = false;
130 setMap["layerThicknesses"] = false;
131 setMap["layerMaterials"] = false;
132 setMap["layerIsSampler"] = false;
133
134 setMap["screenPSize"] = false;
135 setMap["screenEndZ"] = false;
136 setMap["poleStartZ"] = false;
137 setMap["screenWidth"] = false;
138 setMap["awakeMagnetOffsetX"] = false;
139 setMap["scintmaterial"] = false;
140 setMap["windowmaterial"] = false;
141 setMap["mountmaterial"] = false;
142
143 setMap["xdir"] = false;
144 setMap["ydir"] = false;
145 setMap["zdir"] = false;
146 setMap["waveLength"] = false;
147 setMap["gradient"] = false;
148 setMap["phi"] = false;
149 setMap["theta"] = false;
150 setMap["psi"] = false;
151 setMap["axisX"] = false;
152 setMap["axisY"] = false;
153 setMap["axisZ"] = false;
154 setMap["axisAngle"] = false;
155
156 setMap["numberWedges"] = false;
157 setMap["wedgeLength"] = false;
158 setMap["degraderHeight"] = false;
159 setMap["materialThickness"] = false;
160 setMap["degraderOffset"] = false;
161
162 setMap["laserBeam"] = false;
163 setMap["laserOffsetTheta"] = false;
164 setMap["laserOffsetPhi"] = false;
165 setMap["laserOffsetX"] = false;
166 setMap["laserOffsetY"] = false;
167 setMap["laserOffsetZ"] = false;
168
169 setMap["wireDiameter"] = false;
170 setMap["wireLength"] = false;
171 setMap["wireOffsetX"] = false;
172 setMap["wireOffsetY"] = false;
173 setMap["wireOffsetZ"] = false;
174 setMap["wireAngle"] = false;
175
176 setMap["undulatorPeriod"] = false;
177 setMap["undulatorGap"] = false;
178 setMap["undulatorMagnetHeight"] = false;
179
180 setMap["anodeLength"] = false;
181 setMap["anodeRadius"] = false;
182 setMap["anodeThickness"] = false;
183 setMap["electrodeLength"] = false;
184 setMap["electrodeRadius"] = false;
185 setMap["electrodeThickness"] = false;
186
187 setMap["bias"] = false;
188 setMap["biasMaterial"] = false;
189 setMap["biasVacuum"] = false;
190 setMap["biasMaterialLV"] = false;
191
192 setMap["minimumKineticEnergy"] = false;
193
194 setMap["samplerName"] = false;
195 setMap["samplerType"] = false;
196 setMap["samplerRadius"] = false;
197 setMap["region"] = false;
198 setMap["fieldOuter"] = false;
199 setMap["fieldVacuum"] = false;
200 setMap["fieldAll"] = false;
201
202 setMap["geometryFile"] = false;
203 setMap["stripOuterVolume"] = false;
204 setMap["autoColour"] = false;
205 setMap["elementLengthIsArcLength"] = false;
206 setMap["material"] = false;
207 setMap["namedVacuumVolumes"] = false;
208 setMap["markAsCollimator"] = false;
209 setMap["spec"] = false;
210 setMap["cavityModel"] = false;
211 setMap["cavityFieldType"] = false;
212
213 setMap["dicomDataPath"] = false;
214 setMap["dicomDataFile"] = false;
215
216 setMap["colour"] = false;
217
218 setMap["jawTiltLeft"] = false;
219 setMap["jawTiltRight"] = false;
220
221 setMap["tipMaterial"] = false;
222 setMap["tipThickness"] = false;
223
224 setMap["crystalLeft"] = false;
225 setMap["crystalRight"] = false;
226 setMap["crystalBoth"] = false;
227 setMap["crystalAngleYAxisLeft"] = false;
228 setMap["crystalAngleYAxisRight"] = false;
229
230 setMap["coolingDefinition"] = false;
231}
232
234{
236
237 for (auto& i : setMap)
238 {i.second = false;}
239}
240
242{
243 // copy parameters into temporary buffer params from element e
244 // parameters already set in params have priority and are not overridden
245 // this is used for the inheritance / newinstance mechanism
246
247 for (auto& i : setMap)
248 {
249 if(i.second == false)
250 {
251 std::string property = i.first;
252 // method can in theory throw runtime_error (shouldn't happen), catch and exit gracefully
253 try
254 {Published<Element>::set(this,(Element*)&e,property);}
255 catch(const std::runtime_error&)
256 {
257 std::cerr << "Error: element> unknown property \"" << property
258 << "\" from element " << e.name << std::endl;
259 exit(1);
260 }
261 i.second = true;
262 }
263 }
264}
void set(C *instance, const std::string &name, double value)
Definition published.h:101
Parser namespace for GMAD language. Combination of Geant4 and MAD.
Element class.
Definition element.h:45
void flush()
flush method
Definition element.cc:499
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)
void flush()
Reset the parameters to defaults and setMap.
Parameters()
Constructor.
Definition parameters.cc:31