ATLAS Offline Software
Loading...
Searching...
No Matches
BLM_Wall.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "GeoModelKernel/GeoShapeSubtraction.h"
8#include "GeoModelKernel/GeoShapeUnion.h"
9#include "GeoModelKernel/GeoShapeShift.h"
10#include "GeoModelKernel/GeoBox.h"
11#include "GeoModelKernel/GeoTube.h"
12#include "GeoModelKernel/GeoLogVol.h"
13#include "GaudiKernel/SystemOfUnits.h"
14
15GeoPhysVol* BLM_Wall::BuildClamp(const GeoMaterial* material)
16{
17 const GeoBox* blmWallBox = new GeoBox(s_width/2, s_clamp_thickness/2, s_clamp_length/2);
18 const GeoTube* blmWallHole = new GeoTube(0, s_hole_r, s_clamp_thickness);
19 //rotations
20 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
21 //position of holes
22 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_clamp_length/2-2.5);
23 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_clamp_length/2-2.5);
24
25 //offsets
26 GeoTrf::Transform3D offset1 = pos1*rm;
27 GeoTrf::Transform3D offset2 = pos2*rm;
28 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
29 const GeoShapeSubtraction& blmFinal = blm1.subtract(((*blmWallHole)<< offset2));
30
31 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
32 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
33
34 return blmWallPhys;
35}
36
37GeoPhysVol* BLM_Wall::BuildBlock(double X, double Y, double Z, const std::string& logname, const GeoMaterial* material)
38{
39 const GeoBox* blmWallBox = new GeoBox(X/2, Y/2, Z/2);
40 const GeoLogVol* blmWallLog = new GeoLogVol(logname, blmWallBox, material);
41 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
42
43 return blmWallPhys;
44}
45
46GeoPhysVol* BLM_Wall::BuildScrew(double length, const GeoMaterial* material)
47{
48 const GeoTube* blmScrew = new GeoTube(0, 2.5, 1);
49 const GeoTube* blmScrew1 = new GeoTube(0, 1.5, length/2);
50 //positions
51 GeoTrf::Translate3D offset1(0, 0, length/2+1);
52 const GeoShapeUnion& blmFinal = blmScrew->add(((*blmScrew1) << offset1));
53
54 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
55 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
56
57 return blmWallPhys;
58}
59
60GeoPhysVol* BLM_Wall::BuildHolder(const GeoMaterial* material)
61{
62 const GeoBox* blmWallBox = new GeoBox(s_width/2, s_holder_thickness/2, s_holder_length/2);
63 const GeoBox* blmWallBox1 = new GeoBox(s_width/2, s_holder_height/2, s_holder_thickness/2);
64 const GeoTube* blmWallHole = new GeoTube(0, s_hole_r, s_holder_thickness);
65 const GeoBox* blmWallHole1 = new GeoBox(s_holder_spacing/2, s_holder_height, (s_holder_spacing_length+s_holder_thickness)/2+1);
66 //rotations
67 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
68 //position of holes
69 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_holder_length/2-s_hole_position);
70 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_holder_length/2-s_hole_position);
71 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_holder_length/2-s_length+s_hole_position);
72 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_holder_length/2-s_length+s_hole_position);
73 GeoTrf::Translation3D pos5(s_width/2-s_hole_position, 0, s_holder_length/2-s_extended_length+2.1);
74 GeoTrf::Translation3D pos6(s_hole_position-s_width/2, 0, s_holder_length/2-s_extended_length+2.1);
77 //position of vertical boxes
78 GeoTrf::Translate3D offset7(0, s_holder_thickness/2-s_holder_height/2, s_holder_thickness/2-s_holder_length/2);
79 //position of the hole
80 GeoTrf::Translate3D offset8(0, -s_holder_height/2, (s_holder_spacing_length+s_holder_thickness)/2-s_holder_length/2-2);
81 //offsets
82 GeoTrf::Transform3D offset1 = pos1*rm;
83 GeoTrf::Transform3D offset2 = pos2*rm;
84 GeoTrf::Transform3D offset3 = pos3*rm;
85 GeoTrf::Transform3D offset4 = pos4*rm;
86 GeoTrf::Transform3D offset5 = pos5*rm;
87 GeoTrf::Transform3D offset6 = pos6*rm;
88
89 const GeoShapeUnion& blm1 = blmWallBox->add(((*blmWallBox1) << offset7));
90 const GeoShapeSubtraction& blm3 = blm1.subtract(((*blmWallHole1)<< offset8));
91 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset1));
92 const GeoShapeSubtraction& blm5 = blm4.subtract(((*blmWallHole) << offset2));
93 const GeoShapeSubtraction& blm6 = blm5.subtract(((*blmWallHole) << offset3));
94 const GeoShapeSubtraction& blm7 = blm6.subtract(((*blmWallHole) << offset4));
95 const GeoShapeSubtraction& blm8 = blm7.subtract(((*blmWallHole) << offset5));
96 const GeoShapeSubtraction& blm9 = blm8.subtract(((*blmWallHole) << offset9));
97 const GeoShapeSubtraction& blm10 = blm9.subtract(((*blmWallHole) << offset10));
98 const GeoShapeSubtraction& blmFinal = blm10.subtract(((*blmWallHole) << offset6));
99
100 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
101 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
102
103 return blmWallPhys;
104}
105
106GeoPhysVol* BLM_Wall::BuildLayerI(double thick, const GeoMaterial* material, bool hole)
107{
108 if(hole)
109 {
110 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_extended_length/2);
111 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
112 const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.9);
113 const GeoShape* blmWallHole2 = new GeoBox(s_width/2-6.1, thick, 4);
114 const GeoShape* blmWallHole3 = new GeoBox(3.89, thick, 3.89);
115 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
116 GeoTrf::RotateY3D rm1(45.*Gaudi::Units::deg);
117 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
118 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
119 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
120 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
121 GeoTrf::Translation3D pos9(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
122 GeoTrf::Translation3D pos10(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
123 GeoTrf::Translate3D offset5(0, 0, s_extended_length/2-s_length+12.55);
124 GeoTrf::Translate3D offset6(0, 0, s_extended_length/2-s_length+4);
125 GeoTrf::Translation3D pos7(0, 0, s_extended_length/2+6.6-s_length);
126 GeoTrf::Transform3D offset1 = pos1*rm;
127 GeoTrf::Transform3D offset2 = pos2*rm;
128 GeoTrf::Transform3D offset3 = pos3*rm;
129 GeoTrf::Transform3D offset4 = pos4*rm;
130 GeoTrf::Transform3D offset7 = pos7*rm1;
131 GeoTrf::Transform3D offset9 = pos9*rm;
132 GeoTrf::Transform3D offset10 = pos10*rm;
133
134 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole3) << offset7));
135 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
136 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
137 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset4));
138 const GeoShapeSubtraction& blm5 = blm4.subtract(((*blmWallHole1) << offset5));
139 const GeoShapeSubtraction& blm6 = blm5.subtract(((*blmWallHole2) << offset6));
140 const GeoShapeSubtraction& blm7 = blm6.subtract(((*blmWallHole) << offset9));
141 const GeoShapeSubtraction& blm8 = blm7.subtract(((*blmWallHole) << offset10));
142 const GeoShapeSubtraction& blmFinal = blm8.subtract(((*blmWallHole) << offset1));
143
144 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
145 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
146
147 return blmWallPhys;
148 }
149 else
150 {
151 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_extended_length/2);
152 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
153 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
154 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_extended_length/2-s_hole_position);
155 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_extended_length/2-s_hole_position);
156 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_extended_length/2-s_length+s_hole_position);
157 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_extended_length/2-s_length+s_hole_position);
158 GeoTrf::Translation3D pos5(s_width/2-s_hole_position, 0, 2.1-s_extended_length/2);
159 GeoTrf::Translation3D pos6(s_hole_position-s_width/2, 0, 2.1-s_extended_length/2);
160 GeoTrf::Transform3D offset1 = pos1*rm;
161 GeoTrf::Transform3D offset2 = pos2*rm;
162 GeoTrf::Transform3D offset3 = pos3*rm;
163 GeoTrf::Transform3D offset4 = pos4*rm;
164 GeoTrf::Transform3D offset5 = pos5*rm;
165 GeoTrf::Transform3D offset6 = pos6*rm;
166 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
167 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
168 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
169 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset4));
170 const GeoShapeSubtraction& blm5 = blm4.subtract(((*blmWallHole) << offset5));
171 const GeoShapeSubtraction& blmFinal = blm5.subtract(((*blmWallHole) << offset6));
172
173 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
174 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
175
176 return blmWallPhys;
177 }
178}
179
180GeoPhysVol* BLM_Wall::BuildLayerII(double thick, const GeoMaterial* material)
181{
182 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
183 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
184 const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.9);
185 const GeoShape* blmWallHole2 = new GeoBox(s_width/2-6.1, thick, 4);
186 //const GeoShape* blmWallHole3 = new GeoBox(1.76777, thick, 1.76777);
187 const GeoShape* blmWallHole3 = new GeoBox(3.9, thick, 3.9);
188 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
189 GeoTrf::RotateY3D rm1(45.*Gaudi::Units::deg);
190 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
191 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
192 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
193 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
194 GeoTrf::Translate3D offset5(0, 0, 1.5);
195 GeoTrf::Translate3D offset6(0, 0, -7.175);
196 //GeoTrf::Translation3D pos7(s_width/2-6.1, 0, 6.6-s_length/2);
197 //GeoTrf::Vector3D pos8(6.1-s_width/2, 0, 6.6-s_length/2);
198 GeoTrf::Translation3D pos8(0, 0, 6.6-s_length/2);
199 GeoTrf::Transform3D offset1 = pos1*rm;
200 GeoTrf::Transform3D offset2 = pos2*rm;
201 GeoTrf::Transform3D offset3 = pos3*rm;
202 GeoTrf::Transform3D offset4 = pos4*rm;
203 //GeoTrf::Transform3D offset7 = pos7*rm1;
204 GeoTrf::Transform3D offset8 = pos8*rm1;
205
206 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole3) << offset8));
207 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
208 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
209 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset4));
210 const GeoShapeSubtraction& blm5 = blm4.subtract(((*blmWallHole1) << offset5));
211 const GeoShapeSubtraction& blm6 = blm5.subtract(((*blmWallHole2) << offset6));
212 //const GeoShapeSubtraction& blm7 = blm6.subtract(((*blmWallHole3) << offset7));
213 const GeoShapeSubtraction& blmFinal = blm6.subtract(((*blmWallHole) << offset1));
214
215 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
216 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
217
218 return blmWallPhys;
219}
220
221GeoPhysVol* BLM_Wall::BuildLayerIII(double thick, const GeoMaterial* material)
222{
223 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
224 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
225 const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.425);
226 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
227 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
228 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
229 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
230 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
231 GeoTrf::Translate3D offset5(0, 0, 2.075);
232 GeoTrf::Transform3D offset1 = pos1*rm;
233 GeoTrf::Transform3D offset2 = pos2*rm;
234 GeoTrf::Transform3D offset3 = pos3*rm;
235 GeoTrf::Transform3D offset4 = pos4*rm;
236 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
237 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
238 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
239 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset4));
240 const GeoShapeSubtraction& blmFinal = blm4.subtract(((*blmWallHole1) << offset5));
241
242 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
243 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
244
245 return blmWallPhys;
246}
247
248GeoPhysVol* BLM_Wall::BuildLayerIV(double thick, const GeoMaterial* material)
249{
250 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
251 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
252 const GeoShape* blmWallHole1 = new GeoBox(s_width/2-3.5, thick, 5.425);
253 const GeoShape* blmWallHole2 = new GeoBox(s_width/2-8.1, thick, 4);
254 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
255 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
256 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
257 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
258 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
259 GeoTrf::Translate3D offset5(0, 0, 2.075);
260 GeoTrf::Translate3D offset6(0, 0, -7.175);
261 GeoTrf::Transform3D offset1 = pos1*rm;
262 GeoTrf::Transform3D offset2 = pos2*rm;
263 GeoTrf::Transform3D offset3 = pos3*rm;
264 GeoTrf::Transform3D offset4 = pos4*rm;
265 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
266 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
267 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
268 const GeoShapeSubtraction& blm4 = blm3.subtract(((*blmWallHole) << offset4));
269 const GeoShapeSubtraction& blm5 = blm4.subtract(((*blmWallHole1) << offset5));
270 const GeoShapeSubtraction& blmFinal = blm5.subtract(((*blmWallHole2) << offset6));
271
272 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
273 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
274
275 return blmWallPhys;
276}
277
278GeoPhysVol* BLM_Wall::BuildLayerV(double thick, const GeoMaterial* material)
279{
280 const GeoShape* blmWallBox = new GeoBox(s_width/2, thick/2, s_length/2);
281 const GeoShape* blmWallHole = new GeoTube(0, s_hole_r, thick);
282 GeoTrf::RotateX3D rm(90.*Gaudi::Units::deg);
283 GeoTrf::Translation3D pos1(s_width/2-s_hole_position, 0, s_length/2-s_hole_position);
284 GeoTrf::Translation3D pos2(s_hole_position-s_width/2, 0, s_length/2-s_hole_position);
285 GeoTrf::Translation3D pos3(s_width/2-s_hole_position, 0, s_hole_position-s_length/2);
286 GeoTrf::Translation3D pos4(s_hole_position-s_width/2, 0, s_hole_position-s_length/2);
287 GeoTrf::Transform3D offset1 = pos1*rm;
288 GeoTrf::Transform3D offset2 = pos2*rm;
289 GeoTrf::Transform3D offset3 = pos3*rm;
290 GeoTrf::Transform3D offset4 = pos4*rm;
291 const GeoShapeSubtraction& blm1 = blmWallBox->subtract(((*blmWallHole) << offset1));
292 const GeoShapeSubtraction& blm2 = blm1.subtract(((*blmWallHole) << offset2));
293 const GeoShapeSubtraction& blm3 = blm2.subtract(((*blmWallHole) << offset3));
294 const GeoShapeSubtraction& blmFinal = blm3.subtract(((*blmWallHole) << offset4));
295
296 const GeoLogVol* blmWallLog = new GeoLogVol("blmWallLog", &blmFinal, material);
297 GeoPhysVol* blmWallPhys = new GeoPhysVol(blmWallLog);
298
299 return blmWallPhys;
300}
double length(const pvec &v)
static constexpr double s_width
Definition BLM_Wall.h:33
GeoPhysVol * BuildLayerIV(double thick, const GeoMaterial *material)
Definition BLM_Wall.cxx:248
GeoPhysVol * BuildLayerII(double thick, const GeoMaterial *material)
Definition BLM_Wall.cxx:180
GeoPhysVol * BuildLayerV(double thick, const GeoMaterial *material)
Definition BLM_Wall.cxx:278
static constexpr double s_hole_r
Definition BLM_Wall.h:36
GeoPhysVol * BuildClamp(const GeoMaterial *material)
Definition BLM_Wall.cxx:15
static constexpr double s_clamp_thickness
Definition BLM_Wall.h:44
static constexpr double s_holder_spacing_length
Definition BLM_Wall.h:41
GeoPhysVol * BuildScrew(double length, const GeoMaterial *material)
Definition BLM_Wall.cxx:46
static constexpr double s_holder_height
Definition BLM_Wall.h:39
static constexpr double s_extended_length
Definition BLM_Wall.h:35
static constexpr double s_holder_thickness
Definition BLM_Wall.h:42
GeoPhysVol * BuildLayerIII(double thick, const GeoMaterial *material)
Definition BLM_Wall.cxx:221
GeoPhysVol * BuildHolder(const GeoMaterial *material)
Definition BLM_Wall.cxx:60
static constexpr double s_clamp_length
Definition BLM_Wall.h:43
static constexpr double s_holder_length
Definition BLM_Wall.h:38
static constexpr double s_holder_spacing
Definition BLM_Wall.h:40
GeoPhysVol * BuildBlock(double X, double Y, double Z, const std::string &logname, const GeoMaterial *material)
Definition BLM_Wall.cxx:37
GeoPhysVol * BuildLayerI(double thick, const GeoMaterial *material, bool hole)
Definition BLM_Wall.cxx:106
static constexpr double s_hole_position
Definition BLM_Wall.h:37
static constexpr double s_length
Definition BLM_Wall.h:34