CMS 3D CMS Logo

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