CMS 3D CMS Logo

TGeoMgrFromDdd.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Geometry
4 // Class : TGeoMgrFromDdd
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author:
10 // Created: Fri Jul 2 16:11:42 CEST 2010
11 //
12 
20 
24 
26 
28 
29 #include "TGeoManager.h"
30 #include "TGeoMatrix.h"
31 #include "TGeoCompositeShape.h"
32 #include "TGeoPcon.h"
33 #include "TGeoPgon.h"
34 #include "TGeoCone.h"
35 #include "TGeoBoolNode.h"
36 #include "TGeoTube.h"
37 #include "TGeoArb8.h"
38 #include "TGeoTrd2.h"
39 #include "TGeoTorus.h"
40 #include "TGeoEltu.h"
41 #include "TGeoXtru.h"
42 
43 #include "Math/GenVector/RotationX.h"
44 #include "Math/GenVector/RotationZ.h"
45 
46 #include "CLHEP/Units/GlobalSystemOfUnits.h"
47 #include <cmath>
48 
50 public:
52  TGeoMgrFromDdd(const TGeoMgrFromDdd&) = delete;
53  const TGeoMgrFromDdd& operator=(const TGeoMgrFromDdd&) = delete;
54 
55  using ReturnType = std::unique_ptr<TGeoManager>;
56 
57  // ---------- const member functions ---------------------
58 
59  // ---------- static member functions --------------------
60 
61  // ---------- member functions ---------------------------
62 
64 
66 
67 private:
68  TGeoManager* createManager(int level);
69 
70  TGeoShape* createShape(const std::string& iName, const DDSolid& iSolid);
71  TGeoVolume* createVolume(const std::string& iName, const DDSolid& iSolid, const DDMaterial& iMaterial);
72  TGeoMaterial* createMaterial(const DDMaterial& iMaterial);
73 
74  // ---------- member data --------------------------------
75 
76  const int m_level;
77  const bool m_verbose;
78  const bool m_fullname;
81 
82  std::map<std::string, TGeoShape*> nameToShape_;
83  std::map<std::string, TGeoVolume*> nameToVolume_;
84  std::map<std::string, TGeoMaterial*> nameToMaterial_;
85  std::map<std::string, TGeoMedium*> nameToMedium_;
86 
88 };
89 
91  : m_level(pset.getUntrackedParameter<int>("level")),
92  m_verbose(pset.getUntrackedParameter<bool>("verbose")),
93  m_fullname(pset.getUntrackedParameter<bool>("fullName")) {
94  // The following line is needed to tell the framework what data is
95  // being produced.
96  setWhatProduced(this).setConsumes(viewToken_);
97 }
98 
101  desc.addUntracked<int>("level", 10)->setComment("How deep into the geometry hierarchy should the conversion go.");
102  desc.addUntracked<bool>("verbose", false);
103  desc.addUntracked<bool>("fullName", true)->setComment("use fillname() instead of name() when generating node names");
104 
105  conf.add("TGeoMgrFromDdd", desc);
106 }
107 
108 //==============================================================================
109 // Local helpers
110 //==============================================================================
111 
112 namespace {
113  TGeoCombiTrans* createPlacement(const DDRotationMatrix& iRot, const DDTranslation& iTrans) {
114  double elements[9];
115  iRot.GetComponents(elements);
116  TGeoRotation r;
117  r.SetMatrix(elements);
118 
119  TGeoTranslation t(iTrans.x() / cm, iTrans.y() / cm, iTrans.z() / cm);
120 
121  return new TGeoCombiTrans(t, r);
122  }
123 } // namespace
124 
125 //==============================================================================
126 // public member functions
127 //==============================================================================
128 
130  using namespace edm;
131 
133 
134  if (!viewH.isValid()) {
135  return std::unique_ptr<TGeoManager>();
136  }
137 
138  TGeoManager* geo_mgr = new TGeoManager("cmsGeo", "CMS Detector");
139  // NOTE: the default constructor does not create the identity matrix
140  if (gGeoIdentity == nullptr) {
141  gGeoIdentity = new TGeoIdentity("Identity");
142  }
143 
144  std::cout << "about to initialize the DDCompactView walker"
145  << " with a root node " << viewH->root() << std::endl;
146 
147  auto walker = viewH->walker();
148  auto info = walker.current();
149 
150  // The top most item is actually the volume holding both the
151  // geometry AND the magnetic field volumes!
152  walker.firstChild();
153  if (!walker.firstChild()) {
154  return std::unique_ptr<TGeoManager>();
155  }
156 
157  TGeoVolume* top = (m_fullname ? createVolume(info.first.name().fullname(), info.first.solid(), info.first.material())
158  : createVolume(info.first.name().name(), info.first.solid(), info.first.material()));
159 
160  if (top == nullptr) {
161  return std::unique_ptr<TGeoManager>();
162  }
163 
164  geo_mgr->SetTopVolume(top);
165  // ROOT chokes unless colors are assigned
166  top->SetVisibility(kFALSE);
167  top->SetLineColor(kBlue);
168 
169  std::vector<TGeoVolume*> parentStack;
170  parentStack.push_back(top);
171 
172  do {
173  auto info = walker.current();
174 
175  if (m_verbose) {
176  for (unsigned int i = 0; i < parentStack.size(); ++i) {
177  std::cout << " ";
178  }
179  std::cout << info.first.name() << " " << info.second->copyno() << " "
180  << DDSolidShapesName::name(info.first.solid().shape()) << std::endl;
181  }
182 
183  std::string name = m_fullname ? info.first.name().fullname() : info.first.name().name();
184  bool childAlreadyExists = (nullptr != nameToVolume_[name]);
185  TGeoVolume* child = createVolume(name, info.first.solid(), info.first.material());
186  if (nullptr != child && info.second != nullptr) {
187  parentStack.back()->AddNode(
188  child, info.second->copyno(), createPlacement(info.second->rotation(), info.second->translation()));
189  child->SetLineColor(kBlue);
190  } else {
191  if (info.second == nullptr) {
192  break;
193  }
194  }
195  if (nullptr == child || childAlreadyExists || m_level == int(parentStack.size())) {
196  if (nullptr != child) {
197  child->SetLineColor(kRed);
198  }
199  //stop descending
200  if (!walker.nextSibling()) {
201  while (walker.parent()) {
202  parentStack.pop_back();
203  if (walker.nextSibling()) {
204  break;
205  }
206  }
207  }
208  } else {
209  if (walker.firstChild()) {
210  parentStack.push_back(child);
211  } else {
212  if (!walker.nextSibling()) {
213  while (walker.parent()) {
214  parentStack.pop_back();
215  if (walker.nextSibling()) {
216  break;
217  }
218  }
219  }
220  }
221  }
222  } while (!parentStack.empty());
223 
224  geo_mgr->CloseGeometry();
225 
226  geo_mgr->DefaultColors();
227 
228  nameToShape_.clear();
229  nameToVolume_.clear();
230  nameToMaterial_.clear();
231  nameToMedium_.clear();
232 
233  return std::unique_ptr<TGeoManager>(geo_mgr);
234 }
235 
236 //==============================================================================
237 // private member functions
238 //==============================================================================
239 
240 TGeoShape* TGeoMgrFromDdd::createShape(const std::string& iName, const DDSolid& iSolid) {
241  LogDebug("TGeoMgrFromDdd::createShape") << "with name: " << iName << " and solid: " << iSolid;
242 
243  DDBase<DDName, DDI::Solid*>::def_type defined(iSolid.isDefined());
244  if (!defined.first)
245  throw cms::Exception("TGeoMgrFromDdd::createShape * solid " + iName + " is not declared * ");
246  if (!defined.second)
247  throw cms::Exception("TGeoMgrFromDdd::createShape * solid " + defined.first->name() + " is not defined *");
248 
249  TGeoShape* rSolid = nameToShape_[iName];
250  if (rSolid == nullptr) {
251  const std::vector<double>& params = iSolid.parameters();
252  switch (iSolid.shape()) {
253  case DDSolidShape::ddbox:
254  rSolid = new TGeoBBox(iName.c_str(), params[0] / cm, params[1] / cm, params[2] / cm);
255  break;
257  rSolid = new TGeoConeSeg(iName.c_str(),
258  params[0] / cm,
259  params[1] / cm,
260  params[2] / cm,
261  params[3] / cm,
262  params[4] / cm,
263  params[5] / deg,
264  params[6] / deg + params[5] / deg);
265  break;
267  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi
268  rSolid = new TGeoTubeSeg(iName.c_str(),
269  params[1] / cm,
270  params[2] / cm,
271  params[0] / cm,
272  params[3] / deg,
273  params[3] / deg + params[4] / deg);
274  break;
276  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi,lx,ly,lz,tx,ty,tz
277  rSolid = new TGeoCtub(iName.c_str(),
278  params[1] / cm,
279  params[2] / cm,
280  params[0] / cm,
281  params[3] / deg,
282  params[3] / deg + params[4] / deg,
283  params[5],
284  params[6],
285  params[7],
286  params[8],
287  params[9],
288  params[10]);
289  break;
291  rSolid = new TGeoTrap(iName.c_str(),
292  params[0] / cm, //dz
293  params[1] / deg, //theta
294  params[2] / deg, //phi
295  params[3] / cm, //dy1
296  params[4] / cm, //dx1
297  params[5] / cm, //dx2
298  params[6] / deg, //alpha1
299  params[7] / cm, //dy2
300  params[8] / cm, //dx3
301  params[9] / cm, //dx4
302  params[10] / deg); //alpha2
303  break;
305  rSolid = new TGeoPcon(iName.c_str(), params[0] / deg, params[1] / deg, (params.size() - 2) / 3);
306  {
307  std::vector<double> temp(params.size() + 1);
308  temp.reserve(params.size() + 1);
309  temp[0] = params[0] / deg;
310  temp[1] = params[1] / deg;
311  temp[2] = (params.size() - 2) / 3;
312  std::copy(params.begin() + 2, params.end(), temp.begin() + 3);
313  for (std::vector<double>::iterator it = temp.begin() + 3; it != temp.end(); ++it) {
314  *it /= cm;
315  }
316  rSolid->SetDimensions(&(*(temp.begin())));
317  }
318  break;
320  rSolid = new TGeoPgon(
321  iName.c_str(), params[1] / deg, params[2] / deg, static_cast<int>(params[0]), (params.size() - 3) / 3);
322  {
323  std::vector<double> temp(params.size() + 1);
324  temp[0] = params[1] / deg;
325  temp[1] = params[2] / deg;
326  temp[2] = params[0];
327  temp[3] = (params.size() - 3) / 3;
328  std::copy(params.begin() + 3, params.end(), temp.begin() + 4);
329  for (std::vector<double>::iterator it = temp.begin() + 4; it != temp.end(); ++it) {
330  *it /= cm;
331  }
332  rSolid->SetDimensions(&(*(temp.begin())));
333  }
334  break;
336  DDExtrudedPolygon extrPgon(iSolid);
337  std::vector<double> x = extrPgon.xVec();
338  std::transform(x.begin(), x.end(), x.begin(), [](double d) { return d / cm; });
339  std::vector<double> y = extrPgon.yVec();
340  std::transform(y.begin(), y.end(), y.begin(), [](double d) { return d / cm; });
341  std::vector<double> z = extrPgon.zVec();
342  std::vector<double> zx = extrPgon.zxVec();
343  std::vector<double> zy = extrPgon.zyVec();
344  std::vector<double> zscale = extrPgon.zscaleVec();
345 
346  TGeoXtru* mySolid = new TGeoXtru(z.size());
347  mySolid->DefinePolygon(x.size(), &(*x.begin()), &(*y.begin()));
348  for (size_t i = 0; i < params[0]; ++i) {
349  mySolid->DefineSection(i, z[i] / cm, zx[i] / cm, zy[i] / cm, zscale[i]);
350  }
351 
352  rSolid = mySolid;
353  } break;
355  //implementation taken from SimG4Core/Geometry/src/DDG4SolidConverter.cc
356  const static DDRotationMatrix s_rot(ROOT::Math::RotationX(90. * deg));
357  DDPseudoTrap pt(iSolid);
358 
359  double r = pt.radius();
360  bool atMinusZ = pt.atMinusZ();
361  double x = 0;
362  double h = 0;
363  bool intersec = false; // union or intersection solid
364 
365  if (atMinusZ) {
366  x = pt.x1(); // tubs radius
367  } else {
368  x = pt.x2(); // tubs radius
369  }
370  double halfOpeningAngle = asin(x / std::abs(r)) / deg;
371  double displacement = 0;
372  double startPhi = 0;
373  /* calculate the displacement of the tubs w.r.t. to the trap,
374  determine the opening angle of the tubs */
375  double delta = sqrt(r * r - x * x);
376  std::string name = m_fullname ? pt.name().fullname() : pt.name().name();
377 
378  if (r < 0 && std::abs(r) >= x) {
379  intersec = true; // intersection solid
380  h = pt.y1() < pt.y2() ? pt.y2() : pt.y1(); // tubs half height
381  h += h / 20.; // enlarge a bit - for subtraction solid
382  if (atMinusZ) {
383  displacement = -pt.halfZ() - delta;
384  startPhi = 90. - halfOpeningAngle;
385  } else {
386  displacement = pt.halfZ() + delta;
387  startPhi = -90. - halfOpeningAngle;
388  }
389  } else if (r > 0 && std::abs(r) >= x) {
390  if (atMinusZ) {
391  displacement = -pt.halfZ() + delta;
392  startPhi = 270. - halfOpeningAngle;
393  h = pt.y1();
394  } else {
395  displacement = pt.halfZ() - delta;
396  startPhi = 90. - halfOpeningAngle;
397  h = pt.y2();
398  }
399  } else {
400  throw cms::Exception("Check parameters of the PseudoTrap! name=" + name);
401  }
402 
403  std::unique_ptr<TGeoShape> trap(
404  new TGeoTrd2(name.c_str(), pt.x1() / cm, pt.x2() / cm, pt.y1() / cm, pt.y2() / cm, pt.halfZ() / cm));
405 
406  std::unique_ptr<TGeoShape> tubs(new TGeoTubeSeg(name.c_str(),
407  0.,
408  std::abs(r) / cm, // radius cannot be negative!!!
409  h / cm,
410  startPhi,
411  startPhi + halfOpeningAngle * 2.));
412  if (intersec) {
413  TGeoSubtraction* sub = new TGeoSubtraction(
414  trap.release(), tubs.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., displacement)));
415  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
416  } else {
417  std::unique_ptr<TGeoShape> box(new TGeoBBox(1.1 * x / cm, 1.1 * h / cm, sqrt(r * r - x * x) / cm));
418 
419  TGeoSubtraction* sub = new TGeoSubtraction(
420  tubs.release(), box.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., 0.)));
421 
422  std::unique_ptr<TGeoShape> tubicCap(new TGeoCompositeShape(iName.c_str(), sub));
423 
424  TGeoUnion* boolS = new TGeoUnion(
425  trap.release(), tubicCap.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., displacement)));
426 
427  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
428  }
429 
430  break;
431  }
432  case DDSolidShape::ddtorus: {
433  DDTorus solid(iSolid);
434  rSolid = new TGeoTorus(iName.c_str(),
435  solid.rTorus() / cm,
436  solid.rMin() / cm,
437  solid.rMax() / cm,
438  solid.startPhi() / deg,
439  solid.deltaPhi() / deg);
440  break;
441  }
443  DDBooleanSolid boolSolid(iSolid);
444  if (!boolSolid) {
445  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
446  }
447 
448  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
449  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
450  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
451  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
452  if (nullptr != left.get() && nullptr != right.get()) {
453  TGeoSubtraction* sub =
454  new TGeoSubtraction(left.release(),
455  right.release(),
456  nullptr,
457  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
458  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
459  }
460  break;
461  }
463  DDTruncTubs tt(iSolid);
464  if (!tt) {
465  throw cms::Exception("GeomConvert") << "conversion to DDTruncTubs failed";
466  }
467  double rIn(tt.rIn());
468  double rOut(tt.rOut());
469  double zHalf(tt.zHalf());
470  double startPhi(tt.startPhi());
471  double deltaPhi(tt.deltaPhi());
472  double cutAtStart(tt.cutAtStart());
473  double cutAtDelta(tt.cutAtDelta());
474  bool cutInside(bool(tt.cutInside()));
475  std::string name = m_fullname ? tt.name().fullname() : tt.name().name();
476 
477  // check the parameters
478  if (rIn <= 0 || rOut <= 0 || cutAtStart <= 0 || cutAtDelta <= 0) {
479  std::string s = "TruncTubs " + name + ": 0 <= rIn,cutAtStart,rOut,cutAtDelta,rOut violated!";
480  throw cms::Exception(s);
481  }
482  if (rIn >= rOut) {
483  std::string s = "TruncTubs " + name + ": rIn<rOut violated!";
484  throw cms::Exception(s);
485  }
486  if (startPhi != 0.) {
487  std::string s = "TruncTubs " + name + ": startPhi != 0 not supported!";
488  throw cms::Exception(s);
489  }
490 
491  startPhi = 0.;
492  double r(cutAtStart);
493  double R(cutAtDelta);
494 
495  // Note: startPhi is always 0.0
496  std::unique_ptr<TGeoShape> tubs(
497  new TGeoTubeSeg(name.c_str(), rIn / cm, rOut / cm, zHalf / cm, startPhi, deltaPhi / deg));
498 
499  double boxX(rOut), boxY(rOut); // exaggerate dimensions - does not matter, it's subtracted!
500 
501  // width of the box > width of the tubs
502  double boxZ(1.1 * zHalf);
503 
504  // angle of the box w.r.t. tubs
505  double cath = r - R * cos(deltaPhi);
506  double hypo = sqrt(r * r + R * R - 2. * r * R * cos(deltaPhi));
507  double cos_alpha = cath / hypo;
508  double alpha = -acos(cos_alpha);
509 
510  // rotationmatrix of box w.r.t. tubs
511  TGeoRotation rot;
512  rot.RotateX(90);
513  rot.RotateZ(alpha / deg);
514 
515  // center point of the box
516  double xBox;
517  if (!cutInside) {
518  xBox = r + boxX / sin(fabs(alpha));
519  } else {
520  xBox = -(boxX / sin(fabs(alpha)) - r);
521  }
522  std::unique_ptr<TGeoShape> box(new TGeoBBox(name.c_str(), boxX / cm, boxZ / cm, boxY / cm));
523 
524  TGeoTranslation trans(xBox / cm, 0., 0.);
525 
526  TGeoSubtraction* sub =
527  new TGeoSubtraction(tubs.release(), box.release(), nullptr, new TGeoCombiTrans(trans, rot));
528 
529  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
530  break;
531  }
532  case DDSolidShape::ddunion: {
533  DDBooleanSolid boolSolid(iSolid);
534  if (!boolSolid) {
535  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
536  }
537 
538  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
539  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
540  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
541  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
542  //DEBUGGING
543  //break;
544  if (nullptr != left.get() && nullptr != right.get()) {
545  TGeoUnion* boolS = new TGeoUnion(left.release(),
546  right.release(),
547  nullptr,
548  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
549  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
550  }
551  break;
552  }
554  DDBooleanSolid boolSolid(iSolid);
555  if (!boolSolid) {
556  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
557  }
558 
559  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
560  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
561  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
562  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
563  if (nullptr != left.get() && nullptr != right.get()) {
564  TGeoIntersection* boolS =
565  new TGeoIntersection(left.release(),
566  right.release(),
567  nullptr,
568  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
569  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
570  }
571  break;
572  }
574  DDEllipticalTube eSolid(iSolid);
575  if (!eSolid) {
576  throw cms::Exception("GeomConvert") << "conversion to DDEllipticalTube failed";
577  }
578  rSolid = new TGeoEltu(iName.c_str(), params[0] / cm, params[1] / cm, params[2] / cm);
579  break;
580  }
581  default:
582  break;
583  }
584  nameToShape_[iName] = rSolid;
585  }
586  if (rSolid == nullptr) {
587  std::cerr << "COULD NOT MAKE " << iName << " of a shape " << iSolid << std::endl;
588  }
589 
590  LogDebug("TGeoMgrFromDdd::createShape") << "solid " << iName << " has been created.";
591 
592  return rSolid;
593 }
594 
595 TGeoVolume* TGeoMgrFromDdd::createVolume(const std::string& iName, const DDSolid& iSolid, const DDMaterial& iMaterial) {
596  TGeoVolume* v = nameToVolume_[iName];
597  if (v == nullptr) {
598  TGeoShape* solid =
599  m_fullname ? createShape(iSolid.name().fullname(), iSolid) : createShape(iSolid.name().name(), iSolid);
600  std::string mat_name = m_fullname ? iMaterial.name().fullname() : iMaterial.name().name();
601  TGeoMedium* geo_med = nameToMedium_[mat_name];
602  if (geo_med == nullptr) {
603  TGeoMaterial* geo_mat = createMaterial(iMaterial);
604  geo_med = new TGeoMedium(mat_name.c_str(), 0, geo_mat);
605  nameToMedium_[mat_name] = geo_med;
606  }
607  if (solid) {
608  v = new TGeoVolume(iName.c_str(), solid, geo_med);
609  }
610  nameToVolume_[iName] = v;
611  }
612  return v;
613 }
614 
615 TGeoMaterial* TGeoMgrFromDdd::createMaterial(const DDMaterial& iMaterial) {
616  std::string mat_name = m_fullname ? iMaterial.name().fullname() : iMaterial.name().name();
617  TGeoMaterial* mat = nameToMaterial_[mat_name];
618 
619  if (mat == nullptr) {
620  if (iMaterial.noOfConstituents() > 0) {
621  TGeoMixture* mix = new TGeoMixture(mat_name.c_str(), iMaterial.noOfConstituents(), iMaterial.density() * cm3 / g);
622  for (int i = 0; i < iMaterial.noOfConstituents(); ++i) {
623  mix->AddElement(createMaterial(iMaterial.constituent(i).first), iMaterial.constituent(i).second);
624  }
625  mat = mix;
626  } else {
627  mat = new TGeoMaterial(mat_name.c_str(), iMaterial.a() * mole / g, iMaterial.z(), iMaterial.density() * cm3 / g);
628  }
629  nameToMaterial_[mat_name] = mat;
630  }
631 
632  return mat;
633 }
634 
635 //
636 // const member functions
637 //
638 
639 //
640 // static member functions
641 //
personalPlayback.level
level
Definition: personalPlayback.py:22
DDBooleanSolid::solidB
DDSolid solidB(void) const
Definition: DDSolid.cc:468
DDAxes::y
DDBase::def_type
std::pair< const N *, bool > def_type
Definition: DDBase.h:51
TGeoMgrFromDdd::nameToShape_
std::map< std::string, TGeoShape * > nameToShape_
Definition: TGeoMgrFromDdd.cc:82
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
ESTransientHandle.h
MessageLogger.h
DDEllipticalTube
Definition: DDSolid.h:352
DDSolidShape::ddtrap
DDSolidShape::ddtorus
DDExtrudedPolygon::yVec
std::vector< double > yVec(void) const
Definition: DDSolid.cc:378
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
DDTorus::rMin
double rMin(void) const
Definition: DDSolid.cc:432
DDRotation::matrix
DDRotationMatrix & matrix()
Definition: DDTransform.h:85
DiDispStaMuonMonitor_cfi.pt
pt
Definition: DiDispStaMuonMonitor_cfi.py:39
CalibrationSummaryClient_cfi.params
params
Definition: CalibrationSummaryClient_cfi.py:14
zMuMuMuonUserData.alpha
alpha
zGenParticlesMatch = cms.InputTag(""),
Definition: zMuMuMuonUserData.py:9
DDMaterial::density
double density() const
returns the density
Definition: DDMaterial.cc:80
edm
HLT enums.
Definition: AlignableModifier.h:19
DDSolidShape::ddpseudotrap
DDSolidShape::ddpolyhedra_rrz
DDTorus::rMax
double rMax(void) const
Definition: DDSolid.cc:434
DDMaterial::z
double z() const
retruns the atomic number
Definition: DDMaterial.cc:78
gather_cfg.cout
cout
Definition: gather_cfg.py:144
DDMaterial::noOfConstituents
int noOfConstituents() const
returns the number of compound materials or 0 for elementary materials
Definition: DDMaterial.cc:72
edm::ESProducer::setWhatProduced
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:138
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
ESProducer.h
TGeoMgrFromDdd::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &)
Definition: TGeoMgrFromDdd.cc:99
DDMaterial::constituent
FractionV::value_type constituent(int i) const
returns the i-th compound material and its fraction-mass
Definition: DDMaterial.cc:74
DDBooleanSolid::rotation
DDRotation rotation(void) const
Definition: DDSolid.cc:462
TGeoMgrFromDdd
Definition: TGeoMgrFromDdd.cc:49
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
DDExtrudedPolygon::xVec
std::vector< double > xVec(void) const
Definition: DDSolid.cc:374
TGeoMgrFromDdd::m_TGeoName
std::string m_TGeoName
Definition: TGeoMgrFromDdd.cc:79
DDAxes::x
findQualityFiles.v
v
Definition: findQualityFiles.py:179
TGeoMgrFromDdd::nameToMaterial_
std::map< std::string, TGeoMaterial * > nameToMaterial_
Definition: TGeoMgrFromDdd.cc:84
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
DDTorus
Definition: DDSolid.h:295
DDCompactView.h
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
DDPseudoTrap
Definition: DDSolid.h:106
DDExtrudedPolygon::zVec
std::vector< double > zVec(void) const
Definition: DDSolid.cc:383
DDTorus::startPhi
double startPhi(void) const
Definition: DDSolid.cc:438
funct::sin
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
ActivityRegistry.h
DDBooleanSolid
Definition: DDSolid.h:173
DDTorus::deltaPhi
double deltaPhi(void) const
Definition: DDSolid.cc:440
DDBooleanSolid::translation
DDTranslation translation(void) const
Definition: DDSolid.cc:464
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DDMaterial
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:45
DDCompactView::walker
GraphWalker walker() const
Definition: DDCompactView.cc:60
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
h
DDTruncTubs
A truncated tube section.
Definition: DDSolid.h:128
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
DDSolidShape::ddtubs
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
TGeoMgrFromDdd::createManager
TGeoManager * createManager(int level)
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
DDTorus::rTorus
double rTorus(void) const
Definition: DDSolid.cc:436
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDSolidShape::ddtrunctubs
DDBase::name
const N & name() const
Definition: DDBase.h:59
DDAxes::z
edm::eventsetup::DependentRecordImplementation::getTransientHandle
ESTransientHandle< ProductT > getTransientHandle(ESGetToken< ProductT, DepRecordT > const &iToken) const
Definition: DependentRecordImplementation.h:99
DDMaterial::a
double a() const
returns the atomic mass
Definition: DDMaterial.cc:76
DDSolid.h
HcalDetIdTransform::transform
unsigned transform(const HcalDetId &id, unsigned transformCode)
Definition: HcalDetIdTransform.cc:7
TGeoMgrFromDdd::createMaterial
TGeoMaterial * createMaterial(const DDMaterial &iMaterial)
Definition: TGeoMgrFromDdd.cc:615
OrderedSet.t
t
Definition: OrderedSet.py:90
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DDSolidShapesName::name
static const char *const name(DDSolidShape s)
Definition: DDSolidShapes.h:32
TGeoMgrFromDdd::m_TGeoTitle
std::string m_TGeoTitle
Definition: TGeoMgrFromDdd.cc:80
TGeoMgrFromDdd::nameToVolume_
std::map< std::string, TGeoVolume * > nameToVolume_
Definition: TGeoMgrFromDdd.cc:83
DDSolidShape::ddellipticaltube
edm::ParameterSetDescription::addUntracked
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:100
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::ParameterSet
Definition: ParameterSet.h:36
TGeoMgrFromDdd::m_level
const int m_level
Definition: TGeoMgrFromDdd.cc:76
beam_dqm_sourceclient-live_cfg.cerr
cerr
Definition: beam_dqm_sourceclient-live_cfg.py:17
dumpMFGeometry_cfg.delta
delta
Definition: dumpMFGeometry_cfg.py:25
DDSolidShape::ddcons
DDMaterial.h
createfilelist.int
int
Definition: createfilelist.py:10
DDExtrudedPolygon::zxVec
std::vector< double > zxVec(void) const
Definition: DDSolid.cc:388
DDName::name
const std::string & name() const
Returns the name.
Definition: DDName.cc:40
IdealGeometryRecord.h
TGeoMgrFromDdd::TGeoMgrFromDdd
TGeoMgrFromDdd(const edm::ParameterSet &)
Definition: TGeoMgrFromDdd.cc:90
DDExtrudedPolygon
Definition: DDSolid.h:238
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
edm::ESGetToken< DDCompactView, IdealGeometryRecord >
DDExtrudedPolygon::zyVec
std::vector< double > zyVec(void) const
Definition: DDSolid.cc:393
edm::ESTransientHandle
Definition: ESTransientHandle.h:41
TGeoMgrFromDdd::createVolume
TGeoVolume * createVolume(const std::string &iName, const DDSolid &iSolid, const DDMaterial &iMaterial)
Definition: TGeoMgrFromDdd.cc:595
alignCSCRings.r
r
Definition: alignCSCRings.py:93
DDCompactView::root
const DDLogicalPart & root() const
returns the DDLogicalPart representing the root of the geometrical hierarchy
Definition: DDCompactView.cc:62
ModuleFactory.h
bookConverter.elements
elements
Definition: bookConverter.py:147
TGeoMgrFromDdd::m_verbose
const bool m_verbose
Definition: TGeoMgrFromDdd.cc:77
DDSolidShape::ddbox
DisplayGeomRecord.h
DEFINE_FWK_EVENTSETUP_MODULE
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:60
Exception
Definition: hltDiff.cc:246
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
DDSolidShape::ddextrudedpolygon
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
EventSetup.h
DDSolid
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
TGeoMgrFromDdd::m_fullname
const bool m_fullname
Definition: TGeoMgrFromDdd.cc:78
DDBooleanSolid::solidA
DDSolid solidA(void) const
Definition: DDSolid.cc:466
TGeoMgrFromDdd::createShape
TGeoShape * createShape(const std::string &iName, const DDSolid &iSolid)
Definition: TGeoMgrFromDdd.cc:240
TGeoMgrFromDdd::nameToMedium_
std::map< std::string, TGeoMedium * > nameToMedium_
Definition: TGeoMgrFromDdd.cc:85
DDSolidShape::ddcuttubs
edm::ESProducer
Definition: ESProducer.h:101
TGeoMgrFromDdd::operator=
const TGeoMgrFromDdd & operator=(const TGeoMgrFromDdd &)=delete
TGeoMgrFromDdd::ReturnType
std::unique_ptr< TGeoManager > ReturnType
Definition: TGeoMgrFromDdd.cc:55
ztail.d
d
Definition: ztail.py:151
DDSolidShape::ddpolycone_rrz
DDName::fullname
const std::string fullname() const
Definition: DDName.h:40
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
ParameterSet.h
DDSolidShape::ddsubtraction
DDSolidShape::ddintersection
child
Definition: simpleInheritance.h:11
GeneratorMix_cff.mix
mix
Definition: GeneratorMix_cff.py:6
TGeoMgrFromDdd::viewToken_
edm::ESGetToken< DDCompactView, IdealGeometryRecord > viewToken_
Definition: TGeoMgrFromDdd.cc:87
dd4hep::createPlacement
TGeoCombiTrans * createPlacement(const Rotation3D &iRot, const Position &iTrans)
Definition: DDDefinitions2Objects.cc:109
dttmaxenums::R
Definition: DTTMax.h:29
DDSolidShape::ddunion
g
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
TGeoMgrFromDdd::produce
ReturnType produce(const DisplayGeomRecord &)
Definition: TGeoMgrFromDdd.cc:129
DDExtrudedPolygon::zscaleVec
std::vector< double > zscaleVec(void) const
Definition: DDSolid.cc:398
DisplayGeomRecord
Definition: DisplayGeomRecord.h:24