CMS 3D CMS Logo

RPCGeometryBuilder.cc
Go to the documentation of this file.
1 /*
2 //\class RPCGeometryBuilder
3 
4  Description: RPC Geometry builder from DD & DD4hep
5  DD4hep part added to the original old file (DD version) made by M. Maggi (INFN Bari)
6 //
7 // Author: Sergio Lo Meo (sergio.lo.meo@cern.ch) following what Ianna Osborne made for DTs (DD4HEP migration)
8 // Created: Fri, 20 Sep 2019
9 // Modified: Fri, 29 May 2020, following what Sunanda Banerjee made in PR #29842 PR #29943 and Ianna Osborne in PR #29954
10 */
26 #include <iostream>
27 #include <algorithm>
31 
32 using namespace cms_units::operators;
33 
35 
36 // for DDD
37 
38 std::unique_ptr<RPCGeometry> RPCGeometryBuilder::build(const DDCompactView* cview,
39  const MuonGeometryConstants& muonConstants) {
40  const std::string attribute = "ReadOutName";
41  const std::string value = "MuonRPCHits";
43  DDFilteredView fview(*cview, filter);
44  return this->buildGeometry(fview, muonConstants);
45 }
46 // for DD4hep
47 
48 std::unique_ptr<RPCGeometry> RPCGeometryBuilder::build(const cms::DDCompactView* cview,
49  const MuonGeometryConstants& muonConstants) {
50  const std::string attribute = "ReadOutName";
51  const std::string value = "MuonRPCHits";
52  const cms::DDFilter filter(attribute, value);
53  cms::DDFilteredView fview(*cview, filter);
54  return this->buildGeometry(fview, muonConstants);
55 }
56 // for DDD
57 
58 std::unique_ptr<RPCGeometry> RPCGeometryBuilder::buildGeometry(DDFilteredView& fview,
59  const MuonGeometryConstants& muonConstants) {
60  LogDebug("RPCGeometryBuilder") << "Building the geometry service";
61  std::unique_ptr<RPCGeometry> geometry = std::make_unique<RPCGeometry>();
62  LogDebug("RPCGeometryBuilder") << "About to run through the RPC structure\n"
63  << " First logical part " << fview.logicalPart().name().name();
64  bool doSubDets = fview.firstChild();
65  LogDebug("RPCGeometryBuilder") << "doSubDets = " << doSubDets;
66  while (doSubDets) {
67  LogDebug("RPCGeometryBuilder") << "start the loop";
68  MuonGeometryNumbering mdddnum(muonConstants);
69  LogDebug("RPCGeometryBuilder") << "Getting the Muon base Number";
70  MuonBaseNumber mbn = mdddnum.geoHistoryToBaseNumber(fview.geoHistory());
71  LogDebug("RPCGeometryBuilder") << "Start the Rpc Numbering Schema";
72  RPCNumberingScheme rpcnum(muonConstants);
73  LogDebug("RPCGeometryBuilder") << "Getting the Unit Number";
74  const int detid = rpcnum.baseNumberToUnitNumber(mbn);
75  LogDebug("RPCGeometryBuilder") << "Getting the RPC det Id " << detid;
76  RPCDetId rpcid(detid);
77  RPCDetId chid(rpcid.region(), rpcid.ring(), rpcid.station(), rpcid.sector(), rpcid.layer(), rpcid.subsector(), 0);
78  LogDebug("RPCGeometryBuilder") << "The RPCDetid is " << rpcid;
79 
80  DDValue numbOfStrips("nStrips");
81 
82  std::vector<const DDsvalues_type*> specs(fview.specifics());
83  int nStrips = 0;
84  for (auto& spec : specs) {
85  if (DDfetch(spec, numbOfStrips)) {
86  nStrips = int(numbOfStrips.doubles()[0]);
87  }
88  }
89 
90  LogDebug("RPCGeometryBuilder") << ((nStrips == 0) ? ("No strip found!!") : (""));
91 
92  std::vector<double> dpar = fview.logicalPart().solid().parameters();
93  std::string name = fview.logicalPart().name().name();
94  DDTranslation tran = fview.translation();
95  DDRotationMatrix rota = fview.rotation();
99 
100  DD3Vector x, y, z;
101  rota.GetComponents(x, y, z);
102  Surface::RotationType rot(float(x.X()),
103  float(x.Y()),
104  float(x.Z()),
105  float(y.X()),
106  float(y.Y()),
107  float(y.Z()),
108  float(z.X()),
109  float(z.Y()),
110  float(z.Z()));
111 
112  RPCRollSpecs* rollspecs = nullptr;
113  Bounds* bounds = nullptr;
114 
115  if (dpar.size() == 3) {
116  const float width = geant_units::operators::convertMmToCm(dpar[0]);
117  const float length = geant_units::operators::convertMmToCm(dpar[1]);
118  const float thickness = geant_units::operators::convertMmToCm(dpar[2]);
119  bounds = new RectangularPlaneBounds(width, length, thickness);
120  const std::vector<float> pars = {width, length, float(numbOfStrips.doubles()[0])};
121 
122  rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCBarrel, name, pars);
123  LogDebug("RPCGeometryBuilder") << "Barrel " << name << " par " << width << " " << length << " " << thickness;
124 
125  } else {
126  const float be = geant_units::operators::convertMmToCm(dpar[4]);
127  const float te = geant_units::operators::convertMmToCm(dpar[8]);
128  const float ap = geant_units::operators::convertMmToCm(dpar[0]);
129  const float ti = 0.4;
130 
131  bounds = new TrapezoidalPlaneBounds(be, te, ap, ti);
132 
133  const std::vector<float> pars = {float(geant_units::operators::convertMmToCm(dpar[4])),
136  float(numbOfStrips.doubles()[0])};
137  LogDebug("RPCGeometryBuilder") << "Forward " << name << " par " << dpar[4] << " " << dpar[8] << " " << dpar[3]
138  << " " << dpar[0];
139 
140  rollspecs = new RPCRollSpecs(GeomDetEnumerators::RPCEndcap, name, pars);
141 
142  Basic3DVector<float> newX(1., 0., 0.);
143  Basic3DVector<float> newY(0., 0., 1.);
144  newY *= -1;
145  Basic3DVector<float> newZ(0., 1., 0.);
146  rot.rotateAxes(newX, newY, newZ);
147  }
148  LogDebug("RPCGeometryBuilder") << " Number of strips " << nStrips;
149 
150  BoundPlane* bp = new BoundPlane(pos, rot, bounds);
152  RPCRoll* r = new RPCRoll(rpcid, surf, rollspecs);
153  geometry->add(r);
154 
155  auto rls = chids.find(chid);
156  if (rls == chids.end())
157  rls = chids.insert(std::make_pair(chid, std::list<RPCRoll*>())).first;
158  rls->second.emplace_back(r);
159 
160  doSubDets = fview.nextSibling();
161  }
162  for (auto& ich : chids) {
163  const RPCDetId& chid = ich.first;
164  const auto& rls = ich.second;
165 
166  BoundPlane* bp = nullptr;
167  if (!rls.empty()) {
168  const auto& refSurf = (*rls.begin())->surface();
169  if (chid.region() == 0) {
170  float corners[6] = {0, 0, 0, 0, 0, 0};
171  for (auto rl : rls) {
172  const double h2 = rl->surface().bounds().length() / 2;
173  const double w2 = rl->surface().bounds().width() / 2;
174  const auto x1y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-w2, -h2, 0)));
175  const auto x2y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+w2, +h2, 0)));
176  corners[0] = std::min(corners[0], x1y1AtRef.x());
177  corners[1] = std::min(corners[1], x1y1AtRef.y());
178  corners[2] = std::max(corners[2], x2y2AtRef.x());
179  corners[3] = std::max(corners[3], x2y2AtRef.y());
180  corners[4] = std::min(corners[4], x1y1AtRef.z());
181  corners[5] = std::max(corners[5], x1y1AtRef.z());
182  }
183  const LocalPoint lpOfCentre((corners[0] + corners[2]) / 2, (corners[1] + corners[3]) / 2, 0);
184  const auto gpOfCentre = refSurf.toGlobal(lpOfCentre);
185  auto bounds = new RectangularPlaneBounds(
186  (corners[2] - corners[0]) / 2, (corners[3] - corners[1]) / 2, (corners[5] - corners[4]) + 0.5);
187  bp = new BoundPlane(gpOfCentre, refSurf.rotation(), bounds);
188  } else {
189  float cornersLo[3] = {0, 0, 0}, cornersHi[3] = {0, 0, 0};
190  float cornersZ[2] = {0, 0};
191  for (auto rl : rls) {
192  const double h2 = rl->surface().bounds().length() / 2;
193  const double w2 = rl->surface().bounds().width() / 2;
194  const auto& topo = dynamic_cast<const TrapezoidalStripTopology&>(rl->specificTopology());
195  const double r = topo.radius();
196  const double wAtLo = w2 / r * (r - h2);
197  const double wAtHi = w2 / r * (r + h2);
198 
199  const auto x1y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-wAtLo, -h2, 0)));
200  const auto x2y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+wAtLo, -h2, 0)));
201  const auto x1y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-wAtHi, +h2, 0)));
202  const auto x2y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+wAtHi, +h2, 0)));
203 
204  cornersLo[0] = std::min(cornersLo[0], x1y1AtRef.x());
205  cornersLo[1] = std::max(cornersLo[1], x2y1AtRef.x());
206  cornersLo[2] = std::min(cornersLo[2], x1y1AtRef.y());
207 
208  cornersHi[0] = std::min(cornersHi[0], x1y2AtRef.x());
209  cornersHi[1] = std::max(cornersHi[1], x2y2AtRef.x());
210  cornersHi[2] = std::max(cornersHi[2], x1y2AtRef.y());
211 
212  cornersZ[0] = std::min(cornersZ[0], x1y1AtRef.z());
213  cornersZ[1] = std::max(cornersZ[1], x1y1AtRef.z());
214  }
215  const LocalPoint lpOfCentre((cornersHi[0] + cornersHi[1]) / 2, (cornersLo[2] + cornersHi[2]) / 2, 0);
216  const auto gpOfCentre = refSurf.toGlobal(lpOfCentre);
217  auto bounds = new TrapezoidalPlaneBounds((cornersLo[1] - cornersLo[0]) / 2,
218  (cornersHi[1] - cornersHi[0]) / 2,
219  (cornersHi[2] - cornersLo[2]) / 2,
220  (cornersZ[1] - cornersZ[0]) + 0.5);
221  bp = new BoundPlane(gpOfCentre, refSurf.rotation(), bounds);
222  }
223  }
224 
226  RPCChamber* ch = new RPCChamber(chid, surf);
227  for (auto rl : rls)
228  ch->add(rl);
229  geometry->add(ch);
230  }
231 
232  return geometry;
233 }
234 
235 // for DD4hep
236 
237 std::unique_ptr<RPCGeometry> RPCGeometryBuilder::buildGeometry(cms::DDFilteredView& fview,
238  const MuonGeometryConstants& muonConstants) {
239  std::unique_ptr<RPCGeometry> geometry = std::make_unique<RPCGeometry>();
240 
241  while (fview.firstChild()) {
242  MuonGeometryNumbering mdddnum(muonConstants);
243  RPCNumberingScheme rpcnum(muonConstants);
244  int rawidCh = rpcnum.baseNumberToUnitNumber(mdddnum.geoHistoryToBaseNumber(fview.history()));
245  RPCDetId rpcid = RPCDetId(rawidCh);
246 
247  RPCDetId chid(rpcid.region(), rpcid.ring(), rpcid.station(), rpcid.sector(), rpcid.layer(), rpcid.subsector(), 0);
248 
249  auto nStrips = fview.get<double>("nStrips");
250 
251  std::vector<double> dpar = fview.parameters();
252 
253  std::string_view name = fview.name();
254 
255  const Double_t* tran = fview.trans();
256 
257  DDRotationMatrix rota;
258  fview.rot(rota);
259 
260  Surface::PositionType pos(tran[0], tran[1], tran[2]);
261 
262  DD3Vector x, y, z;
263  rota.GetComponents(x, y, z);
264  Surface::RotationType rot(float(x.X()),
265  float(x.Y()),
266  float(x.Z()),
267  float(y.X()),
268  float(y.Y()),
269  float(y.Z()),
270  float(z.X()),
271  float(z.Y()),
272  float(z.Z()));
273 
274  RPCRollSpecs* rollspecs = nullptr;
275  Bounds* bounds = nullptr;
276 
277  if (dd4hep::isA<dd4hep::Box>(fview.solid())) {
278  const float width = dpar[0];
279  const float length = dpar[1];
280  const float thickness = dpar[2];
281 
282  bounds = new RectangularPlaneBounds(width, length, thickness);
283 
284  const std::vector<float> pars = {width, length, float(nStrips)};
285 
287 
288  } else {
289  const float be = dpar[0];
290  const float te = dpar[1];
291  const float ap = dpar[3];
292  const float ti = 0.4;
293 
294  bounds = new TrapezoidalPlaneBounds(be, te, ap, ti);
295  const std::vector<float> pars = {float(dpar[0]), float(dpar[1]), float(dpar[3]), float(nStrips)};
296 
298 
299  Basic3DVector<float> newX(1., 0., 0.);
300  Basic3DVector<float> newY(0., 0., 1.);
301  newY *= -1;
302  Basic3DVector<float> newZ(0., 1., 0.);
303  rot.rotateAxes(newX, newY, newZ);
304  }
305 
306  BoundPlane* bp = new BoundPlane(pos, rot, bounds);
308  RPCRoll* r = new RPCRoll(rpcid, surf, rollspecs);
309  geometry->add(r);
310 
311  auto rls = chids.find(chid);
312  if (rls == chids.end())
313  rls = chids.insert(std::make_pair(chid, std::list<RPCRoll*>())).first;
314  rls->second.emplace_back(r);
315  }
316 
317  for (auto& ich : chids) {
318  const RPCDetId& chid = ich.first;
319  const auto& rls = ich.second;
320 
321  BoundPlane* bp = nullptr;
322  if (!rls.empty()) {
323  const auto& refSurf = (*rls.begin())->surface();
324  if (chid.region() == 0) {
325  float corners[6] = {0, 0, 0, 0, 0, 0};
326  for (auto rl : rls) {
327  const double h2 = rl->surface().bounds().length() / 2;
328  const double w2 = rl->surface().bounds().width() / 2;
329  const auto x1y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-w2, -h2, 0)));
330  const auto x2y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+w2, +h2, 0)));
331  corners[0] = std::min(corners[0], x1y1AtRef.x());
332  corners[1] = std::min(corners[1], x1y1AtRef.y());
333  corners[2] = std::max(corners[2], x2y2AtRef.x());
334  corners[3] = std::max(corners[3], x2y2AtRef.y());
335 
336  corners[4] = std::min(corners[4], x1y1AtRef.z());
337  corners[5] = std::max(corners[5], x1y1AtRef.z());
338  }
339  const LocalPoint lpOfCentre((corners[0] + corners[2]) / 2, (corners[1] + corners[3]) / 2, 0);
340  const auto gpOfCentre = refSurf.toGlobal(lpOfCentre);
341  auto bounds = new RectangularPlaneBounds(
342  (corners[2] - corners[0]) / 2, (corners[3] - corners[1]) / 2, (corners[5] - corners[4]) + 0.5);
343  bp = new BoundPlane(gpOfCentre, refSurf.rotation(), bounds);
344 
345  } else {
346  float cornersLo[3] = {0, 0, 0}, cornersHi[3] = {0, 0, 0};
347  float cornersZ[2] = {0, 0};
348  for (auto rl : rls) {
349  const double h2 = rl->surface().bounds().length() / 2;
350  const double w2 = rl->surface().bounds().width() / 2;
351  const auto& topo = dynamic_cast<const TrapezoidalStripTopology&>(rl->specificTopology());
352  const double r = topo.radius();
353  const double wAtLo = w2 / r * (r - h2);
354  const double wAtHi = w2 / r * (r + h2);
355  const auto x1y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-wAtLo, -h2, 0)));
356  const auto x2y1AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+wAtLo, -h2, 0)));
357  const auto x1y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(-wAtHi, +h2, 0)));
358  const auto x2y2AtRef = refSurf.toLocal(rl->toGlobal(LocalPoint(+wAtHi, +h2, 0)));
359 
360  cornersLo[0] = std::min(cornersLo[0], x1y1AtRef.x());
361  cornersLo[1] = std::max(cornersLo[1], x2y1AtRef.x());
362  cornersLo[2] = std::min(cornersLo[2], x1y1AtRef.y());
363 
364  cornersHi[0] = std::min(cornersHi[0], x1y2AtRef.x());
365  cornersHi[1] = std::max(cornersHi[1], x2y2AtRef.x());
366  cornersHi[2] = std::max(cornersHi[2], x1y2AtRef.y());
367 
368  cornersZ[0] = std::min(cornersZ[0], x1y1AtRef.z());
369  cornersZ[1] = std::max(cornersZ[1], x1y1AtRef.z());
370  }
371  const LocalPoint lpOfCentre((cornersHi[0] + cornersHi[1]) / 2, (cornersLo[2] + cornersHi[2]) / 2, 0);
372  const auto gpOfCentre = refSurf.toGlobal(lpOfCentre);
373  auto bounds = new TrapezoidalPlaneBounds((cornersLo[1] - cornersLo[0]) / 2,
374  (cornersHi[1] - cornersHi[0]) / 2,
375  (cornersHi[2] - cornersLo[2]) / 2,
376  (cornersZ[1] - cornersZ[0]) + 0.5);
377  bp = new BoundPlane(gpOfCentre, refSurf.rotation(), bounds);
378  }
379  }
380 
382 
383  RPCChamber* ch = new RPCChamber(chid, surf);
384 
385  for (auto rl : rls)
386  ch->add(rl);
387 
388  geometry->add(ch);
389  }
390  return geometry;
391 }
cms::DDFilteredView::rot
const Double_t * rot() const
The absolute rotation of the current node.
Definition: DDFilteredView.cc:120
RPCRoll
Definition: RPCRoll.h:12
TkRotation< float >
MuonGeometryConstants
Definition: MuonGeometryConstants.h:20
ApeEstimator_cff.width
width
Definition: ApeEstimator_cff.py:24
geometry
ESHandle< TrackerGeometry > geometry
Definition: TkLasBeamFitter.cc:200
w2
common ppss p3p6s2 common epss epspn46 common const1 w2
Definition: inclppp.h:1
cms_units::operators
Definition: CMSUnits.h:13
cms::DDFilteredView::parameters
const std::vector< double > parameters() const
extract shape parameters
Definition: DDFilteredView.cc:536
dqmMemoryStats.float
float
Definition: dqmMemoryStats.py:127
RPCDetId::station
int station() const
Definition: RPCDetId.h:78
RPCDetId::region
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:53
GeomDetEnumerators::RPCEndcap
Definition: GeomDetEnumerators.h:20
RPCDetId::subsector
int subsector() const
SubSector id : some sectors are divided along the phi direction in subsectors (from 1 to 4 in Barrel,...
Definition: RPCDetId.h:88
RPCRollSpecs
Definition: RPCRollSpecs.h:18
MuonGeometryNumbering::geoHistoryToBaseNumber
MuonBaseNumber geoHistoryToBaseNumber(const DDGeoHistory &history) const
Definition: MuonGeometryNumbering.cc:38
min
T min(T a, T b)
Definition: MathUtil.h:58
DDFilteredView::logicalPart
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
Definition: DDFilteredView.cc:16
RPCDetId
Definition: RPCDetId.h:16
geometry
Definition: geometry.py:1
pos
Definition: PixelAliasList.h:18
HistogramManager_cfi.specs
specs
Definition: HistogramManager_cfi.py:80
Basic3DVector.h
Bounds
Definition: Bounds.h:18
MuonGeometryNumbering.h
ReferenceCountingPointer
Definition: ReferenceCounted.h:60
cms::DDFilteredView
Definition: DDFilteredView.h:70
RPCChamber
Definition: RPCChamber.h:19
RPCNumberingScheme
Definition: RPCNumberingScheme.h:18
Bounds::length
virtual float length() const =0
cms::DDFilteredView::name
std::string_view name() const
Definition: DDFilteredView.cc:853
RPCNumberingScheme::baseNumberToUnitNumber
int baseNumberToUnitNumber(const MuonBaseNumber &) const override
Definition: RPCNumberingScheme.cc:31
cms::DDFilteredView::get
T get(const std::string &)
extract attribute value
cms::DDFilteredView::solid
dd4hep::Solid solid() const
Definition: DDFilteredView.cc:861
cms::DDFilteredView::trans
const Double_t * trans() const
The absolute translation of the current node.
Definition: DDFilteredView.cc:101
DDFilteredView::firstChild
bool firstChild()
set the current node to the first child ...
Definition: DDFilteredView.cc:86
DDFilteredView.h
cms::DDFilter
Definition: DDFilteredView.h:59
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
TrapezoidalPlaneBounds.h
Calorimetry_cff.thickness
thickness
Definition: Calorimetry_cff.py:114
RPCNumberingScheme.h
Surface::bounds
const Bounds & bounds() const
Definition: Surface.h:87
DDCompactView
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
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
RectangularPlaneBounds.h
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
Point3DBase< float, GlobalTag >
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
RPCChamber::add
void add(RPCRoll *rl)
Add Roll to the chamber which takes ownership.
Definition: RPCChamber.cc:32
RPCGeometryBuilder::build
std::unique_ptr< RPCGeometry > build(const DDCompactView *cview, const MuonGeometryConstants &muonConstants)
Definition: RPCGeometryBuilder.cc:38
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DD3Vector
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
Definition: PGeometricDetBuilder.cc:19
DDSpecParRegistry.h
RPCRollSpecs.h
RPCGeometryBuilder.h
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
GeantUnits.h
MuonBaseNumber.h
cms::DDFilteredView::history
const ExpandedNodes & history()
The numbering history of the current node.
Definition: DDFilteredView.cc:683
RPCGeometryBuilder::buildGeometry
std::unique_ptr< RPCGeometry > buildGeometry(DDFilteredView &fview, const MuonGeometryConstants &muonConstants)
Definition: RPCGeometryBuilder.cc:58
createfilelist.int
int
Definition: createfilelist.py:10
DDFilter.h
value
Definition: value.py:1
DDName::name
const std::string & name() const
Returns the name.
Definition: DDName.cc:41
RPCGeometryBuilder::RPCGeometryBuilder
RPCGeometryBuilder()
Definition: RPCGeometryBuilder.cc:34
DDFilteredView::geoHistory
const DDGeoHistory & geoHistory() const
The list of ancestors up to the root-node of the current node.
Definition: DDFilteredView.cc:30
TrapezoidalPlaneBounds
Definition: TrapezoidalPlaneBounds.h:15
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
RPCDetId::ring
int ring() const
Definition: RPCDetId.h:59
alignCSCRings.r
r
Definition: alignCSCRings.py:93
MuonBaseNumber
Definition: MuonBaseNumber.h:21
RectangularPlaneBounds
Definition: RectangularPlaneBounds.h:12
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
TrapezoidalStripTopology.h
DDValue
Definition: DDValue.h:21
DDFilteredView::translation
const DDTranslation & translation() const
The absolute translation of the current node.
Definition: DDFilteredView.cc:26
BoundPlane
cms::DDCompactView
Definition: DDCompactView.h:31
RPCDetId::sector
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:81
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
DDSolid::parameters
const std::vector< double > & parameters(void) const
Give the parameters of the solid.
Definition: DDSolid.cc:121
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
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
GeomDetEnumerators::RPCBarrel
Definition: GeomDetEnumerators.h:19
cms::cuda::be
int be
Definition: HistoContainer.h:126
RPCDetId::layer
int layer() const
Definition: RPCDetId.h:85
DDLogicalPart::solid
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
Definition: DDLogicalPart.cc:120
RPCGeometry.h
Basic3DVector< float >