CMS 3D CMS Logo

DDTIDModuleAlgo.cc
Go to the documentation of this file.
1 #include "DD4hep/DetFactoryHelper.h"
5 
6 using namespace std;
7 using namespace dd4hep;
8 using namespace cms;
9 using namespace geant_units::operators;
10 
11 static long algorithm(Detector& /* description */,
13  xml_h e,
14  SensitiveDetector& /* sens */)
15 {
16  cms::DDNamespace ns(ctxt, e, true);
17  DDAlgoArguments args(ctxt, e);
18  string mother = args.parentName();
19  string genMat = args.str("GeneralMaterial"); //General material name
20  int detectorN = args.integer("DetectorNumber"); //Detector planes
21  double moduleThick = args.dble("ModuleThick"); //Module thickness
22  double detTilt = args.dble("DetTilt"); //Tilt of stereo detector
23  double fullHeight = args.dble("FullHeight"); //Height
24  double dlTop = args.dble("DlTop"); //Width at top of wafer
25  double dlBottom = args.dble("DlBottom"); //Width at bottom of wafer
26  double dlHybrid = args.dble("DlHybrid"); //Width at the hybrid end
27  bool doComponents = ::toupper(args.str("DoComponents")[0]) != 'N'; //Components to be made
28 
29  string boxFrameName = args.str("BoxFrameName"); //Top frame name
30  string boxFrameMat = args.str("BoxFrameMaterial"); // material
31  double boxFrameHeight = args.dble("BoxFrameHeight"); // height
32  double boxFrameThick = args.dble("BoxFrameThick"); // thickness
33  double boxFrameWidth = args.dble("BoxFrameWidth"); // extra width
34  double bottomFrameHeight = args.dble("BottomFrameHeight"); //Bottom of the frame
35  double bottomFrameOver = args.dble("BottomFrameOver"); // overlap
36  double topFrameHeight = args.dble("TopFrameHeight"); //Top of the frame
37  double topFrameOver = args.dble("TopFrameOver"); // overlap
38  vector<string> sideFrameName = args.vecStr("SideFrameName"); //Side frame name
39  string sideFrameMat = args.str("SideFrameMaterial"); // material
40  double sideFrameWidth = args.dble("SideFrameWidth"); // width
41  double sideFrameThick = args.dble("SideFrameThick"); // thickness
42  double sideFrameOver = args.dble("SideFrameOver"); // overlap (wrt wafer)
43  vector<string> holeFrameName = args.vecStr("HoleFrameName"); //Hole in the frame name
44  vector<string> holeFrameRot = args.vecStr("HoleFrameRotation"); // Rotation matrix
45 
46  vector<string> kaptonName = args.vecStr("KaptonName"); //Kapton circuit name
47  string kaptonMat = args.str("KaptonMaterial"); // material
48  double kaptonThick = args.dble("KaptonThick"); // thickness
49  double kaptonOver = args.dble("KaptonOver"); // overlap (wrt Wafer)
50  vector<string> holeKaptonName = args.vecStr("HoleKaptonName"); //Hole in the kapton circuit name
51  vector<string> holeKaptonRot = args.vecStr("HoleKaptonRotation"); // Rotation matrix
52 
53  vector<string> waferName = args.vecStr("WaferName"); //Wafer name
54  string waferMat = args.str("WaferMaterial"); // material
55  double sideWidthTop = args.dble("SideWidthTop"); // width on the side Top
56  double sideWidthBottom = args.dble("SideWidthBottom"); // Bottom
57  vector<string> activeName = args.vecStr("ActiveName"); //Sensitive name
58  string activeMat = args.str("ActiveMaterial"); // material
59  double activeHeight = args.dble("ActiveHeight"); // height
60  vector<double> waferThick = args.vecDble("WaferThick"); // wafer thickness (active = wafer - backplane)
61  string activeRot = args.str("ActiveRotation"); // Rotation matrix
62  vector<double> backplaneThick = args.vecDble("BackPlaneThick"); // thickness
63  string hybridName = args.str("HybridName"); //Hybrid name
64  string hybridMat = args.str("HybridMaterial"); // material
65  double hybridHeight = args.dble("HybridHeight"); // height
66  double hybridWidth = args.dble("HybridWidth"); // width
67  double hybridThick = args.dble("HybridThick"); // thickness
68  vector<string> pitchName = args.vecStr("PitchName"); //Pitch adapter name
69  string pitchMat = args.str("PitchMaterial"); // material
70  double pitchHeight = args.dble("PitchHeight"); // height
71  double pitchThick = args.dble("PitchThick"); // thickness
72  double pitchStereoTol = args.dble("PitchStereoTolerance"); // tolerance in dimensions of the stereo
73  string coolName = args.str("CoolInsertName"); // Cool insert name
74  string coolMat = args.str("CoolInsertMaterial"); // material
75  double coolHeight = args.dble("CoolInsertHeight"); // height
76  double coolThick = args.dble("CoolInsertThick"); // thickness
77  double coolWidth = args.dble("CoolInsertWidth"); // width
78 
79  LogDebug("TIDGeom") << "Parent " << mother
80  << " General Material " << genMat
81  << " Detector Planes " << detectorN;
82 
83  LogDebug("TIDGeom") << "ModuleThick "
84  << moduleThick << " Detector Tilt " << convertRadToDeg( detTilt )
85  << " Height " << fullHeight << " dl(Top) " << dlTop
86  << " dl(Bottom) " << dlBottom << " dl(Hybrid) "
87  << dlHybrid << " doComponents " << doComponents;
88  LogDebug("TIDGeom") << "" << boxFrameName
89  << " Material " << boxFrameMat << " Thickness "
90  << boxFrameThick << " width " << boxFrameWidth
91  << " height " << boxFrameHeight
92  << " Extra Height at Bottom " << bottomFrameHeight
93  << " Overlap " << bottomFrameOver;
94 
95  for (int i = 0; i < detectorN; i++)
96  LogDebug("TIDGeom") << sideFrameName[i]
97  << " Material " << sideFrameMat << " Width "
98  << sideFrameWidth << " Thickness " << sideFrameThick
99  << " Overlap " << sideFrameOver << " Hole "
100  << holeFrameName[i];
101 
102  for (int i = 0; i < detectorN; i++)
103  LogDebug("TIDGeom") << kaptonName[i]
104  << " Material " << kaptonMat
105  << " Thickness " << kaptonThick
106  << " Overlap " << kaptonOver << " Hole "
107  << holeKaptonName[i];
108 
109  LogDebug("TIDGeom") << "Wafer Material "
110  << waferMat << " Side Width Top " << sideWidthTop
111  << " Side Width Bottom " << sideWidthBottom;
112  for (int i = 0; i < detectorN; i++)
113  LogDebug("TIDGeom") << "\twaferName[" << i << "] = " << waferName[i];
114 
115  LogDebug("TIDGeom") << "Active Material "
116  << activeMat << " Height " << activeHeight
117  << " rotated by " << activeRot;
118  for (int i = 0; i < detectorN; i++)
119  LogDebug("TIDGeom") << " translated by (0," << -0.5*backplaneThick[i]
120  << ",0)\tactiveName[" << i << "] = " << activeName[i]
121  << " of thickness " << waferThick[i]-backplaneThick[i];
122 
123  LogDebug("TIDGeom") << "" << hybridName
124  << " Material " << hybridMat << " Height "
125  << hybridHeight << " Width " << hybridWidth
126  << " Thickness " << hybridThick;
127  LogDebug("TIDGeom") << "Pitch Adapter Material "
128  << pitchMat << " Height " << pitchHeight
129  << " Thickness " << pitchThick;
130  for (int i = 0; i < detectorN; i++)
131  LogDebug("TIDGeom") << "\tpitchName[" << i << "] = " << pitchName[i];
132  LogDebug("TIDGeom") << "Cool Element Material "
133  << coolMat << " Height " << coolHeight
134  << " Thickness " << coolThick << " Width " << coolWidth;
135 
136  string name = mother;
137  double sidfr = sideFrameWidth - sideFrameOver; // width of side frame on the sides of module
138  double botfr; // width of side frame at the the bottom of the modules
139  double topfr; // width of side frame at the the top of the modules
140  double kaptonHeight;
141  if (dlHybrid > dlTop) {
142  // ring 1, ring 2
143  topfr = topFrameHeight - pitchHeight - topFrameOver;
144  botfr = bottomFrameHeight - bottomFrameOver;
145  kaptonHeight = fullHeight + botfr;
146  } else {
147  // ring 3
148  topfr = topFrameHeight - topFrameOver;
149  botfr = bottomFrameHeight - bottomFrameOver - pitchHeight;
150  kaptonHeight = fullHeight + topfr;
151  }
152 
153  double sideFrameHeight = fullHeight + pitchHeight + botfr + topfr;
154  double kaptonWidth = sidfr + kaptonOver;
155 
156  double dxbot = 0.5*dlBottom + sidfr;
157  double dxtop = 0.5*dlTop + sidfr;
158  double dxtopenv, dxbotenv; // top/bot width of the module envelope trap
159 
160  // Envelope
161  if (dlHybrid > dlTop) {
162  // ring 1, ring 2
163  dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr+hybridHeight)/fullHeight;
164  dxbotenv = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
165  } else {
166  // ring 3
167  dxtopenv = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
168  dxbotenv = dxbot;
169  }
170  double bl1 = dxbotenv;
171  double bl2 = dxtopenv;
172  double h1 = 0.5 * moduleThick;
173  double dx, dy;
174  double dz = 0.5 * (boxFrameHeight + sideFrameHeight);
175 
176  Solid solid = ns.addSolidNS(name,Trap(dz, 0, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0));
177  /* Volume module = */ ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
178  LogDebug("TIDGeom") << solid.name()
179  << " Trap made of " << genMat << " of dimensions " << dz
180  << ", 0, 0, " << h1 << ", " << bl1 << ", " << bl1
181  << ", 0, " << h1 << ", " << bl2 << ", " << bl2
182  << ", 0";
183 
184  if (doComponents) {
185 
186  //Box frame
187  name = boxFrameName;
188  dx = 0.5 * boxFrameWidth;
189  dy = 0.5 * boxFrameThick;
190  dz = 0.5 * boxFrameHeight;
191  solid = ns.addSolidNS(name,Box(dx, dy, dz));
192  LogDebug("TIDGeom") << solid.name()
193  << " Box made of " << boxFrameMat << " of dimensions "
194  << dx << ", " << dy << ", " << dz;
195  /* Volume boxFrame = */ ns.addVolumeNS(Volume(name, solid, ns.material(boxFrameMat)));
196 
197 
198  // Hybrid
199  name = hybridName;
200  dx = 0.5 * hybridWidth;
201  dy = 0.5 * hybridThick;
202  dz = 0.5 * hybridHeight;
203  solid = ns.addSolidNS(name,Box(dx, dy, dz));
204  LogDebug("TIDGeom") << solid.name()
205  << " Box made of " << hybridMat << " of dimensions "
206  << dx << ", " << dy << ", " << dz;
207  /* Volume hybrid = */ ns.addVolumeNS(Volume(name, solid, ns.material(hybridMat)));
208 
209  // Cool Insert
210  name = coolName;
211  dx = 0.5 * coolWidth;
212  dy = 0.5 * coolThick;
213  dz = 0.5 * coolHeight;
214  solid = ns.addSolidNS(name,Box(dx, dy, dz));
215  LogDebug("TIDGeom") << solid.name()
216  << " Box made of " << coolMat << " of dimensions "
217  << dx << ", " << dy << ", " << dz;
218  /* Volume cool = */ ns.addVolumeNS(Volume(name, solid, ns.material(coolMat)));
219 
220  // Loop over detectors to be placed
221  for (int k = 0; k < detectorN; k++) {
222  double bbl1, bbl2; // perhaps useless (bl1 enough)
223  // Frame Sides
224  name = sideFrameName[k];
225  if (dlHybrid > dlTop) {
226  // ring 1, ring 2
227  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
228  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+pitchHeight+topfr)/fullHeight;
229  } else {
230  // ring 3
231  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+pitchHeight+botfr)/fullHeight;
232  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
233  }
234  h1 = 0.5 * sideFrameThick;
235  dz = 0.5 * sideFrameHeight;
236  solid = ns.addSolidNS(name,Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.));
237  LogDebug("TIDGeom") << solid.name()
238  << " Trap made of " << sideFrameMat << " of dimensions "
239  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
240  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
241  << bbl2 << ", 0";
242  Volume sideFrame = ns.addVolumeNS(Volume(name, solid, ns.material(sideFrameMat)));
243 
244  std::string rotstr, rotns;
245  Rotation3D rot;
246 
247  // Hole in the frame below the wafer
248  name = holeFrameName[k];
249  double xpos, zpos;
250  dz = fullHeight - bottomFrameOver - topFrameOver;
251  bbl1 = dxbot - sideFrameWidth + bottomFrameOver*(dxtop-dxbot)/fullHeight;
252  bbl2 = dxtop - sideFrameWidth - topFrameOver*(dxtop-dxbot)/fullHeight;
253  if (dlHybrid > dlTop) {
254  // ring 1, ring 2
255  zpos = -(topFrameHeight+0.5*dz-0.5*sideFrameHeight);
256  } else {
257  // ring 3
258  zpos = bottomFrameHeight+0.5*dz-0.5*sideFrameHeight;
259  }
260  dz /= 2.;
261  solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bbl1,bbl1, 0, h1,bbl2,bbl2, 0));
262  LogDebug("TIDGeom") << solid.name()
263  << " Trap made of " << genMat << " of dimensions "
264  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
265  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
266  << bbl2 << ", 0";
267  Volume holeFrame = ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
268 
269  rot = ns.rotation(holeFrameRot[k]);
270  sideFrame.placeVolume(holeFrame,1,Transform3D(rot,Position(0e0,0e0,zpos)));// copyNr=1
271  LogDebug("TIDGeom") << holeFrame.name()
272  << " number 1 positioned in " << sideFrame.name()
273  << " at (0,0," << zpos << ") with no rotation";
274 
275  // Kapton circuit
276  double kaptonExtraHeight=0; // kapton extra height in the stereo
277  if (dlHybrid > dlTop) {
278  // ring 1, ring 2
279  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+botfr)/fullHeight;
280  if ( k == 1 ) {
281  kaptonExtraHeight = dlTop*sin(detTilt)-fullHeight*(1-cos(detTilt));
282  kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
283  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
284  }
285  else {
286  bbl2 = dxtop;
287  }
288  } else {
289  // ring 3
290  bbl2 = dxbot + (dxtop-dxbot)*(fullHeight+topfr)/fullHeight;
291  if ( k == 1) {
292  kaptonExtraHeight = dlBottom*sin(detTilt)-fullHeight*(1-cos(detTilt));
293  kaptonExtraHeight = 0.5*fabs(kaptonExtraHeight);
294  bbl1 = dxtop - (dxtop-dxbot)*(fullHeight+kaptonExtraHeight)/fullHeight;
295  } else {
296  bbl1 = dxbot;
297  }
298  }
299  h1 = 0.5 * kaptonThick;
300  dz = 0.5 * (kaptonHeight+kaptonExtraHeight);
301 
302  // For the stereo create the uncut solid, the solid to be removed and then the subtraction solid
303  if ( k == 1 ) {
304  // Uncut solid
305  Solid solidUncut = ns.addSolidNS(kaptonName[k]+"Uncut",Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0));
306 
307  // Piece to be cut
308  dz = (dlHybrid > dlTop) ? 0.5 * dlTop : 0.5 * dlBottom;
309  h1 = 0.5 * kaptonThick;
310  bbl1 = fabs(dz*sin(detTilt));
311  bbl2 = bbl1*0.000001;
312  double thet = atan((bbl1-bbl2)/(2*dz));
313  Solid solidCut = ns.addSolidNS(kaptonName[k]+"Cut",Trap(dz, thet, 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0));
314 
315  // Subtraction Solid
316  name = kaptonName[k];
317  rot = ns.rotation("tidmodpar:9PYX");
318  xpos = -0.5 * fullHeight * sin(detTilt);
319  zpos = 0.5 * kaptonHeight - bbl2;
320  solid = ns.addSolidNS(name,SubtractionSolid(solidUncut, solidCut, Transform3D(rot,Position(xpos,0.0,zpos))));
321  } else {
322  name = kaptonName[k];
323  solid = ns.addSolidNS(name,Trap(dz, 0., 0., h1, bbl1, bbl1, 0., h1, bbl2, bbl2, 0.));
324  }
325 
326  Volume kapton = ns.addVolumeNS(Volume(name, solid, ns.material(kaptonMat)));
327  LogDebug("TIDGeom") << solid.name()
328  << " SUBTRACTION SOLID Trap made of " << kaptonMat
329  << " of dimensions " << dz << ", 0, 0, " << h1
330  << ", " << bbl1 << ", " << bbl1 << ", 0, " << h1
331  << ", " << bbl2 << ", " << bbl2 << ", 0";
332 
333  // Hole in the kapton below the wafer
334  name = holeKaptonName[k];
335  dz = fullHeight - kaptonOver;
336  xpos = 0;
337  if (dlHybrid > dlTop) {
338  // ring 1, ring 2
339  bbl1 = dxbot - kaptonWidth + kaptonOver*(dxtop-dxbot)/fullHeight;
340  bbl2 = dxtop - kaptonWidth;
341  zpos = 0.5*(kaptonHeight-kaptonExtraHeight-dz);
342  if ( k == 1 ) {
343  zpos -= 0.5*kaptonOver*(1-cos(detTilt));
344  xpos = -0.5*kaptonOver*sin(detTilt);
345  }
346  } else {
347  // ring 3
348  bbl1 = dxbot - kaptonWidth;
349  bbl2 = dxtop - kaptonWidth - kaptonOver*(dxtop-dxbot)/fullHeight;
350  zpos = -0.5*(kaptonHeight-kaptonExtraHeight-dz);
351  }
352  dz /= 2.;
353  solid = ns.addSolidNS(name,Trap(dz,0.,0., h1,bbl1,bbl1, 0., h1,bbl2,bbl2, 0.));
354  LogDebug("TIDGeom") << solid.name()
355  << " Trap made of " << genMat << " of dimensions "
356  << dz << ", 0, 0, " << h1 << ", " << bbl1 << ", "
357  << bbl1 << ", 0, " << h1 << ", " << bbl2 << ", "
358  << bbl2 << ", 0";
359  Volume holeKapton = ns.addVolumeNS(Volume(name, solid, ns.material(genMat)));
360 
361  rot = ns.rotation(holeKaptonRot[k]);
362  kapton.placeVolume(holeKapton, 1, Transform3D(rot,Position(xpos, 0.0, zpos)));
363  LogDebug("TIDGeom") << holeKapton.name()
364  << " number 1 positioned in " << kapton.name()
365  << " at (0,0," << zpos << ") with no rotation";
366 
367  // Wafer
368  name = waferName[k];
369  if (k == 0 && dlHybrid < dlTop) {
370  bl1 = 0.5 * dlTop;
371  bl2 = 0.5 * dlBottom;
372  } else {
373  bl1 = 0.5 * dlBottom;
374  bl2 = 0.5 * dlTop;
375  }
376  h1 = 0.5 * waferThick[k];
377  dz = 0.5 * fullHeight;
378  solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bl1,bl1,0, h1,bl2,bl2,0));
379  LogDebug("TIDGeom") << solid.name()
380  << " Trap made of " << waferMat << " of dimensions "
381  << dz << ", 0, 0, " << h1 << ", " << bl1 << ", "
382  << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
383  << bl2 << ", 0";
384  Volume wafer = ns.addVolumeNS(Volume(name, solid, ns.material(waferMat)));
385 
386  // Active
387  name = activeName[k];
388  if (k == 0 && dlHybrid < dlTop) {
389  bl1 -= sideWidthTop;
390  bl2 -= sideWidthBottom;
391  }
392  else {
393  bl1 -= sideWidthBottom;
394  bl2 -= sideWidthTop;
395  }
396  dz = 0.5 * (waferThick[k] - backplaneThick[k]); // inactive backplane
397  h1 = 0.5 * activeHeight;
398  solid = ns.addSolidNS(name,Trap(dz, 0,0, h1,bl2,bl1,0, h1,bl2,bl1,0));
399  LogDebug("TIDGeom") << solid.name()
400  << " Trap made of " << activeMat << " of dimensions "
401  << dz << ", 0, 0, " << h1 << ", " << bl2 << ", "
402  << bl1 << ", 0, " << h1 << ", " << bl2 << ", "
403  << bl1 << ", 0";
404  Volume active = ns.addVolumeNS(Volume(name, solid, ns.material(activeMat)));
405  rot = ns.rotation(activeRot);
406  Position tran(0.0,-0.5 * backplaneThick[k],0.0); // from the definition of the wafer local axes
407  wafer.placeVolume(active, 1, Transform3D(rot,tran)); // inactive backplane copyNr=1
408  LogDebug("TIDGeom") << "DDTIDModuleAlgo test: " << active.name()
409  << " number 1 positioned in " << wafer.name()
410  << " at " << tran << " with " << rot;
411 
412  //Pitch Adapter
413  name = pitchName[k];
414  if (dlHybrid > dlTop) {
415  dz = 0.5 * dlTop;
416  } else {
417  dz = 0.5 * dlBottom;
418  }
419  if (k == 0) {
420  dx = dz;
421  dy = 0.5 * pitchThick;
422  dz = 0.5 * pitchHeight;
423  solid = ns.addSolidNS(name,Box(dx, dy, dz));
424  LogDebug("TIDGeom") << solid.name()
425  << " Box made of " << pitchMat << " of dimensions"
426  << " " << dx << ", " << dy << ", " << dz;
427  } else {
428  h1 = 0.5 * pitchThick;
429  bl1 = 0.5 * pitchHeight + 0.5 * dz * sin(detTilt);
430  bl2 = 0.5 * pitchHeight - 0.5 * dz * sin(detTilt);
431 
432  dz -=0.5*pitchStereoTol;
433  bl1-=pitchStereoTol;
434  bl2-=pitchStereoTol;
435 
436  double thet = atan((bl1-bl2)/(2.*dz));
437  solid = ns.addSolidNS(name,Trap(dz, thet, 0, h1, bl1, bl1, 0, h1, bl2, bl2, 0));
438  LogDebug("TIDGeom") << solid.name()
439  << " Trap made of " << pitchMat << " of "
440  << "dimensions " << dz << ", " << convertRadToDeg( thet )
441  << ", 0, " << h1 << ", " << bl1 << ", " << bl1
442  << ", 0, " << h1 << ", " << bl2 << ", " << bl2
443  << ", 0";
444  }
445  /* Volume pa = */ ns.addVolumeNS(Volume(name, solid, ns.material(pitchMat)));
446  }
447  }
448  LogDebug("TIDGeom") << "<<== End of DDTIDModuleAlgo construction ...";
449  return 1;
450 }
451 
452 // first argument is the type from the xml file
453 DECLARE_DDCMS_DETELEMENT(DDCMS_track_DDTIDModuleAlgo,algorithm)
#define LogDebug(id)
dd4hep::Solid addSolidNS(const std::string &name, dd4hep::Solid solid) const
Definition: DDNamespace.cc:211
dd4hep::Volume addVolumeNS(dd4hep::Volume vol) const
Definition: DDNamespace.cc:164
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
constexpr NumType convertRadToDeg(NumType radians)
Definition: GeantUnits.h:98
static long algorithm(Detector &, cms::DDParsingContext &ctxt, xml_h e, SensitiveDetector &)
int integer(const std::string &nam) const
Shortcut to access integer arguments.
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
dd4hep::Material material(const std::string &name) const
Definition: DDNamespace.cc:125
dd4hep::Volume Volume
int k[5][pyjets_maxn]
Namespace of DDCMS conversion namespace.
#define DECLARE_DDCMS_DETELEMENT(name, func)
Definition: DDPlugins.h:31
const dd4hep::Rotation3D & rotation(const std::string &name) const
Definition: DDNamespace.cc:138
std::vector< double > vecDble(const std::string &nam) const
Shortcut to access vector<double> arguments.
double dble(const std::string &nam) const
Shortcut to access double arguments.
std::vector< std::string > vecStr(const std::string &nam) const
Shortcut to access vector<string> arguments.
std::string parentName() const
Access value of rParent child node.
std::string str(const std::string &nam) const
Shortcut to access string arguments.