CMS 3D CMS Logo

FWRecoGeometryESProducer.cc
Go to the documentation of this file.
1 #include <fstream>
2 #include <streambuf>
3 
7 
34 
35 #include "TNamed.h"
37 
38 void FWRecoGeometryESProducer::ADD_PIXEL_TOPOLOGY( unsigned int rawid, const GeomDet* detUnit ) {
39  const PixelGeomDetUnit* det = dynamic_cast<const PixelGeomDetUnit*>( detUnit );
40  if( det )
41  {
42  const PixelTopology* topo = &det->specificTopology();
43 
44  std::pair<float,float> pitch = topo->pitch();
45  m_fwGeometry->idToName[rawid].topology[0] = pitch.first;
46  m_fwGeometry->idToName[rawid].topology[1] = pitch.second;
47 
48  m_fwGeometry->idToName[rawid].topology[2] = topo->localX(0.f); // offsetX
49  m_fwGeometry->idToName[rawid].topology[3] = topo->localY(0.f); // offsetY
50 
51  // big pixels layout
52  m_fwGeometry->idToName[rawid].topology[4] = topo->isItBigPixelInX(80) ? 0 : 1;
53  }
54 }
55 
56 # define ADD_SISTRIP_TOPOLOGY( rawid, detUnit ) \
57  const StripGeomDetUnit* det = dynamic_cast<const StripGeomDetUnit*>( detUnit ); \
58  if( det ) \
59  { \
60  const StripTopology* topo = dynamic_cast<const StripTopology*>( &det->specificTopology() ); \
61  m_fwGeometry->idToName[rawid].topology[0] = 0; \
62  m_fwGeometry->idToName[rawid].topology[1] = topo->nstrips(); \
63  m_fwGeometry->idToName[rawid].topology[2] = topo->stripLength(); \
64  if( const RadialStripTopology* rtop = dynamic_cast<const RadialStripTopology*>( &(det->specificType().specificTopology()) ) ) \
65  { \
66  m_fwGeometry->idToName[rawid].topology[0] = 1; \
67  m_fwGeometry->idToName[rawid].topology[3] = rtop->yAxisOrientation(); \
68  m_fwGeometry->idToName[rawid].topology[4] = rtop->originToIntersection(); \
69  m_fwGeometry->idToName[rawid].topology[5] = rtop->phiOfOneEdge(); \
70  m_fwGeometry->idToName[rawid].topology[6] = rtop->angularWidth(); \
71  } \
72  else if( dynamic_cast<const RectangularStripTopology*>( &(det->specificType().specificTopology()) ) ) \
73  { \
74  m_fwGeometry->idToName[rawid].topology[0] = 2; \
75  m_fwGeometry->idToName[rawid].topology[3] = topo->pitch(); \
76  } \
77  else if( dynamic_cast<const TrapezoidalStripTopology*>( &(det->specificType().specificTopology()) ) ) \
78  { \
79  m_fwGeometry->idToName[rawid].topology[0] = 3; \
80  m_fwGeometry->idToName[rawid].topology[3] = topo->pitch(); \
81  } \
82  } \
83 
84 namespace {
85  const std::array<std::string,3> hgcal_geom_names = { { "HGCalEESensitive",
86  "HGCalHESiliconSensitive",
87  "HGCalHEScintillatorSensitive" } };
88 }
89 
91  : m_current( -1 )
92 {
93  m_tracker = pset.getUntrackedParameter<bool>( "Tracker", true );
94  m_muon = pset.getUntrackedParameter<bool>( "Muon", true );
95  m_calo = pset.getUntrackedParameter<bool>( "Calo", true );
96  m_timing = pset.getUntrackedParameter<bool>( "Timing", false );
97  setWhatProduced( this );
98 }
99 
101 {}
102 
103 std::shared_ptr<FWRecoGeometry>
105 {
106  using namespace edm;
107 
108  m_fwGeometry = std::make_shared<FWRecoGeometry>();
109 
110  if( m_tracker || m_muon ) {
112  DetId detId( DetId::Tracker, 0 );
114  }
115 
116  if( m_tracker )
117  {
120  addTIBGeometry();
121  addTIDGeometry();
122  addTOBGeometry();
123  addTECGeometry();
125  return m_fwGeometry; //AMT
126  }
127  if( m_muon )
128  {
129  addDTGeometry();
130  addCSCGeometry();
131  addRPCGeometry();
132  addGEMGeometry();
133  addME0Geometry();
134  }
135  if( m_calo )
136  {
137  edm::ESHandle<CaloGeometry> caloGeomH;
138  record.getRecord<CaloGeometryRecord>().get(caloGeomH);
139  m_caloGeom = caloGeomH.product();
140  addCaloGeometry();
141  }
142 
143  if( m_timing ) {
144  record.getRecord<CaloGeometryRecord>().getRecord<IdealGeometryRecord>().get( "FastTimeBarrel", m_ftlBarrelGeom );
145  record.getRecord<CaloGeometryRecord>().getRecord<IdealGeometryRecord>().get( "SFBX", m_ftlEndcapGeom );
146  addFTLGeometry();
147  }
148 
149  m_fwGeometry->idToName.resize( m_current + 1 );
150  std::vector<FWRecoGeom::Info>( m_fwGeometry->idToName ).swap( m_fwGeometry->idToName );
151  std::sort( m_fwGeometry->idToName.begin(), m_fwGeometry->idToName.end());
152 
153  return m_fwGeometry;
154 }
155 
156 void
158 {
159  DetId detId( DetId::Muon, 2 );
160  const CSCGeometry* cscGeometry = (const CSCGeometry*) m_geomRecord->slaveGeometry( detId );
161  for( auto it = cscGeometry->chambers().begin(),
162  end = cscGeometry->chambers().end();
163  it != end; ++it )
164  {
165  const CSCChamber *chamber = *it;
166 
167  if( chamber )
168  {
169  unsigned int rawid = chamber->geographicalId();
170  unsigned int current = insert_id( rawid );
171  fillShapeAndPlacement( current, chamber );
172  //
173  // CSC layers geometry
174  //
175  for( std::vector< const CSCLayer* >::const_iterator lit = chamber->layers().begin(),
176  lend = chamber->layers().end();
177  lit != lend; ++lit )
178  {
179  const CSCLayer* layer = *lit;
180 
181  if( layer )
182  {
183  unsigned int rawid = layer->geographicalId();
184  unsigned int current = insert_id( rawid );
185  fillShapeAndPlacement( current, layer );
186 
187  const CSCStripTopology* stripTopology = layer->geometry()->topology();
188  m_fwGeometry->idToName[current].topology[0] = stripTopology->yAxisOrientation();
189  m_fwGeometry->idToName[current].topology[1] = stripTopology->centreToIntersection();
190  m_fwGeometry->idToName[current].topology[2] = stripTopology->yCentreOfStripPlane();
191  m_fwGeometry->idToName[current].topology[3] = stripTopology->phiOfOneEdge();
192  m_fwGeometry->idToName[current].topology[4] = stripTopology->stripOffset();
193  m_fwGeometry->idToName[current].topology[5] = stripTopology->angularWidth();
194 
195  const CSCWireTopology* wireTopology = layer->geometry()->wireTopology();
196  m_fwGeometry->idToName[current].topology[6] = wireTopology->wireSpacing();
197  m_fwGeometry->idToName[current].topology[7] = wireTopology->wireAngle();
198  }
199  }
200  }
201  }
202 }
203 
204 void
206 {
207  DetId detId( DetId::Muon, 1 );
208  const DTGeometry* dtGeometry = (const DTGeometry*) m_geomRecord->slaveGeometry( detId );
209 
210  //
211  // DT chambers geometry
212  //
213  for( auto it = dtGeometry->chambers().begin(),
214  end = dtGeometry->chambers().end();
215  it != end; ++it )
216  {
217  const DTChamber *chamber = *it;
218 
219  if( chamber )
220  {
221  unsigned int rawid = chamber->geographicalId().rawId();
222  unsigned int current = insert_id( rawid );
223  fillShapeAndPlacement( current, chamber );
224  }
225  }
226 
227  // Fill in DT layer parameters
228  for( auto it = dtGeometry->layers().begin(),
229  end = dtGeometry->layers().end();
230  it != end; ++it )
231  {
232  const DTLayer* layer = *it;
233 
234  if( layer )
235  {
236  unsigned int rawid = layer->id().rawId();
237  unsigned int current = insert_id( rawid );
238  fillShapeAndPlacement( current, layer );
239 
240  const DTTopology& topo = layer->specificTopology();
241  const BoundPlane& surf = layer->surface();
242  // Topology W/H/L:
243  m_fwGeometry->idToName[current].topology[0] = topo.cellWidth();
244  m_fwGeometry->idToName[current].topology[1] = topo.cellHeight();
245  m_fwGeometry->idToName[current].topology[2] = topo.cellLenght();
246  m_fwGeometry->idToName[current].topology[3] = topo.firstChannel();
247  m_fwGeometry->idToName[current].topology[4] = topo.lastChannel();
248  m_fwGeometry->idToName[current].topology[5] = topo.channels();
249 
250  // Bounds W/H/L:
251  m_fwGeometry->idToName[current].topology[6] = surf.bounds().width();
252  m_fwGeometry->idToName[current].topology[7] = surf.bounds().thickness();
253  m_fwGeometry->idToName[current].topology[8] = surf.bounds().length();
254  }
255  }
256 }
257 
258 void
260 {
261  //
262  // RPC rolls geometry
263  //
264  DetId detId( DetId::Muon, 3 );
265  const RPCGeometry* rpcGeom = (const RPCGeometry*) m_geomRecord->slaveGeometry( detId );
266  for( auto it = rpcGeom->rolls().begin(),
267  end = rpcGeom->rolls().end();
268  it != end; ++it )
269  {
270  const RPCRoll* roll = (*it);
271  if( roll )
272  {
273  unsigned int rawid = roll->geographicalId().rawId();
274  unsigned int current = insert_id( rawid );
275  fillShapeAndPlacement( current, roll );
276 
277  const StripTopology& topo = roll->specificTopology();
278  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
279  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
280  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
281  }
282  }
283 
284 
285  try {
286  RPCDetId id(1, 1, 4, 1, 1, 1, 1 );
287  m_geomRecord->slaveGeometry( detId );
288  m_fwGeometry->extraDet.Add(new TNamed("RE4", "RPC endcap station 4"));
289  }
290  catch (std::runtime_error &e) {
291  std::cerr << e.what() << std::endl;
292  }
293 }
294 
295 void
297 {
298  //
299  // GEM geometry
300  //
301  DetId detId( DetId::Muon, 4 );
302 
303  try
304  {
305  const GEMGeometry* gemGeom = (const GEMGeometry*) m_geomRecord->slaveGeometry( detId );
306 
307  // add in superChambers - gem Segments are based on superChambers
308  for(auto sc : gemGeom->superChambers())
309  {
310  if( sc )
311  {
312  unsigned int rawid = sc->geographicalId().rawId();
313  unsigned int current = insert_id( rawid );
314  fillShapeAndPlacement( current, sc );
315  }
316  }
317  // add in chambers
318  for(auto ch : gemGeom->chambers())
319  {
320  if( ch )
321  {
322  unsigned int rawid = ch->geographicalId().rawId();
323  unsigned int current = insert_id( rawid );
324  fillShapeAndPlacement( current, ch );
325  }
326  }
327  // add in etaPartitions - gem rechits are based on etaPartitions
328  for(auto roll : gemGeom->etaPartitions())
329  {
330  if( roll )
331  {
332  unsigned int rawid = roll->geographicalId().rawId();
333  unsigned int current = insert_id( rawid );
334  fillShapeAndPlacement( current, roll );
335 
336  const StripTopology& topo = roll->specificTopology();
337  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
338  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
339  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
340 
341  float height = topo.stripLength()/2;
342  LocalPoint lTop( 0., height, 0.);
343  LocalPoint lBottom( 0., -height, 0.);
344  m_fwGeometry->idToName[current].topology[3] = roll->localPitch(lTop);
345  m_fwGeometry->idToName[current].topology[4] = roll->localPitch(lBottom);
346  m_fwGeometry->idToName[current].topology[5] = roll->npads();
347  }
348  }
349 
350  m_fwGeometry->extraDet.Add(new TNamed("GEM", "GEM muon detector"));
351  try {
352  GEMDetId id(1, 1, 2, 1, 1, 1 );
353  m_geomRecord->slaveGeometry( detId );
354  m_fwGeometry->extraDet.Add(new TNamed("GE2", "GEM endcap station 2"));
355  }
356  catch (std::runtime_error &e) {
357  std::cerr << e.what() << std::endl;
358  }
359 
360  }
361  catch( cms::Exception &exception )
362  {
363  edm::LogError("FWRecoGeometry") << " GEM geometry not found " << exception.what() << std::endl;
364  }
365 }
366 
367 void
369 {
370  //
371  // ME0 geometry
372  //
373 
374  DetId detId( DetId::Muon, 5 );
375  try
376  {
377  const ME0Geometry* me0Geom = (const ME0Geometry*) m_geomRecord->slaveGeometry( detId );
378  for(auto roll : me0Geom->etaPartitions())
379  {
380  if( roll )
381  {
382  unsigned int rawid = roll->geographicalId().rawId();
383  unsigned int current = insert_id( rawid );
384  fillShapeAndPlacement( current, roll );
385 
386  const StripTopology& topo = roll->specificTopology();
387  m_fwGeometry->idToName[current].topology[0] = topo.nstrips();
388  m_fwGeometry->idToName[current].topology[1] = topo.stripLength();
389  m_fwGeometry->idToName[current].topology[2] = topo.pitch();
390 
391  float height = topo.stripLength()/2;
392  LocalPoint lTop( 0., height, 0.);
393  LocalPoint lBottom( 0., -height, 0.);
394  m_fwGeometry->idToName[current].topology[3] = roll->localPitch(lTop);
395  m_fwGeometry->idToName[current].topology[4] = roll->localPitch(lBottom);
396  m_fwGeometry->idToName[current].topology[5] = roll->npads();
397  }
398  }
399  m_fwGeometry->extraDet.Add(new TNamed("ME0", "ME0 muon detector"));
400  }
401  catch( cms::Exception &exception )
402  {
403  edm::LogError("FWRecoGeometry") << " ME0 geometry not found " << exception.what() << std::endl;
404  }
405 }
406 
407 void
409 {
410  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXB().begin(),
411  end = m_trackerGeom->detsPXB().end();
412  it != end; ++it)
413  {
414  const GeomDet *det = *it;
415 
416  if( det )
417  {
418  DetId detid = det->geographicalId();
419  unsigned int rawid = detid.rawId();
420  unsigned int current = insert_id( rawid );
421  fillShapeAndPlacement( current, det );
422 
423  ADD_PIXEL_TOPOLOGY( current, m_trackerGeom->idToDetUnit( detid ));
424  }
425  }
426 }
427 
428 void
430 {
431  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXF().begin(),
432  end = m_trackerGeom->detsPXF().end();
433  it != end; ++it )
434  {
435  const GeomDet *det = *it;
436 
437  if( det )
438  {
439  DetId detid = det->geographicalId();
440  unsigned int rawid = detid.rawId();
441  unsigned int current = insert_id( rawid );
442  fillShapeAndPlacement( current, det );
443 
444  ADD_PIXEL_TOPOLOGY( current, m_trackerGeom->idToDetUnit( detid ));
445  }
446  }
447 }
448 
449 void
451 {
452  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTIB().begin(),
453  end = m_trackerGeom->detsTIB().end();
454  it != end; ++it )
455  {
456  const GeomDet *det = *it;
457 
458  if( det )
459  {
460  DetId detid = det->geographicalId();
461  unsigned int rawid = detid.rawId();
462  unsigned int current = insert_id( rawid );
463  fillShapeAndPlacement( current, det );
464 
465  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
466  }
467  }
468 }
469 
470 void
472 {
473  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTOB().begin(),
474  end = m_trackerGeom->detsTOB().end();
475  it != end; ++it )
476  {
477  const GeomDet *det = *it;
478 
479  if( det )
480  {
481  DetId detid = det->geographicalId();
482  unsigned int rawid = detid.rawId();
483  unsigned int current = insert_id( rawid );
484  fillShapeAndPlacement( current, det );
485 
486  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
487  }
488  }
489 }
490 
491 void
493 {
494  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTID().begin(),
495  end = m_trackerGeom->detsTID().end();
496  it != end; ++it)
497  {
498  const GeomDet *det = *it;
499 
500  if( det )
501  {
502  DetId detid = det->geographicalId();
503  unsigned int rawid = detid.rawId();
504  unsigned int current = insert_id( rawid );
505  fillShapeAndPlacement( current, det );
506 
507  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
508  }
509  }
510 }
511 
512 void
514 {
515  for( TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTEC().begin(),
516  end = m_trackerGeom->detsTEC().end();
517  it != end; ++it )
518  {
519  const GeomDet *det = *it;
520 
521  if( det )
522  {
523  DetId detid = det->geographicalId();
524  unsigned int rawid = detid.rawId();
525  unsigned int current = insert_id( rawid );
526  fillShapeAndPlacement( current, det );
527 
528  ADD_SISTRIP_TOPOLOGY( current, m_trackerGeom->idToDet( detid ));
529  }
530  }
531 }
532 
533 void
535 {
536  std::vector<DetId> vid = m_caloGeom->getValidDetIds(); // Calo
537  for( std::vector<DetId>::const_iterator it = vid.begin(),
538  end = vid.end();
539  it != end; ++it ) {
540  unsigned int id = insert_id( it->rawId());
541  if( DetId::Forward != it->det() ) {
542  const CaloCellGeometry::CornersVec& cor = m_caloGeom->getGeometry( *it )->getCorners();
543  fillPoints( id, cor.begin(), cor.end());
544  } else {
545  const HGCalGeometry* geom = dynamic_cast<const HGCalGeometry*>(m_caloGeom->getSubdetectorGeometry( *it ) );
546  const auto& cor = geom->getCorners( *it );
547  fillPoints( id, cor.begin(), cor.end() );
548  }
549  }
550 }
551 
552 void
554 {
555  // do the barrel
556  std::vector<DetId> vid = std::move(m_ftlBarrelGeom->getValidDetIds());
557  for( std::vector<DetId>::const_iterator it = vid.begin(),
558  end = vid.end();
559  it != end; ++it ) {
560  unsigned int id = insert_id( it->rawId());
561  const auto& cor = m_ftlBarrelGeom->getCorners( *it );
562  fillPoints( id, cor.begin(), cor.end());
563  }
564  // do the endcap
566  for( std::vector<DetId>::const_iterator it = vid.begin(),
567  end = vid.end();
568  it != end; ++it ) {
569  unsigned int id = insert_id( it->rawId());
570  const auto& cor = m_ftlEndcapGeom->getCorners( *it );
571  fillPoints( id, cor.begin(), cor.end());
572  }
573 }
574 
575 unsigned int
577 {
578  ++m_current;
579  m_fwGeometry->idToName.push_back(FWRecoGeom::Info());
580  m_fwGeometry->idToName.back().id = rawid;
581 
582  return m_current;
583 }
584 
585 void
586 FWRecoGeometryESProducer::fillPoints( unsigned int id, std::vector<GlobalPoint>::const_iterator begin, std::vector<GlobalPoint>::const_iterator end )
587 {
588  unsigned int index( 0 );
589  for( std::vector<GlobalPoint>::const_iterator i = begin; i != end; ++i )
590  {
591  assert( index < 23 );
592  m_fwGeometry->idToName[id].points[index] = i->x();
593  m_fwGeometry->idToName[id].points[++index] = i->y();
594  m_fwGeometry->idToName[id].points[++index] = i->z();
595  ++index;
596  }
597 }
598 
599 
601 void
603 {
604  // Trapezoidal
605  const Bounds *b = &((det->surface ()).bounds ());
606  if( const TrapezoidalPlaneBounds *b2 = dynamic_cast<const TrapezoidalPlaneBounds *> (b))
607  {
608  std::array< const float, 4 > const & par = b2->parameters ();
609 
610  // These parameters are half-lengths, as in CMSIM/GEANT3
611  m_fwGeometry->idToName[id].shape[0] = 1;
612  m_fwGeometry->idToName[id].shape[1] = par [0]; // hBottomEdge
613  m_fwGeometry->idToName[id].shape[2] = par [1]; // hTopEdge
614  m_fwGeometry->idToName[id].shape[3] = par [2]; // thickness
615  m_fwGeometry->idToName[id].shape[4] = par [3]; // apothem
616  }
617  if( const RectangularPlaneBounds *b2 = dynamic_cast<const RectangularPlaneBounds *> (b))
618  {
619  // Rectangular
620  m_fwGeometry->idToName[id].shape[0] = 2;
621  m_fwGeometry->idToName[id].shape[1] = b2->width() * 0.5; // half width
622  m_fwGeometry->idToName[id].shape[2] = b2->length() * 0.5; // half length
623  m_fwGeometry->idToName[id].shape[3] = b2->thickness() * 0.5; // half thickness
624  }
625 
626  // Position of the DetUnit's center
627  GlobalPoint pos = det->surface().position();
628  m_fwGeometry->idToName[id].translation[0] = pos.x();
629  m_fwGeometry->idToName[id].translation[1] = pos.y();
630  m_fwGeometry->idToName[id].translation[2] = pos.z();
631 
632  // Add the coeff of the rotation matrix
633  // with a projection on the basis vectors
634  TkRotation<float> detRot = det->surface().rotation();
635  m_fwGeometry->idToName[id].matrix[0] = detRot.xx();
636  m_fwGeometry->idToName[id].matrix[1] = detRot.yx();
637  m_fwGeometry->idToName[id].matrix[2] = detRot.zx();
638  m_fwGeometry->idToName[id].matrix[3] = detRot.xy();
639  m_fwGeometry->idToName[id].matrix[4] = detRot.yy();
640  m_fwGeometry->idToName[id].matrix[5] = detRot.zy();
641  m_fwGeometry->idToName[id].matrix[6] = detRot.xz();
642  m_fwGeometry->idToName[id].matrix[7] = detRot.yz();
643  m_fwGeometry->idToName[id].matrix[8] = detRot.zz();
644 }
645 
647 {
648  std::string path = "Geometry/TrackerCommonData/data/";
651  path += "PhaseI/";
656  path += "PhaseII/";
657  }
658  path += "trackerParameters.xml";
659  std::string fullPath = edm::FileInPath(path).fullPath();
660  std::ifstream t(fullPath);
661  std::stringstream buffer;
662  buffer << t.rdbuf();
663  m_fwGeometry->trackerTopologyXML = buffer.str();
664 }
T xx() const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:44
T getUntrackedParameter(std::string const &, T const &) const
edm::ESHandle< FastTimeGeometry > m_ftlBarrelGeom
virtual float stripLength() const =0
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:84
const CSCWireTopology * wireTopology() const
JetCorrectorParameters::Record record
Definition: classes.h:7
std::shared_ptr< FWRecoGeometry > m_fwGeometry
float centreToIntersection() const override
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
T y() const
Definition: PV3DBase.h:63
T yx() const
virtual std::pair< float, float > pitch() const =0
float cellWidth() const
Returns the cell width.
Definition: DTTopology.h:68
const_iterator begin() const
Definition: EZArrayFL.h:63
edm::ESHandle< GlobalTrackingGeometry > m_geomRecord
char const * what() const override
Definition: Exception.cc:141
const ChamberContainer & chambers() const
Return a vector of all chambers.
Definition: CSCGeometry.cc:106
double wireSpacing() const
virtual bool isItBigPixelInX(int ixbin) const =0
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.
const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const override
Get a list of valid detector ids (for the given subdetector)
void ADD_PIXEL_TOPOLOGY(unsigned int rawid, const GeomDet *detUnit)
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:116
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
bool isThere(GeomDetEnumerators::SubDetector subdet) const
uint32_t rawId() const
get the raw id
Definition: DetId.h:44
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 TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
const DTTopology & specificTopology() const
Definition: DTLayer.cc:42
T zz() const
const DetContainer & detsTEC() const
float yCentreOfStripPlane() const override
edm::ESHandle< FastTimeGeometry > m_ftlEndcapGeom
T z() const
Definition: PV3DBase.h:64
void get(HolderT &iHolder) const
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
const TrackingGeometry * slaveGeometry(DetId id) const
Return the pointer to the actual geometry for a given DetId.
virtual float localX(float mpX) const =0
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:79
float phiOfOneEdge() const override
double f[11][100]
#define end
Definition: vmac.h:39
float cellHeight() const
Returns the cell height.
Definition: DTTopology.h:70
T yy() const
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
float yAxisOrientation() const override
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:94
virtual int nstrips() const =0
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
#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
float angularWidth() const override
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:97
#define begin
Definition: vmac.h:32
HLT enums.
T xz() const
const_iterator end() const
Definition: EZArrayFL.h:64
const DetContainer & detsPXF() const
const TrackerGeomDet * idToDet(DetId) const override
const DetContainer & detsTOB() const
std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id.
Definition: CaloGeometry.cc:80
const RotationType & rotation() const
std::string fullPath() const
Definition: FileInPath.cc:197
virtual float pitch() const =0
Definition: Bounds.h:22
virtual float localY(float mpY) const =0
float wireAngle() const override
float cellLenght() const
Definition: DTTopology.h:73
T x() const
Definition: PV3DBase.h:62
const PositionType & position() const
T const * product() const
Definition: ESHandle.h:86
T yz() const
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:47
def move(src, dest)
Definition: eostools.py:510
const DetContainer & detsTID() const
CornersVec getCorners(const DetId &id) const
Returns the corner points of this cell&#39;s volume.