13 #include "CLHEP/Units/GlobalPhysicalConstants.h" 14 #include "CLHEP/Units/GlobalSystemOfUnits.h" 18 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo info: Creating an instance";
33 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo debug: Parent " << parentName
38 dlTop = nArgs[
"DlTop"];
42 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo debug: Detector Tilt " 56 <<
" positioned at Z";
85 <<
" positioned at Z " <<
waferZ[
i]
100 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo debug: Pitch Adapter Height " 104 <<
" position at Z " <<
pitchZ[
i]
109 coolZ = nArgs[
"CoolInsertZ"];
114 if (comp ==
"No" || comp ==
"NO" || comp ==
"no")
doSpacers =
false;
130 LogDebug(
"TIDGeom") <<
"==>> Constructing DDTIDModulePosAlgo...";
155 double dxbot = 0.5*
dlBottom + sidfr;
156 double dxtop = 0.5*
dlTop + sidfr;
157 double dxtopenv, dxbotenv;
160 double thetaWafer = atan(tanWafer);
172 double tanEnv=(dxtopenv-dxbotenv)/(sideFrameHeight+
boxFrameHeight);
174 double xpos=0;
double ypos=0;
double zpos=0;
184 for (
int j1=0; j1<2; j1++){
200 zpos = zCool-zCenter;
201 for (
int j2=0; j2<2; j2++) {
204 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 205 << copy <<
" positioned in " << parentName <<
" at " 223 zpos = zBotSpacers - zCenter;
226 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 227 << 1 <<
" positioned in " << parentName <<
" at " 242 zpos = zSideSpacers - zCenter;
247 double phix, phiy, phiz;
248 phix=0.*CLHEP::deg; phiy=90.*CLHEP::deg; phiz=0.*CLHEP::deg;
250 double thetay, thetax;
251 thetay=90.*CLHEP::deg;
252 double thetaz = thetaWafer;
254 for (
int j1=0; j1<2; j1++){
258 thetax = 90.*CLHEP::deg+thetaz;
259 double thetadeg = thetax/CLHEP::deg;
263 phix, thetay, phiy, thetaz, phiz);
267 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 268 << copy <<
" positioned in " << parentName <<
" at " 287 zpos = zWafer - zCenter;
291 if (rotstr !=
"NULL") {
295 cpv.
position(name, parentName, k+1, tran, rot);
296 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 297 << k+1 <<
" positioned in " << parentName <<
" at " 298 << tran <<
" with " <<
rot;
314 zpos = zPitch - zCenter;
316 if (rotstr !=
"NULL") {
323 cpv.
position(name, parentName, k+1, tran, rot);
324 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 325 << k+1 <<
" positioned in " << parentName <<
" at " 326 << tran <<
" with " <<
rot;
337 zpos = zHybrid - zCenter;
340 cpv.
position(name, parentName, k+1, tran, rot);
341 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 342 << k+1 <<
" positioned in " << parentName <<
" at " 343 << tran <<
" with " <<
rot;
355 zpos = zBoxFrame - zCenter;
358 cpv.
position(name, parentName, k+1, tran, rot);
359 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 360 << k+1 <<
" positioned in " << parentName <<
" at " 361 << tran <<
" with " <<
rot;
369 zSideFrame = 0.5*sideFrameHeight;
373 zpos = zSideFrame-zCenter;
375 if (rotstr !=
"NULL") {
382 cpv.
position(name, parentName, k+1, tran, rot);
383 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 384 << k+1 <<
" positioned in " << parentName <<
" at " 385 << tran <<
" with " <<
rot;
392 double kaptonExtraHeight=0;
395 kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
396 zKapton = 0.5*(kaptonHeight+kaptonExtraHeight);
399 kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
400 zKapton =
boxFrameHeight+sideFrameHeight-0.5*(kaptonHeight+kaptonExtraHeight);
402 zpos = zKapton-zCenter;
404 if (rotstr !=
"NULL") {
411 cpv.
position(name, parentName, k+1, tran, rot);
412 LogDebug(
"TIDGeom") <<
"DDTIDModulePosAlgo test: " << name <<
" number " 413 << k+1 <<
" positioned in " << parentName <<
" at " 414 << tran <<
" with " <<
rot;
417 LogDebug(
"TIDGeom") <<
"<<== End of DDTIDModulePosAlgo positioning ...";
void execute(DDCompactView &cpv) override
std::vector< double > pitchZ
std::vector< std::string > pitchName
std::string botSpacersName
Sin< T >::type sin(const T &t)
DDName is used to identify DDD entities uniquely.
std::string sidSpacersName
std::vector< std::string > sideFrameName
Compact representation of the geometrical detector hierarchy.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
U second(std::pair< T, U > const &p)
std::vector< double > coolRadShift
Cos< T >::type cos(const T &t)
std::vector< std::string > waferRot
std::vector< double > hybridZ
std::vector< std::string > waferName
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
~DDTIDModulePosAlgo() override
std::vector< std::string > pitchRot
std::vector< std::string > sideFrameRot
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=0)
std::vector< double > sideFrameZ
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
std::vector< std::string > kaptonRot
std::vector< double > waferZ
std::vector< double > kaptonZ
std::vector< std::string > kaptonName
double sidSpacersRadShift
std::vector< double > boxFrameZ