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