1 #include "DD4hep/DetFactoryHelper.h" 16 using VecDouble = vector<double>;
22 string genMat = args.
str(
"GeneralMaterial");
23 double detectorTilt = args.
dble(
"DetectorTilt");
24 double layerL = args.
dble(
"LayerL");
26 double radiusLo = args.
dble(
"RadiusLo");
27 int stringsLo = args.
integer(
"StringsLo");
28 string detectorLo = args.
str(
"StringDetLoName");
30 double radiusUp = args.
dble(
"RadiusUp");
31 int stringsUp = args.
integer(
"StringsUp");
32 string detectorUp = args.
str(
"StringDetUpName");
34 double cylinderT = args.
dble(
"CylinderThickness");
35 double cylinderInR = args.
dble(
"CylinderInnerRadius");
36 string cylinderMat = args.
str(
"CylinderMaterial");
37 double MFRingInR = args.
dble(
"MFRingInnerRadius");
38 double MFRingOutR = args.
dble(
"MFRingOuterRadius");
39 double MFRingT = args.
dble(
"MFRingThickness");
40 double MFRingDz = args.
dble(
"MFRingDeltaz");
41 string MFIntRingMat = args.
str(
"MFIntRingMaterial");
42 string MFExtRingMat = args.
str(
"MFExtRingMaterial");
44 double supportT = args.
dble(
"SupportThickness");
46 string centMat = args.
str(
"CentRingMaterial");
47 VecDouble centRing1par = args.
vecDble(
"CentRing1");
48 VecDouble centRing2par = args.
vecDble(
"CentRing2");
50 string fillerMat = args.
str(
"FillerMaterial");
51 double fillerDz = args.
dble(
"FillerDeltaz");
53 string ribMat = args.
str(
"RibMaterial");
54 VecDouble ribW = args.
vecDble(
"RibWidth");
55 VecDouble ribPhi = args.
vecDble(
"RibPhi");
57 VecDouble dohmListFW = args.
vecDble(
"DOHMListFW");
58 VecDouble dohmListBW = args.
vecDble(
"DOHMListBW");
60 double dohmtoMF = args.
dble(
"DOHMtoMFDist");
61 double dohmCarrierPhiOff = args.
dble(
"DOHMCarrierPhiOffset");
62 string dohmPrimName = args.
str(
"StringDOHMPrimName");
63 string dohmAuxName = args.
str(
"StringDOHMAuxName");
65 string dohmCarrierMaterial = args.
str(
"DOHMCarrierMaterial");
66 string dohmCableMaterial = args.
str(
"DOHMCableMaterial");
67 double dohmPrimL = args.
dble(
"DOHMPRIMLength");
68 string dohmPrimMaterial = args.
str(
"DOHMPRIMMaterial");
69 double dohmAuxL = args.
dble(
"DOHMAUXLength");
70 string dohmAuxMaterial = args.
str(
"DOHMAUXMaterial");
72 string pillarMaterial = args.
str(
"PillarMaterial");
74 double fwIntPillarDz = args.
dble(
"FWIntPillarDz");
75 double fwIntPillarDPhi = args.
dble(
"FWIntPillarDPhi");
76 VecDouble fwIntPillarZ = args.
vecDble(
"FWIntPillarZ");
77 VecDouble fwIntPillarPhi = args.
vecDble(
"FWIntPillarPhi");
78 double bwIntPillarDz = args.
dble(
"BWIntPillarDz");
79 double bwIntPillarDPhi = args.
dble(
"BWIntPillarDPhi");
80 VecDouble bwIntPillarZ = args.
vecDble(
"BWIntPillarZ");
81 VecDouble bwIntPillarPhi = args.
vecDble(
"BWIntPillarPhi");
83 double fwExtPillarDz = args.
dble(
"FWExtPillarDz");
84 double fwExtPillarDPhi = args.
dble(
"FWExtPillarDPhi");
85 VecDouble fwExtPillarZ = args.
vecDble(
"FWExtPillarZ");
86 VecDouble fwExtPillarPhi = args.
vecDble(
"FWExtPillarPhi");
87 double bwExtPillarDz = args.
dble(
"BWExtPillarDz");
88 double bwExtPillarDPhi = args.
dble(
"BWExtPillarDPhi");
89 VecDouble bwExtPillarZ = args.
vecDble(
"BWExtPillarZ");
90 VecDouble bwExtPillarPhi = args.
vecDble(
"BWExtPillarPhi");
92 LogDebug(
"TIBGeom") <<
"Parent " << mother
93 <<
" NameSpace " << ns.
name()
94 <<
" General Material " << genMat;
95 LogDebug(
"TIBGeom") <<
"Lower layer Radius " << radiusLo
96 <<
" Number " << stringsLo <<
" String " << detectorLo;
97 LogDebug(
"TIBGeom") <<
"Upper layer Radius "<< radiusUp
98 <<
" Number " << stringsUp <<
" String " << detectorUp;
99 LogDebug(
"TIBGeom") <<
"Cylinder Material/thickness " << cylinderMat <<
" " << cylinderT
100 <<
" Rib Material " << ribMat <<
" at " << ribW.size() <<
" positions with width/phi";
101 for (
unsigned int i = 0;
i < ribW.size();
i++) {
102 LogDebug(
"TIBGeom") <<
"\tribW[" <<
i <<
"] = " << ribW[
i]
105 LogDebug(
"TIBGeom") <<
"DOHM Primary " <<
" Material " << dohmPrimMaterial <<
" Length " << dohmPrimL;
106 LogDebug(
"TIBGeom") <<
"DOHM Aux " <<
" Material " << dohmAuxMaterial <<
" Length " << dohmAuxL;
107 for (
double i : dohmListFW) {
108 if (
i>0.)
LogDebug(
"TIBGeom") <<
"DOHM Primary at FW Position " <<
i;
109 if (
i<0.)
LogDebug(
"TIBGeom") <<
"DOHM Aux at FW Position " << -
i;
111 for (
double i : dohmListBW) {
112 if (
i>0.)
LogDebug(
"TIBGeom") <<
"DOHM Primary at BW Position " <<
i;
113 if (
i<0.)
LogDebug(
"TIBGeom") <<
"DOHM Aux at BW Position " << -
i;
115 LogDebug(
"TIBGeom") <<
"FW Internal Pillar [Dz, DPhi] " << fwIntPillarDz <<
", " << fwIntPillarDPhi;
116 for (
unsigned int i=0;
i<fwIntPillarZ.size();
i++) {
117 if( fwIntPillarPhi[
i]>0. ) {
118 LogDebug(
"TIBGeom") <<
" at positions [z, phi] " << fwIntPillarZ[
i] <<
" " << fwIntPillarPhi[
i];
121 LogDebug(
"TIBGeom") <<
"BW Internal Pillar [Dz, DPhi] " << bwIntPillarDz <<
", " << bwIntPillarDPhi;
122 for (
unsigned int i=0;
i<bwIntPillarZ.size();
i++) {
123 if( bwIntPillarPhi[
i]>0. ) {
124 LogDebug(
"TIBGeom") <<
" at positions [z, phi] " << bwIntPillarZ[
i] <<
" " << bwIntPillarPhi[
i];
127 LogDebug(
"TIBGeom") <<
"FW External Pillar [Dz, DPhi] " << fwExtPillarDz <<
", " << fwExtPillarDPhi;
128 for (
unsigned int i=0;
i<fwExtPillarZ.size();
i++) {
129 if( fwExtPillarPhi[
i]>0. ) {
130 LogDebug(
"TIBGeom") <<
" at positions [z, phi] " << fwExtPillarZ[
i] <<
" " << fwExtPillarPhi[
i];
133 LogDebug(
"TIBGeom") <<
"BW External Pillar [Dz, DPhi] " << bwExtPillarDz <<
", " << bwExtPillarDPhi;
134 for (
unsigned int i=0;
i<bwExtPillarZ.size();
i++) {
135 if( bwExtPillarPhi[
i]>0. ) {
136 LogDebug(
"TIBGeom") <<
" at positions [z, phi] " << bwExtPillarZ[
i] <<
" " << bwExtPillarPhi[
i];
140 const string&
idName = mother;
141 double rmin = MFRingInR;
142 double rmax = MFRingOutR;
143 Solid solid = ns.
addSolidNS(idName,Tube(rmin, rmax, 0.5*layerL));
144 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 146 <<
" with Rin " << rmin <<
" Rout " << rmax <<
" ZHalf " << 0.5*layerL;
150 double rin = rmin+MFRingT;
152 double rout = cylinderInR;
153 string name = idName +
"Down";
154 solid = ns.
addSolidNS(name,Tube(rin, rout, 0.5*layerL));
155 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 157 <<
" with Rin " << rin <<
" Rout " << rout
158 <<
" ZHalf " << 0.5*layerL;
160 layer.placeVolume(layerIn, 1);
161 LogDebug(
"TIBGeom") << layerIn.name()
162 <<
" number 1 positioned in " << layer.name()
163 <<
" at (0,0,0) with no rotation";
165 double rposdet = radiusLo;
166 double dphi = 2_pi/stringsLo;
168 for (
int n = 0;
n < stringsLo;
n++) {
169 double phi = (
n+0.5)*dphi;
170 double phix = phi - detectorTilt + 90_deg;
171 double theta = 90_deg;
172 double phiy = phix + 90._deg;
174 Position trdet(rposdet*
cos(phi), rposdet*
sin(phi), 0);
175 layerIn.placeVolume(detIn,
n+1, Transform3D(rotation,trdet));
176 LogDebug(
"TIBGeom") << detIn.name() <<
" number " <<
n+1 <<
" positioned in " 177 << layerIn.name() <<
" at " << trdet <<
" with " 181 rin = cylinderInR + cylinderT;
183 name = idName +
"Up";
184 solid = ns.
addSolidNS(name,Tube(rin, rout, 0.5*layerL));
185 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 187 <<
" with Rin " << rin <<
" Rout " << rout
188 <<
" ZHalf " << 0.5*layerL;
190 layer.placeVolume(layerOut, 1);
191 LogDebug(
"TIBGeom") << layerOut.name()
192 <<
" number 1 positioned in " << layer.name()
193 <<
" at (0,0,0) with no rotation";
196 dphi = 2_pi/stringsUp;
198 for (
int n = 0;
n < stringsUp;
n++) {
199 double phi = (
n+0.5)*dphi;
200 double phix = phi - detectorTilt - 90_deg;
201 double theta = 90_deg;
202 double phiy = phix + 90._deg;
204 Position trdet(rposdet*
cos(phi), rposdet*
sin(phi), 0);
205 layerOut.placeVolume(detOut,
n+1, Transform3D(rotation,trdet));
206 LogDebug(
"TIBGeom") <<
"DDTIBLayerAlgo test " << detectorUp
207 <<
" number " <<
n+1 <<
" positioned in " 208 << layerOut.name() <<
" at " << trdet <<
" with " 217 rout = cylinderInR+cylinderT;
218 name = idName +
"Cylinder";
219 solid = ns.
addSolidNS(name, Tube(rin, rout, 0.5*layerL));
220 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 221 << cylinderMat <<
" from 0 to " 223 <<
" Rout " << rout <<
" ZHalf " << 0.5*layerL;
225 layer.placeVolume(cylinder, 1);
226 LogDebug(
"TIBGeom") << cylinder.name()
227 <<
" number 1 positioned in " << layer.name()
228 <<
" at (0,0,0) with no rotation";
234 name = idName +
"CylinderIn";
235 solid = ns.
addSolidNS(name, Tube(rin, rout, 0.5*layerL));
236 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 238 <<
" with Rin " << rin <<
" Rout " << rout
239 <<
" ZHalf " << 0.5*layerL;
241 cylinder.placeVolume(cylinderIn, 1);
242 LogDebug(
"TIBGeom") << cylinderIn.name()
243 <<
" number 1 positioned in " << cylinder.name()
244 <<
" at (0,0,0) with no rotation";
248 name = idName +
"Filler";
249 solid = ns.
addSolidNS(name,Tube(rin, rout, fillerDz));
250 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 251 << fillerMat <<
" from " << 0. <<
" to " 253 <<
" Rout " << rout <<
" ZHalf " << fillerDz;
255 cylinderIn.placeVolume(cylinderFiller, 1, Position(0.0, 0.0, 0.5*layerL-fillerDz));
256 cylinderIn.placeVolume(cylinderFiller, 2, Position(0.0, 0.0,-0.5*layerL+fillerDz));
257 LogDebug(
"TIBGeom") <<
"DDTIBLayerAlgo test " << cylinderFiller.name()
258 <<
" number 1" <<
" positioned in " 259 << cylinderIn.name() <<
" at " << Position(0.0, 0.0, 0.5*layerL-fillerDz)
260 <<
" number 2" <<
" positioned in " 261 << cylinderIn.name() <<
" at " << Position(0.0, 0.0,-0.5*layerL+fillerDz);
266 for (
size_t i = 0;
i < ribW.size();
i++) {
267 name = idName +
"Rib" + std::to_string(
i);
268 double width = 2.*ribW[
i]/(rin+rout);
269 double dz = 0.5*layerL-2.*fillerDz;
270 double _rmi =
std::min(rin+0.5_mm,rout-0.5_mm);
271 double _rma =
std::max(rin+0.5_mm,rout-0.5_mm);
272 solid = ns.
addSolidNS(name,Tube(_rmi,_rma,dz,-0.5*width, width));
273 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 276 << rin+0.5_mm <<
" Rout " 277 << rout-0.5_mm <<
" ZHalf " <<
dz;
279 double phix = ribPhi[
i];
280 double theta = 90_deg;
281 double phiy = phix + 90._deg;
283 Position tran(0, 0, 0);
284 cylinderIn.placeVolume(cylinderRib, 1, Transform3D(rotation,tran));
285 LogDebug(
"TIBGeom") << cylinderRib.name()
286 <<
" number 1" <<
" positioned in " 287 << cylinderIn.name() <<
" at " << tran <<
" with " 295 rout = rin + MFRingT;
296 name = idName +
"InnerMFRing";
297 solid = ns.
addSolidNS(name,Tube(rin, rout, MFRingDz));
298 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 299 << MFIntRingMat <<
" from 0 to " 301 <<
" Rout " << rout <<
" ZHalf " << MFRingDz;
303 layer.placeVolume(inmfr, 1, Position(0.0, 0.0, -0.5*layerL+MFRingDz));
304 layer.placeVolume(inmfr, 2, Position(0.0, 0.0, +0.5*layerL+MFRingDz));
306 <<
" number 1 and 2 positioned in " << layer.name()
307 <<
" at (0,0,+-" << 0.5*layerL-MFRingDz <<
") with no rotation";
311 rin = rout - MFRingT;
312 name = idName +
"OuterMFRing";
313 solid= ns.
addSolidNS(name,Tube(rin, rout, MFRingDz));
314 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 315 << MFExtRingMat <<
" from 0 to " 317 <<
" Rout " << rout <<
" ZHalf " << MFRingDz;
320 layer.placeVolume(outmfr, 1, Position(0.0, 0.0, -0.5*layerL+MFRingDz));
321 layer.placeVolume(outmfr, 2, Position(0.0, 0.0, +0.5*layerL+MFRingDz));
322 LogDebug(
"TIBGeom") << outmfr.name()
323 <<
" number 1 and 2 positioned in " << layer.name()
324 <<
" at (0,0,+-" << 0.5*layerL-MFRingDz
325 <<
") with no rotation";
330 double centZ = centRing1par[0];
331 double centDz = 0.5*centRing1par[1];
332 rin = centRing1par[2];
333 rout = centRing1par[3];
334 name = idName +
"CentRing1";
335 solid = ns.
addSolidNS(name,Tube(rin, rout, centDz));
337 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 339 <<
" with Rin " << rin <<
" Rout " << rout
340 <<
" ZHalf " << centDz;
343 layer.placeVolume(cent1,1, Position(0.0, 0.0, centZ));
344 LogDebug(
"TIBGeom") << cent1.name() <<
" positioned in " << layer.name()
345 <<
" at (0,0," << centZ <<
") with no rotation";
347 centZ = centRing2par[0];
348 centDz = 0.5*centRing2par[1];
349 rin = centRing2par[2];
350 rout = centRing2par[3];
351 name = idName +
"CentRing2";
352 solid = ns.
addSolidNS(name, Tube(rin, rout, centDz));
353 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 355 <<
" with Rin " << rin <<
" Rout " << rout
356 <<
" ZHalf " << centDz;
359 layer.placeVolume(cent2, 1, Position(0e0,0e0,centZ));
361 <<
" positioned in " << layer.name()
362 <<
" at (0,0," << centZ <<
") with no rotation";
368 name = idName +
"DOHMCarrier";
369 double dohmCarrierRin = MFRingOutR - MFRingT;
370 double dohmCarrierRout = MFRingOutR;
371 double dohmCarrierDz = 0.5*(dohmPrimL+dohmtoMF);
372 double dohmCarrierZ = 0.5*layerL-2.*MFRingDz-dohmCarrierDz;
374 solid = ns.
addSolidNS(name,Tube(dohmCarrierRin, dohmCarrierRout,
375 dohmCarrierPhiOff, dohmCarrierDz,
376 180._deg-2.*dohmCarrierPhiOff));
377 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " 378 << dohmCarrierMaterial <<
" from " 379 << dohmCarrierPhiOff <<
" to " 380 << 180._deg-dohmCarrierPhiOff <<
" with Rin " 381 << dohmCarrierRin <<
" Rout " << MFRingOutR <<
" ZHalf " 386 dphi = 2_pi/stringsUp;
388 Rotation3D dohmRotation;
389 double dohmR = 0.5*(dohmCarrierRin+dohmCarrierRout);
391 for (
int j = 0; j<4; j++) {
392 vector<double> dohmList;
396 int dohmCarrierReplica=0;
401 name = idName +
"DOHMCarrierFW";
402 dohmList = dohmListFW;
403 tran = Position(0., 0., dohmCarrierZ);
404 rotstr = idName +
"FwUp";
405 rotation = Rotation3D();
406 dohmCarrierReplica = 1;
410 name = idName +
"DOHMCarrierFW";
411 dohmList = dohmListFW;
412 tran = Position(0., 0., dohmCarrierZ);
413 rotstr = idName +
"FwDown";
414 rotation =
makeRotation3D(90._deg, 180._deg, 90._deg,270._deg, 0.,0.);
415 dohmCarrierReplica = 2;
419 name = idName +
"DOHMCarrierBW";
420 dohmList = dohmListBW;
421 tran = Position(0., 0., -dohmCarrierZ);
422 rotstr = idName +
"BwUp";
423 rotation =
makeRotation3D(90._deg, 180._deg, 90._deg, 90._deg, 180._deg, 0.);
424 dohmCarrierReplica = 1;
428 name = idName +
"DOHMCarrierBW";
429 dohmList = dohmListBW;
430 tran = Position(0., 0., -dohmCarrierZ);
431 rotstr = idName +
"BwDown";
432 rotation =
makeRotation3D(90._deg, 0., 90._deg, 270._deg, 180._deg, 0.);
433 dohmCarrierReplica = 2;
442 for (
size_t i = 0;
i < placeDohm*dohmList.size();
i++ ) {
443 double phi = (
std::abs(dohmList[
i])+0.5-1.)*dphi;
444 double phix = phi + 90_deg;
445 double theta = 90_deg;
446 double phiy = phix + 90._deg;
455 dohm = ns.
volume(dohmAuxName);
456 dohmZ = dohmCarrierDz - 0.5*dohmAuxL - dohmtoMF;
458 dohmReplica = primReplica;
461 dohm = ns.
volume(dohmPrimName);
462 dohmZ = dohmCarrierDz - 0.5*dohmPrimL - dohmtoMF;
464 dohmReplica = auxReplica;
466 Position dohmTrasl(dohmR*
cos(phi), dohmR*
sin(phi), dohmZ);
467 dohmCarrier.placeVolume(dohm,dohmReplica,Transform3D(dohmRotation,dohmTrasl));
469 <<
" replica " << dohmReplica <<
" positioned in " 470 << dohmCarrier.name() <<
" at " << dohmTrasl <<
" with " 474 if ( placeDohm || primReplica || auxReplica || dohmR>0e0 ) {}
475 edm::LogWarning(
"TIBGeom") <<
"DOOHM placement sucks for Geant4. ERASED!";
477 layer.placeVolume(dohmCarrier, dohmCarrierReplica, Transform3D(rotation,tran));
478 LogDebug(
"TIBGeom") <<
"DDTIBLayerAlgo test " 479 << dohmCarrier.name() <<
" positioned in " << mother
480 <<
" replica " << dohmCarrierReplica <<
" at " 485 for (
int j = 0; j<4; j++) {
486 vector<double> pillarZ;
487 vector<double> pillarPhi;
488 double pillarDz=0, pillarDPhi=0, pillarRin=0, pillarRout=0;
492 name = idName +
"FWIntPillar";
493 pillarZ = fwIntPillarZ;
494 pillarPhi = fwIntPillarPhi;
495 pillarRin = MFRingInR;
496 pillarRout = MFRingInR + MFRingT;
497 pillarDz = fwIntPillarDz;
498 pillarDPhi = fwIntPillarDPhi;
501 name = idName +
"BWIntPillar";
502 pillarZ = bwIntPillarZ;
503 pillarPhi = bwIntPillarPhi;
504 pillarRin = MFRingInR;
505 pillarRout = MFRingInR + MFRingT;
506 pillarDz = bwIntPillarDz;
507 pillarDPhi = bwIntPillarDPhi;
510 name = idName +
"FWExtPillar";
511 pillarZ = fwExtPillarZ;
512 pillarPhi = fwExtPillarPhi;
513 pillarRin = MFRingOutR - MFRingT;
514 pillarRout = MFRingOutR;
515 pillarDz = fwExtPillarDz;
516 pillarDPhi = fwExtPillarDPhi;
519 name = idName +
"BWExtPillar";
520 pillarZ = bwExtPillarZ;
521 pillarPhi = bwExtPillarPhi;
522 pillarRin = MFRingOutR - MFRingT;
523 pillarRout = MFRingOutR;
524 pillarDz = bwExtPillarDz;
525 pillarDPhi = bwExtPillarDPhi;
529 solid = ns.
addSolidNS(name,Tube(pillarRin, pillarRout, pillarDz, -pillarDPhi, 2.*pillarDPhi));
531 LogDebug(
"TIBGeom") << solid.name() <<
" Tubs made of " << pillarMaterial <<
" from " 532 << -pillarDPhi <<
" to " << pillarDPhi <<
" with Rin " 533 << pillarRin <<
" Rout " << pillarRout <<
" ZHalf " 536 Rotation3D pillarRota;
537 int pillarReplica = 0;
538 for (
unsigned int i=0;
i<pillarZ.size();
i++) {
539 if( pillarPhi[
i]>0. ) {
540 pillarTran = Position(0., 0., pillarZ[
i]);
541 pillarRota =
makeRotation3D(90._deg, pillarPhi[i], 90._deg, 90._deg+pillarPhi[i], 0., 0.);
542 layer.placeVolume(Pillar,i,Transform3D(pillarRota,pillarTran));
543 LogDebug(
"TIBGeom") << Pillar.name() <<
" positioned in " 545 << pillarTran <<
" with " << pillarRota
546 <<
" copy number " << pillarReplica;
dd4hep::Solid addSolidNS(const std::string &name, dd4hep::Solid solid) const
dd4hep::Volume volume(const std::string &name, bool exc=true) const
static long algorithm(Detector &, cms::DDParsingContext &context, xml_h element, SensitiveDetector &)
dd4hep::Volume addVolumeNS(dd4hep::Volume vol) const
Sin< T >::type sin(const T &t)
Geom::Theta< T > theta() const
constexpr NumType convertRadToDeg(NumType radians)
int integer(const std::string &nam) const
Shortcut to access integer arguments.
dd4hep::Rotation3D makeRotation3D(double thetaX, double phiX, double thetaY, double phiY, double thetaZ, double phiZ)
std::string_view name() const
Cos< T >::type cos(const T &t)
Abs< T >::type abs(const T &t)
dd4hep::Material material(const std::string &name) const
Namespace of DDCMS conversion namespace.
#define DECLARE_DDCMS_DETELEMENT(name, func)
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::string parentName() const
Access value of rParent child node.
std::string str(const std::string &nam) const
Shortcut to access string arguments.