15 #include "CLHEP/Units/GlobalPhysicalConstants.h"
16 #include "CLHEP/Units/GlobalSystemOfUnits.h"
147 genMat = sArgs[
"GeneralMaterial"];
151 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Parent " << parentName <<
" NameSpace " << idNameSpace
152 <<
" General Material " << genMat;
153 ringNo = (int)nArgs[
"RingNo"];
154 moduleThick = nArgs[
"ModuleThick"];
155 detTilt = nArgs[
"DetTilt"];
156 fullHeight = nArgs[
"FullHeight"];
157 dlTop = nArgs[
"DlTop"];
158 dlBottom = nArgs[
"DlBottom"];
159 dlHybrid = nArgs[
"DlHybrid"];
160 rPos = nArgs[
"RPos"];
161 standardRot = sArgs[
"StandardRotation"];
163 isRing6 = (ringNo == 6);
165 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: ModuleThick " << moduleThick <<
" Detector Tilt "
166 << detTilt / CLHEP::deg <<
" Height " << fullHeight <<
" dl(Top) " << dlTop <<
" dl(Bottom) "
167 << dlBottom <<
" dl(Hybrid) " << dlHybrid <<
" rPos " << rPos <<
" standrad rotation "
170 frameWidth = nArgs[
"FrameWidth"];
171 frameThick = nArgs[
"FrameThick"];
172 frameOver = nArgs[
"FrameOver"];
173 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Frame Width " << frameWidth <<
" Thickness " << frameThick
174 <<
" Overlap " << frameOver;
176 topFrameMat = sArgs[
"TopFrameMaterial"];
177 topFrameHeight = nArgs[
"TopFrameHeight"];
178 topFrameTopWidth = nArgs[
"TopFrameTopWidth"];
179 topFrameBotWidth = nArgs[
"TopFrameBotWidth"];
180 topFrameThick = nArgs[
"TopFrameThick"];
181 topFrameZ = nArgs[
"TopFrameZ"];
182 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Top Frame Material " << topFrameMat <<
" Height " << topFrameHeight
183 <<
" Top Width " << topFrameTopWidth <<
" Bottom Width " << topFrameTopWidth <<
" Thickness "
184 << topFrameThick <<
" positioned at" << topFrameZ;
185 double resizeH = 0.96;
186 sideFrameMat = sArgs[
"SideFrameMaterial"];
187 sideFrameThick = nArgs[
"SideFrameThick"];
188 sideFrameLWidth = nArgs[
"SideFrameLWidth"];
189 sideFrameLHeight = resizeH * nArgs[
"SideFrameLHeight"];
190 sideFrameLtheta = nArgs[
"SideFrameLtheta"];
191 sideFrameRWidth = nArgs[
"SideFrameRWidth"];
192 sideFrameRHeight = resizeH * nArgs[
"SideFrameRHeight"];
193 sideFrameRtheta = nArgs[
"SideFrameRtheta"];
194 siFrSuppBoxWidth = vArgs[
"SiFrSuppBoxWidth"];
195 siFrSuppBoxHeight = vArgs[
"SiFrSuppBoxHeight"];
196 siFrSuppBoxYPos = vArgs[
"SiFrSuppBoxYPos"];
197 siFrSuppBoxThick = nArgs[
"SiFrSuppBoxThick"];
198 siFrSuppBoxMat = sArgs[
"SiFrSuppBoxMaterial"];
199 sideFrameZ = nArgs[
"SideFrameZ"];
200 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug : Side Frame Material " << sideFrameMat <<
" Thickness "
201 << sideFrameThick <<
" left Leg's Width: " << sideFrameLWidth
202 <<
" left Leg's Height: " << sideFrameLHeight <<
" left Leg's tilt(theta): " << sideFrameLtheta
203 <<
" right Leg's Width: " << sideFrameRWidth <<
" right Leg's Height: " << sideFrameRHeight
204 <<
" right Leg's tilt(theta): " << sideFrameRtheta
205 <<
"Supplies Box's Material: " << siFrSuppBoxMat <<
" positioned at" << sideFrameZ;
206 for (
int i = 0;
i < (int)(siFrSuppBoxWidth.size());
i++) {
207 LogDebug(
"TECGeom") <<
" Supplies Box" <<
i <<
"'s Width: " << siFrSuppBoxWidth[
i] <<
" Supplies Box" <<
i
208 <<
"'s Height: " << siFrSuppBoxHeight[
i] <<
" Supplies Box" <<
i
209 <<
"'s y Position: " << siFrSuppBoxYPos[
i];
211 waferMat = sArgs[
"WaferMaterial"];
212 sideWidthTop = nArgs[
"SideWidthTop"];
213 sideWidthBottom = nArgs[
"SideWidthBottom"];
214 waferRot = sArgs[
"WaferRotation"];
215 waferPosition = nArgs[
"WaferPosition"];
216 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Wafer Material " << waferMat <<
" Side Width Top" << sideWidthTop
217 <<
" Side Width Bottom" << sideWidthBottom <<
" and positioned at " << waferPosition
218 <<
" positioned with rotation"
219 <<
" matrix:" << waferRot;
221 activeMat = sArgs[
"ActiveMaterial"];
222 activeHeight = nArgs[
"ActiveHeight"];
224 activeRot = sArgs[
"ActiveRotation"];
225 activeZ = nArgs[
"ActiveZ"];
226 backplaneThick = nArgs[
"BackPlaneThick"];
227 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Active Material " << activeMat <<
" Height " << activeHeight
228 <<
" rotated by " << activeRot <<
" translated by (0,0," << -0.5 * backplaneThick <<
")"
229 <<
" Thickness/Z" <<
waferThick - backplaneThick <<
"/" << activeZ;
231 hybridMat = sArgs[
"HybridMaterial"];
232 hybridHeight = nArgs[
"HybridHeight"];
233 hybridWidth = nArgs[
"HybridWidth"];
234 hybridThick = nArgs[
"HybridThick"];
235 hybridZ = nArgs[
"HybridZ"];
236 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Hybrid Material " << hybridMat <<
" Height " << hybridHeight
237 <<
" Width " << hybridWidth <<
" Thickness " << hybridThick <<
" Z" << hybridZ;
239 pitchMat = sArgs[
"PitchMaterial"];
240 pitchHeight = nArgs[
"PitchHeight"];
241 pitchThick = nArgs[
"PitchThick"];
242 pitchWidth = nArgs[
"PitchWidth"];
243 pitchZ = nArgs[
"PitchZ"];
244 pitchRot = sArgs[
"PitchRotation"];
245 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Pitch Adapter Material " << pitchMat <<
" Height " << pitchHeight
246 <<
" Thickness " << pitchThick <<
" position with "
247 <<
" rotation " << pitchRot <<
" at Z" << pitchZ;
249 bridgeMat = sArgs[
"BridgeMaterial"];
250 bridgeWidth = nArgs[
"BridgeWidth"];
251 bridgeThick = nArgs[
"BridgeThick"];
252 bridgeHeight = nArgs[
"BridgeHeight"];
253 bridgeSep = nArgs[
"BridgeSeparation"];
254 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: Bridge Material " << bridgeMat <<
" Width " << bridgeWidth
255 <<
" Thickness " << bridgeThick <<
" Height " << bridgeHeight <<
" Separation " << bridgeSep;
257 siReenforceWidth = vArgs[
"SiReenforcementWidth"];
258 siReenforceHeight = vArgs[
"SiReenforcementHeight"];
259 siReenforceYPos = vArgs[
"SiReenforcementPosY"];
260 siReenforceThick = nArgs[
"SiReenforcementThick"];
261 siReenforceMat = sArgs[
"SiReenforcementMaterial"];
263 LogDebug(
"TECGeom") <<
"FALTBOOT DDTECModuleAlgo debug : Si-Reenforcement Material " << sideFrameMat <<
" Thickness "
266 for (
int i = 0;
i < (int)(siReenforceWidth.size());
i++) {
267 LogDebug(
"TECGeom") <<
" SiReenforcement" <<
i <<
"'s Width: " << siReenforceWidth[
i] <<
" SiReenforcement" <<
i
268 <<
"'s Height: " << siReenforceHeight[
i] <<
" SiReenforcement" <<
i
269 <<
"'s y Position: " << siReenforceYPos[
i];
274 inactiveDy = nArgs[
"InactiveDy"];
275 inactivePos = nArgs[
"InactivePos"];
276 inactiveMat = sArgs[
"InactiveMaterial"];
279 noOverlapShift = nArgs[
"NoOverlapShift"];
281 isStereo = (int)nArgs[
"isStereo"] == 1;
283 LogDebug(
"TECGeom") <<
"This is a normal module, in ring " << ringNo <<
"!";
285 LogDebug(
"TECGeom") <<
"This is a stereo module, in ring " << ringNo <<
"!";
286 posCorrectionPhi = nArgs[
"PosCorrectionPhi"];
287 topFrame2LHeight = nArgs[
"TopFrame2LHeight"];
288 topFrame2RHeight = nArgs[
"TopFrame2RHeight"];
289 topFrame2Width = nArgs[
"TopFrame2Width"];
290 LogDebug(
"TECGeom") <<
"Phi Position corrected by " << posCorrectionPhi <<
"*rad";
291 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo debug: stereo Top Frame 2nd Part left Heigt " << topFrame2LHeight
292 <<
" right Height " << topFrame2RHeight <<
" Width " << topFrame2Width;
294 sideFrameLWidthLow = nArgs[
"SideFrameLWidthLow"];
295 sideFrameRWidthLow = nArgs[
"SideFrameRWidthLow"];
297 LogDebug(
"TECGeom") <<
" left Leg's lower Width: " << sideFrameLWidthLow
298 <<
" right Leg's lower Width: " << sideFrameRWidthLow;
315 string rotstr =
DDSplit(rotName).first;
317 if (rotstr !=
"NULL") {
318 rotns =
DDSplit(rotName).second;
324 cpv.
position(toPos, mother, copyNr, tran, rot);
325 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test: " << toPos.
name() <<
" positioned in " << mother.
name() <<
" at "
326 << tran <<
" with " <<
rot;
341 x += rPos *
sin(posCorrectionPhi);
343 if (rotName ==
"NULL")
344 rotName = standardRot;
346 doPos(toPos,
parent(), copyNr, x, y, z, rotName, cpv);
350 LogDebug(
"TECGeom") <<
"==>> Constructing DDTECModuleAlgo...";
356 double xpos, ypos, zpos;
369 const double topFrameEndZ = 0.5 * (-waferPosition + fullHeight) + pitchHeight + hybridHeight - topFrameHeight;
371 idName = parentName.
name();
372 LogDebug(
"TECGeom") <<
"==>> " << idName <<
" parent " << parentName <<
" namespace " << idNameSpace;
378 dzdif = fullHeight + topFrameHeight;
380 dzdif += 0.5 * (topFrame2LHeight + topFrame2RHeight);
382 dxbot = 0.5 * dlBottom + frameWidth - frameOver;
383 dxtop = 0.5 * dlHybrid + frameWidth - frameOver;
387 dxtop = 0.5 * dlTop + frameWidth - frameOver;
390 dxdif = dxtop - dxbot;
394 name = idName +
"SideFrameLeft";
398 h1 = 0.5 * sideFrameThick;
399 dz = 0.5 * sideFrameLHeight;
400 bl1 = bl2 = 0.5 * sideFrameLWidth;
401 thet = sideFrameLtheta;
404 bl1 = 0.5 * sideFrameLWidthLow;
405 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
406 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
407 << dz <<
", " << thet <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", "
408 << bl2 <<
", " << bl2 <<
", 0";
411 xpos = -0.5 * topFrameBotWidth + bl2 +
tan(fabs(thet)) *
dz;
413 zpos = topFrameEndZ -
dz;
417 xpos -= 2 *
tan(fabs(thet)) *
dz;
421 xpos = -0.5 * topFrameBotWidth + bl2 *
cos(detTilt) + dz *
sin(fabs(thet) + detTilt) /
cos(fabs(thet));
423 zpos = topFrameEndZ - topFrame2LHeight - 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
424 dz *
cos(detTilt + fabs(thet)) /
cos(fabs(thet)) + bl2 *
sin(detTilt) - 0.1 * CLHEP::mm;
427 doPos(sideFrameLeft, xpos, ypos, zpos, waferRot, cpv);
430 name = idName +
"SideFrameRight";
434 h1 = 0.5 * sideFrameThick;
435 dz = 0.5 * sideFrameRHeight;
436 bl1 = bl2 = 0.5 * sideFrameRWidth;
437 thet = sideFrameRtheta;
439 bl1 = 0.5 * sideFrameRWidthLow;
440 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
441 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
442 << dz <<
", " << thet <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", "
443 << bl2 <<
", " << bl2 <<
", 0";
446 xpos = 0.5 * topFrameBotWidth - bl2 -
tan(fabs(thet)) *
dz;
448 zpos = topFrameEndZ -
dz;
451 xpos += 2 *
tan(fabs(thet)) *
dz;
454 xpos = 0.5 * topFrameBotWidth - bl2 *
cos(detTilt) - dz *
sin(fabs(detTilt - fabs(thet))) /
cos(fabs(thet));
456 zpos = topFrameEndZ - topFrame2RHeight + 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
457 dz *
cos(detTilt - fabs(thet)) /
cos(fabs(thet)) - bl2 *
sin(detTilt) - 0.1 * CLHEP::mm;
460 doPos(sideFrameRight, xpos, ypos, zpos, waferRot, cpv);
463 for (
int i = 0;
i < (int)(siFrSuppBoxWidth.size());
i++) {
468 h1 = 0.5 * siFrSuppBoxThick;
469 dz = 0.5 * siFrSuppBoxHeight[
i];
470 bl1 = bl2 = 0.5 * siFrSuppBoxWidth[
i];
471 thet = sideFrameRtheta;
473 thet = -atan(fabs(sideFrameRWidthLow - sideFrameRWidth) / (2 * sideFrameRHeight) -
tan(fabs(thet)));
476 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
477 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
478 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
482 xpos = 0.5 * topFrameBotWidth - sideFrameRWidth - bl1 - siFrSuppBoxYPos[
i] *
tan(fabs(thet));
484 (0.5 + (siFrSuppBoxThick / sideFrameThick));
485 zpos = topFrameEndZ - siFrSuppBoxYPos[
i];
487 xpos += 2 * fabs(
tan(thet)) * siFrSuppBoxYPos[
i];
491 xpos = 0.5 * topFrameBotWidth - (sideFrameRWidth + bl1) *
cos(detTilt) -
492 sin(fabs(detTilt - fabs(thet))) *
493 (siFrSuppBoxYPos[
i] + dz * (1 /
cos(thet) -
cos(detTilt)) + bl1 *
sin(detTilt));
495 zpos = topFrameEndZ - topFrame2RHeight - 0.5 *
sin(detTilt) * (topFrameBotWidth - topFrame2Width) -
496 siFrSuppBoxYPos[
i] -
sin(detTilt) * sideFrameRWidth;
499 doPos(siFrSuppBox, xpos, ypos, zpos, waferRot, cpv);
502 name = idName +
"Hybrid";
505 dx = 0.5 * hybridWidth;
506 dy = 0.5 * hybridThick;
507 dz = 0.5 * hybridHeight;
509 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matname <<
" of dimensions "
510 << dx <<
", " << dy <<
", " <<
dz;
514 zpos = 0.5 * (-waferPosition + fullHeight + hybridHeight) + pitchHeight;
518 doPos(hybrid, 0, ypos, zpos,
"NULL", cpv);
521 name = idName + tag +
"Wafer";
524 bl1 = 0.5 * dlBottom;
527 dz = 0.5 * fullHeight;
528 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
529 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
530 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
535 zpos = -0.5 * waferPosition;
539 doPos(wafer, 0, ypos, zpos, waferRot, cpv);
542 name = idName + tag +
"Active";
545 bl1 -= sideWidthBottom;
548 h1 = 0.5 * activeHeight;
554 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
555 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
556 << dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
562 -0.5 * backplaneThick,
569 inactivePos -= fullHeight - activeHeight;
570 name = idName + tag +
"Inactive";
573 bl1 = 0.5 * dlBottom - sideWidthBottom +
574 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
575 (activeHeight - inactivePos - inactiveDy);
576 bl2 = 0.5 * dlBottom - sideWidthBottom +
577 ((0.5 * dlTop - sideWidthTop - 0.5 * dlBottom + sideWidthBottom) / activeHeight) *
578 (activeHeight - inactivePos + inactiveDy);
586 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl2, bl1, 0, h1, bl2, bl1, 0);
587 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
588 << dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
591 ypos = inactivePos - 0.5 * activeHeight;
593 inactive, active, 1, ypos, 0, 0,
"NULL", cpv);
596 name = idName +
"PA";
601 dx = 0.5 * pitchWidth;
602 dy = 0.5 * pitchThick;
603 dz = 0.5 * pitchHeight;
605 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matname <<
" of dimensions "
606 << dx <<
", " << dy <<
", " <<
dz;
608 dz = 0.5 * pitchWidth;
609 h1 = 0.5 * pitchThick;
610 bl1 = 0.5 * pitchHeight + 0.5 * dz *
sin(detTilt);
611 bl2 = 0.5 * pitchHeight - 0.5 * dz *
sin(detTilt);
612 double thet = atan((bl1 - bl2) / (2. * dz));
613 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
614 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
615 << dz <<
", " << thet / CLHEP::deg <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
616 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
620 zpos = 0.5 * (-waferPosition + fullHeight + pitchHeight);
624 xpos = 0.5 * fullHeight *
sin(detTilt);
628 doPos(pa, xpos, ypos, zpos, pitchRot, cpv);
630 doPos(pa, xpos, ypos, zpos,
"NULL", cpv);
632 name = idName +
"TopFrame";
636 h1 = 0.5 * topFrameThick;
637 dz = 0.5 * topFrameHeight;
638 bl1 = 0.5 * topFrameBotWidth;
639 bl2 = 0.5 * topFrameTopWidth;
641 bl1 = 0.5 * topFrameTopWidth;
642 bl2 = 0.5 * topFrameBotWidth;
645 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
646 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
647 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
652 name = idName +
"TopFrame2";
654 dz = 0.5 * topFrame2Width;
655 h1 = 0.5 * topFrameThick;
656 bl1 = 0.5 * topFrame2LHeight;
657 bl2 = 0.5 * topFrame2RHeight;
658 double thet = atan((bl1 - bl2) / (2. * dz));
660 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
661 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
662 << dz <<
", " << thet / CLHEP::deg <<
", 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, "
663 << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
668 zpos = 0.5 * (-waferPosition + fullHeight - topFrameHeight) + pitchHeight + hybridHeight;
673 doPos(topFrame, 0, ypos, zpos,
"NULL", cpv);
677 zpos -= 0.5 * (topFrameHeight + 0.5 * (topFrame2LHeight + topFrame2RHeight));
678 doPos(topFrame2, 0, ypos, zpos, pitchRot, cpv);
682 for (
int i = 0;
i < (int)(siReenforceWidth.size());
i++) {
687 h1 = 0.5 * siReenforceThick;
688 dz = 0.5 * siReenforceHeight[
i];
689 bl1 = bl2 = 0.5 * siReenforceWidth[
i];
691 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
692 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
693 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
699 zpos = topFrameEndZ - dz - siReenforceYPos[
i];
704 xpos = (-siReenforceYPos[
i] + 0.5 * fullHeight) *
sin(detTilt);
708 zpos -= topFrame2RHeight +
sin(fabs(detTilt)) * 0.5 * topFrame2Width;
710 doPos(siReenforce, xpos, ypos, zpos, waferRot, cpv);
714 if (bridgeMat !=
"None") {
715 name = idName +
"Bridge";
718 bl2 = 0.5 * bridgeSep + bridgeWidth;
719 bl1 = bl2 - bridgeHeight * dxdif / dzdif;
720 h1 = 0.5 * bridgeThick;
721 dz = 0.5 * bridgeHeight;
722 solid =
DDSolidFactory::trap(
DDName(name, idNameSpace), dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
723 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matname <<
" of dimensions "
724 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
728 name = idName +
"BridgeGap";
731 bl1 = 0.5 * bridgeSep;
733 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matname <<
" of dimensions "
734 << bl1 <<
", " << h1 <<
", " <<
dz;
737 LogDebug(
"TECGeom") <<
"DDTECModuleAlgo test: " << bridgeGap.name() <<
" number 1 positioned in " << bridge.name()
738 <<
" at (0,0,0) with no rotation";
741 LogDebug(
"TECGeom") <<
"<<== End of DDTECModuleAlgo construction ...";
static AlgebraicMatrix initialize()
vector< double > siReenforceYPos
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
double sideFrameLWidthLow
DDMaterial is used to define and access material information.
Sin< T >::type sin(const T &t)
DDName is used to identify DDD entities uniquely.
std::string to_string(const V &value)
static std::string & ns()
Compact representation of the geometrical detector hierarchy.
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
A DDSolid represents the shape of a part.
Represents a uniquely identifyable rotation matrix.
static const std::string & rotName(const T &rot, const cms::DDParsingContext &context)
U second(std::pair< T, U > const &p)
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
int32_t waferThick(const int32_t property)
static DDSolid trap(const DDName &name, double pDz, double pTheta, double pPhi, double pDy1, double pDx1, double pDx2, double pAlp1, double pDy2, double pDx3, double pDx4, double pAlp2)
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
~DDTECModuleAlgo() override
void execute(DDCompactView &cpv) override
double sideFrameRWidthLow
vector< double > siFrSuppBoxWidth
vector< double > siReenforceWidth
vector< double > siReenforceHeight
#define DEFINE_EDM_PLUGIN(factory, type, name)
void doPos(const DDLogicalPart &toPos, const DDLogicalPart &mother, int copyNr, double x, double y, double z, const string &rotName, DDCompactView &cpv)
vector< double > siFrSuppBoxYPos
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
const std::string & name() const
Returns the name.
vector< double > siFrSuppBoxHeight