ATLAS Offline Software
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 
15 GeoPhysVol* 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
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 
37 GeoPhysVol* 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 
46 GeoPhysVol* 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 
60 GeoPhysVol* 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
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 
106 GeoPhysVol* 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);
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);
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);
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 
180 GeoPhysVol* 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);
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 
221 GeoPhysVol* 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);
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 
248 GeoPhysVol* 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);
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 
278 GeoPhysVol* 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);
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 }
BLM_Wall::BuildLayerV
GeoPhysVol * BuildLayerV(double thick, const GeoMaterial *material)
Definition: BLM_Wall.cxx:278
BLM_Wall::s_hole_r
static constexpr double s_hole_r
Definition: BLM_Wall.h:36
BLM_Wall::BuildLayerII
GeoPhysVol * BuildLayerII(double thick, const GeoMaterial *material)
Definition: BLM_Wall.cxx:180
BLM_Wall::s_holder_spacing_length
static constexpr double s_holder_spacing_length
Definition: BLM_Wall.h:41
Monitored::Z
@ Z
Definition: HistogramFillerUtils.h:24
BLM_Wall::s_holder_height
static constexpr double s_holder_height
Definition: BLM_Wall.h:39
BLM_Wall::s_holder_thickness
static constexpr double s_holder_thickness
Definition: BLM_Wall.h:42
deg
#define deg
Definition: SbPolyhedron.cxx:17
BLM_Wall::BuildLayerIII
GeoPhysVol * BuildLayerIII(double thick, const GeoMaterial *material)
Definition: BLM_Wall.cxx:221
BLM_Wall.h
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
xAOD::EgammaParameters::pos7
@ pos7
Difference between the track and the shower positions: sum_{i=i_m-7}^{i=i_m+7}E_i x (i-i_m) / sum_{i=...
Definition: EgammaEnums.h:133
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
BLM_Wall::s_holder_length
static constexpr double s_holder_length
Definition: BLM_Wall.h:38
BLM_Wall::s_clamp_length
static constexpr double s_clamp_length
Definition: BLM_Wall.h:43
BLM_Wall::s_extended_length
static constexpr double s_extended_length
Definition: BLM_Wall.h:35
BLM_Wall::BuildBlock
GeoPhysVol * BuildBlock(double X, double Y, double Z, const std::string &logname, const GeoMaterial *material)
Definition: BLM_Wall.cxx:37
BLM_Wall::s_holder_spacing
static constexpr double s_holder_spacing
Definition: BLM_Wall.h:40
BLM_Wall::BuildScrew
GeoPhysVol * BuildScrew(double length, const GeoMaterial *material)
Definition: BLM_Wall.cxx:46
Monitored::Y
@ Y
Definition: HistogramFillerUtils.h:24
BLM_Wall::BuildLayerIV
GeoPhysVol * BuildLayerIV(double thick, const GeoMaterial *material)
Definition: BLM_Wall.cxx:248
BLM_Wall::BuildLayerI
GeoPhysVol * BuildLayerI(double thick, const GeoMaterial *material, bool hole)
Definition: BLM_Wall.cxx:106
BLM_Wall::s_length
static constexpr double s_length
Definition: BLM_Wall.h:34
BLM_Wall::BuildClamp
GeoPhysVol * BuildClamp(const GeoMaterial *material)
Definition: BLM_Wall.cxx:15
BLM_Wall::s_width
static constexpr double s_width
Definition: BLM_Wall.h:33
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
BLM_Wall::s_clamp_thickness
static constexpr double s_clamp_thickness
Definition: BLM_Wall.h:44
Trk::hole
@ hole
Definition: MeasurementType.h:36
BLM_Wall::s_hole_position
static constexpr double s_hole_position
Definition: BLM_Wall.h:37
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
MakeSliceSet.logname
logname
Definition: MakeSliceSet.py:34
BLM_Wall::BuildHolder
GeoPhysVol * BuildHolder(const GeoMaterial *material)
Definition: BLM_Wall.cxx:60