1 #include "DD4hep/DetFactoryHelper.h"
2 #include <DD4hep/DD4hepUnits.h>
10 using namespace angle_units::operators;
19 int ringNo = args.
value<
int>(
"RingNo");
20 bool isStereo = args.
value<
int>(
"isStereo") == 1;
21 bool isRing6 = (ringNo == 6);
23 args.
value<
double>(
"RPos");
24 double posCorrectionPhi = isStereo ? args.
value<
double>(
"PosCorrectionPhi")
26 string standardRot = args.
value<
string>(
28 string genMat = args.
value<
string>(
"GeneralMaterial");
29 double moduleThick = args.
value<
double>(
"ModuleThick");
30 double detTilt = args.
value<
double>(
"DetTilt");
31 double fullHeight = args.
value<
double>(
"FullHeight");
32 double dlTop = args.
value<
double>(
"DlTop");
33 double dlBottom = args.
value<
double>(
"DlBottom");
34 double dlHybrid = args.
value<
double>(
"DlHybrid");
35 double frameWidth = args.
value<
double>(
"FrameWidth");
36 double frameThick = args.
value<
double>(
"FrameThick");
37 double frameOver = args.
value<
double>(
"FrameOver");
38 string topFrameMat = args.
value<
string>(
"TopFrameMaterial");
39 double topFrameHeight = args.
value<
double>(
"TopFrameHeight");
40 double topFrameThick = args.
value<
double>(
"TopFrameThick");
41 double topFrameTopWidth = args.
value<
double>(
"TopFrameTopWidth");
42 double topFrameBotWidth = args.
value<
double>(
"TopFrameBotWidth");
43 double topFrame2Width = isStereo ? args.
value<
double>(
"TopFrame2Width") : 0e0;
44 double topFrame2LHeight = isStereo ? args.
value<
double>(
"TopFrame2LHeight") : 0e0;
45 double topFrame2RHeight = isStereo ? args.
value<
double>(
"TopFrame2RHeight") : 0e0;
46 double topFrameZ = args.
value<
double>(
"TopFrameZ");
48 double resizeH = 0.96;
49 string sideFrameMat = args.
value<
string>(
"SideFrameMaterial");
50 double sideFrameThick = args.
value<
double>(
"SideFrameThick");
51 double sideFrameLWidth = args.
value<
double>(
"SideFrameLWidth");
52 double sideFrameLWidthLow = isStereo ? args.
value<
double>(
"SideFrameLWidthLow")
54 double sideFrameLHeight = resizeH * args.
value<
double>(
"SideFrameLHeight");
55 double sideFrameLtheta = args.
value<
double>(
"SideFrameLtheta");
56 double sideFrameRWidth = args.
value<
double>(
"SideFrameRWidth");
57 double sideFrameRWidthLow = isStereo ? args.
value<
double>(
"SideFrameRWidthLow")
59 double sideFrameRHeight = resizeH * args.
value<
double>(
"SideFrameRHeight");
60 double sideFrameRtheta = args.
value<
double>(
"SideFrameRtheta");
61 vector<double> siFrSuppBoxWidth = args.
value<vector<double> >(
"SiFrSuppBoxWidth");
62 vector<double> siFrSuppBoxHeight = args.
value<vector<double> >(
"SiFrSuppBoxHeight");
63 vector<double> siFrSuppBoxYPos = args.
value<vector<double> >(
65 double sideFrameZ = args.
value<
double>(
"SideFrameZ");
66 double siFrSuppBoxThick = args.
value<
double>(
"SiFrSuppBoxThick");
67 string siFrSuppBoxMat = args.
value<
string>(
"SiFrSuppBoxMaterial");
68 string waferMat = args.
value<
string>(
"WaferMaterial");
69 double waferPosition = args.
value<
double>(
71 double sideWidthTop = args.
value<
double>(
"SideWidthTop");
72 double sideWidthBottom = args.
value<
double>(
"SideWidthBottom");
73 string waferRot = args.
value<
string>(
"WaferRotation");
74 string activeMat = args.
value<
string>(
"ActiveMaterial");
75 double activeHeight = args.
value<
double>(
"ActiveHeight");
77 string activeRot = args.
value<
string>(
"ActiveRotation");
78 double activeZ = args.
value<
double>(
"ActiveZ");
79 double backplaneThick = args.
value<
double>(
"BackPlaneThick");
80 double inactiveDy = ringNo > 3 ? args.
value<
double>(
"InactiveDy") : 0e0;
81 double inactivePos = ringNo > 3 ? args.
value<
double>(
"InactivePos") : 0e0;
82 string inactiveMat = ringNo > 3 ? args.
value<
string>(
"InactiveMaterial") :
string();
83 string hybridMat = args.
value<
string>(
"HybridMaterial");
84 double hybridHeight = args.
value<
double>(
"HybridHeight");
85 double hybridWidth = args.
value<
double>(
"HybridWidth");
86 double hybridThick = args.
value<
double>(
"HybridThick");
87 double hybridZ = args.
value<
double>(
"HybridZ");
88 string pitchMat = args.
value<
string>(
"PitchMaterial");
89 double pitchWidth = args.
value<
double>(
"PitchWidth");
90 double pitchHeight = args.
value<
double>(
"PitchHeight");
91 double pitchThick = args.
value<
double>(
"PitchThick");
92 double pitchZ = args.
value<
double>(
"PitchZ");
93 string pitchRot = args.
value<
string>(
"PitchRotation");
94 string bridgeMat = args.
value<
string>(
"BridgeMaterial");
95 double bridgeWidth = args.
value<
double>(
"BridgeWidth");
96 double bridgeThick = args.
value<
double>(
"BridgeThick");
97 double bridgeHeight = args.
value<
double>(
"BridgeHeight");
98 double bridgeSep = args.
value<
double>(
"BridgeSeparation");
99 vector<double> siReenforceHeight = args.
value<vector<double> >(
"SiReenforcementHeight");
100 vector<double> siReenforceWidth = args.
value<vector<double> >(
"SiReenforcementWidth");
101 vector<double> siReenforceYPos = args.
value<vector<double> >(
"SiReenforcementPosY");
102 double siReenforceThick = args.
value<
double>(
"SiReenforcementThick");
103 string siReenforceMat = args.
value<
string>(
"SiReenforcementMaterial");
106 <<
" Height " << fullHeight <<
" dl(Top) " << dlTop <<
" dl(Bottom) " << dlBottom
107 <<
" dl(Hybrid) " << dlHybrid <<
" rPos " << rPos <<
" standrad rotation " << standardRot;
108 edm::LogVerbatim(
"TECGeom") <<
"debug: Frame Width " << frameWidth <<
" Thickness " << frameThick <<
" Overlap "
110 edm::LogVerbatim(
"TECGeom") <<
"debug: Top Frame Material " << topFrameMat <<
" Height " << topFrameHeight
111 <<
" Top Width " << topFrameTopWidth <<
" Bottom Width " << topFrameTopWidth
112 <<
" Thickness " << topFrameThick <<
" positioned at" << topFrameZ;
113 edm::LogVerbatim(
"TECGeom") <<
"debug : Side Frame Material " << sideFrameMat <<
" Thickness " << sideFrameThick
114 <<
" left Leg's Width: " << sideFrameLWidth <<
" left Leg's Height: " << sideFrameLHeight
115 <<
" left Leg's tilt(theta): " << sideFrameLtheta
116 <<
" right Leg's Width: " << sideFrameRWidth
117 <<
" right Leg's Height: " << sideFrameRHeight
118 <<
" right Leg's tilt(theta): " << sideFrameRtheta
119 <<
"Supplies Box's Material: " << siFrSuppBoxMat <<
" positioned at" << sideFrameZ;
120 for (
int i = 0;
i < (int)(siFrSuppBoxWidth.size());
i++)
121 edm::LogVerbatim(
"TECGeom") <<
" Supplies Box" <<
i <<
"'s Width: " << siFrSuppBoxWidth[
i] <<
" Supplies Box" <<
i
122 <<
"'s Height: " << siFrSuppBoxHeight[
i] <<
" Supplies Box" <<
i
123 <<
"'s y Position: " << siFrSuppBoxYPos[
i];
124 edm::LogVerbatim(
"TECGeom") <<
"debug: Wafer Material " << waferMat <<
" Side Width Top" << sideWidthTop
125 <<
" Side Width Bottom" << sideWidthBottom <<
" and positioned at " << waferPosition
126 <<
" positioned with rotation"
127 <<
" matrix:" << waferRot;
128 edm::LogVerbatim(
"TECGeom") <<
"debug: Active Material " << activeMat <<
" Height " << activeHeight <<
" rotated by "
129 << activeRot <<
" translated by (0,0," << -0.5 * backplaneThick <<
")"
130 <<
" Thickness/Z" << waferThick - backplaneThick <<
"/" << activeZ;
131 edm::LogVerbatim(
"TECGeom") <<
"debug: Hybrid Material " << hybridMat <<
" Height " << hybridHeight <<
" Width "
132 << hybridWidth <<
" Thickness " << hybridThick <<
" Z" << hybridZ;
133 edm::LogVerbatim(
"TECGeom") <<
"debug: Pitch Adapter Material " << pitchMat <<
" Height " << pitchHeight
134 <<
" Thickness " << pitchThick <<
" position with "
135 <<
" rotation " << pitchRot <<
" at Z" << pitchZ;
136 edm::LogVerbatim(
"TECGeom") <<
"debug: Bridge Material " << bridgeMat <<
" Width " << bridgeWidth <<
" Thickness "
137 << bridgeThick <<
" Height " << bridgeHeight <<
" Separation " << bridgeSep;
138 edm::LogVerbatim(
"TECGeom") <<
"FALTBOOT DDTECModuleAlgo debug : Si-Reenforcement Material " << sideFrameMat
139 <<
" Thickness " << siReenforceThick;
140 for (
int i = 0;
i < (int)(siReenforceWidth.size());
i++)
141 edm::LogVerbatim(
"TECGeom") <<
" SiReenforcement" <<
i <<
"'s Width: " << siReenforceWidth[
i] <<
" SiReenforcement"
142 <<
i <<
"'s Height: " << siReenforceHeight[
i] <<
" SiReenforcement" <<
i
143 <<
"'s y Position: " << siReenforceYPos[
i];
146 edm::LogVerbatim(
"TECGeom") <<
"This is a normal module, in ring " << ringNo <<
"!";
148 edm::LogVerbatim(
"TECGeom") <<
"This is a stereo module, in ring " << ringNo <<
"!";
149 edm::LogVerbatim(
"TECGeom") <<
"Phi Position corrected by " << posCorrectionPhi <<
"*rad";
150 edm::LogVerbatim(
"TECGeom") <<
"debug: stereo Top Frame 2nd Part left Heigt " << topFrame2LHeight
151 <<
" right Height " << topFrame2RHeight <<
" Width " << topFrame2Width;
152 edm::LogVerbatim(
"TECGeom") <<
" left Leg's lower Width: " << sideFrameLWidthLow
153 <<
" right Leg's lower Width: " << sideFrameRWidthLow;
167 const double topFrameEndZ = 0.5 * (-waferPosition + fullHeight) + pitchHeight + hybridHeight - topFrameHeight;
169 edm::LogVerbatim(
"TECGeom") <<
"idName: " << idName <<
" parent " << mother.name() <<
" namespace " << ns.
name();
173 Material matter = ns.
material(genMat);
174 double dzdif = fullHeight + topFrameHeight;
176 dzdif += 0.5 * (topFrame2LHeight + topFrame2RHeight);
178 double dxbot = 0.5 * dlBottom + frameWidth - frameOver;
179 double dxtop = 0.5 * dlHybrid + frameWidth - frameOver;
183 dxtop = 0.5 * dlTop + frameWidth - frameOver;
186 double dxdif = dxtop - dxbot;
190 name = idName +
"SideFrameLeft";
191 double h1 = 0.5 * sideFrameThick;
192 double dz = 0.5 * sideFrameLHeight;
193 double bl1 = 0.5 * sideFrameLWidth;
195 double thet = sideFrameLtheta;
198 bl1 = 0.5 * sideFrameLWidthLow;
199 solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
201 edm::LogVerbatim(
"TECGeom") <<
"Solid: " << name <<
" " << solid.name() <<
" Trap made of " << sideFrameMat
202 <<
" of dimensions " << dz <<
", " << thet <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1
203 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
207 double xpos = -0.5 * topFrameBotWidth + bl2 +
tan(fabs(thet)) *
dz;
208 double ypos = sideFrameZ;
209 double zpos = topFrameEndZ -
dz;
213 xpos -= 2 *
tan(fabs(thet)) *
dz;
217 xpos = -0.5 * topFrameBotWidth + bl2 *
cos(detTilt) + dz *
sin(fabs(thet) + detTilt) /
cos(fabs(thet));
219 zpos = topFrameEndZ - topFrame2LHeight - 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
220 dz *
cos(detTilt + fabs(thet)) /
cos(fabs(thet)) + bl2 *
sin(detTilt) - 0.1 * dd4hep::mm;
226 dd4hep::Transform3D(ns.
rotation(waferRot),
227 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
230 name = idName +
"SideFrameRight";
231 h1 = 0.5 * sideFrameThick;
232 dz = 0.5 * sideFrameRHeight;
233 bl1 = bl2 = 0.5 * sideFrameRWidth;
234 thet = sideFrameRtheta;
236 bl1 = 0.5 * sideFrameRWidthLow;
237 solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
239 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << sideFrameMat
240 <<
" of dimensions " << dz <<
", " << thet <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1
241 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
245 xpos = 0.5 * topFrameBotWidth - bl2 -
tan(fabs(thet)) *
dz;
247 zpos = topFrameEndZ -
dz;
250 xpos += 2 *
tan(fabs(thet)) *
dz;
253 xpos = 0.5 * topFrameBotWidth - bl2 *
cos(detTilt) - dz *
sin(fabs(detTilt - fabs(thet))) /
cos(fabs(thet));
255 zpos = topFrameEndZ - topFrame2RHeight + 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
256 dz *
cos(detTilt - fabs(thet)) /
cos(fabs(thet)) - bl2 *
sin(detTilt) - 0.1 * dd4hep::mm;
262 dd4hep::Transform3D(ns.
rotation(waferRot),
263 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
265 matter = ns.
material(siFrSuppBoxMat);
266 for (
int i = 0;
i < (int)(siFrSuppBoxWidth.size());
i++) {
269 h1 = 0.5 * siFrSuppBoxThick;
270 dz = 0.5 * siFrSuppBoxHeight[
i];
271 bl1 = bl2 = 0.5 * siFrSuppBoxWidth[
i];
272 thet = sideFrameRtheta;
274 thet = -atan(fabs(sideFrameRWidthLow - sideFrameRWidth) / (2 * sideFrameRHeight) -
tan(fabs(thet)));
277 solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
279 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << siFrSuppBoxMat
280 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
281 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
285 xpos = 0.5 * topFrameBotWidth - sideFrameRWidth - bl1 - siFrSuppBoxYPos[
i] *
tan(fabs(thet));
287 (0.5 + (siFrSuppBoxThick / sideFrameThick));
288 zpos = topFrameEndZ - siFrSuppBoxYPos[
i];
290 xpos += 2 * fabs(
tan(thet)) * siFrSuppBoxYPos[
i];
294 xpos = 0.5 * topFrameBotWidth - (sideFrameRWidth + bl1) *
cos(detTilt) -
295 sin(fabs(detTilt - fabs(thet))) *
296 (siFrSuppBoxYPos[
i] + dz * (1 /
cos(thet) -
cos(detTilt)) + bl1 *
sin(detTilt));
298 zpos = topFrameEndZ - topFrame2RHeight - 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
299 siFrSuppBoxYPos[
i] -
sin(detTilt) * sideFrameRWidth;
302 mother.placeVolume(siFrSuppBox,
306 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
310 name = idName +
"Hybrid";
311 double dx = 0.5 * hybridWidth;
312 double dy = 0.5 * hybridThick;
313 dz = 0.5 * hybridHeight;
314 solid = Box(dx, dy, dz);
316 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Box made of " << hybridMat
317 <<
" of dimensions " << dx <<
", " << dy <<
", " <<
dz;
322 zpos = 0.5 * (-waferPosition + fullHeight + hybridHeight) + pitchHeight;
329 dd4hep::Transform3D(ns.
rotation(standardRot),
333 name = idName + tag +
"Wafer";
334 bl1 = 0.5 * dlBottom;
337 dz = 0.5 * fullHeight;
338 solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
340 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << waferMat
341 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
342 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
346 zpos = -0.5 * waferPosition;
353 dd4hep::Transform3D(ns.
rotation(waferRot),
357 name = idName + tag +
"Active";
358 bl1 -= sideWidthBottom;
360 dz = 0.5 * (waferThick - backplaneThick);
361 h1 = 0.5 * activeHeight;
367 solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
369 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << activeMat
370 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, "
371 << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0";
380 inactivePos -= fullHeight - activeHeight;
381 name = idName + tag +
"Inactive";
382 bl1 = 0.5 * dlBottom - sideWidthBottom +
383 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
384 (activeHeight - inactivePos - inactiveDy);
385 bl2 = 0.5 * dlBottom - sideWidthBottom +
386 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
387 (activeHeight - inactivePos + inactiveDy);
388 dz = 0.5 * (waferThick - backplaneThick);
395 solid = Trap(dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
397 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << inactiveMat
398 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, "
399 << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0";
402 ypos = inactivePos - 0.5 * activeHeight;
407 name = idName +
"PA";
410 dx = 0.5 * pitchWidth;
411 dy = 0.5 * pitchThick;
412 dz = 0.5 * pitchHeight;
413 solid = Box(dx, dy, dz);
415 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Box made of " << pitchMat
416 <<
" of dimensions " << dx <<
", " << dy <<
", " <<
dz;
418 dz = 0.5 * pitchWidth;
419 h1 = 0.5 * pitchThick;
420 bl1 = 0.5 * pitchHeight + 0.5 * dz *
sin(detTilt);
421 bl2 = 0.5 * pitchHeight - 0.5 * dz *
sin(detTilt);
422 thet = atan((bl1 - bl2) / (2. * dz));
423 solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
425 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << pitchMat
426 <<
" of dimensions " << dz <<
", " <<
convertRadToDeg(thet) <<
", 0, " << h1 <<
", "
427 << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
431 zpos = 0.5 * (-waferPosition + fullHeight + pitchHeight);
435 xpos = 0.5 * fullHeight *
sin(detTilt);
439 mother.placeVolume(pa,
441 dd4hep::Transform3D(ns.
rotation(pitchRot),
444 mother.placeVolume(pa, 1, dd4hep::Transform3D(ns.
rotation(standardRot),
dd4hep::Position(zpos + rPos, xpos, ypos)));
447 name = idName +
"TopFrame";
448 h1 = 0.5 * topFrameThick;
449 dz = 0.5 * topFrameHeight;
450 bl1 = 0.5 * topFrameBotWidth;
451 bl2 = 0.5 * topFrameTopWidth;
453 bl1 = 0.5 * topFrameTopWidth;
454 bl2 = 0.5 * topFrameBotWidth;
457 solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
459 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << topFrameMat
460 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
461 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
466 name = idName +
"TopFrame2";
468 dz = 0.5 * topFrame2Width;
469 h1 = 0.5 * topFrameThick;
470 bl1 = 0.5 * topFrame2LHeight;
471 bl2 = 0.5 * topFrame2RHeight;
472 thet = atan((bl1 - bl2) / (2. * dz));
474 constexpr
double minDimension = 5.e-8;
475 if (bl2 < minDimension) {
479 solid = Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
481 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << topFrameMat
482 <<
" of dimensions " << dz <<
", " <<
convertRadToDeg(thet) <<
", 0, " << h1 <<
", "
483 << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
488 zpos = 0.5 * (-waferPosition + fullHeight - topFrameHeight) + pitchHeight + hybridHeight;
496 dd4hep::Transform3D(ns.
rotation(standardRot),
501 zpos -= 0.5 * (topFrameHeight + 0.5 * (topFrame2LHeight + topFrame2RHeight));
509 matter = ns.
material(siReenforceMat);
510 for (
int i = 0;
i < (int)(siReenforceWidth.size());
i++) {
512 h1 = 0.5 * siReenforceThick;
513 dz = 0.5 * siReenforceHeight[
i];
514 bl1 = bl2 = 0.5 * siReenforceWidth[
i];
515 solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
517 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << matter.name()
518 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
519 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
525 zpos = topFrameEndZ - dz - siReenforceYPos[
i];
530 xpos = (-siReenforceYPos[
i] + 0.5 * fullHeight) *
sin(detTilt);
534 zpos -= topFrame2RHeight +
sin(fabs(detTilt)) * 0.5 * topFrame2Width;
537 mother.placeVolume(siReenforce,
541 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
545 if (bridgeMat !=
"None") {
546 name = idName +
"Bridge";
547 bl2 = 0.5 * bridgeSep + bridgeWidth;
548 bl1 = bl2 - bridgeHeight * dxdif / dzdif;
549 h1 = 0.5 * bridgeThick;
550 dz = 0.5 * bridgeHeight;
551 solid = Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
553 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Trap made of " << bridgeMat
554 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
555 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
559 name = idName +
"BridgeGap";
560 bl1 = 0.5 * bridgeSep;
561 solid = Box(bl1, h1, dz);
563 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" << name <<
" " << solid.name() <<
" Box made of " << genMat
564 <<
" of dimensions " << bl1 <<
", " << h1 <<
", " <<
dz;
567 bridge.placeVolume(bridgeGap, 1);
568 edm::LogVerbatim(
"TECGeom") <<
"Solid: " << bridgeGap.name() <<
" number 1 positioned in " << bridge.name()
569 <<
" at (0,0,0) with no rotation";
571 edm::LogVerbatim(
"TECGeom") <<
"<<== End of DDTECModuleAlgo construction ...";
dd4hep::Solid addSolidNS(const std::string &name, dd4hep::Solid solid) const
Log< level::Info, true > LogVerbatim
dd4hep::Volume volume(const std::string &name, bool exc=true) const
constexpr NumType convertRadToDeg(NumType radians)
dd4hep::Volume addVolumeNS(dd4hep::Volume vol) const
Sin< T >::type sin(const T &t)
T value(const std::string &name) const
std::string to_string(const V &value)
std::string_view name() const
#define DECLARE_DDCMS_DETELEMENT(name, func)
std::string noNamespace(const std::string &) const
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
dd4hep::Material material(const std::string &name) const
int32_t waferThick(const int32_t property)
std::string prepend(const std::string &) const
dd4hep::Solid addSolid(const std::string &name, dd4hep::Solid solid) const
const dd4hep::Rotation3D & rotation(const std::string &name) const
std::string parentName() const
Access value of rParent child node.