219 LogDebug(
"TIDGeom") <<
"==>> Constructing DDTIDModuleAlgo...";
242 double dxbot = 0.5 *
dlBottom + sidfr;
243 double dxtop = 0.5 *
dlTop + sidfr;
244 double dxtopenv, dxbotenv;
256 double bl1 = dxbotenv;
257 double bl2 = dxtopenv;
262 DDSolid solid =
DDSolidFactory::trap(parentName, dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
265 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " <<
genMat <<
" of dimensions "
266 << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", "
276 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matter.
ddname()
277 <<
" of dimensions " << dx <<
", " << dy <<
", " <<
dz;
286 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matter.ddname()
287 <<
" of dimensions " << dx <<
", " << dy <<
", " <<
dz;
296 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matter.ddname()
297 <<
" of dimensions " << dx <<
", " << dy <<
", " <<
dz;
316 dz = 0.5 * sideFrameHeight;
329 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
330 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bbl1 <<
", " << bbl1 <<
", 0, "
331 << h1 <<
", " << bbl2 <<
", " << bbl2 <<
", 0";
334 string rotstr, rotns;
363 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
364 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bbl1 <<
", " << bbl1 <<
", 0, "
365 << h1 <<
", " << bbl2 <<
", " << bbl2 <<
", 0";
369 if (rotstr !=
"NULL") {
376 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test: " << holeFrame.name() <<
" number 1 positioned in "
377 << sideFrame.name() <<
" at (0,0," << zpos <<
") with no rotation";
381 double kaptonExtraHeight = 0;
387 kaptonExtraHeight = 0.5 * fabs(kaptonExtraHeight);
397 kaptonExtraHeight = 0.5 * fabs(kaptonExtraHeight);
404 dz = 0.5 * (kaptonHeight + kaptonExtraHeight);
433 bbl2 = bbl1 * 0.000001;
434 double thet = atan((bbl1 - bbl2) / (2 * dz));
448 string aRot(
"tidmodpar:9PYX");
454 zpos = 0.5 * kaptonHeight - bbl2;
478 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" SUBTRACTION SOLID Trap made of "
479 << matter.ddname() <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bbl1 <<
", "
480 << bbl1 <<
", 0, " << h1 <<
", " << bbl2 <<
", " << bbl2 <<
", 0";
488 bbl1 = dxbot - kaptonWidth + kaptonOver * (dxtop - dxbot) /
fullHeight;
489 bbl2 = dxtop - kaptonWidth;
490 zpos = 0.5 * (kaptonHeight - kaptonExtraHeight -
dz);
492 zpos -= 0.5 * kaptonOver * (1 -
cos(
detTilt));
497 bbl1 = dxbot - kaptonWidth;
498 bbl2 = dxtop - kaptonWidth - kaptonOver * (dxtop - dxbot) /
fullHeight;
499 zpos = -0.5 * (kaptonHeight - kaptonExtraHeight -
dz);
514 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
515 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bbl1 <<
", " << bbl1 <<
", 0, "
516 << h1 <<
", " << bbl2 <<
", " << bbl2 <<
", 0";
520 if (rotstr !=
"NULL") {
527 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test: " << holeKapton.name() <<
" number 1 positioned in "
528 << kapton.name() <<
" at (0,0," << zpos <<
") with no rotation";
542 DDName(
DDSplit(
waferName[k]).first,
DDSplit(
waferName[k]).
second), dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0);
543 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
544 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl1 <<
", " << bl1 <<
", 0, " << h1
545 <<
", " << bl2 <<
", " << bl2 <<
", 0";
571 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
572 <<
" of dimensions " << dz <<
", 0, 0, " << h1 <<
", " << bl2 <<
", " << bl1 <<
", 0, " << h1
573 <<
", " << bl2 <<
", " << bl1 <<
", 0";
576 if (rotstr !=
"NULL") {
583 cpv.
position(active, wafer, 1, tran, rot);
584 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test: " << active.name() <<
" number 1 positioned in " << wafer.name()
585 <<
" at " << tran <<
" with " <<
rot;
599 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Box made of " << matter.ddname()
601 <<
" " << dx <<
", " << dy <<
", " <<
dz;
611 double thet = atan((bl1 - bl2) / (2. * dz));
624 LogDebug(
"TIDGeom") <<
"DDTIDModuleAlgo test:\t" << solid.
name() <<
" Trap made of " << matter.ddname()
626 <<
"dimensions " << dz <<
", " << thet / CLHEP::deg <<
", 0, " << h1 <<
", " << bl1 <<
", "
627 << bl1 <<
", 0, " << h1 <<
", " << bl2 <<
", " << bl2 <<
", 0";
632 LogDebug(
"TIDGeom") <<
"<<== End of DDTIDModuleAlgo construction ...";
vector< string > holeKaptonName
vector< string > kaptonName
vector< string > holeFrameRot
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
vector< double > backplaneThick
DDMaterial is used to define and access material information.
Sin< T >::type sin(const T &t)
DDName is used to identify DDD entities uniquely.
vector< string > holeFrameName
vector< string > holeKaptonRot
vector< string > sideFrameName
A DDSolid represents the shape of a part.
Represents a uniquely identifyable rotation matrix.
U second(std::pair< T, U > const &p)
vector< double > waferThick
vector< string > waferName
vector< string > pitchName
Cos< T >::type cos(const T &t)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
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.
vector< string > activeName
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation