test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FWRecoGeometryESProducer.cc
Go to the documentation of this file.
4 
30 
31 #include "TNamed.h"
32 # define ADD_PIXEL_TOPOLOGY( rawid, detUnit ) \
33  const PixelGeomDetUnit* det = dynamic_cast<const PixelGeomDetUnit*>( detUnit ); \
34  if( det ) \
35  { \
36  const PixelTopology* topo = &det->specificTopology(); \
37  m_fwGeometry->idToName[rawid].topology[0] = topo->nrows(); \
38  m_fwGeometry->idToName[rawid].topology[1] = topo->ncolumns(); \
39  } \
40 
41 # define ADD_SISTRIP_TOPOLOGY( rawid, detUnit ) \
42  const StripGeomDetUnit* det = dynamic_cast<const StripGeomDetUnit*>( detUnit ); \
43  if( det ) \
44  { \
45  const StripTopology* topo = dynamic_cast<const StripTopology*>( &det->specificTopology() ); \
46  m_fwGeometry->idToName[rawid].topology[0] = 0; \
47  m_fwGeometry->idToName[rawid].topology[1] = topo->nstrips(); \
48  m_fwGeometry->idToName[rawid].topology[2] = topo->stripLength(); \
49  if( const RadialStripTopology* rtop = dynamic_cast<const RadialStripTopology*>( &(det->specificType().specificTopology()) ) ) \
50  { \
51  m_fwGeometry->idToName[rawid].topology[0] = 1; \
52  m_fwGeometry->idToName[rawid].topology[3] = rtop->yAxisOrientation(); \
53  m_fwGeometry->idToName[rawid].topology[4] = rtop->originToIntersection(); \
54  m_fwGeometry->idToName[rawid].topology[5] = rtop->phiOfOneEdge(); \
55  m_fwGeometry->idToName[rawid].topology[6] = rtop->angularWidth(); \
56  } \
57  else if( dynamic_cast<const RectangularStripTopology*>( &(det->specificType().specificTopology()) ) ) \
58  { \
59  m_fwGeometry->idToName[rawid].topology[0] = 2; \
60  m_fwGeometry->idToName[rawid].topology[3] = topo->pitch(); \
61  } \
62  else if( dynamic_cast<const TrapezoidalStripTopology*>( &(det->specificType().specificTopology()) ) ) \
63  { \
64  m_fwGeometry->idToName[rawid].topology[0] = 3; \
65  m_fwGeometry->idToName[rawid].topology[3] = topo->pitch(); \
66  } \
67  } \
68 
69 namespace {
70  static const std::array<std::string,3> hgcal_geom_names = { { "HGCalEESensitive",
71  "HGCalHESiliconSensitive",
72  "HGCalHEScintillatorSensitive" } };
73 }
74 
76  : m_current( -1 )
77 {
78  m_tracker = pset.getUntrackedParameter<bool>( "Tracker", true );
79  m_muon = pset.getUntrackedParameter<bool>( "Muon", true );
80  m_calo = pset.getUntrackedParameter<bool>( "Calo", true );
81  setWhatProduced( this );
82 }
83 
85 {}
86 
87 std::shared_ptr<FWRecoGeometry>
89 {
90  using namespace edm;
91 
92  m_fwGeometry = std::make_shared<FWRecoGeometry>();
93 
94  if( m_tracker || m_muon ) {
96  DetId detId( DetId::Tracker, 0 );
97  m_trackerGeom = (const TrackerGeometry*) m_geomRecord->slaveGeometry( detId );
98  }
99 
100  if( m_tracker )
101  {
104  addTIBGeometry();
105  addTIDGeometry();
106  addTOBGeometry();
107  addTECGeometry();
108  }
109  if( m_muon )
110  {
111  addDTGeometry();
112  addCSCGeometry();
113  addRPCGeometry();
114  addGEMGeometry();
115  addME0Geometry();
116  }
117  if( m_calo )
118  {
119  record.getRecord<CaloGeometryRecord>().get( m_caloGeom );
120  addCaloGeometry();
121  }
122 
123  m_fwGeometry->idToName.resize( m_current + 1 );
124  std::vector<FWRecoGeom::Info>( m_fwGeometry->idToName ).swap( m_fwGeometry->idToName );
125  std::sort( m_fwGeometry->idToName.begin(), m_fwGeometry->idToName.end());
126 
127  return m_fwGeometry;
128 }
129 
130 void
132 {
133  DetId detId( DetId::Muon, 2 );
134  const CSCGeometry* cscGeometry = (const CSCGeometry*) m_geomRecord->slaveGeometry( detId );
135  for( auto it = cscGeometry->chambers().begin(),
136  end = cscGeometry->chambers().end();
137  it != end; ++it )
138  {
139  const CSCChamber *chamber = *it;
140 
141  if( chamber )
142  {
143  unsigned int rawid = chamber->geographicalId();
144  unsigned int current = insert_id( rawid );
145  fillShapeAndPlacement( current, chamber );
146  //
147  // CSC layers geometry
148  //
149  for( std::vector< const CSCLayer* >::const_iterator lit = chamber->layers().begin(),
150  lend = chamber->layers().end();
151  lit != lend; ++lit )
152  {
153  const CSCLayer* layer = *lit;
154 
155  if( layer )
156  {
157  unsigned int rawid = layer->geographicalId();
158  unsigned int current = insert_id( rawid );
159  fillShapeAndPlacement( current, layer );
160 
161  const CSCStripTopology* stripTopology = layer->geometry()->topology();
162  m_fwGeometry->idToName[current].topology[0] = stripTopology->yAxisOrientation();
163  m_fwGeometry->idToName[current].topology[1] = stripTopology->centreToIntersection();
164  m_fwGeometry->idToName[current].topology[2] = stripTopology->yCentreOfStripPlane();
165  m_fwGeometry->idToName[current].topology[3] = stripTopology->phiOfOneEdge();
166  m_fwGeometry->idToName[current].topology[4] = stripTopology->stripOffset();
167  m_fwGeometry->idToName[current].topology[5] = stripTopology->angularWidth();
168 
169  const CSCWireTopology* wireTopology = layer->geometry()->wireTopology();
170  m_fwGeometry->idToName[current].topology[6] = wireTopology->wireSpacing();
171  m_fwGeometry->idToName[current].topology[7] = wireTopology->wireAngle();
172  }
173  }
174  }
175  }
176 }
177 
178 void
180 {
181  DetId detId( DetId::Muon, 1 );
182  const DTGeometry* dtGeometry = (const DTGeometry*) m_geomRecord->slaveGeometry( detId );
183 
184  //
185  // DT chambers geometry
186  //
187  for( auto it = dtGeometry->chambers().begin(),
188  end = dtGeometry->chambers().end();
189  it != end; ++it )
190  {
191  const DTChamber *chamber = *it;
192 
193  if( chamber )
194  {
195  unsigned int rawid = chamber->geographicalId().rawId();
196  unsigned int current = insert_id( rawid );
197  fillShapeAndPlacement( current, chamber );
198  }
199  }
200 
201  // Fill in DT layer parameters
202  for( auto it = dtGeometry->layers().begin(),
203  end = dtGeometry->layers().end();
204  it != end; ++it )
205  {
206  const DTLayer* layer = *it;
207 
208  if( layer )
209  {
210  unsigned int rawid = layer->id().rawId();
211  unsigned int current = insert_id( rawid );
212  fillShapeAndPlacement( current, layer );
213 
214  const DTTopology& topo = layer->specificTopology();
215  const BoundPlane& surf = layer->surface();
216  // Topology W/H/L:
217  m_fwGeometry->idToName[current].topology[0] = topo.cellWidth();
218  m_fwGeometry->idToName[current].topology[1] = topo.cellHeight();
219  m_fwGeometry->idToName[current].topology[2] = topo.cellLenght();
220  m_fwGeometry->idToName[current].topology[3] = topo.firstChannel();
221  m_fwGeometry->idToName[current].topology[4] = topo.lastChannel();
222  m_fwGeometry->idToName[current].topology[5] = topo.channels();
223 
224  // Bounds W/H/L:
225  m_fwGeometry->idToName[current].topology[6] = surf.bounds().width();
226  m_fwGeometry->idToName[current].topology[7] = surf.bounds().thickness();
227  m_fwGeometry->idToName[current].topology[8] = surf.bounds().length();
228  }
229  }
230 }
231 
232 void
234 {
235  //
236  // RPC rolls geometry
237  //
238  DetId detId( DetId::Muon, 3 );
239  const RPCGeometry* rpcGeom = (const RPCGeometry*) m_geomRecord->slaveGeometry( detId );
240  for( auto it = rpcGeom->rolls().begin(),
241  end = rpcGeom->rolls().end();
242  it != end; ++it )
243  {
244  const RPCRoll* roll = (*it);
245  if( roll )
246  {
247  unsigned int rawid = roll->geographicalId().rawId();
248  unsigned int current = insert_id( rawid );
249  fillShapeAndPlacement( current, roll );
250 
251  const StripTopology& topo = roll->specificTopology();
252  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
253  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
254  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
255  }
256  }
257 
258 
259  try {
260  RPCDetId id(1, 1, 4, 1, 1, 1, 1 );
261  m_geomRecord->slaveGeometry( detId );
262  m_fwGeometry->extraDet.Add(new TNamed("RE4", "RPC endcap station 4"));
263  }
264  catch (std::runtime_error &e) {
265  std::cerr << e.what() << std::endl;
266  }
267 }
268 
269 void
271 {
272  //
273  // GEM geometry
274  //
275  DetId detId( DetId::Muon, 4 );
276 
277  try
278  {
279  const GEMGeometry* gemGeom = (const GEMGeometry*) m_geomRecord->slaveGeometry( detId );
280 
281  // add in superChambers - gem Segments are based on superChambers
282  for(auto sc : gemGeom->superChambers())
283  {
284  if( sc )
285  {
286  unsigned int rawid = sc->geographicalId().rawId();
287  unsigned int current = insert_id( rawid );
288  fillShapeAndPlacement( current, sc );
289  }
290  }
291  // add in chambers
292  for(auto ch : gemGeom->chambers())
293  {
294  if( ch )
295  {
296  unsigned int rawid = ch->geographicalId().rawId();
297  unsigned int current = insert_id( rawid );
298  fillShapeAndPlacement( current, ch );
299  }
300  }
301  // add in etaPartitions - gem rechits are based on etaPartitions
302  for(auto roll : gemGeom->etaPartitions())
303  {
304  if( roll )
305  {
306  unsigned int rawid = roll->geographicalId().rawId();
307  unsigned int current = insert_id( rawid );
308  fillShapeAndPlacement( current, roll );
309 
310  const StripTopology& topo = roll->specificTopology();
311  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
312  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
313  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
314 
315  float height = topo.stripLength()/2;
316  LocalPoint lTop( 0., height, 0.);
317  LocalPoint lBottom( 0., -height, 0.);
318  m_fwGeometry->idToName[current].topology[3] = roll->localPitch(lTop);
319  m_fwGeometry->idToName[current].topology[4] = roll->localPitch(lBottom);
320  m_fwGeometry->idToName[current].topology[5] = roll->npads();
321  }
322  }
323 
324  m_fwGeometry->extraDet.Add(new TNamed("GEM", "GEM muon detector"));
325  try {
326  GEMDetId id(1, 1, 2, 1, 1, 1 );
327  m_geomRecord->slaveGeometry( detId );
328  m_fwGeometry->extraDet.Add(new TNamed("GE2", "GEM endcap station 2"));
329  }
330  catch (std::runtime_error &e) {
331  std::cerr << e.what() << std::endl;
332  }
333 
334  }
335  catch( cms::Exception &exception )
336  {
337  edm::LogError("FWRecoGeometry") << " GEM geometry not found " << exception.what() << std::endl;
338  }
339 }
340 
341 void
343 {
344  //
345  // ME0 geometry
346  //
347 
348  DetId detId( DetId::Muon, 5 );
349  try
350  {
351  const ME0Geometry* me0Geom = (const ME0Geometry*) m_geomRecord->slaveGeometry( detId );
352  for(auto roll : me0Geom->etaPartitions())
353  {
354  if( roll )
355  {
356  unsigned int rawid = roll->geographicalId().rawId();
357  unsigned int current = insert_id( rawid );
358  fillShapeAndPlacement( current, roll );
359 
360  const StripTopology& topo = roll->specificTopology();
361  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
362  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
363  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
364 
365  float height = topo.stripLength()/2;
366  LocalPoint lTop( 0., height, 0.);
367  LocalPoint lBottom( 0., -height, 0.);
368  m_fwGeometry->idToName[current].topology[3] = roll->localPitch(lTop);
369  m_fwGeometry->idToName[current].topology[4] = roll->localPitch(lBottom);
370  m_fwGeometry->idToName[current].topology[5] = roll->npads();
371  }
372  }
373  m_fwGeometry->extraDet.Add(new TNamed("ME0", "ME0 muon detector"));
374  }
375  catch( cms::Exception &exception )
376  {
377  edm::LogError("FWRecoGeometry") << " ME0 geometry not found " << exception.what() << std::endl;
378  }
379 }
380 
381 void
383 {
384  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXB().begin(),
385  end = m_trackerGeom->detsPXB().end();
386  it != end; ++it)
387  {
388  const GeomDet *det = *it;
389 
390  if( det )
391  {
392  DetId detid = det->geographicalId();
393  unsigned int rawid = detid.rawId();
394  unsigned int current = insert_id( rawid );
395  fillShapeAndPlacement( current, det );
396 
397  ADD_PIXEL_TOPOLOGY( current, m_trackerGeom->idToDetUnit( detid ));
398  }
399  }
400 }
401 
402 void
404 {
405  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXF().begin(),
406  end = m_trackerGeom->detsPXF().end();
407  it != end; ++it )
408  {
409  const GeomDet *det = *it;
410 
411  if( det )
412  {
413  DetId detid = det->geographicalId();
414  unsigned int rawid = detid.rawId();
415  unsigned int current = insert_id( rawid );
416  fillShapeAndPlacement( current, det );
417 
418  ADD_PIXEL_TOPOLOGY( current, m_trackerGeom->idToDetUnit( detid ));
419  }
420  }
421 }
422 
423 void
425 {
426  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTIB().begin(),
427  end = m_trackerGeom->detsTIB().end();
428  it != end; ++it )
429  {
430  const GeomDet *det = *it;
431 
432  if( det )
433  {
434  DetId detid = det->geographicalId();
435  unsigned int rawid = detid.rawId();
436  unsigned int current = insert_id( rawid );
437  fillShapeAndPlacement( current, det );
438 
439  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
440  }
441  }
442 }
443 
444 void
446 {
447  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTOB().begin(),
448  end = m_trackerGeom->detsTOB().end();
449  it != end; ++it )
450  {
451  const GeomDet *det = *it;
452 
453  if( det )
454  {
455  DetId detid = det->geographicalId();
456  unsigned int rawid = detid.rawId();
457  unsigned int current = insert_id( rawid );
458  fillShapeAndPlacement( current, det );
459 
460  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
461  }
462  }
463 }
464 
465 void
467 {
468  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTID().begin(),
469  end = m_trackerGeom->detsTID().end();
470  it != end; ++it)
471  {
472  const GeomDet *det = *it;
473 
474  if( det )
475  {
476  DetId detid = det->geographicalId();
477  unsigned int rawid = detid.rawId();
478  unsigned int current = insert_id( rawid );
479  fillShapeAndPlacement( current, det );
480 
481  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
482  }
483  }
484 }
485 
486 void
488 {
489  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTEC().begin(),
490  end = m_trackerGeom->detsTEC().end();
491  it != end; ++it )
492  {
493  const GeomDet *det = *it;
494 
495  if( det )
496  {
497  DetId detid = det->geographicalId();
498  unsigned int rawid = detid.rawId();
499  unsigned int current = insert_id( rawid );
500  fillShapeAndPlacement( current, det );
501 
502  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
503  }
504  }
505 }
506 
507 void
509 {
510  std::vector<DetId> vid = std::move(m_caloGeom->getValidDetIds()); // Calo
511  for( std::vector<DetId>::const_iterator it = vid.begin(),
512  end = vid.end();
513  it != end; ++it ) {
514  unsigned int id = insert_id( it->rawId());
515  if( DetId::Forward != it->det() ) {
516  const CaloCellGeometry::CornersVec& cor = m_caloGeom->getGeometry( *it )->getCorners();
517  fillPoints( id, cor.begin(), cor.end());
518  } else {
519  const HGCalGeometry* geom = static_cast<const HGCalGeometry*>( m_caloGeom->getSubdetectorGeometry( *it ) );
520  const auto& cor = geom->getCorners( *it );
521  fillPoints( id, cor.begin(), cor.end() );
522  }
523  }
524 }
525 
526 unsigned int
528 {
529  ++m_current;
530  m_fwGeometry->idToName.push_back(FWRecoGeom::Info());
531  m_fwGeometry->idToName.back().id = rawid;
532 
533  return m_current;
534 }
535 
536 void
537 FWRecoGeometryESProducer::fillPoints( unsigned int id, std::vector<GlobalPoint>::const_iterator begin, std::vector<GlobalPoint>::const_iterator end )
538 {
539  unsigned int index( 0 );
540  for( std::vector<GlobalPoint>::const_iterator i = begin; i != end; ++i )
541  {
542  assert( index < 23 );
543  m_fwGeometry->idToName[id].points[index] = i->x();
544  m_fwGeometry->idToName[id].points[++index] = i->y();
545  m_fwGeometry->idToName[id].points[++index] = i->z();
546  ++index;
547  }
548 }
549 
550 
552 void
554 {
555  // Trapezoidal
556  const Bounds *b = &((det->surface ()).bounds ());
557  if( const TrapezoidalPlaneBounds *b2 = dynamic_cast<const TrapezoidalPlaneBounds *> (b))
558  {
559  std::array< const float, 4 > const & par = b2->parameters ();
560 
561  // These parameters are half-lengths, as in CMSIM/GEANT3
562  m_fwGeometry->idToName[id].shape[0] = 1;
563  m_fwGeometry->idToName[id].shape[1] = par [0]; // hBottomEdge
564  m_fwGeometry->idToName[id].shape[2] = par [1]; // hTopEdge
565  m_fwGeometry->idToName[id].shape[3] = par [2]; // thickness
566  m_fwGeometry->idToName[id].shape[4] = par [3]; // apothem
567  }
568  if( const RectangularPlaneBounds *b2 = dynamic_cast<const RectangularPlaneBounds *> (b))
569  {
570  // Rectangular
571  m_fwGeometry->idToName[id].shape[0] = 2;
572  m_fwGeometry->idToName[id].shape[1] = b2->width() * 0.5; // half width
573  m_fwGeometry->idToName[id].shape[2] = b2->length() * 0.5; // half length
574  m_fwGeometry->idToName[id].shape[3] = b2->thickness() * 0.5; // half thickness
575  }
576 
577  // Position of the DetUnit's center
578  GlobalPoint pos = det->surface().position();
579  m_fwGeometry->idToName[id].translation[0] = pos.x();
580  m_fwGeometry->idToName[id].translation[1] = pos.y();
581  m_fwGeometry->idToName[id].translation[2] = pos.z();
582 
583  // Add the coeff of the rotation matrix
584  // with a projection on the basis vectors
585  TkRotation<float> detRot = det->surface().rotation();
586  m_fwGeometry->idToName[id].matrix[0] = detRot.xx();
587  m_fwGeometry->idToName[id].matrix[1] = detRot.yx();
588  m_fwGeometry->idToName[id].matrix[2] = detRot.zx();
589  m_fwGeometry->idToName[id].matrix[3] = detRot.xy();
590  m_fwGeometry->idToName[id].matrix[4] = detRot.yy();
591  m_fwGeometry->idToName[id].matrix[5] = detRot.zy();
592  m_fwGeometry->idToName[id].matrix[6] = detRot.xz();
593  m_fwGeometry->idToName[id].matrix[7] = detRot.yz();
594  m_fwGeometry->idToName[id].matrix[8] = detRot.zz();
595 }
T xx() const
virtual char const * what() const
Definition: Exception.cc:141
void swap(ora::Record &rh, ora::Record &lh)
Definition: Record.h:70
virtual int nstrips() const =0
const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
const std::vector< const CSCLayer * > & layers() const
Return all layers.
Definition: CSCChamber.h:57
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:85
const CSCWireTopology * wireTopology() const
JetCorrectorParameters::Record record
Definition: classes.h:7
std::shared_ptr< FWRecoGeometry > m_fwGeometry
FWRecoGeometryESProducer(const edm::ParameterSet &)
DTLayerId id() const
Return the DetId of this SL.
Definition: DTLayer.cc:46
const std::vector< const RPCRoll * > & rolls() const
Return a vector of all RPC rolls.
Definition: RPCGeometry.cc:67
assert(m_qm.get())
T y() const
Definition: PV3DBase.h:63
T yx() const
float cellWidth() const
Returns the cell width.
Definition: DTTopology.h:68
const_iterator begin() const
Definition: EZArrayFL.h:63
edm::ESHandle< GlobalTrackingGeometry > m_geomRecord
const ChamberContainer & chambers() const
Return a vector of all chambers.
Definition: CSCGeometry.cc:106
double wireSpacing() const
const StripTopology & specificTopology() const
Definition: RPCRoll.cc:107
const TrackerGeometry * m_trackerGeom
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
CornersVec getCorners(const DetId &id) const
Returns the corner points of this cell&#39;s volume.
void setWhatProduced(T *iThis, const es::Label &iLabel=es::Label())
Definition: ESProducer.h:115
int firstChannel() const
Returns the wire number of the first wire.
Definition: DTTopology.h:78
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
T zx() const
void fillShapeAndPlacement(unsigned int id, const GeomDet *det)
T xy() const
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:80
const DTTopology & specificTopology() const
Definition: DTLayer.cc:42
T zz() const
virtual float stripLength() const =0
float wireAngle() const
const DetContainer & detsTEC() const
T z() const
Definition: PV3DBase.h:64
def move
Definition: eostools.py:510
const DetContainer & detsPXB() const
T zy() const
const std::vector< const GEMEtaPartition * > & etaPartitions() const
Return a vector of all GEM eta partitions.
Definition: GEMGeometry.cc:63
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:79
#define end
Definition: vmac.h:37
float cellHeight() const
Returns the cell height.
Definition: DTTopology.h:70
T yy() const
#define ADD_PIXEL_TOPOLOGY(rawid, detUnit)
unsigned int insert_id(unsigned int id)
const DetContainer & detsTIB() const
const std::vector< const GEMSuperChamber * > & superChambers() const
Return a vector of all GEM super chambers.
Definition: GEMGeometry.cc:55
const std::vector< ME0EtaPartition const * > & etaPartitions() const
Return a vector of all ME0 eta partitions.
Definition: ME0Geometry.cc:59
Definition: DetId.h:18
const CSCStripTopology * topology() const
void fillPoints(unsigned int id, std::vector< GlobalPoint >::const_iterator begin, std::vector< GlobalPoint >::const_iterator end)
virtual float stripOffset(void) const
int channels() const
Returns the number of wires in the layer.
Definition: DTTopology.h:75
const std::vector< const DTLayer * > & layers() const
Return a vector of all SuperLayer.
Definition: DTGeometry.cc:95
#define ADD_SISTRIP_TOPOLOGY(rawid, detUnit)
double b
Definition: hdecay.h:120
std::shared_ptr< FWRecoGeometry > produce(const FWRecoGeometryRecord &)
const std::vector< const GEMChamber * > & chambers() const
Return a vector of all GEM chambers.
Definition: GEMGeometry.cc:59
edm::ESHandle< CaloGeometry > m_caloGeom
#define begin
Definition: vmac.h:30
T xz() const
const_iterator end() const
Definition: EZArrayFL.h:64
virtual float pitch() const =0
const DetContainer & detsPXF() const
const DetContainer & detsTOB() const
const RotationType & rotation() const
Definition: Bounds.h:22
float cellLenght() const
Definition: DTTopology.h:73
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
T yz() const
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:47
const DetContainer & detsTID() const
const TrackerGeomDet * idToDet(DetId) const