CMS 3D CMS Logo

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) override
 
void initialize (const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
 
 ~DDTIDModuleAlgo () override
 

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 ( )
override

Definition at line 23 of file DDTIDModuleAlgo.cc.

23 {}

Member Function Documentation

void DDTIDModuleAlgo::execute ( DDCompactView cpv)
override

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, PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, plotBeamSpotDB::first, fullHeight, genMat, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, gen::k, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, moduleThick, dataset::name, DDBase< N, C >::name(), AnalysisDataFormats_SUSYBSMObjects::pa, class-composition::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, DDCompactView::position(), makeMuonMisalignmentScenario::rot, edm::second(), sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, funct::sin(), AlCaHLTBitMon_QueryRunRegistry::string, DDSolidFactory::subtraction(), topFrameHeight, topFrameOver, DDSolidFactory::trap(), waferMat, waferName, and waferThick.

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

Definition at line 25 of file DDTIDModuleAlgo.cc.

References activeHeight, activeMat, activeName, activeRot, backplaneThick, bottomFrameHeight, bottomFrameOver, boxFrameHeight, boxFrameMat, boxFrameName, boxFrameThick, boxFrameWidth, AlCaHLTBitMon_QueryRunRegistry::comp, coolHeight, coolMat, coolName, coolThick, coolWidth, detectorN, detTilt, dlBottom, dlHybrid, dlTop, doComponents, fullHeight, genMat, holeFrameName, holeFrameRot, holeKaptonName, holeKaptonRot, hybridHeight, hybridMat, hybridName, hybridThick, hybridWidth, mps_fire::i, createfilelist::int, kaptonMat, kaptonName, kaptonOver, kaptonThick, LogDebug, moduleThick, dataset::name, class-composition::parent, pitchHeight, pitchMat, pitchName, pitchStereoTol, pitchThick, sideFrameMat, sideFrameName, sideFrameOver, sideFrameThick, sideFrameWidth, sideWidthBottom, sideWidthTop, AlCaHLTBitMon_QueryRunRegistry::string, 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)
std::string boxFrameName
std::string sideFrameMat
std::string waferMat
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
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().