CMS 3D CMS Logo

Functions
DDEcalEndcapAlgo.cc File Reference
#include "DD4hep/DetFactoryHelper.h"
#include "DetectorDescription/DDCMS/interface/DDPlugins.h"
#include "DetectorDescription/DDCMS/interface/BenchmarkGrd.h"
#include "DetectorDescription/DDCMS/interface/DDutils.h"
#include "DataFormats/Math/interface/angle_units.h"
#include "Geometry/EcalCommonData/interface/DDEcalEndcapTrapX.h"
#include <CLHEP/Geometry/Transform3D.h>
#include <string>
#include <vector>

Go to the source code of this file.

Functions

static long algorithm (dd4hep::Detector &, cms::DDParsingContext &ctxt, xml_h e)
 
 DD4HEP_OPEN_PLUGIN (dd4hep, ddcms_det_element_DDCMS_ecal_DDEcalEndcapAlgo)
 

Function Documentation

◆ algorithm()

static long algorithm ( dd4hep::Detector &  ,
cms::DDParsingContext ctxt,
xml_h  e 
)
static

Definition at line 137 of file DDEcalEndcapAlgo.cc.

References cms::DDNamespace::addSolidNS(), cms::DDNamespace::addVolumeNS(), writedatasetfile::args, cms::cuda::assert(), DDEcalEndcapTrapX::centrePos(), cms::convert2mm(), counter, data, PVValHelper::dxy, PVValHelper::dz, MillePedeFileConverter_cfg::e, cuy::ii, createfilelist::int, cms::DDNamespace::material(), DDEcalEndcapTrapX::moveto(), PixelTestBeamValidation_cfi::Position, rname, DDEcalEndcapTrapX::rotation(), cms::DDNamespace::solid(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, to_string(), DDEcalEndcapTrapX::translate(), and cms::DDNamespace::volume().

137  {
138  BenchmarkGrd counter("DDEcalEndcapAlgo");
139  cms::DDNamespace ns(ctxt, e, true);
140  cms::DDAlgoArguments args(ctxt, e);
141 
142  // TRICK!
143  std::string myns{mynamespace(args.parentName()).data(), mynamespace(args.parentName()).size()};
144 
145  Endcap ee;
146  ee.mat = args.str("EEMat");
147  ee.zOff = args.dble("EEzOff");
148 
149  ee.quaName = args.str("EEQuaName");
150  ee.quaMat = args.str("EEQuaMat");
151  ee.crysMat = args.str("EECrysMat");
152  ee.wallMat = args.str("EEWallMat");
153  ee.crysLength = args.dble("EECrysLength");
154  ee.crysRear = args.dble("EECrysRear");
155  ee.crysFront = args.dble("EECrysFront");
156  ee.sCELength = args.dble("EESCELength");
157  ee.sCERear = args.dble("EESCERear");
158  ee.sCEFront = args.dble("EESCEFront");
159  ee.sCALength = args.dble("EESCALength");
160  ee.sCARear = args.dble("EESCARear");
161  ee.sCAFront = args.dble("EESCAFront");
162  ee.sCAWall = args.dble("EESCAWall");
163  ee.sCHLength = args.dble("EESCHLength");
164  ee.sCHSide = args.dble("EESCHSide");
165  ee.nSCTypes = args.dble("EEnSCTypes");
166  ee.nColumns = args.dble("EEnColumns");
167  ee.nSCCutaway = args.dble("EEnSCCutaway");
168  ee.nSCquad = args.dble("EEnSCquad");
169  ee.nCRSC = args.dble("EEnCRSC");
170  ee.vecEESCProf = args.vecDble("EESCProf");
171  ee.vecEEShape = args.vecDble("EEShape");
172  ee.vecEESCCutaway = args.vecDble("EESCCutaway");
173  ee.vecEESCCtrs = args.vecDble("EESCCtrs");
174  ee.vecEECRCtrs = args.vecDble("EECRCtrs");
175 
176  ee.cutBoxName = args.str("EECutBoxName");
177 
178  ee.envName = args.str("EEEnvName");
179  ee.alvName = args.str("EEAlvName");
180  ee.intName = args.str("EEIntName");
181  ee.cryName = args.str("EECryName");
182 
183  ee.pFHalf = args.dble("EEPFHalf");
184  ee.pFFifth = args.dble("EEPFFifth");
185  ee.pF45 = args.dble("EEPF45");
186 
187  ee.vecEESCLims = args.vecDble("EESCLims");
188  ee.iLength = args.dble("EEiLength");
189  ee.iXYOff = args.dble("EEiXYOff");
190  ee.cryZOff = args.dble("EECryZOff");
191  ee.zFront = args.dble("EEzFront");
192 
193  // Position supercrystals in EE Quadrant
194 
195  //********************************* cutbox for trimming edge SCs
196  const double cutWid(ee.sCERear / sqrt(2.));
197  ee.cutParms[0] = cutWid;
198  ee.cutParms[1] = cutWid;
199  ee.cutParms[2] = ee.sCELength / sqrt(2.);
200  dd4hep::Solid eeCutBox = dd4hep::Box(ee.cutBoxName, ee.cutParms[0], ee.cutParms[1], ee.cutParms[2]);
201  //**************************************************************
202 
203  const double zFix(ee.zFront - 3172 * dd4hep::mm); // fix for changing z offset
204 
205  //** fill supercrystal front and rear center positions from xml input
206  for (unsigned int iC(0); iC != (unsigned int)ee.nSCquad; ++iC) {
207  const unsigned int iOff(8 * iC);
208  const unsigned int ix((unsigned int)ee.vecEESCCtrs[iOff + 0]);
209  const unsigned int iy((unsigned int)ee.vecEESCCtrs[iOff + 1]);
210 
211  assert(ix > 0 && ix < 11 && iy > 0 && iy < 11);
212 
213  ee.scrFCtr[ix - 1][iy - 1] =
214  DDTranslation(ee.vecEESCCtrs[iOff + 2], ee.vecEESCCtrs[iOff + 4], ee.vecEESCCtrs[iOff + 6] + zFix);
215 
216  ee.scrRCtr[ix - 1][iy - 1] =
217  DDTranslation(ee.vecEESCCtrs[iOff + 3], ee.vecEESCCtrs[iOff + 5], ee.vecEESCCtrs[iOff + 7] + zFix);
218  }
219 
220  //** fill crystal front and rear center positions from xml input
221  for (unsigned int iC(0); iC != 25; ++iC) {
222  const unsigned int iOff(8 * iC);
223  const unsigned int ix((unsigned int)ee.vecEECRCtrs[iOff + 0]);
224  const unsigned int iy((unsigned int)ee.vecEECRCtrs[iOff + 1]);
225 
226  assert(ix > 0 && ix < 6 && iy > 0 && iy < 6);
227 
228  ee.cryFCtr[ix - 1][iy - 1] =
229  DDTranslation(ee.vecEECRCtrs[iOff + 2], ee.vecEECRCtrs[iOff + 4], ee.vecEECRCtrs[iOff + 6]);
230 
231  ee.cryRCtr[ix - 1][iy - 1] =
232  DDTranslation(ee.vecEECRCtrs[iOff + 3], ee.vecEECRCtrs[iOff + 5], ee.vecEECRCtrs[iOff + 7]);
233  }
234 
235  dd4hep::Solid eeCRSolid = dd4hep::Trap(ee.cryName,
236  0.5 * ee.crysLength,
237  atan((ee.crysRear - ee.crysFront) / (sqrt(2.) * ee.crysLength)),
238  45._deg,
239  0.5 * ee.crysFront,
240  0.5 * ee.crysFront,
241  0.5 * ee.crysFront,
242  0._deg,
243  0.5 * ee.crysRear,
244  0.5 * ee.crysRear,
245  0.5 * ee.crysRear,
246  0._deg);
247 #ifdef EDM_ML_DEBUG
248  edm::LogVerbatim("EcalGeom") << eeCRSolid.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.crysLength)
249  << ":" << (atan((ee.crysRear - ee.crysFront) / (sqrt(2.) * ee.crysLength))) << ":"
250  << 45._deg << ":" << cms::convert2mm(0.5 * ee.crysFront) << ":"
251  << cms::convert2mm(0.5 * ee.crysFront) << ":" << cms::convert2mm(0.5 * ee.crysFront)
252  << ":" << 0._deg << ":" << cms::convert2mm(0.5 * ee.crysRear) << ":"
253  << cms::convert2mm(0.5 * ee.crysRear) << ":" << cms::convert2mm(0.5 * ee.crysRear) << ":"
254  << 0._deg;
255 #endif
256  dd4hep::Volume eeCRLog = dd4hep::Volume(myns + ee.cryName, eeCRSolid, ns.material(ee.crysMat));
257 
258  for (unsigned int isc(0); isc < ee.nSCTypes; ++isc) {
259  unsigned int iSCType = isc + 1;
260  const std::string anum(std::to_string(iSCType));
261  const double eFront(0.5 * ee.sCEFront);
262  const double eRear(0.5 * ee.sCERear);
263  const double eAng(atan((ee.sCERear - ee.sCEFront) / (sqrt(2.) * ee.sCELength)));
264  const double ffived(45_deg);
265  const double zerod(0_deg);
266  std::string eeSCEnvName(1 == iSCType ? ee.envName + std::to_string(iSCType)
267  : (ee.envName + std::to_string(iSCType) + "Tmp"));
268  dd4hep::Solid eeSCEnv = ns.addSolidNS(
269  eeSCEnvName,
270  dd4hep::Trap(
271  eeSCEnvName, 0.5 * ee.sCELength, eAng, ffived, eFront, eFront, eFront, zerod, eRear, eRear, eRear, zerod));
272 #ifdef EDM_ML_DEBUG
273  edm::LogVerbatim("EcalGeom") << eeSCEnv.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.sCELength)
274  << ":" << eAng << ":" << ffived << ":" << cms::convert2mm(eFront) << ":"
275  << cms::convert2mm(eFront) << ":" << cms::convert2mm(eFront) << ":" << zerod << ":"
276  << cms::convert2mm(eRear) << ":" << cms::convert2mm(eRear) << ":"
277  << cms::convert2mm(eRear) << ":" << zerod;
278 #endif
279 
280  const double aFront(0.5 * ee.sCAFront);
281  const double aRear(0.5 * ee.sCARear);
282  const double aAng(atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength)));
283  std::string eeSCAlvName(
284  (1 == iSCType ? ee.alvName + std::to_string(iSCType) : (ee.alvName + std::to_string(iSCType) + "Tmp")));
285  dd4hep::Solid eeSCAlv = ns.addSolidNS(
286  eeSCAlvName,
287  dd4hep::Trap(
288  eeSCAlvName, 0.5 * ee.sCALength, aAng, ffived, aFront, aFront, aFront, zerod, aRear, aRear, aRear, zerod));
289 #ifdef EDM_ML_DEBUG
290  edm::LogVerbatim("EcalGeom") << eeSCAlv.name() << " Trap with parameters: " << cms::convert2mm(0.5 * ee.sCALength)
291  << ":" << aAng << ":" << ffived << ":" << cms::convert2mm(aFront) << ":"
292  << cms::convert2mm(aFront) << ":" << cms::convert2mm(aFront) << ":" << zerod << ":"
293  << cms::convert2mm(aRear) << ":" << cms::convert2mm(aRear) << ":"
294  << cms::convert2mm(aRear) << ":" << zerod;
295 #endif
296 
297  const double dwall(ee.sCAWall);
298  const double iFront(aFront - dwall);
299  const double iRear(iFront);
300  const double iLen(ee.iLength);
301  std::string eeSCIntName(1 == iSCType ? ee.intName + std::to_string(iSCType)
302  : (ee.intName + std::to_string(iSCType) + "Tmp"));
303  dd4hep::Solid eeSCInt = ns.addSolidNS(eeSCIntName,
304  dd4hep::Trap(eeSCIntName,
305  iLen / 2.,
306  atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength)),
307  ffived,
308  iFront,
309  iFront,
310  iFront,
311  zerod,
312  iRear,
313  iRear,
314  iRear,
315  zerod));
316 #ifdef EDM_ML_DEBUG
317  edm::LogVerbatim("EcalGeom") << eeSCAlv.name() << " Trap with parameters: " << cms::convert2mm(iLen / 2.) << ":"
318  << (atan((ee.sCARear - ee.sCAFront) / (sqrt(2.) * ee.sCALength))) << ":" << ffived
319  << ":" << cms::convert2mm(iFront) << ":" << cms::convert2mm(iFront) << ":"
320  << cms::convert2mm(iFront) << ":" << zerod << ":" << cms::convert2mm(iRear) << ":"
321  << cms::convert2mm(iRear) << ":" << cms::convert2mm(iRear) << ":" << zerod;
322 #endif
323 
324  const double dz(-0.5 * (ee.sCELength - ee.sCALength));
325  const double dxy(0.5 * dz * (ee.sCERear - ee.sCEFront) / ee.sCELength);
326  const double zIOff(-(ee.sCALength - iLen) / 2.);
327  const double xyIOff(ee.iXYOff);
328 
329  dd4hep::Volume eeSCELog;
330  dd4hep::Volume eeSCALog;
331  dd4hep::Volume eeSCILog;
332 
333  if (1 == iSCType) { // standard SC in this block
334  eeSCELog =
335  ns.addVolumeNS(dd4hep::Volume(myns + ee.envName + std::to_string(iSCType), eeSCEnv, ns.material(ee.mat)));
336  eeSCALog = dd4hep::Volume(myns + ee.alvName + std::to_string(iSCType), eeSCAlv, ns.material(ee.wallMat));
337  eeSCILog = dd4hep::Volume(myns + ee.intName + std::to_string(iSCType), eeSCInt, ns.material(ee.mat));
338  } else { // partial SCs this block: create subtraction volumes as appropriate
339  const double half(ee.cutParms[0] - ee.pFHalf * ee.crysRear);
340  const double fifth(ee.cutParms[0] + ee.pFFifth * ee.crysRear);
341  const double fac(ee.pF45);
342 
343  const double zmm(0 * dd4hep::mm);
344 
345  DDTranslation cutTra(
346  2 == iSCType ? DDTranslation(zmm, half, zmm)
347  : (3 == iSCType ? DDTranslation(half, zmm, zmm)
348  : (4 == iSCType ? DDTranslation(zmm, -fifth, zmm)
349  : (5 == iSCType ? DDTranslation(-half * fac, -half * fac, zmm)
350  : DDTranslation(-fifth, zmm, zmm)))));
351 
352  const CLHEP::HepRotationZ cutm(ffived);
353 
354  DDRotationMatrix cutRot(5 != iSCType ? DDRotationMatrix()
355  : myrot(ns,
356  "EECry5Rot",
357  DDRotationMatrix(cutm.xx(),
358  cutm.xy(),
359  cutm.xz(),
360  cutm.yx(),
361  cutm.yy(),
362  cutm.yz(),
363  cutm.zx(),
364  cutm.zy(),
365  cutm.zz())));
366 
367  dd4hep::Solid eeCutEnv = dd4hep::SubtractionSolid(ee.envName + std::to_string(iSCType),
368  ns.solid(ee.envName + std::to_string(iSCType) + "Tmp"),
369  eeCutBox,
370  dd4hep::Transform3D(cutRot, cutTra));
371 #ifdef EDM_ML_DEBUG
372  edm::LogVerbatim("EcalGeom") << eeCutEnv.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":"
373  << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]);
374 #endif
375 
376  const DDTranslation extra(dxy, dxy, dz);
377 
378  dd4hep::Solid eeCutAlv = dd4hep::SubtractionSolid(ee.alvName + std::to_string(iSCType),
379  ns.solid(ee.alvName + std::to_string(iSCType) + "Tmp"),
380  eeCutBox,
381  dd4hep::Transform3D(cutRot, cutTra - extra));
382 #ifdef EDM_ML_DEBUG
383  edm::LogVerbatim("EcalGeom") << eeCutAlv.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":"
384  << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]);
385 #endif
386 
387  const double mySign(iSCType < 4 ? +1. : -1.);
388 
389  const DDTranslation extraI(xyIOff + mySign * 2 * dd4hep::mm, xyIOff + mySign * 2 * dd4hep::mm, zIOff);
390 
391  dd4hep::Solid eeCutInt = dd4hep::SubtractionSolid(ee.intName + std::to_string(iSCType),
392  ns.solid(ee.intName + std::to_string(iSCType) + "Tmp"),
393  eeCutBox,
394  dd4hep::Transform3D(cutRot, cutTra - extraI));
395 #ifdef EDM_ML_DEBUG
396  edm::LogVerbatim("EcalGeom") << eeCutInt.name() << " Subtracted by " << cms::convert2mm(ee.cutParms[0]) << ":"
397  << cms::convert2mm(ee.cutParms[1]) << ":" << cms::convert2mm(ee.cutParms[2]);
398 #endif
399 
400  eeSCELog =
401  ns.addVolumeNS(dd4hep::Volume(myns + ee.envName + std::to_string(iSCType), eeCutEnv, ns.material(ee.mat)));
402  eeSCALog = dd4hep::Volume(myns + ee.alvName + std::to_string(iSCType), eeCutAlv, ns.material(ee.wallMat));
403  eeSCILog = dd4hep::Volume(myns + ee.intName + std::to_string(iSCType), eeCutInt, ns.material(ee.mat));
404  }
405  eeSCELog.placeVolume(eeSCALog, iSCType * 100 + 1, dd4hep::Position(dxy, dxy, dz));
406  eeSCALog.placeVolume(eeSCILog, iSCType * 100 + 1, dd4hep::Position(xyIOff, xyIOff, zIOff));
407 #ifdef EDM_ML_DEBUG
408  edm::LogVerbatim("EEGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCELog.name();
409  edm::LogVerbatim("EEGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCALog.name();
410  edm::LogVerbatim("EcalGeom") << eeSCALog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCELog.name()
411  << " at (" << cms::convert2mm(dxy) << ", " << cms::convert2mm(dxy) << ", "
412  << cms::convert2mm(dz) << ")";
413  edm::LogVerbatim("EcalGeom") << eeSCILog.name() << " " << (iSCType * 100 + 1) << " in " << eeSCALog.name()
414  << " at (" << cms::convert2mm(xyIOff) << ", " << cms::convert2mm(xyIOff) << ", "
415  << cms::convert2mm(zIOff) << ")";
416 #endif
417  DDTranslation croffset(0., 0., 0.);
418 
419  // Position crystals within parent supercrystal interior volume
420  static const unsigned int ncol(5);
421 
422  if (iSCType > 0 && iSCType <= ee.nSCTypes) {
423  const unsigned int icoffset((iSCType - 1) * ncol - 1);
424 
425  // Loop over columns of SC
426  for (unsigned int icol(1); icol <= ncol; ++icol) {
427  // Get column limits for this SC type from xml input
428  const int ncrcol((int)ee.vecEESCProf[icoffset + icol]);
429 
430  const int imin(0 < ncrcol ? 1 : (0 > ncrcol ? ncol + ncrcol + 1 : 0));
431  const int imax(0 < ncrcol ? ncrcol : (0 > ncrcol ? ncol : 0));
432 
433  if (imax > 0) {
434  // Loop over crystals in this row
435  for (int irow(imin); irow <= imax; ++irow) {
436  // Create crystal as a DDEcalEndcapTrapX object and calculate rotation and
437  // translation required to position it in the SC.
438  DDEcalEndcapTrapX crystal(1, ee.crysFront, ee.crysRear, ee.crysLength);
439 
440  crystal.moveto(ee.cryFCtr[icol - 1][irow - 1], ee.cryRCtr[icol - 1][irow - 1]);
441 
442  std::string rname("EECrRoC" + std::to_string(icol) + "R" + std::to_string(irow));
443 
444  if (rname == "EECrRoC1R1") {
445  // The "EECrRoC1R1" rotation is too small and would be ignored by ROOT. It needs to be
446  // increased by 1% to take effect. See placeEFRYn00 for more details.
447 
448  placeEFRYn00(
449  eeSCALog, eeCRLog, 100 * iSCType + 10 * (icol - 1) + (irow - 1), ns, rname, crystal, ee.cryZOff);
450  } else
451  eeSCALog.placeVolume(eeCRLog,
452  100 * iSCType + 10 * (icol - 1) + (irow - 1),
453  dd4hep::Transform3D(myrot(ns, rname, crystal.rotation()),
454  dd4hep::Position(crystal.centrePos().x(),
455  crystal.centrePos().y(),
456  crystal.centrePos().z() - ee.cryZOff)));
457 #ifdef EDM_ML_DEBUG
458  edm::LogVerbatim("EEGeom") << eeCRLog.name() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1))
459  << " in " << eeSCALog.name();
460  edm::LogVerbatim("EcalGeom") << eeCRLog.name() << " " << (100 * iSCType + 10 * (icol - 1) + (irow - 1))
461  << " in " << eeSCALog.name() << " at ("
462  << cms::convert2mm(crystal.centrePos().x()) << ", "
463  << cms::convert2mm(crystal.centrePos().y()) << ", "
464  << cms::convert2mm((crystal.centrePos().z() - ee.cryZOff)) << ")";
465 #endif
466  }
467  }
468  }
469  }
470  }
471 
472  //** Loop over endcap columns
473  for (int icol = 1; icol <= int(ee.nColumns); icol++) {
474  //** Loop over SCs in column, using limits from xml input
475  for (int irow = int(ee.vecEEShape[2 * icol - 2]); irow <= int(ee.vecEEShape[2 * icol - 1]); ++irow) {
476  if (ee.vecEESCLims[0] <= icol && ee.vecEESCLims[1] >= icol && ee.vecEESCLims[2] <= irow &&
477  ee.vecEESCLims[3] >= irow) {
478  // Find SC type (complete or partial) for this location
479  unsigned int isctype = 1;
480 
481  for (unsigned int ii = 0; ii < (unsigned int)(ee.nSCCutaway); ++ii) {
482  if ((ee.vecEESCCutaway[3 * ii] == icol) && (ee.vecEESCCutaway[3 * ii + 1] == irow)) {
483  isctype = int(ee.vecEESCCutaway[3 * ii + 2]);
484  }
485  }
486 
487  // Create SC as a DDEcalEndcapTrapX object and calculate rotation and
488  // translation required to position it in the endcap.
489  DDEcalEndcapTrapX scrys(1, ee.sCEFront, ee.sCERear, ee.sCELength);
490  scrys.moveto(ee.scrFCtr[icol - 1][irow - 1], ee.scrRCtr[icol - 1][irow - 1]);
491  scrys.translate(DDTranslation(0., 0., -ee.zOff));
492 
493  std::string rname(ee.envName + std::to_string(isctype) + std::to_string(icol) + "R" + std::to_string(irow));
494  // Position SC in endcap
495  dd4hep::Volume quaLog = ns.volume(ee.quaName);
496  dd4hep::Volume childEnvLog = ns.volume(myns + ee.envName + std::to_string(isctype));
497  quaLog.placeVolume(childEnvLog,
498  100 * isctype + 10 * (icol - 1) + (irow - 1),
499  dd4hep::Transform3D(scrys.rotation(), scrys.centrePos()));
500 #ifdef EDM_ML_DEBUG
501  edm::LogVerbatim("EEGeom") << childEnvLog.name() << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1))
502  << " in " << quaLog.name();
503  edm::LogVerbatim("EcalGeom") << childEnvLog.name() << " " << (100 * isctype + 10 * (icol - 1) + (irow - 1))
504  << " in " << quaLog.name() << " at (" << cms::convert2mm(scrys.centrePos().x())
505  << ", " << cms::convert2mm(scrys.centrePos().y()) << ", "
506  << cms::convert2mm(scrys.centrePos().z()) << ")";
507 #endif
508  }
509  }
510  }
511 
512  return 1;
513 }
size
Write out results.
Log< level::Info, true > LogVerbatim
constexpr NumType convert2mm(NumType length)
Definition: DDutils.h:7
assert(be >=bs)
static std::string to_string(const XMLCh *ch)
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
T sqrt(T t)
Definition: SSEVec.h:19
dd4hep::Volume Volume
ii
Definition: cuy.py:589
const G4String rname[NREG]
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:80
static std::atomic< unsigned int > counter
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7

◆ DD4HEP_OPEN_PLUGIN()

DD4HEP_OPEN_PLUGIN ( dd4hep  ,
ddcms_det_element_DDCMS_ecal_DDEcalEndcapAlgo   
)

Definition at line 515 of file DDEcalEndcapAlgo.cc.