CMS 3D CMS Logo

FWRecoGeometryESProducer.cc
Go to the documentation of this file.
1 #include <fstream>
2 #include <streambuf>
3 
8 
36 
37 #include "TNamed.h"
39 
41  const GeomDet* detUnit,
42  FWRecoGeometry& fwRecoGeometry) {
43  const PixelGeomDetUnit* det = dynamic_cast<const PixelGeomDetUnit*>(detUnit);
44  if (det) {
45  const PixelTopology* topo = &det->specificTopology();
46 
47  std::pair<float, float> pitch = topo->pitch();
48  fwRecoGeometry.idToName[rawid].topology[0] = pitch.first;
49  fwRecoGeometry.idToName[rawid].topology[1] = pitch.second;
50 
51  fwRecoGeometry.idToName[rawid].topology[2] = topo->localX(0.f); // offsetX
52  fwRecoGeometry.idToName[rawid].topology[3] = topo->localY(0.f); // offsetY
53 
54  // big pixels layout
55  fwRecoGeometry.idToName[rawid].topology[4] = topo->isItBigPixelInX(80) ? 0 : 1;
56  }
57 }
58 
61 
62 #define ADD_SISTRIP_TOPOLOGY(rawid, detUnit) \
63  const StripGeomDetUnit* det = dynamic_cast<const StripGeomDetUnit*>(detUnit); \
64  if (det) { \
65  if (const StripTopology* topo = dynamic_cast<const StripTopology*>(&det->specificTopology())) { \
66  fwRecoGeometry.idToName[rawid].topology[0] = 0; \
67  fwRecoGeometry.idToName[rawid].topology[1] = topo->nstrips(); \
68  fwRecoGeometry.idToName[rawid].topology[2] = topo->stripLength(); \
69  } else if (const RadialStripTopology* rtop = \
70  dynamic_cast<const RadialStripTopology*>(&(det->specificType().specificTopology()))) { \
71  fwRecoGeometry.idToName[rawid].topology[0] = 1; \
72  fwRecoGeometry.idToName[rawid].topology[3] = rtop->yAxisOrientation(); \
73  fwRecoGeometry.idToName[rawid].topology[4] = rtop->originToIntersection(); \
74  fwRecoGeometry.idToName[rawid].topology[5] = rtop->phiOfOneEdge(); \
75  fwRecoGeometry.idToName[rawid].topology[6] = rtop->angularWidth(); \
76  } else if (dynamic_cast<const RectangularStripTopology*>(&(det->specificType().specificTopology()))) { \
77  fwRecoGeometry.idToName[rawid].topology[0] = 2; \
78  fwRecoGeometry.idToName[rawid].topology[3] = topo->pitch(); \
79  } else if (dynamic_cast<const TrapezoidalStripTopology*>(&(det->specificType().specificTopology()))) { \
80  fwRecoGeometry.idToName[rawid].topology[0] = 3; \
81  fwRecoGeometry.idToName[rawid].topology[3] = topo->pitch(); \
82  } \
83  } else { \
84  const Phase2TrackerGeomDetUnit* det = dynamic_cast<const Phase2TrackerGeomDetUnit*>(detUnit); \
85  if (det) { \
86  if (const Phase2TrackerTopology* topo = \
87  dynamic_cast<const Phase2TrackerTopology*>(&(det->specificTopology()))) { \
88  fwRecoGeometry.idToName[rawid].topology[0] = topo->pitch().first; \
89  fwRecoGeometry.idToName[rawid].topology[1] = topo->pitch().second; \
90  } \
91  } \
92  }
93 
94 namespace {
95  const std::array<std::string, 3> hgcal_geom_names = {
96  {"HGCalEESensitive", "HGCalHESiliconSensitive", "HGCalHEScintillatorSensitive"}};
97 }
98 
100  m_tracker = pset.getUntrackedParameter<bool>("Tracker", true);
101  m_muon = pset.getUntrackedParameter<bool>("Muon", true);
102  m_calo = pset.getUntrackedParameter<bool>("Calo", true);
103  m_timing = pset.getUntrackedParameter<bool>("Timing", false);
104  auto cc = setWhatProduced(this);
105  if (m_tracker or m_muon) {
106  cc.setConsumes(m_trackingGeomToken);
107  }
108  if (m_timing) {
109  cc.setConsumes(m_ftlBarrelGeomToken, edm::ESInputTag{"", "FastTimeBarrel"})
110  .setConsumes(m_ftlEndcapGeomToken, edm::ESInputTag{"", "SFBX"});
111  }
112  if (m_calo) {
113  cc.setConsumes(m_caloGeomToken);
114  }
115 }
116 
118 
119 std::unique_ptr<FWRecoGeometry> FWRecoGeometryESProducer::produce(const FWRecoGeometryRecord& record) {
120  using namespace edm;
121 
122  auto fwRecoGeometry = std::make_unique<FWRecoGeometry>();
123 
124  if (m_tracker || m_muon) {
126  DetId detId(DetId::Tracker, 0);
127  m_trackerGeom = static_cast<const TrackerGeometry*>(m_trackingGeom->slaveGeometry(detId));
128  }
129 
130  if (m_tracker) {
131  addPixelBarrelGeometry(*fwRecoGeometry);
132  addPixelForwardGeometry(*fwRecoGeometry);
133  addTIBGeometry(*fwRecoGeometry);
134  addTIDGeometry(*fwRecoGeometry);
135  addTOBGeometry(*fwRecoGeometry);
136  addTECGeometry(*fwRecoGeometry);
137  writeTrackerParametersXML(*fwRecoGeometry);
138  }
139  if (m_muon) {
140  addDTGeometry(*fwRecoGeometry);
141  addCSCGeometry(*fwRecoGeometry);
142  addRPCGeometry(*fwRecoGeometry);
143  addGEMGeometry(*fwRecoGeometry);
144  addME0Geometry(*fwRecoGeometry);
145  }
146  if (m_calo) {
148  addCaloGeometry(*fwRecoGeometry);
149  }
150 
151  if (m_timing) {
154  addFTLGeometry(*fwRecoGeometry);
155  }
156 
157  fwRecoGeometry->idToName.resize(m_current + 1);
158  std::vector<FWRecoGeom::Info>(fwRecoGeometry->idToName).swap(fwRecoGeometry->idToName);
159  std::sort(fwRecoGeometry->idToName.begin(), fwRecoGeometry->idToName.end());
160 
161  return fwRecoGeometry;
162 }
163 
165  DetId detId(DetId::Muon, 2);
166  const CSCGeometry* cscGeometry = static_cast<const CSCGeometry*>(m_trackingGeom->slaveGeometry(detId));
167  for (auto it = cscGeometry->chambers().begin(), end = cscGeometry->chambers().end(); it != end; ++it) {
168  const CSCChamber* chamber = *it;
169 
170  if (chamber) {
171  unsigned int rawid = chamber->geographicalId();
172  unsigned int current = insert_id(rawid, fwRecoGeometry);
173  fillShapeAndPlacement(current, chamber, fwRecoGeometry);
174  //
175  // CSC layers geometry
176  //
177  for (std::vector<const CSCLayer*>::const_iterator lit = chamber->layers().begin(), lend = chamber->layers().end();
178  lit != lend;
179  ++lit) {
180  const CSCLayer* layer = *lit;
181 
182  if (layer) {
183  unsigned int rawid = layer->geographicalId();
184  unsigned int current = insert_id(rawid, fwRecoGeometry);
185  fillShapeAndPlacement(current, layer, fwRecoGeometry);
186 
187  const CSCStripTopology* stripTopology = layer->geometry()->topology();
188  fwRecoGeometry.idToName[current].topology[0] = stripTopology->yAxisOrientation();
189  fwRecoGeometry.idToName[current].topology[1] = stripTopology->centreToIntersection();
190  fwRecoGeometry.idToName[current].topology[2] = stripTopology->yCentreOfStripPlane();
191  fwRecoGeometry.idToName[current].topology[3] = stripTopology->phiOfOneEdge();
192  fwRecoGeometry.idToName[current].topology[4] = stripTopology->stripOffset();
193  fwRecoGeometry.idToName[current].topology[5] = stripTopology->angularWidth();
194 
195  const CSCWireTopology* wireTopology = layer->geometry()->wireTopology();
196  fwRecoGeometry.idToName[current].topology[6] = wireTopology->wireSpacing();
197  fwRecoGeometry.idToName[current].topology[7] = wireTopology->wireAngle();
198  }
199  }
200  }
201  }
202 }
203 
205  DetId detId(DetId::Muon, 1);
206  const DTGeometry* dtGeometry = static_cast<const DTGeometry*>(m_trackingGeom->slaveGeometry(detId));
207 
208  //
209  // DT chambers geometry
210  //
211  for (auto it = dtGeometry->chambers().begin(), end = dtGeometry->chambers().end(); it != end; ++it) {
212  const DTChamber* chamber = *it;
213 
214  if (chamber) {
215  unsigned int rawid = chamber->geographicalId().rawId();
216  unsigned int current = insert_id(rawid, fwRecoGeometry);
217  fillShapeAndPlacement(current, chamber, fwRecoGeometry);
218  }
219  }
220 
221  // Fill in DT layer parameters
222  for (auto it = dtGeometry->layers().begin(), end = dtGeometry->layers().end(); it != end; ++it) {
223  const DTLayer* layer = *it;
224 
225  if (layer) {
226  unsigned int rawid = layer->id().rawId();
227  unsigned int current = insert_id(rawid, fwRecoGeometry);
228  fillShapeAndPlacement(current, layer, fwRecoGeometry);
229 
230  const DTTopology& topo = layer->specificTopology();
231  const BoundPlane& surf = layer->surface();
232  // Topology W/H/L:
233  fwRecoGeometry.idToName[current].topology[0] = topo.cellWidth();
234  fwRecoGeometry.idToName[current].topology[1] = topo.cellHeight();
235  fwRecoGeometry.idToName[current].topology[2] = topo.cellLenght();
236  fwRecoGeometry.idToName[current].topology[3] = topo.firstChannel();
237  fwRecoGeometry.idToName[current].topology[4] = topo.lastChannel();
238  fwRecoGeometry.idToName[current].topology[5] = topo.channels();
239 
240  // Bounds W/H/L:
241  fwRecoGeometry.idToName[current].topology[6] = surf.bounds().width();
242  fwRecoGeometry.idToName[current].topology[7] = surf.bounds().thickness();
243  fwRecoGeometry.idToName[current].topology[8] = surf.bounds().length();
244  }
245  }
246 }
247 
249  //
250  // RPC rolls geometry
251  //
252  DetId detId(DetId::Muon, 3);
253  const RPCGeometry* rpcGeom = static_cast<const RPCGeometry*>(m_trackingGeom->slaveGeometry(detId));
254  for (auto it = rpcGeom->rolls().begin(), end = rpcGeom->rolls().end(); it != end; ++it) {
255  const RPCRoll* roll = (*it);
256  if (roll) {
257  unsigned int rawid = roll->geographicalId().rawId();
258  unsigned int current = insert_id(rawid, fwRecoGeometry);
259  fillShapeAndPlacement(current, roll, fwRecoGeometry);
260 
261  const StripTopology& topo = roll->specificTopology();
262  fwRecoGeometry.idToName[current].topology[0] = topo.nstrips();
263  fwRecoGeometry.idToName[current].topology[1] = topo.stripLength();
264  fwRecoGeometry.idToName[current].topology[2] = topo.pitch();
265  }
266  }
267 
268  try {
269  RPCDetId id(1, 1, 4, 1, 1, 1, 1);
271  fwRecoGeometry.extraDet.Add(new TNamed("RE4", "RPC endcap station 4"));
272  } catch (std::runtime_error& e) {
273  std::cerr << e.what() << std::endl;
274  }
275 }
276 
278  //
279  // GEM geometry
280  //
281 
282  try {
283  DetId detId(DetId::Muon, 4);
284  const GEMGeometry* gemGeom = static_cast<const GEMGeometry*>(m_trackingGeom->slaveGeometry(detId));
285 
286  // add in superChambers - gem Segments are based on superChambers
287  for (auto sc : gemGeom->superChambers()) {
288  if (sc) {
289  unsigned int rawid = sc->geographicalId().rawId();
290  unsigned int current = insert_id(rawid, fwRecoGeometry);
291  fillShapeAndPlacement(current, sc, fwRecoGeometry);
292  }
293  }
294  // add in chambers
295  for (auto ch : gemGeom->chambers()) {
296  if (ch) {
297  unsigned int rawid = ch->geographicalId().rawId();
298  unsigned int current = insert_id(rawid, fwRecoGeometry);
299  fillShapeAndPlacement(current, ch, fwRecoGeometry);
300  }
301  }
302  // add in etaPartitions - gem rechits are based on etaPartitions
303  for (auto roll : gemGeom->etaPartitions()) {
304  if (roll) {
305  unsigned int rawid = roll->geographicalId().rawId();
306  unsigned int current = insert_id(rawid, fwRecoGeometry);
307  fillShapeAndPlacement(current, roll, fwRecoGeometry);
308 
309  const StripTopology& topo = roll->specificTopology();
310  fwRecoGeometry.idToName[current].topology[0] = topo.nstrips();
311  fwRecoGeometry.idToName[current].topology[1] = topo.stripLength();
312  fwRecoGeometry.idToName[current].topology[2] = topo.pitch();
313 
314  float height = topo.stripLength() / 2;
315  LocalPoint lTop(0., height, 0.);
316  LocalPoint lBottom(0., -height, 0.);
317  fwRecoGeometry.idToName[current].topology[3] = roll->localPitch(lTop);
318  fwRecoGeometry.idToName[current].topology[4] = roll->localPitch(lBottom);
319  fwRecoGeometry.idToName[current].topology[5] = roll->npads();
320  }
321  }
322 
323  fwRecoGeometry.extraDet.Add(new TNamed("GEM", "GEM muon detector"));
324  try {
325  GEMDetId id(1, 1, 2, 1, 1, 1);
327  fwRecoGeometry.extraDet.Add(new TNamed("GE2", "GEM endcap station 2"));
328  } catch (std::runtime_error& e) {
329  std::cerr << e.what() << std::endl;
330  }
331 
332  } catch (cms::Exception& exception) {
333  edm::LogError("FWRecoGeometry") << " GEM geometry not found " << exception.what() << std::endl;
334  }
335 }
336 
338  //
339  // ME0 geometry
340  //
341 
342  DetId detId(DetId::Muon, 5);
343  try {
344  const ME0Geometry* me0Geom = static_cast<const ME0Geometry*>(m_trackingGeom->slaveGeometry(detId));
345  for (auto roll : me0Geom->etaPartitions()) {
346  if (roll) {
347  unsigned int rawid = roll->geographicalId().rawId();
348  unsigned int current = insert_id(rawid, fwRecoGeometry);
349  fillShapeAndPlacement(current, roll, fwRecoGeometry);
350 
351  const StripTopology& topo = roll->specificTopology();
352  fwRecoGeometry.idToName[current].topology[0] = topo.nstrips();
353  fwRecoGeometry.idToName[current].topology[1] = topo.stripLength();
354  fwRecoGeometry.idToName[current].topology[2] = topo.pitch();
355 
356  float height = topo.stripLength() / 2;
357  LocalPoint lTop(0., height, 0.);
358  LocalPoint lBottom(0., -height, 0.);
359  fwRecoGeometry.idToName[current].topology[3] = roll->localPitch(lTop);
360  fwRecoGeometry.idToName[current].topology[4] = roll->localPitch(lBottom);
361  fwRecoGeometry.idToName[current].topology[5] = roll->npads();
362  }
363  }
364  fwRecoGeometry.extraDet.Add(new TNamed("ME0", "ME0 muon detector"));
365  } catch (cms::Exception& exception) {
366  edm::LogError("FWRecoGeometry") << " ME0 geometry not found " << exception.what() << std::endl;
367  }
368 }
369 
371  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXB().begin(),
372  end = m_trackerGeom->detsPXB().end();
373  it != end;
374  ++it) {
375  const GeomDet* det = *it;
376 
377  if (det) {
378  DetId detid = det->geographicalId();
379  unsigned int rawid = detid.rawId();
380  unsigned int current = insert_id(rawid, fwRecoGeometry);
381  fillShapeAndPlacement(current, det, fwRecoGeometry);
382 
383  ADD_PIXEL_TOPOLOGY(current, m_trackerGeom->idToDetUnit(detid), fwRecoGeometry);
384  }
385  }
386 }
387 
389  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsPXF().begin(),
390  end = m_trackerGeom->detsPXF().end();
391  it != end;
392  ++it) {
393  const GeomDet* det = *it;
394 
395  if (det) {
396  DetId detid = det->geographicalId();
397  unsigned int rawid = detid.rawId();
398  unsigned int current = insert_id(rawid, fwRecoGeometry);
399  fillShapeAndPlacement(current, det, fwRecoGeometry);
400 
401  ADD_PIXEL_TOPOLOGY(current, m_trackerGeom->idToDetUnit(detid), fwRecoGeometry);
402  }
403  }
404 }
405 
407  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTIB().begin(),
408  end = m_trackerGeom->detsTIB().end();
409  it != end;
410  ++it) {
411  const GeomDet* det = *it;
412 
413  if (det) {
414  DetId detid = det->geographicalId();
415  unsigned int rawid = detid.rawId();
416  unsigned int current = insert_id(rawid, fwRecoGeometry);
417  fillShapeAndPlacement(current, det, fwRecoGeometry);
418 
419  ADD_SISTRIP_TOPOLOGY(current, m_trackerGeom->idToDet(detid));
420  }
421  }
422 }
423 
425  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTOB().begin(),
426  end = m_trackerGeom->detsTOB().end();
427  it != end;
428  ++it) {
429  const GeomDet* det = *it;
430 
431  if (det) {
432  DetId detid = det->geographicalId();
433  unsigned int rawid = detid.rawId();
434  unsigned int current = insert_id(rawid, fwRecoGeometry);
435  fillShapeAndPlacement(current, det, fwRecoGeometry);
436 
437  ADD_SISTRIP_TOPOLOGY(current, m_trackerGeom->idToDet(detid));
438  }
439  }
440 }
441 
443  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTID().begin(),
444  end = m_trackerGeom->detsTID().end();
445  it != end;
446  ++it) {
447  const GeomDet* det = *it;
448 
449  if (det) {
450  DetId detid = det->geographicalId();
451  unsigned int rawid = detid.rawId();
452  unsigned int current = insert_id(rawid, fwRecoGeometry);
453  fillShapeAndPlacement(current, det, fwRecoGeometry);
454 
455  ADD_SISTRIP_TOPOLOGY(current, m_trackerGeom->idToDet(detid));
456  }
457  }
458 }
459 
461  for (TrackerGeometry::DetContainer::const_iterator it = m_trackerGeom->detsTEC().begin(),
462  end = m_trackerGeom->detsTEC().end();
463  it != end;
464  ++it) {
465  const GeomDet* det = *it;
466 
467  if (det) {
468  DetId detid = det->geographicalId();
469  unsigned int rawid = detid.rawId();
470  unsigned int current = insert_id(rawid, fwRecoGeometry);
471  fillShapeAndPlacement(current, det, fwRecoGeometry);
472 
473  ADD_SISTRIP_TOPOLOGY(current, m_trackerGeom->idToDet(detid));
474  }
475  }
476 }
477 
479  std::vector<DetId> vid = m_caloGeom->getValidDetIds(); // Calo
480  for (std::vector<DetId>::const_iterator it = vid.begin(), end = vid.end(); it != end; ++it) {
481  unsigned int id = insert_id(it->rawId(), fwRecoGeometry);
482  if (!((DetId::Forward == it->det()) || (DetId::HGCalEE == it->det()) || (DetId::HGCalHSi == it->det()) ||
483  (DetId::HGCalHSc == it->det()))) {
484  const CaloCellGeometry::CornersVec& cor = m_caloGeom->getGeometry(*it)->getCorners();
485  fillPoints(id, cor.begin(), cor.end(), fwRecoGeometry);
486  } else {
487  DetId::Detector det = it->det();
488  int subdet = (((DetId::HGCalEE == det) || (DetId::HGCalHSi == det) || (DetId::HGCalHSc == det)) ? ForwardEmpty
489  : it->subdetId());
490  const HGCalGeometry* geom = dynamic_cast<const HGCalGeometry*>(m_caloGeom->getSubdetectorGeometry(det, subdet));
491  const auto cor = geom->getNewCorners(*it);
492 
493  // roll = yaw = pitch = 0
494  fwRecoGeometry.idToName[id].matrix[0] = 1.0;
495  fwRecoGeometry.idToName[id].matrix[4] = 1.0;
496  fwRecoGeometry.idToName[id].matrix[8] = 1.0;
497 
498  // corners of the front face
499  for (uint i = 0; i < (cor.size() - 1); ++i) {
500  fwRecoGeometry.idToName[id].points[i * 3 + 0] = cor[i].x();
501  fwRecoGeometry.idToName[id].points[i * 3 + 1] = cor[i].y();
502  fwRecoGeometry.idToName[id].points[i * 3 + 2] = cor[i].z();
503  }
504 
505  // center
506  auto center = geom->getPosition(*it);
507  fwRecoGeometry.idToName[id].points[(cor.size() - 1) * 3 + 0] = center.x();
508  fwRecoGeometry.idToName[id].points[(cor.size() - 1) * 3 + 1] = center.y();
509  fwRecoGeometry.idToName[id].points[(cor.size() - 1) * 3 + 2] = center.z();
510 
511  // thickness
512  fwRecoGeometry.idToName[id].shape[3] = cor[cor.size() - 1].z();
513 
514  // total points
515  fwRecoGeometry.idToName[id].topology[0] = cor.size() - 1;
516  }
517  }
518 }
519 
521  // do the barrel
522  for (const auto& detid : m_ftlBarrelGeom->getValidDetIds()) {
523  unsigned int id = insert_id(detid.rawId(), fwRecoGeometry);
524  const auto& cor = m_ftlBarrelGeom->getCorners(detid);
525  fillPoints(id, cor.begin(), cor.end(), fwRecoGeometry);
526  }
527  // do the endcap
528  for (const auto& detid : m_ftlEndcapGeom->getValidDetIds()) {
529  unsigned int id = insert_id(detid.rawId(), fwRecoGeometry);
530  const auto& cor = m_ftlEndcapGeom->getCorners(detid);
531  fillPoints(id, cor.begin(), cor.end(), fwRecoGeometry);
532  }
533 }
534 
535 unsigned int FWRecoGeometryESProducer::insert_id(unsigned int rawid, FWRecoGeometry& fwRecoGeometry) {
536  ++m_current;
537  fwRecoGeometry.idToName.push_back(FWRecoGeom::Info());
538  fwRecoGeometry.idToName.back().id = rawid;
539 
540  return m_current;
541 }
542 
544  std::vector<GlobalPoint>::const_iterator begin,
545  std::vector<GlobalPoint>::const_iterator end,
546  FWRecoGeometry& fwRecoGeometry) {
547  unsigned int index(0);
548  for (std::vector<GlobalPoint>::const_iterator i = begin; i != end; ++i) {
550  fwRecoGeometry.idToName[id].points[index] = i->x();
551  fwRecoGeometry.idToName[id].points[++index] = i->y();
552  fwRecoGeometry.idToName[id].points[++index] = i->z();
553  ++index;
554  }
555 }
556 
559  const GeomDet* det,
560  FWRecoGeometry& fwRecoGeometry) {
561  // Trapezoidal
562  const Bounds* b = &((det->surface()).bounds());
563  if (const TrapezoidalPlaneBounds* b2 = dynamic_cast<const TrapezoidalPlaneBounds*>(b)) {
564  std::array<const float, 4> const& par = b2->parameters();
565 
566  // These parameters are half-lengths, as in CMSIM/GEANT3
567  fwRecoGeometry.idToName[id].shape[0] = 1;
568  fwRecoGeometry.idToName[id].shape[1] = par[0]; // hBottomEdge
569  fwRecoGeometry.idToName[id].shape[2] = par[1]; // hTopEdge
570  fwRecoGeometry.idToName[id].shape[3] = par[2]; // thickness
571  fwRecoGeometry.idToName[id].shape[4] = par[3]; // apothem
572  }
573  if (const RectangularPlaneBounds* b2 = dynamic_cast<const RectangularPlaneBounds*>(b)) {
574  // Rectangular
575  fwRecoGeometry.idToName[id].shape[0] = 2;
576  fwRecoGeometry.idToName[id].shape[1] = b2->width() * 0.5; // half width
577  fwRecoGeometry.idToName[id].shape[2] = b2->length() * 0.5; // half length
578  fwRecoGeometry.idToName[id].shape[3] = b2->thickness() * 0.5; // half thickness
579  }
580 
581  // Position of the DetUnit's center
582  GlobalPoint pos = det->surface().position();
583  fwRecoGeometry.idToName[id].translation[0] = pos.x();
584  fwRecoGeometry.idToName[id].translation[1] = pos.y();
585  fwRecoGeometry.idToName[id].translation[2] = pos.z();
586 
587  // Add the coeff of the rotation matrix
588  // with a projection on the basis vectors
589  TkRotation<float> detRot = det->surface().rotation();
590  fwRecoGeometry.idToName[id].matrix[0] = detRot.xx();
591  fwRecoGeometry.idToName[id].matrix[1] = detRot.yx();
592  fwRecoGeometry.idToName[id].matrix[2] = detRot.zx();
593  fwRecoGeometry.idToName[id].matrix[3] = detRot.xy();
594  fwRecoGeometry.idToName[id].matrix[4] = detRot.yy();
595  fwRecoGeometry.idToName[id].matrix[5] = detRot.zy();
596  fwRecoGeometry.idToName[id].matrix[6] = detRot.xz();
597  fwRecoGeometry.idToName[id].matrix[7] = detRot.yz();
598  fwRecoGeometry.idToName[id].matrix[8] = detRot.zz();
599 }
600 
602  std::string path = "Geometry/TrackerCommonData/data/";
604  path += "PhaseI/";
607  path += "PhaseII/";
608  }
609  path += "trackerParameters.xml";
611  std::ifstream t(fullPath);
612  std::stringstream buffer;
613  buffer << t.rdbuf();
614  fwRecoGeometry.trackerTopologyXML = buffer.str();
615 }
TrackerGeometry::idToDet
const TrackerGeomDet * idToDet(DetId) const override
Definition: TrackerGeometry.cc:193
FWTGeoRecoGeometry.h
DTGeometry
Definition: DTGeometry.h:28
ME0Geometry::etaPartitions
const std::vector< ME0EtaPartition const * > & etaPartitions() const
Return a vector of all ME0 eta partitions.
Definition: ME0Geometry.cc:33
RPCRoll
Definition: RPCRoll.h:12
TkRotation< float >
FastTimeGeometry::getValidDetIds
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)
Definition: FastTimeGeometry.h:71
mps_fire.i
i
Definition: mps_fire.py:355
edm::ESInputTag
Definition: ESInputTag.h:87
TkRotation::zy
T zy() const
Definition: extTkRotation.h:258
FWRecoGeometryESProducer::addTOBGeometry
void addTOBGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:424
StripGeomDetUnit.h
FWRecoGeometryESProducer::m_ftlEndcapGeomToken
edm::ESGetToken< FastTimeGeometry, IdealGeometryRecord > m_ftlEndcapGeomToken
Definition: FWRecoGeometryESProducer.h:63
TrackerGeometry.h
GeomDet
Definition: GeomDet.h:27
FWRecoGeometryESProducer::m_caloGeomToken
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > m_caloGeomToken
Definition: FWRecoGeometryESProducer.h:64
StripGeomDetType.h
FWRecoGeometryRecord
Definition: FWRecoGeometryRecord.h:9
FWRecoGeometryESProducer::m_timing
bool m_timing
Definition: FWRecoGeometryESProducer.h:75
PixelTopology.h
CSCWireTopology::wireAngle
float wireAngle() const override
Definition: CSCWireTopology.h:70
ForwardEmpty
Definition: ForwardSubdetector.h:5
FWRecoGeometryESProducer::ADD_PIXEL_TOPOLOGY
void ADD_PIXEL_TOPOLOGY(unsigned int rawid, const GeomDet *detUnit, FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:40
RectangularPixelTopology.h
vid
Definition: VIDCutFlowResult.h:25
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
FWRecoGeometry::idToName
FWRecoGeom::InfoMap idToName
Definition: FWRecoGeometry.h:14
FWRecoGeometryESProducer::m_current
unsigned int m_current
Definition: FWRecoGeometryESProducer.h:71
contentValuesFiles.fullPath
fullPath
Definition: contentValuesFiles.py:64
CaloGeometryRecord
Definition: CaloGeometryRecord.h:30
edm
HLT enums.
Definition: AlignableModifier.h:19
FWRecoGeometry::trackerTopologyXML
std::string trackerTopologyXML
Definition: FWRecoGeometry.h:16
FWRecoGeometryESProducer::m_trackerGeom
const TrackerGeometry * m_trackerGeom
Definition: FWRecoGeometryESProducer.h:69
ME0Geometry
Definition: ME0Geometry.h:12
RPCDetId
Definition: RPCDetId.h:16
pos
Definition: PixelAliasList.h:18
FWRecoGeometryESProducer::fillShapeAndPlacement
void fillShapeAndPlacement(unsigned int id, const GeomDet *det, FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:558
DTChamber
Definition: DTChamber.h:24
FWRecoGeometryESProducer::addFTLGeometry
void addFTLGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:520
FWRecoGeometryESProducer::m_caloGeom
const CaloGeometry * m_caloGeom
Definition: FWRecoGeometryESProducer.h:66
PixelTopology::pitch
virtual std::pair< float, float > pitch() const =0
edm::ESProducer::setWhatProduced
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:138
CSCRadialStripTopology::angularWidth
float angularWidth() const override
Definition: CSCRadialStripTopology.h:159
GlobalPosition_Frontier_DevDB_cff.record
record
Definition: GlobalPosition_Frontier_DevDB_cff.py:10
CaloGeometry::getSubdetectorGeometry
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
Bounds
Definition: Bounds.h:18
cms::cuda::assert
assert(be >=bs)
GeomDetEnumerators::P2OTB
Definition: GeomDetEnumerators.h:23
FWRecoGeometryESProducer::produce
std::unique_ptr< FWRecoGeometry > produce(const FWRecoGeometryRecord &)
Definition: FWRecoGeometryESProducer.cc:119
DTTopology::channels
int channels() const
Returns the number of wires in the layer.
Definition: DTTopology.h:76
CSCLayer
Definition: CSCLayer.h:24
StripTopology.h
FWRecoGeom::Info
Definition: FWRecoGeom.h:12
EZArrayFL< GlobalPoint >
b2
static constexpr float b2
Definition: L1EGammaCrystalsEmulatorProducer.cc:82
parallelization.uint
uint
Definition: parallelization.py:124
DTTopology::cellWidth
float cellWidth() const
Returns the cell width.
Definition: DTTopology.h:69
EZArrayFL::end
const_iterator end() const
Definition: EZArrayFL.h:53
RectangularStripTopology.h
CSCRadialStripTopology::centreToIntersection
float centreToIntersection() const override
Definition: CSCRadialStripTopology.h:181
end
#define end
Definition: vmac.h:39
FWRecoGeometryESProducer::m_calo
bool m_calo
Definition: FWRecoGeometryESProducer.h:74
FileInPath.h
edmScanValgrind.buffer
buffer
Definition: edmScanValgrind.py:171
CSCRadialStripTopology::yCentreOfStripPlane
float yCentreOfStripPlane() const override
Definition: CSCRadialStripTopology.h:223
TrackerGeometry::idToDetUnit
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: TrackerGeometry.cc:183
DTTopology
Definition: DTTopology.h:28
StripTopology::pitch
virtual float pitch() const =0
CSCGeometry
Definition: CSCGeometry.h:24
TrackerGeometry::detsPXB
const DetContainer & detsPXB() const
Definition: TrackerGeometry.cc:171
PixelTopology::isItBigPixelInX
virtual bool isItBigPixelInX(int ixbin) const =0
DetId
Definition: DetId.h:17
edm::FileInPath
Definition: FileInPath.h:64
FWRecoGeometryESProducer::m_trackingGeomToken
edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > m_trackingGeomToken
Definition: FWRecoGeometryESProducer.h:61
DetId::HGCalHSi
Definition: DetId.h:33
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
DetId::HGCalEE
Definition: DetId.h:32
FWRecoGeometryESProducer::m_tracker
bool m_tracker
Definition: FWRecoGeometryESProducer.h:72
TrackerGeometry::detsTOB
const DetContainer & detsTOB() const
Definition: TrackerGeometry.cc:179
FastTimeGeometry::getCorners
CornersVec getCorners(const DetId &id) const
Returns the corner points of this cell's volume.
Definition: FastTimeGeometry.cc:97
FWRecoGeometryESProducer::insert_id
unsigned int insert_id(unsigned int id, FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:535
FWRecoGeometryESProducer::addTIDGeometry
void addTIDGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:442
DTTopology::firstChannel
int firstChannel() const
Returns the wire number of the first wire.
Definition: DTTopology.h:79
TrapezoidalPlaneBounds.h
GeomDetEnumerators::P1PXEC
Definition: GeomDetEnumerators.h:26
DTGeometry::layers
const std::vector< const DTLayer * > & layers() const
Return a vector of all SuperLayer.
Definition: DTGeometry.cc:88
TkRotation::xz
T xz() const
Definition: extTkRotation.h:253
DTGeometry::chambers
const std::vector< const DTChamber * > & chambers() const
Return a vector of all Chamber.
Definition: DTGeometry.cc:84
PixelGeomDetUnit
Definition: PixelGeomDetUnit.h:15
ADD_SISTRIP_TOPOLOGY
#define ADD_SISTRIP_TOPOLOGY(rawid, detUnit)
Definition: FWRecoGeometryESProducer.cc:62
CSCLayerGeometry::topology
const CSCStripTopology * topology() const
Definition: CSCLayerGeometry.h:272
FWRecoGeometryESProducer::addTIBGeometry
void addTIBGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:406
TrackerGeometry::detsPXF
const DetContainer & detsPXF() const
Definition: TrackerGeometry.cc:173
CSCChamber
Definition: CSCChamber.h:22
RectangularPlaneBounds.h
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
FWRecoGeometryESProducer::addRPCGeometry
void addRPCGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:248
CSCLayer::geometry
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:44
GeomDetEnumerators::P2OTEC
Definition: GeomDetEnumerators.h:24
Point3DBase< float, LocalTag >
FWRecoGeometryESProducer::m_ftlBarrelGeomToken
edm::ESGetToken< FastTimeGeometry, IdealGeometryRecord > m_ftlBarrelGeomToken
Definition: FWRecoGeometryESProducer.h:62
OrderedSet.t
t
Definition: OrderedSet.py:90
HGCalGeometry
Definition: HGCalGeometry.h:30
PixelTopology
Definition: PixelTopology.h:10
b
double b
Definition: hdecay.h:118
TrackerGeometry::isThere
bool isThere(GeomDetEnumerators::SubDetector subdet) const
Definition: TrackerGeometry.cc:219
RPCRoll::specificTopology
const StripTopology & specificTopology() const
Definition: RPCRoll.cc:49
TrackerGeometry::detsTID
const DetContainer & detsTID() const
Definition: TrackerGeometry.cc:177
FWRecoGeometryESProducer::~FWRecoGeometryESProducer
~FWRecoGeometryESProducer(void) override
Definition: FWRecoGeometryESProducer.cc:117
DTLayer.h
CaloGeometryRecord.h
TkRotation::yx
T yx() const
Definition: extTkRotation.h:254
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DTGeometry.h
DTTopology::cellLenght
float cellLenght() const
Definition: DTTopology.h:74
FWRecoGeometryESProducer::addME0Geometry
void addME0Geometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:337
FWRecoGeometryESProducer::addCSCGeometry
void addCSCGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:164
cppFunctionSkipper.exception
exception
Definition: cppFunctionSkipper.py:10
GeomDetEnumerators::P1PXB
Definition: GeomDetEnumerators.h:25
GeomDet::geographicalId
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
FWRecoGeometryESProducer::addGEMGeometry
void addGEMGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:277
StripTopology::stripLength
virtual float stripLength() const =0
HGCalGeometry.h
edm::ParameterSet
Definition: ParameterSet.h:36
GEMGeometry::chambers
const std::vector< const GEMChamber * > & chambers() const
Return a vector of all GEM chambers.
Definition: GEMGeometry.cc:38
edm::LogError
Definition: MessageLogger.h:183
DetId::Tracker
Definition: DetId.h:25
TkRotation::xx
T xx() const
Definition: extTkRotation.h:251
FWRecoGeometryESProducer::addPixelForwardGeometry
void addPixelForwardGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:388
CaloGeometry::getGeometry
std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id.
Definition: CaloGeometry.cc:60
beam_dqm_sourceclient-live_cfg.cerr
cerr
Definition: beam_dqm_sourceclient-live_cfg.py:17
PixelGeomDetUnit::specificTopology
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
Definition: PixelGeomDetUnit.cc:17
GEMDetId
Definition: GEMDetId.h:17
DTLayer::id
DTLayerId id() const
Return the DetId of this SL.
Definition: DTLayer.cc:39
EZArrayFL::begin
const_iterator begin() const
Definition: EZArrayFL.h:52
CSCRadialStripTopology::yAxisOrientation
float yAxisOrientation() const override
Definition: CSCRadialStripTopology.h:218
TkRotation::xy
T xy() const
Definition: extTkRotation.h:252
GlobalTrackingGeometry::slaveGeometry
const TrackingGeometry * slaveGeometry(DetId id) const
Return the pointer to the actual geometry for a given DetId.
Definition: GlobalTrackingGeometry.cc:54
TrackerGeometry::detsTIB
const DetContainer & detsTIB() const
Definition: TrackerGeometry.cc:175
DetId::Detector
Detector
Definition: DetId.h:24
TkRotation::zz
T zz() const
Definition: extTkRotation.h:259
FWRecoGeometryESProducer::FWRecoGeometryESProducer
FWRecoGeometryESProducer(const edm::ParameterSet &)
Definition: FWRecoGeometryESProducer.cc:99
TrapezoidalPlaneBounds
Definition: TrapezoidalPlaneBounds.h:15
get
#define get
cc
DTLayer
Definition: DTLayer.h:25
StripTopology::nstrips
virtual int nstrips() const =0
DTTopology::lastChannel
int lastChannel() const
Returns the wire number of the last wire.
Definition: DTTopology.h:81
DTTopology::cellHeight
float cellHeight() const
Returns the cell height.
Definition: DTTopology.h:71
FWRecoGeometryESProducer::addDTGeometry
void addDTGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:204
TkRotation::yz
T yz() const
Definition: extTkRotation.h:256
CSCStripTopology
Definition: CSCStripTopology.h:28
ME0Geometry.h
GloballyPositioned::position
const PositionType & position() const
Definition: GloballyPositioned.h:36
FWRecoGeometryRecord.h
CaloCellGeometry.h
OffsetRadialStripTopology::stripOffset
virtual float stripOffset(void) const
Definition: OffsetRadialStripTopology.h:35
GEMGeometry.h
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
RectangularPlaneBounds
Definition: RectangularPlaneBounds.h:12
CaloGeometry::getValidDetIds
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:75
TrapezoidalStripTopology.h
FWTGeoRecoGeometry::maxPoints_
static const int maxPoints_
Definition: FWTGeoRecoGeometry.h:19
CSCLayerGeometry::wireTopology
const CSCWireTopology * wireTopology() const
Definition: CSCLayerGeometry.h:282
FWRecoGeometryESProducer::addCaloGeometry
void addCaloGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:478
CSCLayer.h
TrackerGeometry::detsTEC
const DetContainer & detsTEC() const
Definition: TrackerGeometry.cc:181
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
DetId::HGCalHSc
Definition: DetId.h:34
TkRotation::yy
T yy() const
Definition: extTkRotation.h:255
FWRecoGeometryESProducer::addTECGeometry
void addTECGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:460
FWRecoGeometryESProducer::writeTrackerParametersXML
void writeTrackerParametersXML(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:601
CaloGeometry.h
PixelTopology::localY
virtual float localY(float mpY) const =0
BoundPlane
FWRecoGeometryESProducer::m_trackingGeom
const GlobalTrackingGeometry * m_trackingGeom
Definition: FWRecoGeometryESProducer.h:65
CSCWireTopology
Definition: CSCWireTopology.h:18
PixelGeomDetUnit.h
FWRecoGeometryESProducer::addPixelBarrelGeometry
void addPixelBarrelGeometry(FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:370
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
FWRecoGeometryESProducer::m_ftlBarrelGeom
const FastTimeGeometry * m_ftlBarrelGeom
Definition: FWRecoGeometryESProducer.h:67
CSCRadialStripTopology::phiOfOneEdge
float phiOfOneEdge() const override
Definition: CSCRadialStripTopology.h:202
FastTimeGeometry.h
CSCGeometry::chambers
const ChamberContainer & chambers() const
Return a vector of all chambers.
Definition: CSCGeometry.cc:96
GEMGeometry::etaPartitions
const std::vector< const GEMEtaPartition * > & etaPartitions() const
Return a vector of all GEM eta partitions.
Definition: GEMGeometry.cc:40
FWRecoGeometry::extraDet
TObjArray extraDet
Definition: FWRecoGeometry.h:15
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
DTLayer::specificTopology
const DTTopology & specificTopology() const
Definition: DTLayer.cc:37
PixelTopology::localX
virtual float localX(float mpX) const =0
DTChamber.h
GEMGeometry
Definition: GEMGeometry.h:24
GeomDetEnumerators::P2PXB
Definition: GeomDetEnumerators.h:27
RPCGeometry
Definition: RPCGeometry.h:20
cms::Exception
Definition: Exception.h:70
DetId::Muon
Definition: DetId.h:26
castor_dqm_sourceclient_file_cfg.path
path
Definition: castor_dqm_sourceclient_file_cfg.py:37
RPCGeometry::rolls
const std::vector< const RPCRoll * > & rolls() const
Return a vector of all RPC rolls.
Definition: RPCGeometry.cc:44
ParameterSet.h
FWRecoGeometry.h
FWRecoGeometryESProducer::fillPoints
void fillPoints(unsigned int id, std::vector< GlobalPoint >::const_iterator begin, std::vector< GlobalPoint >::const_iterator end, FWRecoGeometry &)
Definition: FWRecoGeometryESProducer.cc:543
GEMGeometry::superChambers
const std::vector< const GEMSuperChamber * > & superChambers() const
Return a vector of all GEM super chambers.
Definition: GEMGeometry.cc:36
GloballyPositioned::rotation
const RotationType & rotation() const
Definition: GloballyPositioned.h:38
FWRecoGeometryESProducer::m_ftlEndcapGeom
const FastTimeGeometry * m_ftlEndcapGeom
Definition: FWRecoGeometryESProducer.h:68
DetId::Forward
Definition: DetId.h:30
CSCChamber.h
FWRecoGeometryESProducer.h
GlobalTrackingGeometry.h
TkRotation::zx
T zx() const
Definition: extTkRotation.h:257
FWRecoGeometry
Definition: FWRecoGeometry.h:8
StripTopology
Definition: StripTopology.h:11
CSCWireTopology::wireSpacing
double wireSpacing() const
Definition: CSCWireTopology.h:59
RPCGeometry.h
begin
#define begin
Definition: vmac.h:32
FWRecoGeometryESProducer::m_muon
bool m_muon
Definition: FWRecoGeometryESProducer.h:73
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
CSCGeometry.h
GeomDetEnumerators::P2PXEC
Definition: GeomDetEnumerators.h:28
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37