CMS 3D CMS Logo

EMTFSubsystemCollector.cc
Go to the documentation of this file.
5 
6 #include "Geometry/RPCGeometry/interface/RPCGeometry.h" // needed to handle RPCRecHit
7 
8 #include "helper.h" // adjacent_cluster
9 
10 // _____________________________________________________________________________
11 // Specialized for DT
12 template <>
14  const GeometryTranslator* tp_geom,
15  const edm::Event& iEvent,
16  const edm::EDGetToken& token1,
17  const edm::EDGetToken& token2,
20  iEvent.getByToken(token1, phiContainer);
21 
23  iEvent.getByToken(token2, thetaContainer);
24 
25  TriggerPrimitiveCollection muon_primitives;
26 
27  // Adapted from L1Trigger/L1TMuonBarrel/src/L1TMuonBarrelKalmanStubProcessor.cc
28  constexpr int minPhiQuality = 0;
29  constexpr int minBX = -3;
30  constexpr int maxBX = 3;
31 
32  for (int bx = minBX; bx <= maxBX; bx++) {
33  for (int wheel = -2; wheel <= 2; wheel++) {
34  for (int sector = 0; sector < 12; sector++) {
35  for (int station = 1; station < 5; station++) {
36  if (wheel == -1 || wheel == 0 || wheel == 1)
37  continue; // do not include wheels -1, 0, +1
38  if (station == 4)
39  continue; // do not include MB4
40 
41  // According to Michalis, in legacy BMTF, the second stub was coming as BXNUM=-1.
42  // This is a code convention now, but you need bx-1 to get the proper second stub.
43  emtf::DTTag::theta_digi_type const* theta_segm = thetaContainer->chThetaSegm(wheel, station, sector, bx);
44  emtf::DTTag::digi_type const* phi_segm_high = phiContainer->chPhiSegm1(wheel, station, sector, bx);
45  emtf::DTTag::digi_type const* phi_segm_low = phiContainer->chPhiSegm2(wheel, station, sector, bx - 1);
46 
47  // Find theta BTI group(s)
48  bool has_theta_segm = false;
49  int bti_group1 = -1;
50  int bti_group2 = -1;
51 
52  // Case with theta segment
53  if (theta_segm != nullptr) {
54  has_theta_segm = true;
55 
56  for (unsigned int i = 0; i < 7; ++i) {
57  if (theta_segm->position(i) != 0) {
58  if (bti_group1 < 0) {
59  bti_group1 = i;
60  bti_group2 = i;
61  } else {
62  bti_group2 = i;
63  }
64  }
65  }
66  emtf_assert(bti_group1 != -1 && bti_group2 != -1);
67  }
68 
69  // 1st phi segment
70  if (phi_segm_high != nullptr) {
71  if (phi_segm_high->code() >= minPhiQuality) {
72  DTChamberId detid(phi_segm_high->whNum(), phi_segm_high->stNum(), phi_segm_high->scNum() + 1);
73  if (has_theta_segm) {
74  muon_primitives.emplace_back(detid, *phi_segm_high, *theta_segm, bti_group1);
75  } else {
76  muon_primitives.emplace_back(detid, *phi_segm_high, 1);
77  }
78  }
79  }
80 
81  // 2nd phi segment
82  if (phi_segm_low != nullptr) {
83  if (phi_segm_low->code() >= minPhiQuality) {
84  DTChamberId detid(phi_segm_low->whNum(), phi_segm_low->stNum(), phi_segm_low->scNum() + 1);
85  if (has_theta_segm) {
86  muon_primitives.emplace_back(detid, *phi_segm_low, *theta_segm, bti_group2);
87  } else {
88  muon_primitives.emplace_back(detid, *phi_segm_low, 2);
89  }
90  }
91  }
92 
93  // Duplicate DT muon primitives, if more than one theta segment, but only one phi segment
94  if (phi_segm_high != nullptr && phi_segm_low == nullptr && bti_group1 != bti_group2) {
95  DTChamberId detid(phi_segm_high->whNum(), phi_segm_high->stNum(), phi_segm_high->scNum() + 1);
96  muon_primitives.emplace_back(detid, *phi_segm_high, *theta_segm, bti_group2);
97  }
98 
99  } // end loop over station
100  } // end loop over sector
101  } // end loop over wheel
102  } // end loop over bx
103 
104  // Remove duplicates using erase-remove idiom,
105  // assuming the vector is already sorted
106  muon_primitives.erase(std::unique(muon_primitives.begin(), muon_primitives.end()), muon_primitives.end());
107  std::copy(muon_primitives.begin(), muon_primitives.end(), std::back_inserter(out));
108  return;
109 }
110 
111 // _____________________________________________________________________________
112 // Specialized for CSC
113 template <>
115  const GeometryTranslator* tp_geom,
116  const edm::Event& iEvent,
117  const edm::EDGetToken& token,
120  iEvent.getByToken(token, cscDigis);
121 
122  auto chamber = cscDigis->begin();
123  auto chend = cscDigis->end();
124  for (; chamber != chend; ++chamber) {
125  auto digi = (*chamber).second.first;
126  auto dend = (*chamber).second.second;
127  for (; digi != dend; ++digi) {
128  out.emplace_back((*chamber).first, *digi);
129  }
130  }
131  return;
132 }
133 
134 // _____________________________________________________________________________
135 // Specialized for RPC
136 template <>
138  const GeometryTranslator* tp_geom,
139  const edm::Event& iEvent,
140  const edm::EDGetToken& token,
143  iEvent.getByToken(token, rpcDigis);
144 
145  TriggerPrimitiveCollection muon_primitives;
146 
147  auto chamber = rpcDigis->begin();
148  auto chend = rpcDigis->end();
149  for (; chamber != chend; ++chamber) {
150  auto digi = (*chamber).second.first;
151  auto dend = (*chamber).second.second;
152  for (; digi != dend; ++digi) {
153  if ((*chamber).first.region() != 0) { // 0 is barrel
154  if ((*chamber).first.station() <= 2 && (*chamber).first.ring() == 3)
155  continue; // do not include RE1/3, RE2/3
156  if ((*chamber).first.station() >= 3 && (*chamber).first.ring() == 1)
157  continue; // do not include RE3/1, RE4/1 (iRPC)
158 
159  muon_primitives.emplace_back((*chamber).first, *digi);
160  }
161  }
162  }
163 
164  // Cluster the RPC digis
165  TriggerPrimitiveCollection clus_muon_primitives;
166  cluster_rpc(muon_primitives, clus_muon_primitives);
167 
168  // Output
169  std::copy(clus_muon_primitives.begin(), clus_muon_primitives.end(), std::back_inserter(out));
170  return;
171 }
172 
173 // Specialized for RPC (using RecHits)
174 template <>
176  const GeometryTranslator* tp_geom,
177  const edm::Event& iEvent,
178  const edm::EDGetToken& token1,
179  const edm::EDGetToken& token2,
181  constexpr int maxClusterSize = 3;
182 
183  //edm::Handle<RPCTag::digi_collection> rpcDigis;
184  //iEvent.getByToken(token1, rpcDigis);
185 
187  iEvent.getByToken(token2, rpcRecHits);
188 
189  auto rechit = rpcRecHits->begin();
190  auto rhend = rpcRecHits->end();
191  for (; rechit != rhend; ++rechit) {
192  const RPCDetId& detid = rechit->rpcId();
193  const RPCRoll* roll = dynamic_cast<const RPCRoll*>(tp_geom->getRPCGeometry().roll(detid));
194  if (roll == nullptr)
195  continue;
196 
197  if (detid.region() != 0) { // 0 is barrel
198  if (detid.station() <= 2 && detid.ring() == 3)
199  continue; // do not include RE1/3, RE2/3
200  if (detid.station() >= 3 && detid.ring() == 1)
201  continue; // do not include RE3/1, RE4/1 (iRPC)
202 
203  if (rechit->clusterSize() <= maxClusterSize) {
204  out.emplace_back(detid, *rechit);
205  }
206  }
207  }
208  return;
209 }
210 
211 // _____________________________________________________________________________
212 // Specialized for iRPC
213 template <>
215  const GeometryTranslator* tp_geom,
216  const edm::Event& iEvent,
217  const edm::EDGetToken& token,
220  iEvent.getByToken(token, irpcDigis);
221 
222  TriggerPrimitiveCollection muon_primitives;
223 
224  auto chamber = irpcDigis->begin();
225  auto chend = irpcDigis->end();
226  for (; chamber != chend; ++chamber) {
227  auto digi = (*chamber).second.first;
228  auto dend = (*chamber).second.second;
229  for (; digi != dend; ++digi) {
230  if ((*chamber).first.region() != 0) { // 0 is barrel
231  if (!((*chamber).first.station() >= 3 && (*chamber).first.ring() == 1))
232  continue; // only RE3/1, RE4/1 (iRPC)
233 
234  muon_primitives.emplace_back((*chamber).first, *digi);
235  }
236  }
237  }
238 
239  // Cluster the iRPC digis
240  TriggerPrimitiveCollection clus_muon_primitives;
241  cluster_rpc(muon_primitives, clus_muon_primitives);
242 
243  // Output
244  std::copy(clus_muon_primitives.begin(), clus_muon_primitives.end(), std::back_inserter(out));
245  return;
246 }
247 
248 // Specialized for iRPC (using RecHits)
249 template <>
251  const GeometryTranslator* tp_geom,
252  const edm::Event& iEvent,
253  const edm::EDGetToken& token1,
254  const edm::EDGetToken& token2,
256  constexpr int maxClusterSize = 6;
257 
258  //edm::Handle<emtf::IRPCTag::digi_collection> irpcDigis;
259  //iEvent.getByToken(token1, irpcDigis);
260 
262  iEvent.getByToken(token2, irpcRecHits);
263 
264  auto rechit = irpcRecHits->begin();
265  auto rhend = irpcRecHits->end();
266  for (; rechit != rhend; ++rechit) {
267  const RPCDetId& detid = rechit->rpcId();
268  const RPCRoll* roll = dynamic_cast<const RPCRoll*>(tp_geom->getRPCGeometry().roll(detid));
269  if (roll == nullptr)
270  continue;
271 
272  if (detid.region() != 0) { // 0 is barrel
273  if (!(detid.station() >= 3 && detid.ring() == 1))
274  continue; // only RE3/1, RE4/1 (iRPC)
275 
276  if (rechit->clusterSize() <= maxClusterSize) {
277  out.emplace_back(detid, *rechit);
278  }
279  }
280  }
281  return;
282 }
283 
284 // _____________________________________________________________________________
285 // Specialized for CPPF
286 template <>
288  const GeometryTranslator* tp_geom,
289  const edm::Event& iEvent,
290  const edm::EDGetToken& token,
293  iEvent.getByToken(token, cppfDigis);
294 
295  for (const auto& digi : *cppfDigis) {
296  out.emplace_back(digi.rpcId(), digi);
297  }
298  return;
299 }
300 
301 // _____________________________________________________________________________
302 // Specialized for GEM
303 template <>
305  const GeometryTranslator* tp_geom,
306  const edm::Event& iEvent,
307  const edm::EDGetToken& token,
310  iEvent.getByToken(token, gemDigis);
311 
312  TriggerPrimitiveCollection muon_primitives;
313 
314  auto chamber = gemDigis->begin();
315  auto chend = gemDigis->end();
316  for (; chamber != chend; ++chamber) {
317  auto digi = (*chamber).second.first;
318  auto dend = (*chamber).second.second;
319  for (; digi != dend; ++digi) {
320  auto detid = (*chamber).first;
321  // temporarily ignore 16-partition GE2/1 clusters, because the EMTF
322  // is not yet adapted to handle these objects
323  if (detid.isGE21() and digi->nPartitions() == GEMPadDigi::GE21SplitStrip)
324  continue;
325  muon_primitives.emplace_back((*chamber).first, *digi);
326  }
327  }
328 
329  // Make GEM coincidence pads
330  TriggerPrimitiveCollection copad_muon_primitives;
331  make_copad_gem(muon_primitives, copad_muon_primitives);
332 
333  // Output
334  std::copy(copad_muon_primitives.begin(), copad_muon_primitives.end(), std::back_inserter(out));
335  return;
336 }
337 
338 // _____________________________________________________________________________
339 // Specialized for ME0
340 template <>
342  const GeometryTranslator* tp_geom,
343  const edm::Event& iEvent,
344  const edm::EDGetToken& token,
347  iEvent.getByToken(token, me0Digis);
348 
349  auto chamber = me0Digis->begin();
350  auto chend = me0Digis->end();
351  for (; chamber != chend; ++chamber) {
352  auto digi = (*chamber).second.first;
353  auto dend = (*chamber).second.second;
354  for (; digi != dend; ++digi) {
355  out.emplace_back((*chamber).first, *digi);
356  }
357  }
358  return;
359 }
360 
361 // _____________________________________________________________________________
362 // RPC functions
364  TriggerPrimitiveCollection& clus_muon_primitives) const {
365  // Define operator to select RPC digis
366  struct {
368  bool operator()(const value_type& x) const { return (x.subsystem() == L1TMuon::kRPC); }
369  } rpc_digi_select;
370 
371  // Define operator to sort the RPC digis prior to clustering.
372  // Use rawId, bx and strip as the sorting id. RPC rawId fully specifies
373  // sector, subsector, endcap, station, ring, layer, roll. Strip is used as
374  // the least significant sorting id.
375  struct {
377  bool operator()(const value_type& lhs, const value_type& rhs) const {
378  bool cmp = (std::make_pair(std::make_pair(lhs.rawId(), lhs.getRPCData().bx), lhs.getRPCData().strip) <
379  std::make_pair(std::make_pair(rhs.rawId(), rhs.getRPCData().bx), rhs.getRPCData().strip));
380  return cmp;
381  }
382  } rpc_digi_less;
383 
384  struct {
386  bool operator()(const value_type& lhs, const value_type& rhs) const {
387  bool cmp = (std::make_pair(std::make_pair(lhs.rawId(), lhs.getRPCData().bx), lhs.getRPCData().strip) ==
388  std::make_pair(std::make_pair(rhs.rawId(), rhs.getRPCData().bx), rhs.getRPCData().strip));
389  return cmp;
390  }
391  } rpc_digi_equal;
392 
393  // Define operators for the nearest-neighbor clustering algorithm.
394  // If two digis are next to each other (check strip_hi on the 'left', and
395  // strip_low on the 'right'), cluster them (increment strip_hi on the 'left')
396  struct {
398  bool operator()(const value_type& lhs, const value_type& rhs) const {
399  bool cmp = ((lhs.rawId() == rhs.rawId()) && (lhs.getRPCData().bx == rhs.getRPCData().bx) &&
400  (lhs.getRPCData().strip_hi + 1 == rhs.getRPCData().strip_low));
401  return cmp;
402  }
403  } rpc_digi_adjacent;
404 
405  struct {
407  void operator()(value_type& lhs, value_type& rhs) { // pass by reference
408  lhs.accessRPCData().strip_hi += 1;
409  }
410  } rpc_digi_cluster;
411 
412  // ___________________________________________________________________________
413  // Do clustering using C++ <algorithm> functions
414 
415  // 1. Select RPC digis
416  clus_muon_primitives.clear();
417  std::copy_if(
418  muon_primitives.begin(), muon_primitives.end(), std::back_inserter(clus_muon_primitives), rpc_digi_select);
419 
420  // 2. Sort
421  std::stable_sort(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_less);
422 
423  // 3. Remove duplicates
424  clus_muon_primitives.erase(std::unique(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_equal),
425  clus_muon_primitives.end());
426 
427  // 4. Cluster adjacent digis
428  clus_muon_primitives.erase(
429  adjacent_cluster(clus_muon_primitives.begin(), clus_muon_primitives.end(), rpc_digi_adjacent, rpc_digi_cluster),
430  clus_muon_primitives.end());
431 }
432 
433 // _____________________________________________________________________________
434 // GEM functions
436  TriggerPrimitiveCollection& copad_muon_primitives) const {
437  // Use the inner layer (layer 1) hit coordinates as output, and the outer
438  // layer (layer 2) as coincidence
439 
440  // Adapted from L1Trigger/CSCTriggerPrimitives/src/GEMCoPadProcessor.cc
441  constexpr unsigned int maxDeltaBX = 1;
442  constexpr unsigned int maxDeltaRoll = 1;
443  constexpr unsigned int maxDeltaPadGE11 = 3; // it was 2
444  constexpr unsigned int maxDeltaPadGE21 = 2;
445 
446  // Make sure that the difference is calculated using signed integer, and
447  // output the absolute difference (as unsigned integer)
448  auto calculate_delta = [](int a, int b) -> unsigned int { return std::abs(a - b); };
449 
450  // Create maps of GEM pads (key = detid), split by layer
451  std::map<uint32_t, TriggerPrimitiveCollection> in_pads_layer1, in_pads_layer2;
452 
453  auto tp_it = muon_primitives.begin();
454  auto tp_end = muon_primitives.end();
455 
456  for (; tp_it != tp_end; ++tp_it) {
457  GEMDetId detid = tp_it->detId<GEMDetId>();
458  emtf_assert(detid.layer() == 1 || detid.layer() == 2);
459  emtf_assert(1 <= detid.roll() && detid.roll() <= 8);
460  uint32_t layer = detid.layer();
461 
462  // Remove layer number and roll number from detid
463  detid = GEMDetId(detid.region(), detid.ring(), detid.station(), 0, detid.chamber(), 0);
464 
465  if (layer == 1) {
466  in_pads_layer1[detid.rawId()].push_back(*tp_it);
467  } else {
468  in_pads_layer2[detid.rawId()].push_back(*tp_it);
469  }
470  }
471 
472  // Build coincidences
473  copad_muon_primitives.clear();
474 
475  auto map_tp_it = in_pads_layer1.begin();
476  auto map_tp_end = in_pads_layer1.end();
477 
478  for (; map_tp_it != map_tp_end; ++map_tp_it) {
479  const GEMDetId& detid = map_tp_it->first;
480  const TriggerPrimitiveCollection& pads = map_tp_it->second;
481 
482  // find all corresponding ids with layer 2
483  auto found = in_pads_layer2.find(detid);
484 
485  // empty range = no possible coincidence pads
486  if (found == in_pads_layer2.end())
487  continue;
488 
489  // now let's correlate the pads in two layers of this partition
490  const TriggerPrimitiveCollection& co_pads = found->second;
491  for (auto p = pads.begin(); p != pads.end(); ++p) {
492  bool has_copad = false;
493  int bend = 999999;
494 
495  for (auto co_p = co_pads.begin(); co_p != co_pads.end(); ++co_p) {
496  unsigned int deltaPad = calculate_delta(p->getGEMData().pad, co_p->getGEMData().pad);
497  unsigned int deltaBX = calculate_delta(p->getGEMData().bx, co_p->getGEMData().bx);
498  unsigned int deltaRoll = calculate_delta(p->detId<GEMDetId>().roll(), co_p->detId<GEMDetId>().roll());
499 
500  // check the match in pad
501  if ((detid.station() == 1 && deltaPad > maxDeltaPadGE11) ||
502  (detid.station() == 2 && deltaPad > maxDeltaPadGE21))
503  continue;
504 
505  // check the match in BX
506  if (deltaBX > maxDeltaBX)
507  continue;
508 
509  // check the match in roll
510  if (deltaRoll > maxDeltaRoll)
511  continue;
512 
513  has_copad = true;
514 
515  // recover the bend sign
516  if (static_cast<unsigned int>(std::abs(bend)) > deltaPad) {
517  if (co_p->getGEMData().pad >= p->getGEMData().pad)
518  bend = deltaPad;
519  else
520  bend = -deltaPad;
521  }
522  } // end loop over co_pads
523 
524  // Need to flip the bend sign depending on the parity
525  bool isEven = (detid.chamber() % 2 == 0);
526  if (!isEven) {
527  bend = -bend;
528  }
529 
530  // make a new coincidence pad digi
531  if (has_copad) {
532  copad_muon_primitives.push_back(*p);
533  }
534  } // end loop over pads
535  } // end loop over in_pads_layer1
536 }
RPCRoll
Definition: RPCRoll.h:12
EMTFSubsystemCollector::extractPrimitives
void extractPrimitives(T tag, const GeometryTranslator *tp_geom, const edm::Event &iEvent, const edm::EDGetToken &token, TriggerPrimitiveCollection &out) const
Handle.h
simKBmtfStubs_cfi.minBX
minBX
Definition: simKBmtfStubs_cfi.py:9
emtf::CSCTag
Definition: EMTFSubsystemTag.h:31
mps_fire.i
i
Definition: mps_fire.py:428
L1MuDTChambThDigi::position
int position(const int i) const
Definition: L1MuDTChambThDigi.cc:90
RPCDetId::station
int station() const
Definition: RPCDetId.h:78
RPCDetId::region
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:53
GEMDetId::ring
constexpr int ring() const
Definition: GEMDetId.h:173
L1MuDTChambPhDigi::stNum
int stNum() const
Definition: L1MuDTChambPhDigi.cc:72
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
GEMDetId::layer
constexpr int layer() const
Definition: GEMDetId.h:187
L1MuDTChambPhContainer::chPhiSegm1
L1MuDTChambPhDigi const * chPhiSegm1(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:67
emtf::GEMTag
Definition: EMTFSubsystemTag.h:57
GEMDetId::region
constexpr int region() const
Definition: GEMDetId.h:168
relativeConstraints.station
station
Definition: relativeConstraints.py:67
emtf::CPPFTag
Definition: EMTFSubsystemTag.h:52
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
RPCDetId
Definition: RPCDetId.h:16
L1MuDTChambPhDigi::whNum
int whNum() const
Definition: L1MuDTChambPhDigi.cc:70
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
RPCGeometry::roll
const RPCRoll * roll(RPCDetId id) const
Return a roll given its id.
Definition: RPCGeometry.cc:50
DDAxes::x
simKBmtfStubs_cfi.minPhiQuality
minPhiQuality
Definition: simKBmtfStubs_cfi.py:7
newFWLiteAna.found
found
Definition: newFWLiteAna.py:118
edm::Handle
Definition: AssociativeIterator.h:50
GEMPadDigi::GE21SplitStrip
Definition: GEMPadDigi.h:22
L1TMuon::kRPC
Definition: L1TMuonSubsystems.h:5
auxiliaryParams.maxDeltaBX
maxDeltaBX
Definition: auxiliaryParams.py:60
GlobalPosition_Frontier_DevDB_cff.tag
tag
Definition: GlobalPosition_Frontier_DevDB_cff.py:11
L1TMuon::GeometryTranslator::getRPCGeometry
const RPCGeometry & getRPCGeometry() const
Definition: GeometryTranslator.h:56
L1TMuon::TriggerPrimitive
Definition: MuonTriggerPrimitive.h:57
b
double b
Definition: hdecay.h:118
emtf::ME0Tag
Definition: EMTFSubsystemTag.h:62
EMTFSubsystemCollector::make_copad_gem
void make_copad_gem(const TriggerPrimitiveCollection &muon_primitives, TriggerPrimitiveCollection &copad_muon_primitives) const
Definition: EMTFSubsystemCollector.cc:435
GEMDetId::chamber
constexpr int chamber() const
Definition: GEMDetId.h:180
emtf::RPCTag
Definition: EMTFSubsystemTag.h:38
a
double a
Definition: hdecay.h:119
EMTFSubsystemCollector.h
Event.h
TriggerPrimitiveCollection
L1TMuon::TriggerPrimitiveCollection TriggerPrimitiveCollection
Definition: Common.h:32
L1MuDTChambPhContainer::chPhiSegm2
L1MuDTChambPhDigi const * chPhiSegm2(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambPhContainer.cc:78
GEMDetId::roll
constexpr int roll() const
Definition: GEMDetId.h:191
GEMDetId
Definition: GEMDetId.h:18
emtf::IRPCTag
Definition: EMTFSubsystemTag.h:45
makeMuonMisalignmentScenario.wheel
wheel
Definition: makeMuonMisalignmentScenario.py:319
iEvent
int iEvent
Definition: GenABIO.cc:224
L1TMuonSubsystems.h
simKBmtfStubs_cfi.maxBX
maxBX
Definition: simKBmtfStubs_cfi.py:10
emtf::DTTag
Definition: EMTFSubsystemTag.h:24
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
L1MuDTChambPhDigi::scNum
int scNum() const
Definition: L1MuDTChambPhDigi.cc:71
edm::EDGetToken
Definition: EDGetToken.h:35
HLTEgPhaseIITestSequence_cff.maxClusterSize
maxClusterSize
Definition: HLTEgPhaseIITestSequence_cff.py:2089
L1MuDTChambThContainer::chThetaSegm
L1MuDTChambThDigi const * chThetaSegm(int wheel, int stat, int sect, int bx) const
Definition: L1MuDTChambThContainer.cc:65
RPCDetId::ring
int ring() const
Definition: RPCDetId.h:59
L1TMuon::GeometryTranslator
Definition: GeometryTranslator.h:41
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
EMTFSubsystemCollector::cluster_rpc
void cluster_rpc(const TriggerPrimitiveCollection &muon_primitives, TriggerPrimitiveCollection &clus_muon_primitives) const
Definition: EMTFSubsystemCollector.cc:363
tier0.unique
def unique(seq, keepstr=True)
Definition: tier0.py:24
fileCollector.cmp
cmp
Definition: fileCollector.py:125
L1MuDTChambThDigi
Definition: L1MuDTChambThDigi.h:33
dtTriggerPhase2PrimitiveDigis_cfi.rpcRecHits
rpcRecHits
Definition: dtTriggerPhase2PrimitiveDigis_cfi.py:39
trklet::bend
double bend(double r, double rinv, double stripPitch)
Definition: Util.h:160
relativeConstraints.chamber
chamber
Definition: relativeConstraints.py:53
emtf_assert
#define emtf_assert(expr)
Definition: DebugTools.h:18
auxiliaryParams.maxDeltaRoll
maxDeltaRoll
Definition: auxiliaryParams.py:59
MillePedeFileConverter_cfg.out
out
Definition: MillePedeFileConverter_cfg.py:31
GEMDetId::station
constexpr int station() const
Definition: GEMDetId.h:176
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
DTChamberId
Definition: DTChamberId.h:14
helper.h
edm::Event
Definition: Event.h:73
L1MuDTChambPhDigi::code
int code() const
Definition: L1MuDTChambPhDigi.cc:78
RPCGeometry.h
L1MuDTChambPhDigi
Definition: L1MuDTChambPhDigi.h:31
unpackBuffers-CaloStage2.token
token
Definition: unpackBuffers-CaloStage2.py:318