BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
Loading...
Searching...
No Matches
placement.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 "blmplacement.h"
20#include "placement.h"
21#include "query.h"
22#include "samplerplacement.h"
23#include "scorermesh.h"
24
25using namespace GMAD;
26
28{
29 clear();
31}
32
34{
35 name = "";
36 geometryFile = "";
37 bdsimElement = "";
38 sequence = "";
41 s = 0;
42 x = 0;
43 y = 0;
44 z = 0;
45 phi = 0;
46 theta = 0;
47 psi = 0;
48 axisX = 0;
49 axisY = 0;
50 axisZ = 0;
51 angle = 0;
52 sensitive = true;
53 axisAngle = false;
54 side = "";
55 sideOffset = 0;
56 autoColour = true;
57 stripOuterVolume = false;
58 fieldAll = "";
59 dontReloadGeometry = false;
60}
61
63{
64 publish("name", &Placement::name);
65 publish("geometryFile", &Placement::geometryFile);
66 publish("bdsimElement", &Placement::bdsimElement);
67 publish("sequence", &Placement::sequence);
68 publish("referenceElement", &Placement::referenceElement);
69 publish("referenceElementNumber", &Placement::referenceElementNumber);
70 publish("s", &Placement::s);
71 publish("x", &Placement::x);
72 publish("y", &Placement::y);
73 publish("z", &Placement::z);
74 publish("phi", &Placement::phi);
75 publish("theta", &Placement::theta);
76 publish("psi", &Placement::psi);
77 publish("axisX", &Placement::axisX);
78 publish("axisY", &Placement::axisY);
79 publish("axisZ", &Placement::axisZ);
80 publish("angle", &Placement::angle);
81 publish("sensitive", &Placement::sensitive);
82 publish("axisAngle", &Placement::axisAngle);
83 publish("side", &Placement::side);
84 publish("sideOffset", &Placement::sideOffset);
85 publish("autoColour", &Placement::autoColour);
86 publish("stripOuterVolume", &Placement::stripOuterVolume);
87 publish("fieldAll", &Placement::fieldAll);
88 publish("dontReloadGeometry", &Placement::dontReloadGeometry);
89}
90
92{
93 std::cout << "Placement: \n"
94 << "name \"" << name << "\"\n"
95 << "geometryFile \"" << geometryFile << "\"\n"
96 << "bdsimElement \"" << bdsimElement << "\"\n"
97 << "sequence \"" << sequence << "\"\n"
98 << "referenceElement " << referenceElement << "\"\n"
99 << "referenceElementNumber " << referenceElementNumber << "\n"
100 << "s " << s << "\n"
101 << "x " << x << "\n"
102 << "y " << y << "\n"
103 << "z " << z << "\n"
104 << "phi " << phi << "\n"
105 << "theta " << theta << "\n"
106 << "psi " << psi << "\n"
107 << "axisX " << axisX << "\n"
108 << "axisY " << axisY << "\n"
109 << "axisZ " << axisZ << "\n"
110 << "angle " << angle << "\n"
111 << "sensitive " << sensitive << "\n"
112 << "axisAngle " << axisAngle << "\n"
113 << "side \"" << side << "\"\n"
114 << "sideOffset " << sideOffset << "\n"
115 << "axisAngle " << axisAngle << "\n"
116 << "autoColour " << autoColour << "\n"
117 << "stripOuterVolume " << stripOuterVolume << "\n"
118 << "fieldAll \"" << fieldAll << "\"" << "\n"
119 << "dontReloadGeometry " << dontReloadGeometry << std::endl;
120}
121
123 sensitive(false),
124 sideOffset(0)
125{
126 name = sp.name;
129 s = sp.s;
130 x = sp.x;
131 y = sp.y;
132 z = sp.z;
133 phi = sp.phi;
134 theta = sp.theta;
135 psi = sp.psi;
136 axisX = sp.axisX;
137 axisY = sp.axisY;
138 axisZ = sp.axisZ;
139 angle = sp.angle;
140 axisAngle = sp.axisAngle;
141 autoColour = false;
142 stripOuterVolume = false;
143 dontReloadGeometry = false;
144}
145
147 sensitive(false),
148 sideOffset(0)
149{
150 name = sm.name;
151 sequence = sm.sequence;
154 s = sm.s;
155 x = sm.x;
156 y = sm.y;
157 z = sm.z;
158 phi = sm.phi;
159 theta = sm.theta;
160 psi = sm.psi;
161 axisX = sm.axisX;
162 axisY = sm.axisY;
163 axisZ = sm.axisZ;
164 angle = sm.angle;
165 axisAngle = sm.axisAngle;
166 autoColour = false;
167 stripOuterVolume = false;
168 dontReloadGeometry = false;
169}
170
172 sensitive(false)
173{
174 name = bp.name;
177 s = bp.s;
178 x = bp.x;
179 y = bp.y;
180 z = bp.z;
181 phi = bp.phi;
182 theta = bp.theta;
183 psi = bp.psi;
184 axisX = bp.axisX;
185 axisY = bp.axisY;
186 axisZ = bp.axisZ;
187 angle = bp.angle;
188 axisAngle = bp.axisAngle;
189 side = bp.side;
191 autoColour = false;
192 stripOuterVolume = false;
193 dontReloadGeometry = false;
194}
195
197 sensitive(false),
198 sideOffset(0),
199 autoColour(false),
200 stripOuterVolume(false)
201{
202 name = qu.name;
205 s = qu.s;
206 x = qu.x;
207 y = qu.y;
208 z = qu.z;
209 phi = qu.phi;
210 theta = qu.theta;
211 psi = qu.psi;
212 axisX = qu.axisX;
213 axisY = qu.axisY;
214 axisZ = qu.axisZ;
215 angle = qu.angle;
216 axisAngle = qu.axisAngle;
217 dontReloadGeometry = false;
218}
blm for parser.
Definition: blmplacement.h:39
double sideOffset
Offset between the geometry and the BLM.
Definition: blmplacement.h:61
bool axisAngle
Flag to use the axis angle construction of rotation.
Definition: blmplacement.h:59
double theta
Euler angle for rotation.
Definition: blmplacement.h:50
double x
Offset in x.
Definition: blmplacement.h:45
std::string side
which side to attach to: top, bottom, left, right.
Definition: blmplacement.h:60
std::string referenceElement
Name of reference element w.r.t. to place to.
Definition: blmplacement.h:42
std::string name
Name of this samplerplacement.
Definition: blmplacement.h:41
double psi
Euler angle for rotation.
Definition: blmplacement.h:51
double phi
Euler angle for rotation.
Definition: blmplacement.h:49
double s
Curvilinear s position to place w.r.t..
Definition: blmplacement.h:44
int referenceElementNumber
Index of repetition of element if there are multiple uses.
Definition: blmplacement.h:43
double y
Offset in y.
Definition: blmplacement.h:46
bool axisAngle
Flag to use the axis angle construction of rotation.
Definition: placement.h:65
double axisZ
Definition: placement.h:61
std::string fieldAll
Name of field object to apply to all of placement.
Definition: placement.h:72
bool sensitive
Whether to record hits or not.
Definition: placement.h:64
std::string name
Name of this placement.
Definition: placement.h:43
void clear()
reset
Definition: placement.cc:33
void print() const
print some properties
Definition: placement.cc:91
std::string side
which side to attach to: top, bottom, left, right.
Definition: placement.h:66
double theta
Euler angle for rotation.
Definition: placement.h:55
double sideOffset
Gap between side and component.
Definition: placement.h:67
double psi
Euler angle for rotation.
Definition: placement.h:56
double y
Offset in y.
Definition: placement.h:51
double s
Curvilinear s position to place w.r.t..
Definition: placement.h:49
double axisY
Definition: placement.h:60
bool dontReloadGeometry
Purposively don't reload for unique placements (must know what we're doing)
Definition: placement.h:70
std::string bdsimElement
Name of bdsim-built component to place instead of piece of geometry.
Definition: placement.h:45
void PublishMembers()
publish members
Definition: placement.cc:62
bool autoColour
Whether to auto colour the geometry.
Definition: placement.h:68
bool stripOuterVolume
Whether to place the world LV as a G4AssemblyVolume.
Definition: placement.h:69
std::string sequence
Name of sequence to place.
Definition: placement.h:46
std::string geometryFile
Geometry to load in format:path.
Definition: placement.h:44
double angle
Definition: placement.h:62
Placement()
constructor
Definition: placement.cc:27
double x
Offset in x.
Definition: placement.h:50
int referenceElementNumber
Index of repetition of element if there are multiple uses.
Definition: placement.h:48
double phi
Euler angle for rotation.
Definition: placement.h:54
std::string referenceElement
Name of reference element w.r.t. to place to.
Definition: placement.h:47
double axisX
Definition: placement.h:59
void publish(const std::string &name, T C::*mp)
Make pointer to member from class C and type T with accessible with a name.
Definition: published.h:92
Query structure class for parser.
Definition: query.h:37
bool axisAngle
Flag to use the axis angle construction of rotation.
Definition: query.h:87
std::string referenceElement
Name of reference element w.r.t. to place to.
Definition: query.h:70
double s
Curvilinear s position to place w.r.t..
Definition: query.h:72
double axisZ
Definition: query.h:84
double y
Offset in y.
Definition: query.h:74
double angle
Definition: query.h:85
double theta
Euler angle for rotation.
Definition: query.h:78
double axisX
Definition: query.h:82
double psi
Euler angle for rotation.
Definition: query.h:79
std::string name
Name of object.
Definition: query.h:39
double z
Definition: query.h:75
double axisY
Definition: query.h:83
double phi
Euler angle for rotation.
Definition: query.h:77
int referenceElementNumber
Index of repetition of element if there are multiple uses.
Definition: query.h:71
double x
Offset in x.
Definition: query.h:73
Sampler placement class for parser.
int referenceElementNumber
Index of repetition of element if there are multiple uses.
double phi
Euler angle for rotation.
std::string name
Name of this samplerplacement.
std::string referenceElement
Name of reference element w.r.t. to place to.
double theta
Euler angle for rotation.
double s
Curvilinear s position to place w.r.t..
double psi
Euler angle for rotation.
bool axisAngle
Flag to use the axis angle construction of rotation.
double x
Offset in x.
double y
Offset in y.
ScorerMesh class for parser.
Definition: scorermesh.h:38
double phi
Euler angle for rotation.
Definition: scorermesh.h:68
std::string referenceElement
Name of reference element w.r.t. to place to.
Definition: scorermesh.h:61
double s
Curvilinear s position to place w.r.t..
Definition: scorermesh.h:63
double psi
Euler angle for rotation.
Definition: scorermesh.h:70
int referenceElementNumber
Index of repetition of element if there are multiple uses.
Definition: scorermesh.h:62
std::string name
Name of this placement.
Definition: scorermesh.h:40
std::string sequence
Name of sequence to place.
Definition: scorermesh.h:60
double theta
Euler angle for rotation.
Definition: scorermesh.h:69
double x
Offset in x.
Definition: scorermesh.h:64
bool axisAngle
Flag to use the axis angle construction of rotation.
Definition: scorermesh.h:78
double y
Offset in y.
Definition: scorermesh.h:65
Parser namespace for GMAD language. Combination of Geant4 and MAD.