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  viewToken_(setWhatProduced(this).consumes()) {}
95 
98  desc.addUntracked<int>("level", 10)->setComment("How deep into the geometry hierarchy should the conversion go.");
99  desc.addUntracked<bool>("verbose", false);
100  desc.addUntracked<bool>("fullName", true)->setComment("use fillname() instead of name() when generating node names");
101 
102  conf.add("TGeoMgrFromDdd", desc);
103 }
104 
105 //==============================================================================
106 // Local helpers
107 //==============================================================================
108 
109 namespace {
110  TGeoCombiTrans* createPlacement(const DDRotationMatrix& iRot, const DDTranslation& iTrans) {
111  double elements[9];
112  iRot.GetComponents(elements);
113  TGeoRotation r;
114  r.SetMatrix(elements);
115 
116  TGeoTranslation t(iTrans.x() / cm, iTrans.y() / cm, iTrans.z() / cm);
117 
118  return new TGeoCombiTrans(t, r);
119  }
120 } // namespace
121 
122 //==============================================================================
123 // public member functions
124 //==============================================================================
125 
127  using namespace edm;
128 
130 
131  if (!viewH.isValid()) {
132  return std::unique_ptr<TGeoManager>();
133  }
134 
135  TGeoManager* geo_mgr = new TGeoManager("cmsGeo", "CMS Detector");
136  // NOTE: the default constructor does not create the identity matrix
137  if (gGeoIdentity == nullptr) {
138  gGeoIdentity = new TGeoIdentity("Identity");
139  }
140 
141  std::cout << "about to initialize the DDCompactView walker"
142  << " with a root node " << viewH->root() << std::endl;
143 
144  auto walker = viewH->walker();
145  auto info = walker.current();
146 
147  // The top most item is actually the volume holding both the
148  // geometry AND the magnetic field volumes!
149  walker.firstChild();
150  if (!walker.firstChild()) {
151  return std::unique_ptr<TGeoManager>();
152  }
153 
154  TGeoVolume* top = (m_fullname ? createVolume(info.first.name().fullname(), info.first.solid(), info.first.material())
155  : createVolume(info.first.name().name(), info.first.solid(), info.first.material()));
156 
157  if (top == nullptr) {
158  return std::unique_ptr<TGeoManager>();
159  }
160 
161  geo_mgr->SetTopVolume(top);
162  // ROOT chokes unless colors are assigned
163  top->SetVisibility(kFALSE);
164  top->SetLineColor(kBlue);
165 
166  std::vector<TGeoVolume*> parentStack;
167  parentStack.push_back(top);
168 
169  do {
170  auto info = walker.current();
171 
172  if (m_verbose) {
173  std::cout << "parentStack of size " << parentStack.size() << std::endl;
174  auto num = (info.second != nullptr) ? info.second->copyno() : 0;
175  std::cout << info.first.name() << " " << num << " " << DDSolidShapesName::name(info.first.solid().shape())
176  << std::endl;
177  }
178 
179  std::string name = m_fullname ? info.first.name().fullname() : info.first.name().name();
180  bool childAlreadyExists = (nullptr != nameToVolume_[name]);
181  TGeoVolume* child = createVolume(name, info.first.solid(), info.first.material());
182  if (nullptr != child && info.second != nullptr) {
183  parentStack.back()->AddNode(
184  child, info.second->copyno(), createPlacement(info.second->rotation(), info.second->translation()));
185  child->SetLineColor(kBlue);
186  } else {
187  if (info.second == nullptr) {
188  break;
189  }
190  }
191  if (nullptr == child || childAlreadyExists || m_level == int(parentStack.size())) {
192  if (nullptr != child) {
193  child->SetLineColor(kRed);
194  }
195  //stop descending
196  if (!walker.nextSibling()) {
197  while (walker.parent()) {
198  parentStack.pop_back();
199  if (walker.nextSibling()) {
200  break;
201  }
202  }
203  }
204  } else {
205  if (walker.firstChild()) {
206  parentStack.push_back(child);
207  } else {
208  if (!walker.nextSibling()) {
209  while (walker.parent()) {
210  parentStack.pop_back();
211  if (walker.nextSibling()) {
212  break;
213  }
214  }
215  }
216  }
217  }
218  } while (!parentStack.empty());
219 
220  geo_mgr->CloseGeometry();
221 
222  geo_mgr->DefaultColors();
223 
224  nameToShape_.clear();
225  nameToVolume_.clear();
226  nameToMaterial_.clear();
227  nameToMedium_.clear();
228 
229  return std::unique_ptr<TGeoManager>(geo_mgr);
230 }
231 
232 //==============================================================================
233 // private member functions
234 //==============================================================================
235 
236 TGeoShape* TGeoMgrFromDdd::createShape(const std::string& iName, const DDSolid& iSolid) {
237  edm::LogVerbatim("TGeoMgrFromDdd") << "with name: " << iName << " and solid: " << iSolid;
238 
239  DDBase<DDName, DDI::Solid*>::def_type defined(iSolid.isDefined());
240  if (!defined.first)
241  throw cms::Exception("TGeoMgrFromDdd::createShape * solid " + iName + " is not declared * ");
242  if (!defined.second)
243  throw cms::Exception("TGeoMgrFromDdd::createShape * solid " + defined.first->name() + " is not defined *");
244 
245  TGeoShape* rSolid = nameToShape_[iName];
246  if (rSolid == nullptr) {
247  const std::vector<double>& params = iSolid.parameters();
248  switch (iSolid.shape()) {
249  case DDSolidShape::ddbox:
250  rSolid = new TGeoBBox(iName.c_str(), params[0] / cm, params[1] / cm, params[2] / cm);
251  break;
253  rSolid = new TGeoConeSeg(iName.c_str(),
254  params[0] / cm,
255  params[1] / cm,
256  params[2] / cm,
257  params[3] / cm,
258  params[4] / cm,
259  params[5] / deg,
260  params[6] / deg + params[5] / deg);
261  break;
263  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi
264  rSolid = new TGeoTubeSeg(iName.c_str(),
265  params[1] / cm,
266  params[2] / cm,
267  params[0] / cm,
268  params[3] / deg,
269  params[3] / deg + params[4] / deg);
270  break;
272  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi,lx,ly,lz,tx,ty,tz
273  rSolid = new TGeoCtub(iName.c_str(),
274  params[1] / cm,
275  params[2] / cm,
276  params[0] / cm,
277  params[3] / deg,
278  params[3] / deg + params[4] / deg,
279  params[5],
280  params[6],
281  params[7],
282  params[8],
283  params[9],
284  params[10]);
285  break;
287  rSolid = new TGeoTrap(iName.c_str(),
288  params[0] / cm, //dz
289  params[1] / deg, //theta
290  params[2] / deg, //phi
291  params[3] / cm, //dy1
292  params[4] / cm, //dx1
293  params[5] / cm, //dx2
294  params[6] / deg, //alpha1
295  params[7] / cm, //dy2
296  params[8] / cm, //dx3
297  params[9] / cm, //dx4
298  params[10] / deg); //alpha2
299  break;
301  rSolid = new TGeoPcon(iName.c_str(), params[0] / deg, params[1] / deg, (params.size() - 2) / 3);
302  {
303  std::vector<double> temp(params.size() + 1);
304  temp.reserve(params.size() + 1);
305  temp[0] = params[0] / deg;
306  temp[1] = params[1] / deg;
307  temp[2] = (params.size() - 2) / 3;
308  std::copy(params.begin() + 2, params.end(), temp.begin() + 3);
309  for (std::vector<double>::iterator it = temp.begin() + 3; it != temp.end(); ++it) {
310  *it /= cm;
311  }
312  rSolid->SetDimensions(&(*(temp.begin())));
313  }
314  break;
316  rSolid = new TGeoPgon(
317  iName.c_str(), params[1] / deg, params[2] / deg, static_cast<int>(params[0]), (params.size() - 3) / 3);
318  {
319  std::vector<double> temp(params.size() + 1);
320  temp[0] = params[1] / deg;
321  temp[1] = params[2] / deg;
322  temp[2] = params[0];
323  temp[3] = (params.size() - 3) / 3;
324  std::copy(params.begin() + 3, params.end(), temp.begin() + 4);
325  for (std::vector<double>::iterator it = temp.begin() + 4; it != temp.end(); ++it) {
326  *it /= cm;
327  }
328  rSolid->SetDimensions(&(*(temp.begin())));
329  }
330  break;
332  DDExtrudedPolygon extrPgon(iSolid);
333  std::vector<double> x = extrPgon.xVec();
334  std::transform(x.begin(), x.end(), x.begin(), [](double d) { return d / cm; });
335  std::vector<double> y = extrPgon.yVec();
336  std::transform(y.begin(), y.end(), y.begin(), [](double d) { return d / cm; });
337  std::vector<double> z = extrPgon.zVec();
338  std::vector<double> zx = extrPgon.zxVec();
339  std::vector<double> zy = extrPgon.zyVec();
340  std::vector<double> zscale = extrPgon.zscaleVec();
341 
342  TGeoXtru* mySolid = new TGeoXtru(z.size());
343  mySolid->DefinePolygon(x.size(), &(*x.begin()), &(*y.begin()));
344  for (size_t i = 0; i < params[0]; ++i) {
345  mySolid->DefineSection(i, z[i] / cm, zx[i] / cm, zy[i] / cm, zscale[i]);
346  }
347 
348  rSolid = mySolid;
349  } break;
351  //implementation taken from SimG4Core/Geometry/src/DDG4SolidConverter.cc
352  const static DDRotationMatrix s_rot(ROOT::Math::RotationX(90. * deg));
353  DDPseudoTrap pt(iSolid);
354 
355  double r = pt.radius();
356  bool atMinusZ = pt.atMinusZ();
357  double x = 0;
358  double h = 0;
359  bool intersec = false; // union or intersection solid
360 
361  if (atMinusZ) {
362  x = pt.x1(); // tubs radius
363  } else {
364  x = pt.x2(); // tubs radius
365  }
366  double halfOpeningAngle = asin(x / std::abs(r)) / deg;
367  double displacement = 0;
368  double startPhi = 0;
369  /* calculate the displacement of the tubs w.r.t. to the trap,
370  determine the opening angle of the tubs */
371  double delta = sqrt(r * r - x * x);
372  std::string name = m_fullname ? pt.name().fullname() : pt.name().name();
373 
374  if (r < 0 && std::abs(r) >= x) {
375  intersec = true; // intersection solid
376  h = pt.y1() < pt.y2() ? pt.y2() : pt.y1(); // tubs half height
377  h += h / 20.; // enlarge a bit - for subtraction solid
378  if (atMinusZ) {
379  displacement = -pt.halfZ() - delta;
380  startPhi = 90. - halfOpeningAngle;
381  } else {
382  displacement = pt.halfZ() + delta;
383  startPhi = -90. - halfOpeningAngle;
384  }
385  } else if (r > 0 && std::abs(r) >= x) {
386  if (atMinusZ) {
387  displacement = -pt.halfZ() + delta;
388  startPhi = 270. - halfOpeningAngle;
389  h = pt.y1();
390  } else {
391  displacement = pt.halfZ() - delta;
392  startPhi = 90. - halfOpeningAngle;
393  h = pt.y2();
394  }
395  } else {
396  throw cms::Exception("Check parameters of the PseudoTrap! name=" + name);
397  }
398 
399  std::unique_ptr<TGeoShape> trap(
400  new TGeoTrd2(name.c_str(), pt.x1() / cm, pt.x2() / cm, pt.y1() / cm, pt.y2() / cm, pt.halfZ() / cm));
401 
402  std::unique_ptr<TGeoShape> tubs(new TGeoTubeSeg(name.c_str(),
403  0.,
404  std::abs(r) / cm, // radius cannot be negative!!!
405  h / cm,
406  startPhi,
407  startPhi + halfOpeningAngle * 2.));
408  if (intersec) {
409  TGeoSubtraction* sub = new TGeoSubtraction(
410  trap.release(), tubs.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., displacement)));
411  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
412  } else {
413  std::unique_ptr<TGeoShape> box(new TGeoBBox(1.1 * x / cm, 1.1 * h / cm, sqrt(r * r - x * x) / cm));
414 
415  TGeoSubtraction* sub = new TGeoSubtraction(
416  tubs.release(), box.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., 0.)));
417 
418  std::unique_ptr<TGeoShape> tubicCap(new TGeoCompositeShape(iName.c_str(), sub));
419 
420  TGeoUnion* boolS = new TGeoUnion(
421  trap.release(), tubicCap.release(), nullptr, createPlacement(s_rot, DDTranslation(0., 0., displacement)));
422 
423  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
424  }
425 
426  break;
427  }
428  case DDSolidShape::ddtorus: {
429  DDTorus solid(iSolid);
430  rSolid = new TGeoTorus(iName.c_str(),
431  solid.rTorus() / cm,
432  solid.rMin() / cm,
433  solid.rMax() / cm,
434  solid.startPhi() / deg,
435  solid.deltaPhi() / deg);
436  break;
437  }
439  DDBooleanSolid boolSolid(iSolid);
440  if (!boolSolid) {
441  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
442  }
443 
444  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
445  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
446  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
447  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
448  if (nullptr != left.get() && nullptr != right.get()) {
449  TGeoSubtraction* sub =
450  new TGeoSubtraction(left.release(),
451  right.release(),
452  nullptr,
453  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
454  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
455  }
456  break;
457  }
459  DDTruncTubs tt(iSolid);
460  if (!tt) {
461  throw cms::Exception("GeomConvert") << "conversion to DDTruncTubs failed";
462  }
463  double rIn(tt.rIn());
464  double rOut(tt.rOut());
465  double zHalf(tt.zHalf());
466  double startPhi(tt.startPhi());
467  double deltaPhi(tt.deltaPhi());
468  double cutAtStart(tt.cutAtStart());
469  double cutAtDelta(tt.cutAtDelta());
470  bool cutInside(bool(tt.cutInside()));
471  std::string name = m_fullname ? tt.name().fullname() : tt.name().name();
472 
473  // check the parameters
474  if (rIn <= 0 || rOut <= 0 || cutAtStart <= 0 || cutAtDelta <= 0) {
475  std::string s = "TruncTubs " + name + ": 0 <= rIn,cutAtStart,rOut,cutAtDelta,rOut violated!";
476  throw cms::Exception(s);
477  }
478  if (rIn >= rOut) {
479  std::string s = "TruncTubs " + name + ": rIn<rOut violated!";
480  throw cms::Exception(s);
481  }
482  if (startPhi != 0.) {
483  std::string s = "TruncTubs " + name + ": startPhi != 0 not supported!";
484  throw cms::Exception(s);
485  }
486 
487  startPhi = 0.;
488  double r(cutAtStart);
489  double R(cutAtDelta);
490 
491  // Note: startPhi is always 0.0
492  std::unique_ptr<TGeoShape> tubs(
493  new TGeoTubeSeg(name.c_str(), rIn / cm, rOut / cm, zHalf / cm, startPhi, deltaPhi / deg));
494 
495  double boxX(rOut), boxY(rOut); // exaggerate dimensions - does not matter, it's subtracted!
496 
497  // width of the box > width of the tubs
498  double boxZ(1.1 * zHalf);
499 
500  // angle of the box w.r.t. tubs
501  double cath = r - R * cos(deltaPhi);
502  double hypo = sqrt(r * r + R * R - 2. * r * R * cos(deltaPhi));
503  double cos_alpha = cath / hypo;
504  double alpha = -acos(cos_alpha);
505 
506  // rotationmatrix of box w.r.t. tubs
507  TGeoRotation rot;
508  rot.RotateX(90);
509  rot.RotateZ(alpha / deg);
510 
511  // center point of the box
512  double xBox;
513  if (!cutInside) {
514  xBox = r + boxX / sin(fabs(alpha));
515  } else {
516  xBox = -(boxX / sin(fabs(alpha)) - r);
517  }
518  std::unique_ptr<TGeoShape> box(new TGeoBBox(name.c_str(), boxX / cm, boxZ / cm, boxY / cm));
519 
520  TGeoTranslation trans(xBox / cm, 0., 0.);
521 
522  TGeoSubtraction* sub =
523  new TGeoSubtraction(tubs.release(), box.release(), nullptr, new TGeoCombiTrans(trans, rot));
524 
525  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
526  break;
527  }
528  case DDSolidShape::ddunion: {
529  DDBooleanSolid boolSolid(iSolid);
530  if (!boolSolid) {
531  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
532  }
533 
534  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
535  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
536  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
537  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
538  //DEBUGGING
539  //break;
540  if (nullptr != left.get() && nullptr != right.get()) {
541  TGeoUnion* boolS = new TGeoUnion(left.release(),
542  right.release(),
543  nullptr,
544  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
545  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
546  }
547  break;
548  }
550  DDBooleanSolid boolSolid(iSolid);
551  if (!boolSolid) {
552  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
553  }
554 
555  std::string nameA = m_fullname ? boolSolid.solidA().name().fullname() : boolSolid.solidA().name().name();
556  std::string nameB = m_fullname ? boolSolid.solidB().name().fullname() : boolSolid.solidB().name().name();
557  std::unique_ptr<TGeoShape> left(createShape(nameA, boolSolid.solidA()));
558  std::unique_ptr<TGeoShape> right(createShape(nameB, boolSolid.solidB()));
559  if (nullptr != left.get() && nullptr != right.get()) {
560  TGeoIntersection* boolS =
561  new TGeoIntersection(left.release(),
562  right.release(),
563  nullptr,
564  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
565  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
566  }
567  break;
568  }
570  DDEllipticalTube eSolid(iSolid);
571  if (!eSolid) {
572  throw cms::Exception("GeomConvert") << "conversion to DDEllipticalTube failed";
573  }
574  rSolid = new TGeoEltu(iName.c_str(), params[0] / cm, params[1] / cm, params[2] / cm);
575  break;
576  }
577  default:
578  break;
579  }
580  nameToShape_[iName] = rSolid;
581  }
582  if (rSolid == nullptr) {
583  edm::LogError("TGeoMgrFromDdd") << "COULD NOT MAKE " << iName << " of a shape " << iSolid;
584  }
585 
586  edm::LogVerbatim("TGeoMgrFromDdd") << "solid " << iName << " has been created.";
587 
588  return rSolid;
589 }
590 
591 TGeoVolume* TGeoMgrFromDdd::createVolume(const std::string& iName, const DDSolid& iSolid, const DDMaterial& iMaterial) {
592  TGeoVolume* v = nameToVolume_[iName];
593  if (v == nullptr) {
594  TGeoShape* solid =
595  m_fullname ? createShape(iSolid.name().fullname(), iSolid) : createShape(iSolid.name().name(), iSolid);
596  std::string mat_name = m_fullname ? iMaterial.name().fullname() : iMaterial.name().name();
597  TGeoMedium* geo_med = nameToMedium_[mat_name];
598  if (geo_med == nullptr) {
599  TGeoMaterial* geo_mat = createMaterial(iMaterial);
600  geo_med = new TGeoMedium(mat_name.c_str(), 0, geo_mat);
601  nameToMedium_[mat_name] = geo_med;
602  }
603  if (solid) {
604  v = new TGeoVolume(iName.c_str(), solid, geo_med);
605  }
606  nameToVolume_[iName] = v;
607  }
608  return v;
609 }
610 
611 TGeoMaterial* TGeoMgrFromDdd::createMaterial(const DDMaterial& iMaterial) {
612  std::string mat_name = m_fullname ? iMaterial.name().fullname() : iMaterial.name().name();
613  TGeoMaterial* mat = nameToMaterial_[mat_name];
614 
615  if (mat == nullptr) {
616  if (iMaterial.noOfConstituents() > 0) {
617  TGeoMixture* mix = new TGeoMixture(mat_name.c_str(), iMaterial.noOfConstituents(), iMaterial.density() * cm3 / g);
618  for (int i = 0; i < iMaterial.noOfConstituents(); ++i) {
619  mix->AddElement(createMaterial(iMaterial.constituent(i).first), iMaterial.constituent(i).second);
620  }
621  mat = mix;
622  } else {
623  mat = new TGeoMaterial(mat_name.c_str(), iMaterial.a() * mole / g, iMaterial.z(), iMaterial.density() * cm3 / g);
624  }
625  nameToMaterial_[mat_name] = mat;
626  }
627 
628  return mat;
629 }
630 
631 //
632 // const member functions
633 //
634 
635 //
636 // static member functions
637 //
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:366
mps_fire.i
i
Definition: mps_fire.py:428
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
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::ParameterSetDescription
Definition: ParameterSetDescription.h:52
ESProducer.h
TGeoMgrFromDdd::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &)
Definition: TGeoMgrFromDdd.cc:96
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
alpha
float alpha
Definition: AMPTWrapper.h:105
TGeoMgrFromDdd
Definition: TGeoMgrFromDdd.cc:49
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:153
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
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:61
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
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
DDSolidShape::ddtubs
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
TGeoMgrFromDdd::createManager
TGeoManager * createManager(int level)
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:98
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:611
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::ParameterSet
Definition: ParameterSet.h:47
TGeoMgrFromDdd::m_level
const int m_level
Definition: TGeoMgrFromDdd.cc:76
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:41
IdealGeometryRecord.h
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
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
EgammaValidation_cff.num
num
Definition: EgammaValidation_cff.py:34
edm::ESTransientHandle
Definition: ESTransientHandle.h:41
TGeoMgrFromDdd::createVolume
TGeoVolume * createVolume(const std::string &iName, const DDSolid &iSolid, const DDMaterial &iMaterial)
Definition: TGeoMgrFromDdd.cc:591
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:63
ModuleFactory.h
submitPVResolutionJobs.desc
string desc
Definition: submitPVResolutionJobs.py:251
bookConverter.elements
elements
Definition: bookConverter.py:147
TGeoMgrFromDdd::m_verbose
const bool m_verbose
Definition: TGeoMgrFromDdd.cc:77
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
DDSolidShape::ddbox
DisplayGeomRecord.h
DEFINE_FWK_EVENTSETUP_MODULE
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:60
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
Exception
Definition: hltDiff.cc:245
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:236
TGeoMgrFromDdd::nameToMedium_
std::map< std::string, TGeoMedium * > nameToMedium_
Definition: TGeoMgrFromDdd.cc:85
DDSolidShape::ddcuttubs
edm::ESProducer
Definition: ESProducer.h:104
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
submitPVValidationJobs.t
string t
Definition: submitPVValidationJobs.py:644
GeneratorMix_cff.mix
mix
Definition: GeneratorMix_cff.py:6
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::viewToken_
const edm::ESGetToken< DDCompactView, IdealGeometryRecord > viewToken_
Definition: TGeoMgrFromDdd.cc:87
TGeoMgrFromDdd::produce
ReturnType produce(const DisplayGeomRecord &)
Definition: TGeoMgrFromDdd.cc:126
DDExtrudedPolygon::zscaleVec
std::vector< double > zscaleVec(void) const
Definition: DDSolid.cc:398
DisplayGeomRecord
Definition: DisplayGeomRecord.h:24