CMS 3D CMS Logo

GEMGeometryBuilder.cc
Go to the documentation of this file.
1 /*
2 //\class GEMGeometryBuilder
3 
4  Description: GEM Geometry builder from DD and DD4HEP
5  DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari)
6  Sergio Lo Meo (sergio.lo.meo@cern.ch) following what Ianna Osburne made for DTs (DD4HEP migration)
7  Updated by Sunanda Banerjee (Fermilab) to make it working for dd4hep
8  Updated: 7 August 2020
9 */
13 
19 
24 
27 
29 
32 
33 #include "CLHEP/Units/GlobalSystemOfUnits.h"
34 
35 #include <algorithm>
36 #include <iostream>
37 #include <string>
38 
39 using namespace cms_units::operators;
40 
41 //#define EDM_ML_DEBUG
42 
44 
46 
47 // DDD
49  const DDCompactView* cview,
50  const MuonGeometryConstants& muonConstants) {
51  std::string attribute = "MuStructure";
52  std::string value = "MuonEndCapGEM";
53 
54  // Asking only for the MuonGEM's
56  DDFilteredView fv(*cview, filter);
57 
58 #ifdef EDM_ML_DEBUG
59  edm::LogVerbatim("Geometry") << "Building the geometry service";
60  edm::LogVerbatim("Geometry") << "About to run through the GEM structure\n"
61  << " First logical part " << fv.logicalPart().name().name();
62 #endif
63  bool doSuper = fv.firstChild();
64 
65  MuonGeometryNumbering mdddnum(muonConstants);
66  GEMNumberingScheme gemNum(muonConstants);
67 
68 #ifdef EDM_ML_DEBUG
69  edm::LogVerbatim("Geometry") << "doSuperChamber = " << doSuper << " with " << fv.geoHistory() << " Levels "
70  << mdddnum.geoHistoryToBaseNumber(fv.geoHistory()).getLevels();
71  ;
72 #endif
73  // loop over superchambers
74  std::vector<GEMSuperChamber*> superChambers;
75  while (doSuper) {
76  // getting chamber id from eta partitions
77  fv.firstChild();
78  fv.firstChild();
79 
80 #ifdef EDM_ML_DEBUG
81  edm::LogVerbatim("Geometry") << "MuonGeometry 1 " << fv.geoHistory() << " Levels "
82  << mdddnum.geoHistoryToBaseNumber(fv.geoHistory()).getLevels();
83 #endif
84  int rawidCh = gemNum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
85  GEMDetId detIdCh = GEMDetId(rawidCh);
86 
87  // back to chambers
88 
89  fv.parent();
90  fv.parent();
91 #ifdef EDM_ML_DEBUG
92  edm::LogVerbatim("Geometry") << "MuonGeometry 2 " << fv.geoHistory() << " Levels "
93  << mdddnum.geoHistoryToBaseNumber(fv.geoHistory()).getLevels();
95 #endif
96  // currently there is no superchamber in the geometry
97  // only 2 chambers are present separated by a gap.
98  // making superchamber out of the first chamber layer including the gap between chambers
99  if (detIdCh.layer() == 1) { // only make superChambers when doing layer 1
100  GEMSuperChamber* gemSuperChamber = buildSuperChamber(fv, detIdCh);
101  superChambers.push_back(gemSuperChamber);
102  }
103  GEMChamber* gemChamber = ((detIdCh.station() == GEMDetId::minStationId0) ? nullptr : buildChamber(fv, detIdCh));
104 
105  // loop over chambers
106  // only 1 chamber
107  bool doChambers = fv.firstChild();
108  bool loopExecuted = false;
109 
110  while (doChambers) {
111  loopExecuted = true;
112 
113  if (detIdCh.station() == GEMDetId::minStationId0) {
114  fv.firstChild();
115  int rawId = gemNum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
116  GEMDetId detId = GEMDetId(rawId);
117  fv.parent();
118 #ifdef EDM_ML_DEBUG
119  edm::LogVerbatim("Geometry") << "MuonGeometry 3 " << fv.geoHistory() << " Levels "
120  << mdddnum.geoHistoryToBaseNumber(fv.geoHistory()).getLevels();
122 #endif
123  gemChamber = buildChamber(fv, detId);
124  }
125 
126  // loop over GEMEtaPartitions
127  bool doEtaPart = fv.firstChild();
128 
129  while (doEtaPart) {
130 #ifdef EDM_ML_DEBUG
131  edm::LogVerbatim("Geometry") << "MuonGeometry 4 " << fv.geoHistory() << " Levels "
132  << mdddnum.geoHistoryToBaseNumber(fv.geoHistory()).getLevels();
133 #endif
134  int rawid = gemNum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fv.geoHistory()));
135  GEMDetId detId = GEMDetId(rawid);
136  GEMEtaPartition* etaPart = buildEtaPartition(fv, detId);
137  gemChamber->add(etaPart);
138  theGeometry.add(etaPart);
139  doEtaPart = fv.nextSibling();
140  }
141 
142  fv.parent();
143 
144  theGeometry.add(gemChamber);
145 
146  doChambers = fv.nextSibling();
147  }
148  fv.parent();
149 
150  doSuper = fv.nextSibling();
151 
152  if (!loopExecuted) {
153  delete gemChamber;
154  }
155  }
156 
157  buildRegions(theGeometry, superChambers);
158 }
159 
161 #ifdef EDM_ML_DEBUG
162  edm::LogVerbatim("Geometry") << "buildSuperChamber " << fv.logicalPart().name().name() << " " << detId;
163 #endif
165  bool ge0Station = detId.station() == GEMDetId::minStationId0;
166  std::vector<double> dpar = ge0Station ? solid.parameters() : solid.solidA().parameters();
167 
168  double dy = geant_units::operators::convertMmToCm(dpar[0]); //length is along local Y
169  double dz = geant_units::operators::convertMmToCm(dpar[3]); // thickness is long local Z
170  double dx1 = geant_units::operators::convertMmToCm(dpar[4]); // bottom width is along local X
171  double dx2 = geant_units::operators::convertMmToCm(dpar[8]); // top width is along local X
172 
173  if (!ge0Station) {
174  const int nch = 2;
175  const double chgap = 2.105;
176 
177  dpar = solid.solidB().parameters();
178 
179  dz += geant_units::operators::convertMmToCm(dpar[3]); // chamber thickness
180  dz *= nch; // 2 chambers in superchamber
181  dz += chgap; // gap between chambers
182  }
183 
184  bool isOdd = detId.chamber() % 2;
185  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd));
186 
187 #ifdef EDM_ML_DEBUG
188  edm::LogVerbatim("Geometry") << "size " << dx1 << " " << dx2 << " " << dy << " " << dz;
189 #endif
190  GEMSuperChamber* superChamber = new GEMSuperChamber(detId.superChamberId(), surf);
191  return superChamber;
192 }
193 
195 #ifdef EDM_ML_DEBUG
196  edm::LogVerbatim("Geometry") << "buildChamber " << fv.logicalPart().name().name() << " " << detId;
197 #endif
199  bool ge0Station = detId.station() == GEMDetId::minStationId0;
200  std::vector<double> dpar = ge0Station ? solid.parameters() : solid.solidA().parameters();
201 
202  double dy = geant_units::operators::convertMmToCm(dpar[0]); //length is along local Y
203  double dz = geant_units::operators::convertMmToCm(dpar[3]); // thickness is long local Z
204  double dx1 = geant_units::operators::convertMmToCm(dpar[4]); // bottom width is along local X
205  double dx2 = geant_units::operators::convertMmToCm(dpar[8]); // top width is along local X
206 
207  if (!ge0Station) {
208  dpar = solid.solidB().parameters();
209  dz += geant_units::operators::convertMmToCm(dpar[3]); // chamber thickness
210  }
211 
212  bool isOdd = ge0Station ? false : detId.chamber() % 2;
213 
214  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd));
215 
216 #ifdef EDM_ML_DEBUG
217  edm::LogVerbatim("Geometry") << "size " << dx1 << " " << dx2 << " " << dy << " " << dz;
218 #endif
219  GEMChamber* chamber = new GEMChamber(detId.chamberId(), surf);
220  return chamber;
221 }
222 
224 #ifdef EDM_ML_DEBUG
225  edm::LogVerbatim("Geometry") << "buildEtaPartition " << fv.logicalPart().name().name() << " " << detId;
226 #endif
227  // EtaPartition specific parameter (nstrips and npads)
228  DDValue numbOfStrips("nStrips");
229  DDValue numbOfPads("nPads");
230  DDValue delPhi("dPhi");
231  std::vector<const DDsvalues_type*> specs(fv.specifics());
232  std::vector<const DDsvalues_type*>::iterator is = specs.begin();
233  double nStrips = 0., nPads = 0., dPhi = 0.;
234  for (; is != specs.end(); is++) {
235  if (DDfetch(*is, numbOfStrips))
236  nStrips = numbOfStrips.doubles()[0];
237  if (DDfetch(*is, numbOfPads))
238  nPads = numbOfPads.doubles()[0];
239  if (DDfetch(*is, delPhi))
240  dPhi = delPhi.doubles()[0];
241  }
242 #ifdef EDM_ML_DEBUG
243  edm::LogVerbatim("Geometry") << ((nStrips == 0.) ? ("No nStrips found!!")
244  : ("Number of strips: " + std::to_string(nStrips)));
245  edm::LogVerbatim("Geometry") << ((nPads == 0.) ? ("No nPads found!!") : ("Number of pads: " + std::to_string(nPads)));
246 #endif
247  // EtaPartition specific parameter (size)
248  std::vector<double> dpar = fv.logicalPart().solid().parameters();
249 
250  double be = geant_units::operators::convertMmToCm(dpar[4]); // half bottom edge
251  double te = geant_units::operators::convertMmToCm(dpar[8]); // half top edge
252  double ap = geant_units::operators::convertMmToCm(dpar[0]); // half apothem
253  double ti = 0.4; // half thickness
254 
255  std::vector<float> pars;
256  pars.emplace_back(be);
257  pars.emplace_back(te);
258  pars.emplace_back(ap);
259  pars.emplace_back(nStrips);
260  pars.emplace_back(nPads);
261  pars.emplace_back(dPhi);
262 
263  bool isOdd = detId.chamber() % 2;
264  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(be, te, ap, ti), isOdd));
265  std::string name = fv.logicalPart().name().name();
267 
268 #ifdef EDM_ML_DEBUG
269  edm::LogVerbatim("Geometry") << "size " << be << " " << te << " " << ap << " " << ti;
270 #endif
271  GEMEtaPartition* etaPartition = new GEMEtaPartition(detId, surf, e_p_specs);
272  return etaPartition;
273 }
274 
276  Bounds* bounds,
277  bool isOddChamber) const {
278  // extract the position
279  const DDTranslation& trans(fv.translation());
280  const Surface::PositionType posResult(float(trans.x() / cm), float(trans.y() / cm), float(trans.z() / cm));
281 
282  // now the rotation
283  const DDRotationMatrix& rotation = fv.rotation();
284  DD3Vector x, y, z;
285  rotation.GetComponents(x, y, z);
286 
287  Surface::RotationType rotResult(float(x.X()),
288  float(x.Y()),
289  float(x.Z()),
290  float(y.X()),
291  float(y.Y()),
292  float(y.Z()),
293  float(z.X()),
294  float(z.Y()),
295  float(z.Z()));
296 
297  //Change of axes for the forward
298  Basic3DVector<float> newX(1., 0., 0.);
299  Basic3DVector<float> newY(0., 0., -1.);
300  Basic3DVector<float> newZ(0., 1., 0.);
301 
302  rotResult.rotateAxes(newX, newY, newZ);
303 
304  return RCPBoundPlane(new BoundPlane(posResult, rotResult, bounds));
305 }
306 
307 // DD4HEP
308 
310  const cms::DDCompactView* cview,
311  const MuonGeometryConstants& muonConstants) {
312  std::string attribute = "MuStructure";
313  std::string value = "MuonEndCapGEM";
314  const cms::DDFilter filter(attribute, value);
315  cms::DDFilteredView fv(*cview, filter);
316 
317  MuonGeometryNumbering mdddnum(muonConstants);
318  GEMNumberingScheme gemNum(muonConstants);
319  static constexpr uint32_t levelChamb = 7;
320  int chamb(0), region(0);
321  int theLevelPart = muonConstants.getValue("level");
322  int theRingLevel = muonConstants.getValue("mg_ring") / theLevelPart;
323  int theSectorLevel = muonConstants.getValue("mg_sector") / theLevelPart;
324  std::vector<GEMSuperChamber*> superChambers;
325  std::vector<GEMChamber*> chambers;
326 
327  while (fv.firstChild()) {
328  const auto& history = fv.history();
329  MuonBaseNumber num(mdddnum.geoHistoryToBaseNumber(history));
330  GEMDetId detId(gemNum.baseNumberToUnitNumber(num));
331 #ifdef EDM_ML_DEBUG
332  edm::LogVerbatim("Geometry") << fv.name() << " with " << history.tags.size() << " Levels and ID " << detId
333  << " Mask " << std::hex << GEMDetId::chamberIdMask << std::dec << " and "
334  << GEMDetId(((detId.rawId()) & GEMDetId::chamberIdMask)) << " Levels " << theRingLevel
335  << ":" << theSectorLevel << ":" << history.tags.size() << ":" << fv.level();
336  for (unsigned int k = 0; k < history.tags.size(); ++k)
337  edm::LogVerbatim("Geometry") << "[" << k << "] Tag " << history.tags[k] << " Offset " << history.offsets[k]
338  << " copy " << history.copyNos[k];
339 #endif
340 
341  if (detId.station() == GEMDetId::minStationId0) {
342  if (num.getLevels() == theRingLevel) {
343  if (detId.region() != region) {
344  region = detId.region();
345  chamb = 0;
346  }
347  ++chamb;
348  detId = GEMDetId(detId.region(), detId.ring(), detId.station(), detId.layer(), chamb, 0);
349  GEMSuperChamber* gemSuperChamber = buildSuperChamber(fv, detId);
350  superChambers.emplace_back(gemSuperChamber);
351  } else if (num.getLevels() == theSectorLevel) {
352  GEMChamber* gemChamber = buildChamber(fv, detId);
353  chambers.emplace_back(gemChamber);
354  } else {
355  GEMEtaPartition* etaPart = buildEtaPartition(fv, detId);
356  theGeometry.add(etaPart);
357  }
358  } else {
359  if (fv.level() == levelChamb) {
360  if (detId.layer() == 1) {
361  GEMSuperChamber* gemSuperChamber = buildSuperChamber(fv, detId);
362  superChambers.emplace_back(gemSuperChamber);
363  }
364  GEMChamber* gemChamber = buildChamber(fv, detId);
365  chambers.emplace_back(gemChamber);
366  } else if (num.getLevels() > theSectorLevel) {
367  GEMEtaPartition* etaPart = buildEtaPartition(fv, detId);
368  theGeometry.add(etaPart);
369  }
370  }
371  }
372 
373  auto& partitions = theGeometry.etaPartitions();
374  for (auto& gemChamber : chambers) {
375  uint32_t id0 = ((gemChamber->id().rawId()) & GEMDetId::chamberIdMask);
376  for (auto& etaPart : partitions) {
377  if (((etaPart->id().rawId()) & GEMDetId::chamberIdMask) == id0) {
378  gemChamber->add(etaPart);
379  }
380  }
381  theGeometry.add(gemChamber);
382  }
383 
384  buildRegions(theGeometry, superChambers);
385 }
386 
388  cms::DDSolid solid(fv.solid());
389  auto solidA = solid.solidA();
390  std::vector<double> dpar = solidA.dimensions();
391 
392  double dy = dpar[3]; //length is along local Y
393  double dz = dpar[2]; // thickness is long local Z
394  double dx1 = dpar[0]; // bottom width is along local X
395  double dx2 = dpar[1]; // top width is along loc
396 
397  auto solidB = solid.solidB();
398  dpar = solidB.dimensions();
399  const int nch = 2;
400  const double chgap = 2.105;
401 
402  dz += dpar[2]; // chamber thickness
403  dz *= nch; // 2 chambers in superchamber
404  dz += chgap; // gap between chambers
405 
406  bool isOdd = detId.chamber() % 2;
407  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd));
408 
409  GEMSuperChamber* superChamber = new GEMSuperChamber(detId.superChamberId(), surf);
410  return superChamber;
411 }
412 
414  cms::DDSolid solid(fv.solid());
415  auto solidA = solid.solidA();
416  std::vector<double> dpar = solidA.dimensions();
417 
418  double dy = dpar[3]; //length is along local Y
419  double dz = dpar[2]; // thickness is long local Z
420  double dx1 = dpar[0]; // bottom width is along local X
421  double dx2 = dpar[1]; // top width is along local X
422 
423  auto solidB = solid.solidB();
424  dpar = solidB.dimensions();
425 
426  dz += dpar[2]; // chamber thickness
427 
428  bool isOdd = detId.chamber() % 2;
429  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dx1, dx2, dy, dz), isOdd));
430 
431  GEMChamber* chamber = new GEMChamber(detId.chamberId(), surf);
432  return chamber;
433 }
434 
436  // EtaPartition specific parameter (nstrips and npads)
437 
438  auto nStrips = fv.get<double>("nStrips");
439  auto nPads = fv.get<double>("nPads");
440  auto dPhi = fv.get<double>("dPhi");
441  // EtaPartition specific parameter (size)
442 
443  std::vector<double> dpar = fv.parameters();
444 
445  double ti = 0.4; // half thickness
446 
447  const std::vector<float> pars{
448  float(dpar[0]), float(dpar[1]), float(dpar[3]), float(nStrips), float(nPads), float(dPhi)};
449 
450  bool isOdd = detId.chamber() % 2;
451  RCPBoundPlane surf(boundPlane(fv, new TrapezoidalPlaneBounds(dpar[0], dpar[1], dpar[3], ti), isOdd));
452 
453  std::string_view name = fv.name();
454 
456 
457  GEMEtaPartition* etaPartition = new GEMEtaPartition(detId, surf, e_p_specs);
458  return etaPartition;
459 }
460 
462  Bounds* bounds,
463  bool isOddChamber) const {
464  // extract the position
465  const Double_t* tran = fv.trans();
466  Surface::PositionType posResult(tran[0], tran[1], tran[2]);
467 
468  // now the rotation
469  DDRotationMatrix rota;
470  fv.rot(rota);
471  DD3Vector x, y, z;
472  rota.GetComponents(x, y, z);
473  Surface::RotationType rotResult(float(x.X()),
474  float(x.Y()),
475  float(x.Z()),
476  float(y.X()),
477  float(y.Y()),
478  float(y.Z()),
479  float(z.X()),
480  float(z.Y()),
481  float(z.Z()));
482 
483  //Change of axes for the forward
484  Basic3DVector<float> newX(1., 0., 0.);
485  Basic3DVector<float> newY(0., 0., -1.);
486  Basic3DVector<float> newZ(0., 1., 0.);
487 
488  rotResult.rotateAxes(newX, newY, newZ);
489 
490  return RCPBoundPlane(new BoundPlane(posResult, rotResult, bounds));
491 }
492 
493 void GEMGeometryBuilder::buildRegions(GEMGeometry& theGeometry, const std::vector<GEMSuperChamber*>& superChambers) {
494  // construct the regions, stations and rings.
495  for (int re = -1; re <= 1; re = re + 2) {
496  GEMRegion* region = new GEMRegion(re);
497  for (int st = GEMDetId::minStationId0; st <= GEMDetId::maxStationId; ++st) {
498  bool ge0Station = st == GEMDetId::minStationId0;
499  GEMStation* station = new GEMStation(re, st);
500  std::string sign(re == -1 ? "-" : "");
501  std::string suffix = ge0Station ? "" : "/1";
502  std::string name = "GE" + sign + std::to_string(st) + suffix;
503  station->setName(name);
504  bool foundSuperChamber = false;
505  for (int ri = 1; ri <= 1; ++ri) {
506  GEMRing* ring = new GEMRing(re, st, ri);
507  for (auto superChamber : superChambers) {
508  const GEMDetId detId(superChamber->id());
509  if (detId.region() != re || detId.station() != st || detId.ring() != ri)
510  continue;
511 
512  foundSuperChamber = true;
514 
515  // GEMDetId::minLayerId is to id the superchamber, so minLayerId+1 is the first layer
516  for (int la = GEMDetId::minLayerId + 1; la <= nlayers; ++la) {
517  GEMDetId chId(detId.region(), detId.ring(), detId.station(), la, detId.chamber(), 0);
518  auto chamber = theGeometry.chamber(chId);
519  if (!chamber) {
520  edm::LogWarning("GEMGeometryBuilder") << "Missing chamber " << chId;
521  }
522  superChamber->add(chamber);
523  }
524  ring->add(superChamber);
525  theGeometry.add(superChamber);
526 #ifdef EDM_ML_DEBUG
527  edm::LogVerbatim("Geometry") << "Adding super chamber " << detId << " to ring: "
528  << "re " << re << " st " << st << " ri " << ri;
529 #endif
530  }
531 #ifdef EDM_ML_DEBUG
532  edm::LogVerbatim("Geometry") << "Adding ring " << ri << " to station "
533  << "re " << re << " st " << st;
534 #endif
535  if (foundSuperChamber) {
536  station->add(ring);
537  theGeometry.add(ring);
538  }
539  }
540  if (!foundSuperChamber) {
541 #ifdef EDM_ML_DEBUG
542  edm::LogVerbatim("Geometry") << "No superchamber found: re:" << re << " st:" << st;
543 #endif
544  delete station;
545  } else {
546 #ifdef EDM_ML_DEBUG
547  edm::LogVerbatim("Geometry") << "Adding station " << st << " to region " << re;
548 #endif
549  region->add(station);
550  theGeometry.add(station);
551  }
552  }
553 #ifdef EDM_ML_DEBUG
554  edm::LogVerbatim("Geometry") << "Adding region " << re << " to the geometry ";
555 #endif
556  theGeometry.add(region);
557  }
558 }
cms::DDSolid
Definition: DDFilteredView.h:33
GEMGeometryBuilder::boundPlane
RCPBoundPlane boundPlane(const DDFilteredView &fv, Bounds *bounds, bool isOddChamber) const
Definition: GEMGeometryBuilder.cc:275
cms::DDFilteredView::rot
const Double_t * rot() const
The absolute rotation of the current node.
Definition: DDFilteredView.cc:120
DDBooleanSolid::solidB
DDSolid solidB(void) const
Definition: DDSolid.cc:468
TkRotation< float >
MuonGeometryConstants
Definition: MuonGeometryConstants.h:20
GEMNumberingScheme
Definition: GEMNumberingScheme.h:9
GEMGeometry::add
void add(const GEMRegion *region)
Add a GEMRegion to the Geometry.
Definition: GEMGeometry.cc:81
GEMGeometryBuilder::buildRegions
void buildRegions(GEMGeometry &, const std::vector< GEMSuperChamber * > &)
Definition: GEMGeometryBuilder.cc:493
cms_units::operators
Definition: CMSUnits.h:13
GEMNumberingScheme::baseNumberToUnitNumber
int baseNumberToUnitNumber(const MuonBaseNumber &) const override
Definition: GEMNumberingScheme.cc:26
cms::DDFilteredView::parameters
const std::vector< double > parameters() const
extract shape parameters
Definition: DDFilteredView.cc:536
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
funct::false
false
Definition: Factorize.h:29
GEMSuperChamber
Definition: GEMSuperChamber.h:19
GEMDetId::layer
constexpr int layer() const
Definition: GEMDetId.h:187
MuonGeometryNumbering::geoHistoryToBaseNumber
MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory &history) const
Definition: MuonGeometryNumbering.cc:38
relativeConstraints.station
station
Definition: relativeConstraints.py:67
DDFilteredView::logicalPart
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
Definition: DDFilteredView.cc:16
MuonGeometryConstants.h
HistogramManager_cfi.specs
specs
Definition: HistogramManager_cfi.py:80
GEMEtaPartition
Definition: GEMEtaPartition.h:12
Basic3DVector.h
Bounds
Definition: Bounds.h:18
GEMDetId::superChamberId
constexpr GEMDetId superChamberId() const
Definition: GEMDetId.h:199
Validation_hcalonly_cfi.sign
sign
Definition: Validation_hcalonly_cfi.py:32
MuonGeometryNumbering.h
GEMDetId::maxStationId
static constexpr int32_t maxStationId
Definition: GEMDetId.h:27
ReferenceCountingPointer
Definition: ReferenceCounted.h:60
AlignmentPI::partitions
partitions
Definition: AlignmentPayloadInspectorHelper.h:48
GEMDetId::minLayerId
static constexpr int32_t minLayerId
Definition: GEMDetId.h:30
cms::DDFilteredView
Definition: DDFilteredView.h:70
DDFilteredView::parent
bool parent()
set the current node to the parent node ...
Definition: DDFilteredView.cc:161
HLT_FULL_cff.dPhi
dPhi
Definition: HLT_FULL_cff.py:13768
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
GEMGeometryBuilder::GEMGeometryBuilder
GEMGeometryBuilder()
Definition: GEMGeometryBuilder.cc:43
cms::DDSolid::solidA
dd4hep::Solid solidA() const
Definition: DDFilteredView.cc:17
createPayload.suffix
suffix
Definition: createPayload.py:281
cms::DDFilteredView::name
std::string_view name() const
Definition: DDFilteredView.cc:853
DDBooleanSolid
Definition: DDSolid.h:173
cms::DDFilteredView::get
T get(const std::string &)
extract attribute value
cms::DDFilteredView::solid
dd4hep::Solid solid() const
Definition: DDFilteredView.cc:861
GEMGeometryBuilder::buildChamber
GEMChamber * buildChamber(DDFilteredView &fv, GEMDetId detId) const
Definition: GEMGeometryBuilder.cc:194
cms::DDFilteredView::trans
const Double_t * trans() const
The absolute translation of the current node.
Definition: DDFilteredView.cc:101
GEMChamber::add
void add(const GEMEtaPartition *roll)
Add EtaPartition to the chamber which takes ownership.
Definition: GEMChamber.cc:21
DDFilteredView::firstChild
bool firstChild()
set the current node to the first child ...
Definition: DDFilteredView.cc:86
GEMNumberingScheme.h
DDFilteredView.h
cms::DDFilter
Definition: DDFilteredView.h:59
GEMGeometryBuilder::buildEtaPartition
GEMEtaPartition * buildEtaPartition(DDFilteredView &fv, GEMDetId detId) const
Definition: GEMGeometryBuilder.cc:223
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
TrapezoidalPlaneBounds.h
GEMDetId::minStationId0
static constexpr int32_t minStationId0
Definition: GEMDetId.h:24
DDCompactView
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
GEMStation
Definition: GEMStation.h:19
DDBase::name
const N & name() const
Definition: DDBase.h:59
cms::DDFilteredView::firstChild
bool firstChild()
set the current node to the first child
Definition: DDFilteredView.cc:268
DDSolid.h
DDFilteredView::nextSibling
bool nextSibling()
set the current node to the next sibling ...
Definition: DDFilteredView.cc:124
DDfetch
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:79
DDFilteredView.h
DDCompactView.h
dqmdumpme.k
k
Definition: dqmdumpme.py:60
Point3DBase< float, GlobalTag >
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
GEMRing
Definition: GEMRing.h:18
DD3Vector
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
Definition: PGeometricDetBuilder.cc:19
DDSpecParRegistry.h
GEMDetId::chamberIdMask
static constexpr uint32_t chamberIdMask
Definition: GEMDetId.h:68
GEMDetId::chamber
constexpr int chamber() const
Definition: GEMDetId.h:180
GEMDetId::maxLayerId0
static constexpr int32_t maxLayerId0
Definition: GEMDetId.h:31
GEMEtaPartitionSpecs.h
idealTransformation.rotation
dictionary rotation
Definition: idealTransformation.py:1
delPhi
static double delPhi(const double phi1, const double phi2)
Definition: FFTGenericScaleCalculator.cc:20
cms::DDFilteredView::level
const int level() const
get Iterator level
Definition: DDFilteredView.cc:636
GeantUnits.h
MuonBaseNumber.h
GEMDetId
Definition: GEMDetId.h:18
cms::DDFilteredView::history
const ExpandedNodes & history()
The numbering history of the current node.
Definition: DDFilteredView.cc:683
HLT_FULL_cff.region
region
Definition: HLT_FULL_cff.py:88338
DDFilter.h
value
Definition: value.py:1
DDName::name
const std::string & name() const
Returns the name.
Definition: DDName.cc:41
chambers
static char chambers[264][20]
Definition: ReadPGInfo.cc:243
MuonGeometryConstants::getValue
int getValue(const std::string &name) const
Definition: MuonGeometryConstants.cc:8
PVValHelper::dy
Definition: PVValidationHelpers.h:49
DDFilteredView::geoHistory
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
Definition: DDFilteredView.cc:30
GEMGeometryBuilder::~GEMGeometryBuilder
~GEMGeometryBuilder()
Definition: GEMGeometryBuilder.cc:45
TrapezoidalPlaneBounds
Definition: TrapezoidalPlaneBounds.h:15
GEMGeometryBuilder::buildSuperChamber
GEMSuperChamber * buildSuperChamber(DDFilteredView &fv, GEMDetId detId) const
Definition: GEMGeometryBuilder.cc:160
GEMGeometryBuilder::build
void build(GEMGeometry &theGeometry, const DDCompactView *cview, const MuonGeometryConstants &muonConstants)
Definition: GEMGeometryBuilder.cc:48
EgammaValidation_cff.num
num
Definition: EgammaValidation_cff.py:34
DDFilteredView::specifics
std::vector< const DDsvalues_type * > specifics() const
Definition: DDFilteredView.cc:32
me0TriggerPseudoDigis_cff.nStrips
nStrips
1.2 is to make the matching window safely the two nearest strips 0.35 is the size of an ME0 chamber i...
Definition: me0TriggerPseudoDigis_cff.py:26
GEMChamber
Definition: GEMChamber.h:19
MuonBaseNumber
Definition: MuonBaseNumber.h:21
GEMGeometry.h
BoundPlane
Plane BoundPlane
Definition: Plane.h:94
DDRotationMatrix
ROOT::Math::Rotation3D DDRotationMatrix
A DDRotationMatrix is currently implemented with a ROOT Rotation3D.
Definition: DDRotationMatrix.h:8
TkRotation::rotateAxes
TkRotation & rotateAxes(const Basic3DVector< T > &newX, const Basic3DVector< T > &newY, const Basic3DVector< T > &newZ)
Definition: extTkRotation.h:218
PVValHelper::dz
Definition: PVValidationHelpers.h:50
DDValue
Definition: DDValue.h:21
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
DDFilteredView::translation
const DDTranslation & translation() const
The absolute translation of the current node.
Definition: DDFilteredView.cc:26
GEMDetId::maxLayerId
static constexpr int32_t maxLayerId
Definition: GEMDetId.h:32
GEMDetId::chamberId
constexpr GEMDetId chamberId() const
Definition: GEMDetId.h:196
cms::DDCompactView
Definition: DDCompactView.h:31
GEMGeometryBuilder.h
relativeConstraints.ring
ring
Definition: relativeConstraints.py:68
DDSolid::parameters
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:121
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
GeomDetEnumerators::GEM
Definition: GeomDetEnumerators.h:21
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
DDSpecificsMatchesValueFilter
Definition: DDFilter.h:70
CMSUnits.h
DDFilteredView::rotation
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
Definition: DDFilteredView.cc:28
MuonGeometryNumbering
Definition: MuonGeometryNumbering.h:24
GEMGeometry::etaPartitions
const std::vector< const GEMEtaPartition * > & etaPartitions() const
Return a vector of all GEM eta partitions.
Definition: GEMGeometry.cc:40
DDBooleanSolid::solidA
DDSolid solidA(void) const
Definition: DDSolid.cc:466
DDValue::doubles
const std::vector< double > & doubles() const
a reference to the double-valued values stored in the given instance of DDValue
Definition: DDValue.cc:111
DDFilteredView
Definition: DDFilteredView.h:20
geant_units::operators::convertMmToCm
constexpr NumType convertMmToCm(NumType millimeters)
Definition: GeantUnits.h:62
GEMDetId::station
constexpr int station() const
Definition: GEMDetId.h:176
GEMGeometry
Definition: GEMGeometry.h:24
cms::cuda::be
int be
Definition: HistoContainer.h:126
GEMRegion
Definition: GEMRegion.h:19
GEMGeometry::chamber
const GEMChamber * chamber(GEMDetId id) const
Definition: GEMGeometry.cc:73
edm::Log
Definition: MessageLogger.h:70
DDLogicalPart::solid
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
Definition: DDLogicalPart.cc:120
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
GEMEtaPartitionSpecs
Definition: GEMEtaPartitionSpecs.h:18
Basic3DVector< float >
nlayers
Definition: HIMultiTrackSelector.h:48