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;
168 string idName = ns.noNamespace(mother.name());
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;
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);
200 ns.addSolidNS(
name, solid);
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";
204 Volume sideFrameLeft(
name, solid, ns.material(sideFrameMat));
205 ns.addVolumeNS(sideFrameLeft);
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)));
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);
238 ns.addSolidNS(
name, solid);
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";
242 Volume sideFrameRight(
name, solid, ns.material(sideFrameMat));
243 ns.addVolumeNS(sideFrameRight);
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);
278 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << siFrSuppBoxMat
279 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
280 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
282 ns.addVolumeNS(siFrSuppBox);
284 xpos = 0.5 * topFrameBotWidth - sideFrameRWidth - bl1 - siFrSuppBoxYPos[
i] *
tan(fabs(thet));
286 (0.5 + (siFrSuppBoxThick / sideFrameThick));
287 zpos = topFrameEndZ - siFrSuppBoxYPos[
i];
289 xpos += 2 * fabs(
tan(thet)) * siFrSuppBoxYPos[
i];
293 xpos = 0.5 * topFrameBotWidth - (sideFrameRWidth + bl1) *
cos(detTilt) -
294 sin(fabs(detTilt - fabs(thet))) *
295 (siFrSuppBoxYPos[
i] +
dz * (1 /
cos(thet) -
cos(detTilt)) + bl1 *
sin(detTilt));
297 zpos = topFrameEndZ - topFrame2RHeight - 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
298 siFrSuppBoxYPos[
i] -
sin(detTilt) * sideFrameRWidth;
301 mother.placeVolume(siFrSuppBox,
304 ns.rotation(waferRot),
305 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
310 double dx = 0.5 * hybridWidth;
311 double dy = 0.5 * hybridThick;
312 dz = 0.5 * hybridHeight;
314 ns.addSolidNS(
name, solid);
315 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Box made of " << hybridMat
316 <<
" of dimensions " <<
dx <<
", " <<
dy <<
", " <<
dz;
317 Volume hybrid(
name, solid, ns.material(hybridMat));
318 ns.addVolumeNS(hybrid);
321 zpos = 0.5 * (-waferPosition + fullHeight + hybridHeight) + pitchHeight;
328 dd4hep::Transform3D(ns.rotation(standardRot),
333 bl1 = 0.5 * dlBottom;
336 dz = 0.5 * fullHeight;
337 solid = Trap(
dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
338 ns.addSolidNS(
name, solid);
339 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << waferMat
340 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
341 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
342 Volume wafer(
name, solid, ns.material(waferMat));
345 zpos = -0.5 * waferPosition;
352 dd4hep::Transform3D(ns.rotation(waferRot),
357 bl1 -= sideWidthBottom;
360 h1 = 0.5 * activeHeight;
366 solid = Trap(
dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
367 ns.addSolidNS(
name, solid);
368 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << activeMat
369 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, "
370 << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0";
371 Volume active(
name, solid, ns.material(activeMat));
372 ns.addVolumeNS(active);
375 active, 1, dd4hep::Transform3D(ns.rotation(activeRot),
dd4hep::Position(0., -0.5 * backplaneThick, 0.)));
379 inactivePos -= fullHeight - activeHeight;
381 bl1 = 0.5 * dlBottom - sideWidthBottom +
382 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
383 (activeHeight - inactivePos - inactiveDy);
384 bl2 = 0.5 * dlBottom - sideWidthBottom +
385 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
386 (activeHeight - inactivePos + inactiveDy);
394 solid = Trap(
dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
395 ns.addSolidNS(
name, solid);
396 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << inactiveMat
397 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, "
398 << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0";
399 Volume inactive(
name, solid, ns.material(inactiveMat));
400 ns.addVolumeNS(inactive);
401 ypos = inactivePos - 0.5 * activeHeight;
408 dx = 0.5 * pitchWidth;
409 dy = 0.5 * pitchThick;
410 dz = 0.5 * pitchHeight;
412 ns.addSolidNS(
name, solid);
413 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Box made of " << pitchMat
414 <<
" of dimensions " <<
dx <<
", " <<
dy <<
", " <<
dz;
416 dz = 0.5 * pitchWidth;
417 h1 = 0.5 * pitchThick;
418 bl1 = 0.5 * pitchHeight + 0.5 *
dz *
sin(detTilt);
419 bl2 = 0.5 * pitchHeight - 0.5 *
dz *
sin(detTilt);
420 thet = atan((bl1 - bl2) / (2. *
dz));
421 solid = Trap(
dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
422 ns.addSolidNS(
name, solid);
423 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << pitchMat
424 <<
" of dimensions " <<
dz <<
", " <<
convertRadToDeg(thet) <<
", 0, " << h1 <<
", "
425 << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
429 zpos = 0.5 * (-waferPosition + fullHeight + pitchHeight);
433 xpos = 0.5 * fullHeight *
sin(detTilt);
435 Volume pa(
name, solid, ns.material(pitchMat));
437 mother.placeVolume(pa,
439 dd4hep::Transform3D(ns.rotation(pitchRot),
442 mother.placeVolume(pa, 1, dd4hep::Transform3D(ns.rotation(standardRot),
dd4hep::Position(zpos + rPos, xpos, ypos)));
446 h1 = 0.5 * topFrameThick;
447 dz = 0.5 * topFrameHeight;
448 bl1 = 0.5 * topFrameBotWidth;
449 bl2 = 0.5 * topFrameTopWidth;
451 bl1 = 0.5 * topFrameTopWidth;
452 bl2 = 0.5 * topFrameBotWidth;
455 solid = Trap(
dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
456 ns.addSolid(
name, solid);
457 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << topFrameMat
458 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
459 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
460 Volume topFrame(
name, solid, ns.material(topFrameMat));
461 ns.addVolumeNS(topFrame);
466 dz = 0.5 * topFrame2Width;
467 h1 = 0.5 * topFrameThick;
468 bl1 = 0.5 * topFrame2LHeight;
469 bl2 = 0.5 * topFrame2RHeight;
470 thet = atan((bl1 - bl2) / (2. *
dz));
472 solid = Trap(
dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
473 ns.addSolid(
name, solid);
474 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << topFrameMat
475 <<
" of dimensions " <<
dz <<
", " <<
convertRadToDeg(thet) <<
", 0, " << h1 <<
", "
476 << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
481 zpos = 0.5 * (-waferPosition + fullHeight - topFrameHeight) + pitchHeight + hybridHeight;
489 dd4hep::Transform3D(ns.rotation(standardRot),
493 Volume topFrame2(
name, solid, ns.material(topFrameMat));
494 zpos -= 0.5 * (topFrameHeight + 0.5 * (topFrame2LHeight + topFrame2RHeight));
498 dd4hep::Transform3D(ns.rotation(pitchRot),
dd4hep::Position(zpos + rPos, rPos *
sin(posCorrectionPhi), ypos)));
502 matter = ns.material(siReenforceMat);
503 for (
int i = 0;
i < (
int)(siReenforceWidth.size());
i++) {
505 h1 = 0.5 * siReenforceThick;
506 dz = 0.5 * siReenforceHeight[
i];
507 bl1 = bl2 = 0.5 * siReenforceWidth[
i];
508 solid = Trap(
dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
509 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << matter.name()
510 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
511 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
513 ns.addVolumeNS(siReenforce);
517 zpos = topFrameEndZ -
dz - siReenforceYPos[
i];
522 xpos = (-siReenforceYPos[
i] + 0.5 * fullHeight) *
sin(detTilt);
526 zpos -= topFrame2RHeight +
sin(fabs(detTilt)) * 0.5 * topFrame2Width;
529 mother.placeVolume(siReenforce,
532 ns.rotation(waferRot),
533 dd4hep::Position(zpos + rPos, isStereo ? xpos + rPos *
sin(posCorrectionPhi) : xpos, ypos)));
537 if (bridgeMat !=
"None") {
539 bl2 = 0.5 * bridgeSep + bridgeWidth;
540 bl1 = bl2 - bridgeHeight * dxdif / dzdif;
541 h1 = 0.5 * bridgeThick;
542 dz = 0.5 * bridgeHeight;
543 solid = Trap(
dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
544 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Trap made of " << bridgeMat
545 <<
" of dimensions " <<
dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
546 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
547 Volume bridge(
name, solid, ns.material(bridgeMat));
548 ns.addVolumeNS(bridge);
551 bl1 = 0.5 * bridgeSep;
552 solid = Box(bl1, h1,
dz);
553 edm::LogVerbatim(
"TECGeom") <<
"Solid:\t" <<
name <<
" " << solid.name() <<
" Box made of " << genMat
554 <<
" of dimensions " << bl1 <<
", " << h1 <<
", " <<
dz;
555 Volume bridgeGap(
name, solid, ns.material(genMat));
556 ns.addVolumeNS(bridgeGap);
557 bridge.placeVolume(bridgeGap, 1);
558 edm::LogVerbatim(
"TECGeom") <<
"Solid: " << bridgeGap.name() <<
" number 1 positioned in " << bridge.name()
559 <<
" at (0,0,0) with no rotation";
561 edm::LogVerbatim(
"TECGeom") <<
"<<== End of DDTECModuleAlgo construction ...";