CMS 3D CMS Logo

TGeoFromDddService.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Geometry
4 // Class : TGeoFromDddService
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author:
10 // Created: Fri Jul 2 16:11:42 CEST 2010
11 //
12 
13 // system include files
14 
15 // user include files
16 
18 
23 
28 
30 
31 #include "TGeoManager.h"
32 #include "TGeoMatrix.h"
33 #include "TGeoCompositeShape.h"
34 #include "TGeoPcon.h"
35 #include "TGeoPgon.h"
36 #include "TGeoCone.h"
37 #include "TGeoBoolNode.h"
38 #include "TGeoTube.h"
39 #include "TGeoArb8.h"
40 #include "TGeoTrd2.h"
41 #include "TGeoXtru.h"
42 
43 #include "Math/GenVector/RotationX.h"
44 
45 #include "CLHEP/Units/GlobalSystemOfUnits.h"
46 
47 //
48 // constants, enums and typedefs
49 //
50 
51 //
52 // static data member definitions
53 //
54 
55 //
56 // constructors and destructor
57 //
59  : m_level(pset.getUntrackedParameter<int>("level", 10)),
60  m_verbose(pset.getUntrackedParameter<bool>("verbose", false)),
61  m_eventSetup(nullptr),
62  m_geoManager(nullptr) {
65 }
66 
68  if (m_geoManager) {
69  delete m_geoManager;
70  }
71 }
72 
73 //==============================================================================
74 // public member functions
75 //==============================================================================
76 
78  printf("TGeoFromDddService::postBeginRun\n");
79 
80  m_eventSetup = &es;
81 }
82 
84  printf("TGeoFromDddService::postEndRun\n");
85 
86  // Construction of geometry fails miserably on second attempt ...
87  /*
88  if (m_geoManager)
89  {
90  delete m_geoManager;
91  m_geoManager = 0;
92  }
93  */
94  m_eventSetup = nullptr;
95 }
96 
98  if (m_geoManager == nullptr) {
99  if (m_eventSetup == nullptr)
100  edm::LogError("TGeoFromDddService") << "getGeoManager() -- EventSetup not present.\n";
101  else {
103  if (m_geoManager == nullptr)
104  edm::LogError("TGeoFromDddService") << "getGeoManager() -- creation failed.\n";
105  }
106  }
107  gGeoManager = m_geoManager;
108  return m_geoManager;
109 }
110 
111 //==============================================================================
112 // Local helpers
113 //==============================================================================
114 
115 namespace {
116  TGeoCombiTrans* createPlacement(const DDRotationMatrix& iRot, const DDTranslation& iTrans) {
117  // std::cout << "in createPlacement" << std::endl;
118  double elements[9];
119  iRot.GetComponents(elements);
120  TGeoRotation r;
121  r.SetMatrix(elements);
122 
123  TGeoTranslation t(iTrans.x() / cm, iTrans.y() / cm, iTrans.z() / cm);
124 
125  return new TGeoCombiTrans(t, r);
126  }
127 } // namespace
128 
129 //==============================================================================
130 // private member functions
131 //==============================================================================
132 
134  using namespace edm;
135 
138 
139  if (!viewH.isValid()) {
140  return nullptr;
141  }
142 
143  TGeoManager* geo_mgr = new TGeoManager("cmsGeo", "CMS Detector");
144  // NOTE: the default constructor does not create the identity matrix
145  if (gGeoIdentity == nullptr) {
146  gGeoIdentity = new TGeoIdentity("Identity");
147  }
148 
149  std::cout << "about to initialize the DDCompactView walker" << std::endl;
150  auto walker = math::GraphWalker<DDLogicalPart, DDPosData*>(viewH->graph(), viewH->root());
151  auto info = walker.current();
152 
153  // The top most item is actually the volume holding both the
154  // geometry AND the magnetic field volumes!
155  walker.firstChild();
156 
157  TGeoVolume* top = createVolume(info.first.name().fullname(), info.first.solid(), info.first.material());
158  if (top == nullptr) {
159  return nullptr;
160  }
161 
162  geo_mgr->SetTopVolume(top);
163  // ROOT chokes unless colors are assigned
164  top->SetVisibility(kFALSE);
165  top->SetLineColor(kBlue);
166 
167  std::vector<TGeoVolume*> parentStack;
168  parentStack.push_back(top);
169 
170  if (!walker.firstChild()) {
171  return nullptr;
172  }
173 
174  do {
175  auto info = walker.current();
176 
177  if (m_verbose) {
178  for (unsigned int i = 0; i < parentStack.size(); ++i) {
179  std::cout << " ";
180  }
181  std::cout << info.first.name() << " " << info.second->copyno() << " "
182  << DDSolidShapesName::name(info.first.solid().shape()) << std::endl;
183  }
184 
185  bool childAlreadyExists = (nullptr != nameToVolume_[info.first.name().fullname()]);
186  TGeoVolume* child = createVolume(info.first.name().fullname(), info.first.solid(), info.first.material());
187  if (nullptr != child && info.second != nullptr) {
188  parentStack.back()->AddNode(
189  child, info.second->copyno(), createPlacement(info.second->rotation(), info.second->translation()));
190  child->SetLineColor(kBlue);
191  } else {
192  if (info.second == nullptr) {
193  break;
194  }
195  }
196  if (nullptr == child || childAlreadyExists || level == int(parentStack.size())) {
197  if (nullptr != child) {
198  child->SetLineColor(kRed);
199  }
200  //stop descending
201  if (!walker.nextSibling()) {
202  while (walker.parent()) {
203  parentStack.pop_back();
204  if (walker.nextSibling()) {
205  break;
206  }
207  }
208  }
209  } else {
210  if (walker.firstChild()) {
211  parentStack.push_back(child);
212  } else {
213  if (!walker.nextSibling()) {
214  while (walker.parent()) {
215  parentStack.pop_back();
216  if (walker.nextSibling()) {
217  break;
218  }
219  }
220  }
221  }
222  }
223  } while (!parentStack.empty());
224 
225  geo_mgr->CloseGeometry();
226 
227  geo_mgr->DefaultColors();
228 
229  nameToShape_.clear();
230  nameToVolume_.clear();
231  nameToMaterial_.clear();
232  nameToMedium_.clear();
233 
234  return geo_mgr;
235 }
236 
237 TGeoShape* TGeoFromDddService::createShape(const std::string& iName, const DDSolid& iSolid) {
238  TGeoShape* rSolid = nameToShape_[iName];
239  if (rSolid == nullptr) {
240  const std::vector<double>& params = iSolid.parameters();
241  // std::cout <<" shape "<<iSolid<<std::endl;
242  switch (iSolid.shape()) {
243  case DDSolidShape::ddbox:
244  rSolid = new TGeoBBox(iName.c_str(), params[0] / cm, params[1] / cm, params[2] / cm);
245  break;
247  rSolid = new TGeoConeSeg(iName.c_str(),
248  params[0] / cm,
249  params[1] / cm,
250  params[2] / cm,
251  params[3] / cm,
252  params[4] / cm,
253  params[5] / deg,
254  params[6] / deg + params[5] / deg);
255  break;
257  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi
258  rSolid = new TGeoTubeSeg(iName.c_str(),
259  params[1] / cm,
260  params[2] / cm,
261  params[0] / cm,
262  params[3] / deg,
263  params[3] / deg + params[4] / deg);
264  break;
266  //Order in params is zhalf,rIn,rOut,startPhi,deltaPhi
267  rSolid = new TGeoCtub(iName.c_str(),
268  params[1] / cm,
269  params[2] / cm,
270  params[0] / cm,
271  params[3] / deg,
272  params[3] / deg + params[4] / deg,
273  params[5],
274  params[6],
275  params[7],
276  params[8],
277  params[9],
278  params[10]);
279  break;
281  rSolid = new TGeoTrap(iName.c_str(),
282  params[0] / cm, //dz
283  params[1] / deg, //theta
284  params[2] / deg, //phi
285  params[3] / cm, //dy1
286  params[4] / cm, //dx1
287  params[5] / cm, //dx2
288  params[6] / deg, //alpha1
289  params[7] / cm, //dy2
290  params[8] / cm, //dx3
291  params[9] / cm, //dx4
292  params[10] / deg); //alpha2
293  break;
295  rSolid = new TGeoPcon(iName.c_str(), params[0] / deg, params[1] / deg, (params.size() - 2) / 3);
296  {
297  std::vector<double> temp(params.size() + 1);
298  temp.reserve(params.size() + 1);
299  temp[0] = params[0] / deg;
300  temp[1] = params[1] / deg;
301  temp[2] = (params.size() - 2) / 3;
302  std::copy(params.begin() + 2, params.end(), temp.begin() + 3);
303  for (std::vector<double>::iterator it = temp.begin() + 3; it != temp.end(); ++it) {
304  *it /= cm;
305  }
306  rSolid->SetDimensions(&(*(temp.begin())));
307  }
308  break;
310  rSolid = new TGeoPgon(
311  iName.c_str(), params[1] / deg, params[2] / deg, static_cast<int>(params[0]), (params.size() - 3) / 3);
312  {
313  std::vector<double> temp(params.size() + 1);
314  temp[0] = params[1] / deg;
315  temp[1] = params[2] / deg;
316  temp[2] = params[0];
317  temp[3] = (params.size() - 3) / 3;
318  std::copy(params.begin() + 3, params.end(), temp.begin() + 4);
319  for (std::vector<double>::iterator it = temp.begin() + 4; it != temp.end(); ++it) {
320  *it /= cm;
321  }
322  rSolid->SetDimensions(&(*(temp.begin())));
323  }
324  break;
326  DDExtrudedPolygon extrPgon(iSolid);
327  std::vector<double> x = extrPgon.xVec();
328  std::transform(x.begin(), x.end(), x.begin(), [](double d) { return d / cm; });
329  std::vector<double> y = extrPgon.yVec();
330  std::transform(y.begin(), y.end(), y.begin(), [](double d) { return d / cm; });
331  std::vector<double> z = extrPgon.zVec();
332  std::vector<double> zx = extrPgon.zxVec();
333  std::vector<double> zy = extrPgon.zyVec();
334  std::vector<double> zscale = extrPgon.zscaleVec();
335 
336  TGeoXtru* mySolid = new TGeoXtru(z.size());
337  mySolid->DefinePolygon(x.size(), &(*x.begin()), &(*y.begin()));
338  for (size_t i = 0; i < params[0]; ++i) {
339  mySolid->DefineSection(i, z[i] / cm, zx[i] / cm, zy[i] / cm, zscale[i]);
340  }
341 
342  rSolid = mySolid;
343  } break;
345  //implementation taken from SimG4Core/Geometry/src/DDG4SolidConverter.cc
346  const static DDRotationMatrix s_rot(ROOT::Math::RotationX(90. * deg));
347  DDPseudoTrap pt(iSolid);
348  assert(pt.radius() < 0);
349  double x = 0;
350  double r = fabs(pt.radius());
351  if (pt.atMinusZ()) {
352  x = pt.x1();
353  } else {
354  x = pt.x2();
355  }
356  double openingAngle = 2.0 * asin(x / r);
357  double h = pt.y1() < pt.y2() ? pt.y2() : pt.y1();
358  h += h / 20.;
359  double displacement = 0;
360  double startPhi = 0;
361  double delta = sqrt((r + x) * (r - x));
362  if (pt.atMinusZ()) {
363  displacement = -pt.halfZ() - delta;
364  startPhi = 270. - openingAngle / deg / 2.0;
365  } else {
366  displacement = pt.halfZ() + delta;
367  startPhi = 90. - openingAngle / deg / 2.;
368  }
369  std::unique_ptr<TGeoShape> trap(new TGeoTrd2(
370  pt.name().name().c_str(), pt.x1() / cm, pt.x2() / cm, pt.y1() / cm, pt.y2() / cm, pt.halfZ() / cm));
371  std::unique_ptr<TGeoShape> tubs(
372  new TGeoTubeSeg(pt.name().name().c_str(), 0., r / cm, h / cm, startPhi, openingAngle));
373  TGeoSubtraction* sub = new TGeoSubtraction(
374  trap.release(), tubs.release(), createPlacement(s_rot, DDTranslation(0., 0., displacement)));
375  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
376 
377  break;
378  }
380  DDBooleanSolid boolSolid(iSolid);
381  if (!boolSolid) {
382  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
383  }
384 
385  std::unique_ptr<TGeoShape> left(createShape(boolSolid.solidA().name().fullname(), boolSolid.solidA()));
386  std::unique_ptr<TGeoShape> right(createShape(boolSolid.solidB().name().fullname(), boolSolid.solidB()));
387  if (nullptr != left.get() && nullptr != right.get()) {
388  TGeoSubtraction* sub =
389  new TGeoSubtraction(left.release(),
390  right.release(),
391  gGeoIdentity,
392  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
393  rSolid = new TGeoCompositeShape(iName.c_str(), sub);
394  }
395  break;
396  }
397  case DDSolidShape::ddunion: {
398  DDBooleanSolid boolSolid(iSolid);
399  if (!boolSolid) {
400  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
401  }
402 
403  std::unique_ptr<TGeoShape> left(createShape(boolSolid.solidA().name().fullname(), boolSolid.solidA()));
404  std::unique_ptr<TGeoShape> right(createShape(boolSolid.solidB().name().fullname(), boolSolid.solidB()));
405  //DEBUGGING
406  //break;
407  if (nullptr != left.get() && nullptr != right.get()) {
408  TGeoUnion* boolS = new TGeoUnion(left.release(),
409  right.release(),
410  gGeoIdentity,
411  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
412  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
413  }
414  break;
415  }
417  DDBooleanSolid boolSolid(iSolid);
418  if (!boolSolid) {
419  throw cms::Exception("GeomConvert") << "conversion to DDBooleanSolid failed";
420  }
421 
422  std::unique_ptr<TGeoShape> left(createShape(boolSolid.solidA().name().fullname(), boolSolid.solidA()));
423  std::unique_ptr<TGeoShape> right(createShape(boolSolid.solidB().name().fullname(), boolSolid.solidB()));
424  if (nullptr != left.get() && nullptr != right.get()) {
425  TGeoIntersection* boolS =
426  new TGeoIntersection(left.release(),
427  right.release(),
428  gGeoIdentity,
429  createPlacement(boolSolid.rotation().matrix(), boolSolid.translation()));
430  rSolid = new TGeoCompositeShape(iName.c_str(), boolS);
431  }
432  break;
433  }
434  default:
435  break;
436  }
437  nameToShape_[iName] = rSolid;
438  }
439  if (rSolid == nullptr) {
440  std::cerr << "COULD NOT MAKE " << iName << std::endl;
441  }
442  return rSolid;
443 }
444 
446  const DDSolid& iSolid,
447  const DDMaterial& iMaterial) {
448  TGeoVolume* v = nameToVolume_[iName];
449  if (v == nullptr) {
450  TGeoShape* solid = createShape(iSolid.name().fullname(), iSolid);
451  std::string mat_name = iMaterial.name().fullname();
452  TGeoMedium* geo_med = nameToMedium_[mat_name];
453  if (geo_med == nullptr) {
454  TGeoMaterial* geo_mat = createMaterial(iMaterial);
455  geo_med = new TGeoMedium(mat_name.c_str(), 0, geo_mat);
456  nameToMedium_[mat_name] = geo_med;
457  }
458  if (solid) {
459  v = new TGeoVolume(iName.c_str(), solid, geo_med);
460  }
461  nameToVolume_[iName] = v;
462  }
463  return v;
464 }
465 
466 TGeoMaterial* TGeoFromDddService::createMaterial(const DDMaterial& iMaterial) {
467  std::string mat_name = iMaterial.name().fullname();
468  TGeoMaterial* mat = nameToMaterial_[mat_name];
469 
470  if (mat == nullptr) {
471  if (iMaterial.noOfConstituents() > 0) {
472  TGeoMixture* mix = new TGeoMixture(mat_name.c_str(), iMaterial.noOfConstituents(), iMaterial.density() * cm3 / g);
473  for (int i = 0; i < iMaterial.noOfConstituents(); ++i) {
474  mix->AddElement(createMaterial(iMaterial.constituent(i).first), iMaterial.constituent(i).second);
475  }
476  mat = mix;
477  } else {
478  mat = new TGeoMaterial(mat_name.c_str(), iMaterial.a() * mole / g, iMaterial.z(), iMaterial.density() * cm3 / g);
479  }
480  nameToMaterial_[mat_name] = mat;
481  }
482 
483  return mat;
484 }
485 
486 //
487 // const member functions
488 //
489 
490 //
491 // static member functions
492 //
personalPlayback.level
level
Definition: personalPlayback.py:22
TGeoFromDddService::createMaterial
TGeoMaterial * createMaterial(const DDMaterial &iMaterial)
Definition: TGeoFromDddService.cc:466
DDBooleanSolid::solidB
DDSolid solidB(void) const
Definition: DDSolid.cc:468
DDAxes::y
TGeoFromDddService::m_geoManager
TGeoManager * m_geoManager
Definition: TGeoFromDddService.h:77
electrons_cff.bool
bool
Definition: electrons_cff.py:372
mps_fire.i
i
Definition: mps_fire.py:355
ESTransientHandle.h
funct::false
false
Definition: Factorize.h:34
DDSolidShape::ddtrap
math::GraphWalker< DDLogicalPart, DDPosData * >
DDExtrudedPolygon::yVec
std::vector< double > yVec(void) const
Definition: DDSolid.cc:378
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
TGeoFromDddService::postBeginRun
void postBeginRun(const edm::Run &, const edm::EventSetup &)
Definition: TGeoFromDddService.cc:77
TGeoFromDddService::TGeoFromDddService
TGeoFromDddService(const edm::ParameterSet &, edm::ActivityRegistry &)
Definition: TGeoFromDddService.cc:58
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
edm::Run
Definition: Run.h:45
edm::ActivityRegistry::watchPostEndRun
void watchPostEndRun(PostEndRun::slot_type const &iSlot)
Definition: ActivityRegistry.h:489
DDMaterial::density
double density() const
returns the density
Definition: DDMaterial.cc:80
edm
HLT enums.
Definition: AlignableModifier.h:19
DDSolidShape::ddpseudotrap
DDSolidShape::ddpolyhedra_rrz
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
TGeoFromDddService::m_verbose
bool m_verbose
Definition: TGeoFromDddService.h:75
cms::cuda::assert
assert(be >=bs)
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
info
static const TGPicture * info(bool iBackgroundIsBlack)
Definition: FWCollectionSummaryWidget.cc:152
DDExtrudedPolygon::xVec
std::vector< double > xVec(void) const
Definition: DDSolid.cc:374
TGeoFromDddService::nameToShape_
std::map< std::string, TGeoShape * > nameToShape_
Definition: TGeoFromDddService.h:79
DDAxes::x
findQualityFiles.v
v
Definition: findQualityFiles.py:179
TGeoFromDddService::nameToMedium_
std::map< std::string, TGeoMedium * > nameToMedium_
Definition: TGeoFromDddService.h:82
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
DDCompactView.h
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
TGeoFromDddService::nameToVolume_
std::map< std::string, TGeoVolume * > nameToVolume_
Definition: TGeoFromDddService.h:80
DDPseudoTrap
Definition: DDSolid.h:106
DDExtrudedPolygon::zVec
std::vector< double > zVec(void) const
Definition: DDSolid.cc:383
ActivityRegistry.h
DDBooleanSolid
Definition: DDSolid.h:173
TGeoFromDddService::createManager
TGeoManager * createManager(int level)
Definition: TGeoFromDddService.cc:133
DDSolid::shape
DDSolidShape shape(void) const
The type of the solid.
Definition: DDSolid.cc:119
DDBooleanSolid::translation
DDTranslation translation(void) const
Definition: DDSolid.cc:464
DDMaterial
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:45
h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
TGeoFromDddService::createShape
TGeoShape * createShape(const std::string &iName, const DDSolid &iSolid)
Definition: TGeoFromDddService.cc:237
DDSolidShape::ddtubs
DDCompactView::graph
const Graph & graph() const
Provides read-only access to the data structure of the compact-view.
Definition: DDCompactView.cc:58
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
TGeoFromDddService::m_eventSetup
const edm::EventSetup * m_eventSetup
Definition: TGeoFromDddService.h:76
DDBase::name
const N & name() const
Definition: DDBase.h:59
DDAxes::z
edm::ActivityRegistry
Definition: ActivityRegistry.h:132
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
OrderedSet.t
t
Definition: OrderedSet.py:90
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DDSolidShapesName::name
static const char *const name(DDSolidShape s)
Definition: DDSolidShapes.h:32
GraphWalker.h
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
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
TGeoFromDddService::postEndRun
void postEndRun(const edm::Run &, const edm::EventSetup &)
Definition: TGeoFromDddService.cc:83
edm::ActivityRegistry::watchPostBeginRun
void watchPostBeginRun(PostBeginRun::slot_type const &iSlot)
Definition: ActivityRegistry.h:475
IdealGeometryRecord.h
edm::EventSetup
Definition: EventSetup.h:57
DDExtrudedPolygon
Definition: DDSolid.h:238
get
#define get
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
TGeoFromDddService::getGeoManager
TGeoManager * getGeoManager()
Definition: TGeoFromDddService.cc:97
DDExtrudedPolygon::zyVec
std::vector< double > zyVec(void) const
Definition: DDSolid.cc:393
TGeoFromDddService::~TGeoFromDddService
virtual ~TGeoFromDddService()
Definition: TGeoFromDddService.cc:67
edm::ESTransientHandle
Definition: ESTransientHandle.h:41
TGeoFromDddService::createVolume
TGeoVolume * createVolume(const std::string &iName, const DDSolid &iSolid, const DDMaterial &iMaterial)
Definition: TGeoFromDddService.cc:445
alignCSCRings.r
r
Definition: alignCSCRings.py:93
TGeoFromDddService::m_level
int m_level
Definition: TGeoFromDddService.h:74
DDCompactView::root
const DDLogicalPart & root() const
returns the DDLogicalPart representing the root of the geometrical hierarchy
Definition: DDCompactView.cc:62
bookConverter.elements
elements
Definition: bookConverter.py:147
DDSolidShape::ddbox
TGeoFromDddService.h
Exception
Definition: hltDiff.cc:246
DDSolid::parameters
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:121
DDSolidShape::ddextrudedpolygon
EventSetup.h
DDSolid
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
DDBooleanSolid::solidA
DDSolid solidA(void) const
Definition: DDSolid.cc:466
DDSolidShape::ddcuttubs
ztail.d
d
Definition: ztail.py:151
DDSolidShape::ddpolycone_rrz
DDName::fullname
const std::string fullname() const
Definition: DDName.h:40
ParameterSet.h
TGeoFromDddService::nameToMaterial_
std::map< std::string, TGeoMaterial * > nameToMaterial_
Definition: TGeoFromDddService.h:81
DDSolidShape::ddsubtraction
DDSolidShape::ddintersection
child
Definition: simpleInheritance.h:11
GeneratorMix_cff.mix
mix
Definition: GeneratorMix_cff.py:6
dd4hep::createPlacement
TGeoCombiTrans * createPlacement(const Rotation3D &iRot, const Position &iTrans)
Definition: DDDefinitions2Objects.cc:109
DDSolidShape::ddunion
IdealGeometryRecord
Definition: IdealGeometryRecord.h:27
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
DDExtrudedPolygon::zscaleVec
std::vector< double > zscaleVec(void) const
Definition: DDSolid.cc:398