CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
DDTIDModuleAlgo Class Reference

#include <DDTIDModuleAlgo.h>

Inheritance diagram for DDTIDModuleAlgo:

Public Member Functions

 DDTIDModuleAlgo ()
 
void execute (DDCompactView &cpv)
 
void initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
 
virtual ~DDTIDModuleAlgo ()
 

Private Attributes

double activeHeight
 
std::string activeMat
 
std::vector< std::string > activeName
 
std::string activeRot
 
std::vector< double > backplaneThick
 
double bottomFrameHeight
 
double bottomFrameOver
 
double boxFrameHeight
 
std::string boxFrameMat
 
std::string boxFrameName
 
double boxFrameThick
 
double boxFrameWidth
 
double coolHeight
 
std::string coolMat
 
std::string coolName
 
double coolThick
 
double coolWidth
 
int detectorN
 
double detTilt
 
double dlBottom
 
double dlHybrid
 
double dlTop
 
bool doComponents
 
double fullHeight
 
std::string genMat
 
std::vector< std::string > holeFrameName
 
std::vector< std::string > holeFrameRot
 
std::vector< std::string > holeKaptonName
 
std::vector< std::string > holeKaptonRot
 
double hybridHeight
 
std::string hybridMat
 
std::string hybridName
 
double hybridThick
 
double hybridWidth
 
std::string kaptonMat
 
std::vector< std::string > kaptonName
 
double kaptonOver
 
double kaptonThick
 
double moduleThick
 
double pitchHeight
 
std::string pitchMat
 
std::vector< std::string > pitchName
 
double pitchStereoTol
 
double pitchThick
 
std::string sideFrameMat
 
std::vector< std::string > sideFrameName
 
double sideFrameOver
 
double sideFrameThick
 
double sideFrameWidth
 
double sideWidthBottom
 
double sideWidthTop
 
double topFrameHeight
 
double topFrameOver
 
std::string waferMat
 
std::vector< std::string > waferName
 
std::vector< double > waferThick
 

Detailed Description

Definition at line 10 of file DDTIDModuleAlgo.h.

Constructor & Destructor Documentation

DDTIDModuleAlgo::DDTIDModuleAlgo ( )

Definition at line 19 of file DDTIDModuleAlgo.cc.

References LogDebug.

19  {
20  LogDebug("TIDGeom") << "DDTIDModuleAlgo info: Creating an instance";
21 }
#define LogDebug(id)
DDTIDModuleAlgo::~DDTIDModuleAlgo ( )
virtual

Definition at line 23 of file DDTIDModuleAlgo.cc.

23 {}

Member Function Documentation

void DDTIDModuleAlgo::execute ( DDCompactView cpv)

Definition at line 157 of file DDTIDModuleAlgo.cc.

References activeHeight, activeMat, activeName, activeRot, backplaneThick, bottomFrameHeight, bottomFrameOver, DDSolidFactory::box(), boxFrameHeight, boxFrameMat, boxFrameName, boxFrameThick, boxFrameWidth, coolHeight, coolMat, coolName, coolThick, coolWidth, funct::cos(), DDBase< N, C >::ddname(), DDSplit(), detectorN, detTilt, dlBottom, dlHybrid, dlTop, doComponents, first, fullHeight, genMat, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, gen::k, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, python.rootplot.argparse::module, moduleThick, mergeVDriftHistosByStation::name, DDBase< N, C >::name(), dbtoconf::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, DDCompactView::position(), makeMuonMisalignmentScenario::rot, edm::second(), sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, funct::sin(), DDSolidFactory::subtraction(), topFrameHeight, topFrameOver, DDSolidFactory::trap(), waferMat, waferName, and waferThick.

157  {
158 
159  LogDebug("TIDGeom") << "==>> Constructing DDTIDModuleAlgo...";
160 
161  DDName parentName = parent().name();
162  DDName name;
163 
164  double sidfr = sideFrameWidth - sideFrameOver; // width of side frame on the sides of module
165  double botfr; // width of side frame at the the bottom of the modules
166  double topfr; // width of side frame at the the top of the modules
167  double kaptonHeight;
168  if (dlHybrid > dlTop) {
169  // ring 1, ring 2
172  kaptonHeight = fullHeight + botfr;
173  } else {
174  // ring 3
175  topfr = topFrameHeight - topFrameOver;
177  kaptonHeight = fullHeight + topfr;
178  }
179 
180  double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr;
181  double kaptonWidth = sidfr + kaptonOver;
182 
183  double dxbot = 0.5*dlBottom + sidfr;
184  double dxtop = 0.5*dlTop + sidfr;
185  double dxtopenv, dxbotenv; // top/bot width of the module envelope trap
186 
187  // Envelope
188  if (dlHybrid > dlTop) {
189  // ring 1, ring 2
190  dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr+hybridHeight)/fullHeight;
191  dxbotenv = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
192  } else {
193  // ring 3
194  dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
195  dxbotenv = dxbot;
196  }
197  double bl1 = dxbotenv;
198  double bl2 = dxtopenv;
199  double h1 = 0.5 * moduleThick;
200  double dz = 0.5 * (boxFrameHeight + sideFrameHeight);
201 
202  DDSolid solidUncut, solidCut;
203  DDSolid solid = DDSolidFactory::trap(parentName, dz, 0, 0,
204  h1, bl1, bl1, 0, h1, bl2, bl2, 0);
206  DDMaterial matter = DDMaterial(matname);
207  DDLogicalPart module(solid.ddname(), matter, solid);
208  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
209  << " Trap made of " << genMat << " of dimensions " << dz
210  << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1
211  << ", 0, " << h1 << ", " << bl2 << ", " << bl2
212  << ", 0";
213 
214  if (doComponents) {
215 
216  //Box frame
218  matname = DDName(DDSplit(boxFrameMat).first, DDSplit(boxFrameMat).second);
219  matter = DDMaterial(matname);
220  double dx = 0.5 * boxFrameWidth;
221  double dy = 0.5 * boxFrameThick;
222  double dz = 0.5 * boxFrameHeight;
223  solid = DDSolidFactory::box(name, dx, dy, dz);
224  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
225  << " Box made of " << matname << " of dimensions "
226  << dx << ", " << dy << ", " << dz;
227  DDLogicalPart boxFrame(solid.ddname(), matter, solid);
228 
229 
230  // Hybrid
232  matname = DDName(DDSplit(hybridMat).first, DDSplit(hybridMat).second);
233  matter = DDMaterial(matname);
234  dx = 0.5 * hybridWidth;
235  dy = 0.5 * hybridThick;
236  dz = 0.5 * hybridHeight;
237  solid = DDSolidFactory::box(name, dx, dy, dz);
238  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
239  << " Box made of " << matname << " of dimensions "
240  << dx << ", " << dy << ", " << dz;
241  DDLogicalPart hybrid(solid.ddname(), matter, solid);
242 
243  // Cool Insert
244  name = DDName(DDSplit(coolName).first, DDSplit(coolName).second);
245  matname = DDName(DDSplit(coolMat).first, DDSplit(coolMat).second);
246  matter = DDMaterial(matname);
247  dx = 0.5 * coolWidth;
248  dy = 0.5 * coolThick;
249  dz = 0.5 * coolHeight;
250  solid = DDSolidFactory::box(name, dx, dy, dz);
251  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
252  << " Box made of " << matname << " of dimensions "
253  << dx << ", " << dy << ", " << dz;
254  DDLogicalPart cool(solid.ddname(), matter, solid);
255 
256  // Loop over detectors to be placed
257  for (int k = 0; k < detectorN; k++) {
258 
259  double bbl1, bbl2; // perhaps useless (bl1 enough)
260 
261  // Frame Sides
262  name = DDName(DDSplit(sideFrameName[k]).first,
264  matname = DDName(DDSplit(sideFrameMat).first,
266  matter = DDMaterial(matname);
267  if (dlHybrid > dlTop) {
268  // ring 1, ring 2
269  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
270  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr)/fullHeight;
271  } else {
272  // ring 3
273  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+pitchHeight+botfr)/fullHeight;
274  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
275  }
276  h1 = 0.5 * sideFrameThick;
277  dz = 0.5 * sideFrameHeight;
278  solid = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0,
279  h1, bbl2, bbl2, 0);
280  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
281  << " Trap made of " << matname << " of dimensions "
282  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
283  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
284  << bbl2 << ", 0";
285  DDLogicalPart sideFrame(solid.ddname(), matter, solid);
286 
287  std::string rotstr, rotns;
288  DDRotation rot;
289 
290  // Hole in the frame below the wafer
291  name = DDName(DDSplit(holeFrameName[k]).first,
293  matname = DDName(DDSplit(genMat).first, DDSplit(genMat).second);
294  matter = DDMaterial(matname);
295  double xpos, zpos;
297  bbl1 = dxbot - sideFrameWidth + bottomFrameOver*(dxtop-dxbot)/fullHeight;
298  bbl2 = dxtop - sideFrameWidth - topFrameOver*(dxtop-dxbot)/fullHeight;
299  if (dlHybrid > dlTop) {
300  // ring 1, ring 2
301  zpos = -(topFrameHeight+0.5*dz-0.5*sideFrameHeight);
302  } else {
303  // ring 3
304  zpos = bottomFrameHeight+0.5*dz-0.5*sideFrameHeight;
305  }
306  dz /= 2.;
307  solid = DDSolidFactory::trap(name, dz, 0,0, h1,bbl1,bbl1, 0,
308  h1,bbl2,bbl2, 0);
309  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
310  << " Trap made of " << matname << " of dimensions "
311  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
312  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
313  << bbl2 << ", 0";
314  DDLogicalPart holeFrame(solid.ddname(), matter, solid);
315 
316  rotstr = DDSplit(holeFrameRot[k]).first;
317  if (rotstr != "NULL") {
318  rotns = DDSplit(holeFrameRot[k]).second;
319  rot = DDRotation(DDName(rotstr, rotns));
320  } else {
321  rot = DDRotation();
322  }
323  cpv.position(holeFrame, sideFrame, 1, DDTranslation(0.0, 0.0, zpos), rot );
324  LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << holeFrame.name()
325  << " number 1 positioned in " << sideFrame.name()
326  << " at (0,0," << zpos << ") with no rotation";
327 
328  // Kapton circuit
329  // name = DDName(DDSplit(kaptonName[k]).first,DDSplit(kaptonName[k]).second);
330  matname = DDName(DDSplit(kaptonMat).first,DDSplit(kaptonMat).second);
331  matter = DDMaterial(matname);
332  double kaptonExtraHeight=0; // kapton extra height in the stereo
333  if (dlHybrid > dlTop) {
334  // ring 1, ring 2
335  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
336  if ( k == 1 ) {
337  kaptonExtraHeight = dlTop*sin(detTilt)-fullHeight*(1-cos(detTilt));
338  kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
339  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
340  }
341  else {
342  bbl2 = dxtop;
343  }
344  } else {
345  // ring 3
346  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
347  if ( k == 1) {
348  kaptonExtraHeight = dlBottom*sin(detTilt)-fullHeight*(1-cos(detTilt));
349  kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
350  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
351  } else {
352  bbl1 = dxbot;
353  }
354  }
355  h1 = 0.5 * kaptonThick;
356  dz = 0.5 * (kaptonHeight+kaptonExtraHeight);
357 
358  // For the stereo create the uncut solid, the solid to be removed and then the subtraction solid
359  if ( k == 1 ) {
360  // Uncut solid
361  std::string kaptonUncutName=kaptonName[k]+"Uncut";
362  name = DDName(DDSplit(kaptonUncutName).first,
363  DDSplit(kaptonUncutName).second);
364  solidUncut = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0,
365  h1, bbl2, bbl2, 0);
366 
367  // Piece to be cut
368  std::string kaptonCutName=kaptonName[k]+"Cut";
369  name = DDName(DDSplit(kaptonCutName).first,
370  DDSplit(kaptonCutName).second);
371 
372  if (dlHybrid > dlTop) {
373  dz = 0.5 * dlTop;
374  } else {
375  dz = 0.5 * dlBottom;
376  }
377  h1 = 0.5 * kaptonThick;
378  bbl1 = fabs(dz*sin(detTilt));
379  bbl2 = bbl1*0.000001;
380  double thet = atan((bbl1-bbl2)/(2*dz));
381  solidCut = DDSolidFactory::trap(name, dz, thet, 0, h1, bbl1, bbl1, 0,
382  h1, bbl2, bbl2, 0);
383 
384  std::string aRot("tidmodpar:9PYX");
385  rotstr = DDSplit(aRot).first;
386  rotns = DDSplit(aRot).second;
387  rot = DDRotation(DDName(rotstr, rotns));
388 
389  xpos = -0.5 * fullHeight * sin(detTilt);
390  zpos = 0.5 * kaptonHeight - bbl2;
391 
392  // Subtraction Solid
393  name = DDName(DDSplit(kaptonName[k]).first,
394  DDSplit(kaptonName[k]).second);
395  solid = DDSolidFactory::subtraction(name, solidUncut, solidCut,
396  DDTranslation(xpos,0.0,zpos),rot);
397  } else {
398  name = DDName(DDSplit(kaptonName[k]).first,
400  solid = DDSolidFactory::trap(name, dz, 0, 0, h1, bbl1, bbl1, 0,
401  h1, bbl2, bbl2, 0);
402  }
403 
404  DDLogicalPart kapton(solid.ddname(), matter, solid);
405  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
406  << " SUBTRACTION SOLID Trap made of " << matname
407  << " of dimensions " << dz << ", 0, 0, " << h1
408  << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1
409  << ", " << bbl2 << ", " << bbl2 << ", 0";
410 
411 
412  // Hole in the kapton below the wafer
413  name = DDName(DDSplit(holeKaptonName[k]).first,
415  matname = DDName(DDSplit(genMat).first, DDSplit(genMat).second);
416  matter = DDMaterial(matname);
417  dz = fullHeight - kaptonOver;
418  xpos = 0;
419  if (dlHybrid > dlTop) {
420  // ring 1, ring 2
421  bbl1 = dxbot - kaptonWidth + kaptonOver*(dxtop-dxbot)/fullHeight;
422  bbl2 = dxtop - kaptonWidth;
423  zpos = 0.5*(kaptonHeight-kaptonExtraHeight-dz);
424  if ( k == 1 ) {
425  zpos -= 0.5*kaptonOver*(1-cos(detTilt));
426  xpos = -0.5*kaptonOver*sin(detTilt);
427  }
428  } else {
429  // ring 3
430  bbl1 = dxbot - kaptonWidth;
431  bbl2 = dxtop - kaptonWidth - kaptonOver*(dxtop-dxbot)/fullHeight;
432  zpos = -0.5*(kaptonHeight-kaptonExtraHeight-dz);
433  }
434  dz /= 2.;
435  solid = DDSolidFactory::trap(name, dz, 0,0, h1,bbl1,bbl1, 0,
436  h1,bbl2,bbl2, 0);
437  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
438  << " Trap made of " << matname << " of dimensions "
439  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
440  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
441  << bbl2 << ", 0";
442  DDLogicalPart holeKapton(solid.ddname(), matter, solid);
443 
444  rotstr = DDSplit(holeKaptonRot[k]).first;
445  if (rotstr != "NULL") {
446  rotns = DDSplit(holeKaptonRot[k]).second;
447  rot = DDRotation(DDName(rotstr, rotns));
448  } else {
449  rot = DDRotation();
450  }
451  cpv.position(holeKapton, kapton, 1, DDTranslation(xpos, 0.0, zpos), rot );
452  LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << holeKapton.name()
453  << " number 1 positioned in " << kapton.name()
454  << " at (0,0," << zpos << ") with no rotation";
455 
456 
457 
458  // Wafer
459  name = DDName(DDSplit(waferName[k]).first,
460  DDSplit(waferName[k]).second);
461  matname = DDName(DDSplit(waferMat).first, DDSplit(waferMat).second);
462  matter = DDMaterial(matname);
463  if (k == 0 && dlHybrid < dlTop) {
464  bl1 = 0.5 * dlTop;
465  bl2 = 0.5 * dlBottom;
466  } else {
467  bl1 = 0.5 * dlBottom;
468  bl2 = 0.5 * dlTop;
469  }
470  h1 = 0.5 * waferThick[k];
471  dz = 0.5 * fullHeight;
472  solid = DDSolidFactory::trap(name, dz, 0,0, h1,bl1,bl1,0, h1,bl2,bl2,0);
473  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
474  << " Trap made of " << matname << " of dimensions "
475  << dz << ", 0, 0, " << h1 << ", " << bl1 << ", "
476  << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
477  << bl2 << ", 0";
478  DDLogicalPart wafer(solid.ddname(), matter, solid);
479 
480  // Active
481  name = DDName(DDSplit(activeName[k]).first,
483  matname = DDName(DDSplit(activeMat).first, DDSplit(activeMat).second);
484  matter = DDMaterial(matname);
485  if (k == 0 && dlHybrid < dlTop) {
486  bl1 -= sideWidthTop;
487  bl2 -= sideWidthBottom;
488  }
489  else {
490  bl1 -= sideWidthBottom;
491  bl2 -= sideWidthTop;
492  }
493  dz = 0.5 * (waferThick[k] - backplaneThick[k]); // inactive backplane
494  h1 = 0.5 * activeHeight;
495  solid = DDSolidFactory::trap(name, dz, 0,0, h1,bl2,bl1,0, h1,bl2,bl1,0);
496  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
497  << " Trap made of " << matname << " of dimensions "
498  << dz << ", 0, 0, " << h1 << ", " << bl2 << ", "
499  << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
500  << bl1 << ", 0";
501  DDLogicalPart active(solid.ddname(), matter, solid);
502  rotstr = DDSplit(activeRot).first;
503  if (rotstr != "NULL") {
504  rotns = DDSplit(activeRot).second;
505  rot = DDRotation(DDName(rotstr, rotns));
506  } else {
507  rot = DDRotation();
508  }
509  DDTranslation tran(0.0,-0.5 * backplaneThick[k],0.0); // from the definition of the wafer local axes
510  cpv.position(active, wafer, 1, tran, rot); // inactive backplane
511  LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << active.name()
512  << " number 1 positioned in " << wafer.name()
513  << " at " << tran << " with " << rot;
514 
515  //Pitch Adapter
516  name = DDName(DDSplit(pitchName[k]).first,
517  DDSplit(pitchName[k]).second);
518  matname = DDName(DDSplit(pitchMat).first, DDSplit(pitchMat).second);
519  matter = DDMaterial(matname);
520  if (dlHybrid > dlTop) {
521  dz = 0.5 * dlTop;
522  } else {
523  dz = 0.5 * dlBottom;
524  }
525  if (k == 0) {
526  dx = dz;
527  dy = 0.5 * pitchThick;
528  dz = 0.5 * pitchHeight;
529  solid = DDSolidFactory::box(name, dx, dy, dz);
530  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
531  << " Box made of " << matname << " of dimensions"
532  << " " << dx << ", " << dy << ", " << dz;
533  } else {
534  h1 = 0.5 * pitchThick;
535  bl1 = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt);
536  bl2 = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt);
537 
538  dz -=0.5*pitchStereoTol;
539  bl1-=pitchStereoTol;
540  bl2-=pitchStereoTol;
541 
542  double thet = atan((bl1-bl2)/(2.*dz));
543  solid = DDSolidFactory::trap(name, dz, thet, 0, h1, bl1, bl1, 0,
544  h1, bl2, bl2, 0);
545  LogDebug("TIDGeom") << "DDTIDModuleAlgo test:\t" << solid.name()
546  << " Trap made of " << matname << " of "
547  << "dimensions " << dz << ", " << thet/CLHEP::deg
548  << ", 0, " << h1 << ", " << bl1 << ", " << bl1
549  << ", 0, " << h1 << ", " << bl2 << ", " << bl2
550  << ", 0";
551  }
552  DDLogicalPart pa(solid.ddname(), matter, solid);
553  }
554  }
555  LogDebug("TIDGeom") << "<<== End of DDTIDModuleAlgo construction ...";
556 }
#define LogDebug(id)
std::string boxFrameName
std::string sideFrameMat
const N & name() const
Definition: DDBase.h:82
list parent
Definition: dbtoconf.py:74
std::string waferMat
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:41
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::string coolName
std::vector< std::string > waferName
std::string pitchMat
std::string activeRot
std::vector< std::string > holeKaptonName
A DDSolid represents the shape of a part.
Definition: DDSolid.h:35
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:66
U second(std::pair< T, U > const &p)
std::string coolMat
std::string activeMat
std::vector< std::string > kaptonName
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< std::string > holeFrameRot
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
Definition: DDLogicalPart.h:88
std::string hybridName
std::vector< std::string > sideFrameName
double bottomFrameHeight
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)
Definition: DDSolid.cc:723
bool first
Definition: L1TdeRCT.cc:94
std::string boxFrameMat
static DDSolid box(const DDName &name, double xHalf, double yHalf, double zHalf)
Creates a box with side length 2*xHalf, 2*yHalf, 2*zHalf.
Definition: DDSolid.cc:519
int k[5][pyjets_maxn]
std::string genMat
std::vector< double > waferThick
static DDSolid subtraction(const DDName &name, const DDSolid &a, const DDSolid &b, const DDTranslation &t, const DDRotation &r)
Definition: DDSolid.cc:705
std::vector< std::string > holeFrameName
std::vector< double > backplaneThick
std::vector< std::string > pitchName
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = &#39;:&#39;
Definition: DDSplit.cc:4
std::vector< std::string > activeName
std::string kaptonMat
std::vector< std::string > holeKaptonRot
std::string hybridMat
const N & ddname() const
Definition: DDBase.h:84
void DDTIDModuleAlgo::initialize ( const DDNumericArguments nArgs,
const DDVectorArguments vArgs,
const DDMapArguments mArgs,
const DDStringArguments sArgs,
const DDStringVectorArguments vsArgs 
)

Definition at line 25 of file DDTIDModuleAlgo.cc.

References activeHeight, activeMat, activeName, activeRot, backplaneThick, bottomFrameHeight, bottomFrameOver, boxFrameHeight, boxFrameMat, boxFrameName, boxFrameThick, boxFrameWidth, coolHeight, coolMat, coolName, coolThick, coolWidth, detectorN, detTilt, dlBottom, dlHybrid, dlTop, doComponents, fullHeight, genMat, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, i, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, moduleThick, dbtoconf::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, topFrameHeight, topFrameOver, waferMat, waferName, and waferThick.

29  {
30 
31  int i;
32  genMat = sArgs["GeneralMaterial"];
33  detectorN = (int)(nArgs["DetectorNumber"]);
34  DDName parentName = parent().name();
35 
36  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Parent " << parentName
37  << " General Material " << genMat
38  << " Detector Planes " << detectorN;
39 
40  moduleThick = nArgs["ModuleThick"];
41  detTilt = nArgs["DetTilt"];
42  fullHeight = nArgs["FullHeight"];
43  dlTop = nArgs["DlTop"];
44  dlBottom = nArgs["DlBottom"];
45  dlHybrid = nArgs["DlHybrid"];
46  std::string comp = sArgs["DoComponents"];
47  if (comp == "No" || comp == "NO" || comp == "no") doComponents = false;
48  else doComponents = true;
49 
50  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: ModuleThick "
51  << moduleThick << " Detector Tilt " << detTilt/CLHEP::deg
52  << " Height " << fullHeight << " dl(Top) " << dlTop
53  << " dl(Bottom) " << dlBottom << " dl(Hybrid) "
54  << dlHybrid << " doComponents " << doComponents;
55 
56  boxFrameName = sArgs["BoxFrameName"];
57  boxFrameMat = sArgs["BoxFrameMaterial"];
58  boxFrameThick = nArgs["BoxFrameThick"];
59  boxFrameHeight = nArgs["BoxFrameHeight"];
60  boxFrameWidth = nArgs["BoxFrameWidth"];
61  bottomFrameHeight = nArgs["BottomFrameHeight"];
62  bottomFrameOver = nArgs["BottomFrameOver"];
63  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: " << boxFrameName
64  << " Material " << boxFrameMat << " Thickness "
65  << boxFrameThick << " width " << boxFrameWidth
66  << " height " << boxFrameHeight
67  << " Extra Height at Bottom " << bottomFrameHeight
68  << " Overlap " << bottomFrameOver;
69 
70  topFrameHeight = nArgs["TopFrameHeight"];
71  topFrameOver = nArgs["TopFrameOver"];
72  sideFrameName = vsArgs["SideFrameName"];
73  sideFrameMat = sArgs["SideFrameMaterial"];
74  sideFrameWidth = nArgs["SideFrameWidth"];
75  sideFrameThick = nArgs["SideFrameThick"];
76  sideFrameOver = nArgs["SideFrameOver"];
77  holeFrameName = vsArgs["HoleFrameName"];
78  holeFrameRot = vsArgs["HoleFrameRotation"];
79  for (i = 0; i < detectorN; i++)
80  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug : " << sideFrameName[i]
81  << " Material " << sideFrameMat << " Width "
82  << sideFrameWidth << " Thickness " << sideFrameThick
83  << " Overlap " << sideFrameOver << " Hole "
84  << holeFrameName[i];
85 
86  kaptonName = vsArgs["KaptonName"];
87  kaptonMat = sArgs["KaptonMaterial"];
88  kaptonThick = nArgs["KaptonThick"];
89  kaptonOver = nArgs["KaptonOver"];
90  holeKaptonName = vsArgs["HoleKaptonName"];
91  holeKaptonRot = vsArgs["HoleKaptonRotation"];
92  for (i = 0; i < detectorN; i++)
93  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug : " << kaptonName[i]
94  << " Material " << kaptonMat
95  << " Thickness " << kaptonThick
96  << " Overlap " << kaptonOver << " Hole "
97  << holeKaptonName[i];
98 
99 
100  waferName = vsArgs["WaferName"];
101  waferMat = sArgs["WaferMaterial"];
102  sideWidthTop = nArgs["SideWidthTop"];
103  sideWidthBottom = nArgs["SideWidthBottom"];
104 
105  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Wafer Material "
106  << waferMat << " Side Width Top " << sideWidthTop
107  << " Side Width Bottom " << sideWidthBottom;
108  for (i = 0; i < detectorN; i++)
109  LogDebug("TIDGeom") << "\twaferName[" << i << "] = " << waferName[i];
110 
111  activeName = vsArgs["ActiveName"];
112  activeMat = sArgs["ActiveMaterial"];
113  activeHeight = nArgs["ActiveHeight"];
114  waferThick = vArgs["WaferThick"];
115  activeRot = sArgs["ActiveRotation"];
116  backplaneThick = vArgs["BackPlaneThick"];
117  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Active Material "
118  << activeMat << " Height " << activeHeight
119  << " rotated by " << activeRot;
120  for (i = 0; i < detectorN; i++)
121  LogDebug("TIDGeom") << " translated by (0," << -0.5*backplaneThick[i]
122  << ",0)\tactiveName[" << i << "] = " << activeName[i]
123  << " of thickness " << waferThick[i]-backplaneThick[i];
124 
125  hybridName = sArgs["HybridName"];
126  hybridMat = sArgs["HybridMaterial"];
127  hybridHeight = nArgs["HybridHeight"];
128  hybridWidth = nArgs["HybridWidth"];
129  hybridThick = nArgs["HybridThick"];
130  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: " << hybridName
131  << " Material " << hybridMat << " Height "
132  << hybridHeight << " Width " << hybridWidth
133  << " Thickness " << hybridThick;
134 
135  pitchName = vsArgs["PitchName"];
136  pitchMat = sArgs["PitchMaterial"];
137  pitchHeight = nArgs["PitchHeight"];
138  pitchThick = nArgs["PitchThick"];
139  pitchStereoTol = nArgs["PitchStereoTolerance"];
140 
141  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Pitch Adapter Material "
142  << pitchMat << " Height " << pitchHeight
143  << " Thickness " << pitchThick;
144  for (i = 0; i < detectorN; i++)
145  LogDebug("TIDGeom") << "\tpitchName[" << i << "] = " << pitchName[i];
146 
147  coolName = sArgs["CoolInsertName"];
148  coolMat = sArgs["CoolInsertMaterial"];
149  coolHeight = nArgs["CoolInsertHeight"];
150  coolThick = nArgs["CoolInsertThick"];
151  coolWidth = nArgs["CoolInsertWidth"];
152  LogDebug("TIDGeom") << "DDTIDModuleAlgo debug: Cool Element Material "
153  << coolMat << " Height " << coolHeight
154  << " Thickness " << coolThick << " Width " << coolWidth;
155 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
std::string boxFrameName
std::string sideFrameMat
list parent
Definition: dbtoconf.py:74
std::string waferMat
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:18
std::string coolName
std::vector< std::string > waferName
std::string pitchMat
std::string activeRot
std::vector< std::string > holeKaptonName
std::string coolMat
std::string activeMat
std::vector< std::string > kaptonName
std::vector< std::string > holeFrameRot
std::string hybridName
std::vector< std::string > sideFrameName
double bottomFrameHeight
std::string boxFrameMat
std::string genMat
std::vector< double > waferThick
std::vector< std::string > holeFrameName
std::vector< double > backplaneThick
std::vector< std::string > pitchName
std::vector< std::string > activeName
std::string kaptonMat
std::vector< std::string > holeKaptonRot
std::string hybridMat

Member Data Documentation

double DDTIDModuleAlgo::activeHeight
private

Definition at line 67 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::activeMat
private

Definition at line 66 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::activeName
private

Definition at line 65 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::activeRot
private

Definition at line 69 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<double> DDTIDModuleAlgo::backplaneThick
private

Definition at line 70 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::bottomFrameHeight
private

Definition at line 41 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::bottomFrameOver
private

Definition at line 42 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameHeight
private

Definition at line 38 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::boxFrameMat
private

Definition at line 37 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::boxFrameName
private

Definition at line 36 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameThick
private

Definition at line 39 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::boxFrameWidth
private

Definition at line 40 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolHeight
private

Definition at line 83 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::coolMat
private

Definition at line 82 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::coolName
private

Definition at line 81 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolThick
private

Definition at line 84 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::coolWidth
private

Definition at line 85 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

int DDTIDModuleAlgo::detectorN
private

Definition at line 27 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::detTilt
private

Definition at line 29 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlBottom
private

Definition at line 32 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlHybrid
private

Definition at line 33 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::dlTop
private

Definition at line 31 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

bool DDTIDModuleAlgo::doComponents
private

Definition at line 34 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::fullHeight
private

Definition at line 30 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::genMat
private

Definition at line 26 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeFrameName
private

Definition at line 50 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeFrameRot
private

Definition at line 51 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeKaptonName
private

Definition at line 58 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::holeKaptonRot
private

Definition at line 59 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridHeight
private

Definition at line 73 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::hybridMat
private

Definition at line 72 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::hybridName
private

Definition at line 71 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridThick
private

Definition at line 75 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::hybridWidth
private

Definition at line 74 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::kaptonMat
private

Definition at line 54 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::kaptonName
private

Definition at line 53 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::kaptonOver
private

Definition at line 57 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::kaptonThick
private

Definition at line 56 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::moduleThick
private

Definition at line 28 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchHeight
private

Definition at line 78 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::pitchMat
private

Definition at line 77 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::pitchName
private

Definition at line 76 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchStereoTol
private

Definition at line 80 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::pitchThick
private

Definition at line 79 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::sideFrameMat
private

Definition at line 46 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::sideFrameName
private

Definition at line 45 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameOver
private

Definition at line 49 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameThick
private

Definition at line 48 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideFrameWidth
private

Definition at line 47 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideWidthBottom
private

Definition at line 64 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::sideWidthTop
private

Definition at line 63 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::topFrameHeight
private

Definition at line 43 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

double DDTIDModuleAlgo::topFrameOver
private

Definition at line 44 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::string DDTIDModuleAlgo::waferMat
private

Definition at line 62 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<std::string> DDTIDModuleAlgo::waferName
private

Definition at line 61 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().

std::vector<double> DDTIDModuleAlgo::waferThick
private

Definition at line 68 of file DDTIDModuleAlgo.h.

Referenced by execute(), and initialize().