CMS 3D CMS Logo

GEMDigiMatcher.cc
Go to the documentation of this file.
2 
3 using namespace std;
4 
6  const auto& gemSimLink = pset.getParameterSet("gemSimLink");
7  simMuOnly_ = gemSimLink.getParameter<bool>("simMuOnly");
8  discardEleHits_ = gemSimLink.getParameter<bool>("discardEleHits");
9  verboseSimLink_ = gemSimLink.getParameter<int>("verbose");
10 
11  const auto& gemDigi = pset.getParameterSet("gemStripDigi");
12  minBXDigi_ = gemDigi.getParameter<int>("minBX");
13  maxBXDigi_ = gemDigi.getParameter<int>("maxBX");
14  matchDeltaStrip_ = gemDigi.getParameter<int>("matchDeltaStrip");
15  verboseDigi_ = gemDigi.getParameter<int>("verbose");
16  matchToSimLink_ = gemDigi.getParameter<bool>("matchToSimLink");
17 
18  const auto& gemPad = pset.getParameterSet("gemPadDigi");
19  minBXPad_ = gemPad.getParameter<int>("minBX");
20  maxBXPad_ = gemPad.getParameter<int>("maxBX");
21  verbosePad_ = gemPad.getParameter<int>("verbose");
22 
23  const auto& gemCluster = pset.getParameterSet("gemPadCluster");
24  minBXCluster_ = gemCluster.getParameter<int>("minBX");
25  maxBXCluster_ = gemCluster.getParameter<int>("maxBX");
26  verboseCluster_ = gemCluster.getParameter<int>("verbose");
27 
28  const auto& gemCoPad = pset.getParameterSet("gemCoPadDigi");
29  minBXCoPad_ = gemCoPad.getParameter<int>("minBX");
30  maxBXCoPad_ = gemCoPad.getParameter<int>("maxBX");
31  verboseCoPad_ = gemCoPad.getParameter<int>("verbose");
32 
33  // make a new simhits matcher
34  muonSimHitMatcher_.reset(new GEMSimHitMatcher(pset, std::move(iC)));
35 
36  if (matchToSimLink_)
37  gemSimLinkToken_ =
38  iC.consumes<edm::DetSetVector<GEMDigiSimLink>>(gemSimLink.getParameter<edm::InputTag>("inputTag"));
39  gemDigiToken_ = iC.consumes<GEMDigiCollection>(gemDigi.getParameter<edm::InputTag>("inputTag"));
40  gemPadToken_ = iC.consumes<GEMPadDigiCollection>(gemPad.getParameter<edm::InputTag>("inputTag"));
41  gemClusterToken_ = iC.consumes<GEMPadDigiClusterCollection>(gemCluster.getParameter<edm::InputTag>("inputTag"));
42  gemCoPadToken_ = iC.consumes<GEMCoPadDigiCollection>(gemCoPad.getParameter<edm::InputTag>("inputTag"));
43 
44  geomToken_ = iC.esConsumes<GEMGeometry, MuonGeometryRecord>();
45 }
46 
48  muonSimHitMatcher_->init(iEvent, iSetup);
49 
50  if (matchToSimLink_)
51  iEvent.getByToken(gemSimLinkToken_, gemDigisSLH_);
52  iEvent.getByToken(gemDigiToken_, gemDigisH_);
53  iEvent.getByToken(gemPadToken_, gemPadsH_);
54  iEvent.getByToken(gemClusterToken_, gemClustersH_);
55  iEvent.getByToken(gemCoPadToken_, gemCoPadsH_);
56 
57  const auto gemH = iSetup.getHandle(geomToken_);
58  if (!gemH.isValid()) {
59  gemGeometry_ = nullptr;
60  edm::LogError("GEMDigiMatcher") << "Failed to initialize GEM geometry.";
61  }
62  gemGeometry_ = gemH.product();
63 }
64 
66 void GEMDigiMatcher::match(const SimTrack& t, const SimVertex& v) {
67  // match simhits first
68  muonSimHitMatcher_->match(t, v);
69 
70  // get the digi collections
71  const GEMDigiCollection& gemDigis = *gemDigisH_.product();
72  const GEMPadDigiCollection& gemPads = *gemPadsH_.product();
73  const GEMPadDigiClusterCollection& gemClusters = *gemClustersH_.product();
74  const GEMCoPadDigiCollection& gemCoPads = *gemCoPadsH_.product();
75 
76  clear();
77 
78  // hard cut on non-GEM muons
79  if (std::abs(t.momentum().eta()) < 1.55)
80  return;
81 
82  // now match the digis
83  if (matchToSimLink_) {
84  const edm::DetSetVector<GEMDigiSimLink>& gemDigisSL = *gemDigisSLH_.product();
85  matchDigisSLToSimTrack(gemDigisSL);
86  }
87  matchDigisToSimTrack(gemDigis);
88  matchPadsToSimTrack(gemPads);
89  matchClustersToSimTrack(gemClusters);
90  matchCoPadsToSimTrack(gemCoPads);
91 }
92 
94  if (verboseSimLink_)
95  edm::LogInfo("GEMDigiMatcher") << "Matching simtrack to GEM simlinks" << endl;
96 
97  // loop on the simlinks
98  for (auto itsimlink = digisSL.begin(); itsimlink != digisSL.end(); itsimlink++) {
99  GEMDetId p_id(itsimlink->id);
100  for (auto sl = itsimlink->data.begin(); sl != itsimlink->data.end(); ++sl) {
101  // ignore simlinks in non-matched chambers
102  const auto& detids(muonSimHitMatcher_->detIds());
103  if (detids.find(p_id.rawId()) == detids.end())
104  continue;
105 
106  // no simhits in this chamber!
107  if (muonSimHitMatcher_->hitsInDetId(p_id.rawId()).empty())
108  continue;
109 
110  if (verboseSimLink_)
111  edm::LogInfo("GEMDigiMatcher") << "GEMDigiSimLink " << p_id << " " << sl->getStrip() << " " << sl->getBx()
112  << " " << sl->getTrackId() << std::endl;
113 
114  // consider only the muon hits
115  if (simMuOnly_ && std::abs(sl->getParticleType()) != 13)
116  continue;
117 
118  // discard electron hits in the GEM chambers
119  if (discardEleHits_ && std::abs(sl->getParticleType()) == 11)
120  continue;
121 
122  // loop on the matched simhits
123  for (const auto& simhit : muonSimHitMatcher_->hitsInDetId(p_id.rawId())) {
124  // check if the simhit properties agree
125  if (simhit.trackId() == sl->getTrackId() and simhit.particleType() == sl->getParticleType()) {
126  detid_to_simLinks_[p_id.rawId()].push_back(*sl);
127  if (verboseSimLink_)
128  edm::LogInfo("GEMDigiMatcher") << "...was matched!" << endl;
129  break;
130  }
131  }
132  }
133  }
134 }
135 
137  if (verboseDigi_)
138  edm::LogInfo("GEMDigiMatcher") << "Matching simtrack to GEM digis" << endl;
139  for (auto id : muonSimHitMatcher_->detIds()) {
140  GEMDetId p_id(id);
141  const auto& hit_strips = muonSimHitMatcher_->hitStripsInDetId(id, matchDeltaStrip_);
142  const auto& digis_in_det = digis.get(p_id);
143 
144  for (auto d = digis_in_det.first; d != digis_in_det.second; ++d) {
145  bool isMatched = false;
146 
147  // check that the digi is within BX range
148  if (d->bx() < minBXDigi_ || d->bx() > maxBXDigi_)
149  continue;
150 
151  if (verboseDigi_)
152  edm::LogInfo("GEMDigiMatcher") << "GEMDigi " << p_id << " " << *d << endl;
153 
154  // GEN-SIM-DIGI-RAW monte carlo
155  if (matchToSimLink_) {
156  // check that the digi matches to at least one GEMDigiSimLink
157  for (const auto& sl : detid_to_simLinks_[p_id.rawId()]) {
158  if (sl.getStrip() == d->strip() and sl.getBx() == d->bx()) {
159  isMatched = true;
160  break;
161  }
162  }
163  }
164  // GEN-SIM-RAW monte carlo
165  else {
166  // check that it matches a strip that was hit by SimHits from our track
167  if (hit_strips.find(d->strip()) != hit_strips.end()) {
168  isMatched = true;
169  }
170  }
171  if (isMatched) {
172  detid_to_digis_[p_id.rawId()].push_back(*d);
173  chamber_to_digis_[p_id.chamberId().rawId()].push_back(*d);
174  superchamber_to_digis_[p_id.superChamberId().rawId()].push_back(*d);
175  if (verboseDigi_)
176  edm::LogInfo("GEMDigiMatcher") << "...was matched!" << endl;
177  }
178  }
179  }
180 }
182  for (auto it = pads.begin(); it != pads.end(); ++it) {
183  const GEMDetId& p_id = (*it).first;
184  const auto& padsvec = (*it).second;
185 
186  for (auto pad = padsvec.first; pad != padsvec.second; ++pad) {
187  // check that the pad BX is within the range
188  if (pad->bx() < minBXPad_ || pad->bx() > maxBXPad_)
189  continue;
190 
191  if (verbosePad_)
192  edm::LogInfo("GEMDigiMatcher") << "GEMPad " << p_id << " " << *pad << endl;
193 
194  auto digivec = detid_to_digis_[p_id.rawId()];
195  /*
196  For GE1/1 and ME0 (and obsolete 8-partition GE2/1) geometries, the matching
197  is pretty simple. Each simhit is converted to a digi. Two digis in neighboring
198  strips are ed together into a pad. So for these geometries you just need
199  to match pads to simtracks that are in the same eta partition (detid) as the
200  simhit is in. By convention, all pads in the 16-partition GE2/1 geometry are
201  assigned to odd partition numbers. For the 16-partition GE2/1 geometry, you may
202  have a track with simhits in eta partition 1 and 2 on the same strip and only
203  produce 1 pad associated to eta partition 1. Therefore, for pads with odd
204  partition number N, you need to consider the digis in the even partition number
205  N+1.
206  */
207  if (p_id.roll() % 2 == 1 && p_id.isGE21() && pad->nPartitions() == GEMPadDigi::GE21SplitStrip) {
208  // make the GEMDetId for the neighboring partition
209  GEMDetId p_id2(p_id.region(), p_id.ring(), p_id.station(), p_id.layer(), p_id.chamber(), p_id.roll() + 1);
210 
211  // make a temporary container for its digis
212  auto digivec2 = detid_to_digis_[p_id2.rawId()];
213 
214  // now add it to the container for the digis in the odd partition number
215  digivec.insert(digivec.end(), digivec2.begin(), digivec2.end());
216  }
217  for (const auto& digi : digivec) {
218  // for 8-partition geometries, the pad number equals the strip number divided by two
219  const bool match8Partition(digi.strip() / 2 == pad->pad());
220 
221  // for 16-partition geometries, the pad number is the strip number itself
222  const bool match16Partition(digi.strip() == pad->pad());
223 
224  // now consider the different cases separately
225  const bool matchGE0(p_id.isME0() and match8Partition);
226  const bool matchGE11(p_id.isGE11() and match8Partition);
227  const bool matchGE21_8(p_id.isGE21() and pad->nPartitions() == GEMPadDigi::GE21 and match8Partition);
228  const bool matchGE21_16(p_id.isGE21() and pad->nPartitions() == GEMPadDigi::GE21SplitStrip and
229  match16Partition);
230 
231  // OR them together
232  if (matchGE0 or matchGE11 or matchGE21_8 or matchGE21_16) {
233  detid_to_pads_[p_id.rawId()].push_back(*pad);
234  chamber_to_pads_[p_id.chamberId().rawId()].push_back(*pad);
235  superchamber_to_pads_[p_id.superChamberId().rawId()].push_back(*pad);
236  if (verbosePad_)
237  edm::LogInfo("GEMDigiMatcher") << "...was matched!" << endl;
238  break;
239  }
240  }
241  }
242  }
243 }
244 
246  for (auto it = clusters.begin(); it != clusters.end(); ++it) {
247  const GEMDetId p_id = (*it).first;
248  const auto clvec = (*it).second;
249  for (auto cluster = clvec.first; cluster != clvec.second; ++cluster) {
250  bool isMatched = false;
251 
252  // check that the cluster BX is within the range
253  if (cluster->bx() < minBXCluster_ || cluster->bx() > maxBXCluster_)
254  continue;
255 
256  if (verboseCluster_)
257  edm::LogInfo("GEMDigiMatcher") << "GEMCluster " << p_id << " " << *cluster << endl;
258 
259  // check that at least one pad was hit by the track
260  for (const auto& p : cluster->pads()) {
261  for (const auto& pad : detid_to_pads_[p_id.rawId()]) {
262  if (pad.pad() == p) {
263  isMatched = true;
264  }
265  }
266  }
267  if (isMatched) {
268  detid_to_clusters_[p_id.rawId()].push_back(*cluster);
269  chamber_to_clusters_[p_id.chamberId().rawId()].push_back(*cluster);
270  superchamber_to_clusters_[p_id.superChamberId().rawId()].push_back(*cluster);
271  if (verboseCluster_)
272  edm::LogInfo("GEMDigiMatcher") << "...was matched!" << endl;
273  }
274  }
275  }
276 }
277 
279  // loop on the GEM detids
280  for (auto d : superChamberIdsPad()) {
281  GEMDetId id(d);
282 
283  const auto& co_pads_in_det = co_pads.get(id);
284  for (auto copad = co_pads_in_det.first; copad != co_pads_in_det.second; ++copad) {
285  // check that the cluster BX is within the range
286  if (copad->bx(1) < minBXCoPad_ || copad->bx(1) > maxBXCoPad_)
287  continue;
288 
289  if (verboseCoPad_)
290  edm::LogInfo("GEMDigiMatcher") << "GEMCoPadDigi: " << id << " " << *copad << endl;
291 
292  bool isMatchedL1 = false;
293  bool isMatchedL2 = false;
294  GEMDetId gemL1_id(id.region(), 1, id.station(), 1, id.chamber(), copad->roll());
295  GEMDetId gemL2_id(id.region(), 1, id.station(), 2, id.chamber(), 0);
296 
297  // first pad is tightly matched
298  for (const auto& p : padsInDetId(gemL1_id.rawId())) {
299  if (p == copad->first()) {
300  isMatchedL1 = true;
301  }
302  }
303 
304  // second pad can only be loosely matched
305  for (const auto& p : padsInChamber(gemL2_id.rawId())) {
306  if (p == copad->second()) {
307  isMatchedL2 = true;
308  }
309  }
310  if (isMatchedL1 and isMatchedL2) {
311  superchamber_to_copads_[id.rawId()].push_back(*copad);
312  if (verboseCoPad_)
313  edm::LogInfo("GEMDigiMatcher") << "...was matched! " << endl;
314  }
315  }
316  }
317 }
318 
319 std::set<unsigned int> GEMDigiMatcher::detIdsSimLink(int gem_type) const {
320  return selectDetIds(detid_to_simLinks_, gem_type);
321 }
322 
323 std::set<unsigned int> GEMDigiMatcher::detIdsDigi(int gem_type) const {
324  return selectDetIds(detid_to_digis_, gem_type);
325 }
326 
327 std::set<unsigned int> GEMDigiMatcher::detIdsPad(int gem_type) const { return selectDetIds(detid_to_pads_, gem_type); }
328 
329 std::set<unsigned int> GEMDigiMatcher::detIdsCluster(int gem_type) const {
330  return selectDetIds(detid_to_clusters_, gem_type);
331 }
332 
333 std::set<unsigned int> GEMDigiMatcher::chamberIdsDigi(int gem_type) const {
334  return selectDetIds(chamber_to_digis_, gem_type);
335 }
336 
337 std::set<unsigned int> GEMDigiMatcher::chamberIdsPad(int gem_type) const {
338  return selectDetIds(chamber_to_pads_, gem_type);
339 }
340 
341 std::set<unsigned int> GEMDigiMatcher::chamberIdsCluster(int gem_type) const {
342  return selectDetIds(chamber_to_clusters_, gem_type);
343 }
344 
345 std::set<unsigned int> GEMDigiMatcher::superChamberIdsDigi(int gem_type) const {
346  return selectDetIds(superchamber_to_digis_, gem_type);
347 }
348 
349 std::set<unsigned int> GEMDigiMatcher::superChamberIdsPad(int gem_type) const {
350  return selectDetIds(superchamber_to_pads_, gem_type);
351 }
352 
353 std::set<unsigned int> GEMDigiMatcher::superChamberIdsCluster(int gem_type) const {
354  return selectDetIds(superchamber_to_clusters_, gem_type);
355 }
356 
357 std::set<unsigned int> GEMDigiMatcher::superChamberIdsCoPad(int gem_type) const {
358  return selectDetIds(superchamber_to_copads_, gem_type);
359 }
360 
361 const GEMDigiContainer& GEMDigiMatcher::digisInDetId(unsigned int detid) const {
362  if (detid_to_digis_.find(detid) == detid_to_digis_.end())
363  return no_gem_digis_;
364  return detid_to_digis_.at(detid);
365 }
366 
367 const GEMDigiContainer& GEMDigiMatcher::digisInChamber(unsigned int detid) const {
368  if (chamber_to_digis_.find(detid) == chamber_to_digis_.end())
369  return no_gem_digis_;
370  return chamber_to_digis_.at(detid);
371 }
372 
373 const GEMDigiContainer& GEMDigiMatcher::digisInSuperChamber(unsigned int detid) const {
374  if (superchamber_to_digis_.find(detid) == superchamber_to_digis_.end())
375  return no_gem_digis_;
376  return superchamber_to_digis_.at(detid);
377 }
378 
379 const GEMPadDigiContainer& GEMDigiMatcher::padsInDetId(unsigned int detid) const {
380  if (detid_to_pads_.find(detid) == detid_to_pads_.end())
381  return no_gem_pads_;
382  return detid_to_pads_.at(detid);
383 }
384 
385 const GEMPadDigiContainer& GEMDigiMatcher::padsInChamber(unsigned int detid) const {
386  if (chamber_to_pads_.find(detid) == chamber_to_pads_.end())
387  return no_gem_pads_;
388  return chamber_to_pads_.at(detid);
389 }
390 
391 const GEMPadDigiContainer& GEMDigiMatcher::padsInSuperChamber(unsigned int detid) const {
392  if (superchamber_to_pads_.find(detid) == superchamber_to_pads_.end())
393  return no_gem_pads_;
394  return superchamber_to_pads_.at(detid);
395 }
396 
398  if (detid_to_clusters_.find(detid) == detid_to_clusters_.end())
399  return no_gem_clusters_;
400  return detid_to_clusters_.at(detid);
401 }
402 
404  if (chamber_to_clusters_.find(detid) == chamber_to_clusters_.end())
405  return no_gem_clusters_;
406  return chamber_to_clusters_.at(detid);
407 }
408 
410  if (superchamber_to_clusters_.find(detid) == superchamber_to_clusters_.end())
411  return no_gem_clusters_;
412  return superchamber_to_clusters_.at(detid);
413 }
414 
416  if (superchamber_to_copads_.find(detid) == superchamber_to_copads_.end())
417  return no_gem_copads_;
418  return superchamber_to_copads_.at(detid);
419 }
420 
421 int GEMDigiMatcher::nLayersWithDigisInSuperChamber(unsigned int detid) const {
422  set<int> layers;
423  GEMDetId sch_id(detid);
424  for (int iLayer = 1; iLayer <= 2; iLayer++) {
425  GEMDetId ch_id(sch_id.region(), sch_id.ring(), sch_id.station(), iLayer, sch_id.chamber(), 0);
426  // get the digis in this chamber
427  const auto& digis = digisInChamber(ch_id.rawId());
428  // at least one digi in this layer!
429  if (!digis.empty()) {
430  layers.insert(iLayer);
431  }
432  }
433  return layers.size();
434 }
435 
436 int GEMDigiMatcher::nLayersWithPadsInSuperChamber(unsigned int detid) const {
437  set<int> layers;
438  GEMDetId sch_id(detid);
439  for (int iLayer = 1; iLayer <= 2; iLayer++) {
440  GEMDetId ch_id(sch_id.region(), sch_id.ring(), sch_id.station(), iLayer, sch_id.chamber(), 0);
441  // get the pads in this chamber
442  const auto& pads = padsInChamber(ch_id.rawId());
443  // at least one digi in this layer!
444  if (!pads.empty()) {
445  layers.insert(iLayer);
446  }
447  }
448  return layers.size();
449 }
450 
452  set<int> layers;
453  GEMDetId sch_id(detid);
454  for (int iLayer = 1; iLayer <= 2; iLayer++) {
455  GEMDetId ch_id(sch_id.region(), sch_id.ring(), sch_id.station(), iLayer, sch_id.chamber(), 0);
456  // get the pads in this chamber
457  const auto& clusters = clustersInChamber(ch_id.rawId());
458  // at least one digi in this layer!
459  if (!clusters.empty()) {
460  layers.insert(iLayer);
461  }
462  }
463  return layers.size();
464 }
465 
467  int n = 0;
468  const auto& ids = superChamberIdsPad();
469  for (const auto& id : ids) {
470  n += padsInSuperChamber(id).size();
471  }
472  return n;
473 }
474 
476  int n = 0;
477  const auto& ids = superChamberIdsCoPad();
478  for (const auto& id : ids) {
479  n += coPadsInSuperChamber(id).size();
480  }
481  return n;
482 }
483 
484 std::set<int> GEMDigiMatcher::stripNumbersInDetId(unsigned int detid) const {
485  set<int> result;
486  const auto& digis = digisInDetId(detid);
487  for (const auto& d : digis) {
488  result.insert(d.strip());
489  }
490  return result;
491 }
492 
493 std::set<int> GEMDigiMatcher::padNumbersInDetId(unsigned int detid) const {
494  set<int> result;
495  const auto& digis = padsInDetId(detid);
496  for (const auto& d : digis) {
497  result.insert(d.pad());
498  }
499  return result;
500 }
501 
502 std::set<int> GEMDigiMatcher::partitionNumbers() const {
503  std::set<int> result;
504 
505  const auto& detids = detIdsDigi();
506  for (const auto& id : detids) {
507  const GEMDetId& idd(id);
508  result.insert(idd.roll());
509  }
510  return result;
511 }
512 
514  std::set<int> result;
515 
516  const auto& detids = superChamberIdsCoPad();
517  for (const auto& id : detids) {
518  const GEMDetId& idd(id);
519  result.insert(idd.roll());
520  }
521  return result;
522 }
523 
525  GEMDetId gem_id(rawId);
526  const LocalPoint& gem_lp = gemGeometry_->etaPartition(gem_id)->centreOfStrip(d.strip());
527  const GlobalPoint& gem_gp = gemGeometry_->idToDet(gem_id)->surface().toGlobal(gem_lp);
528  return gem_gp;
529 }
530 
532  GEMDetId gem_id(rawId);
533  const LocalPoint& gem_lp = gemGeometry_->etaPartition(gem_id)->centreOfPad(tp.pad());
534  const GlobalPoint& gem_gp = gemGeometry_->idToDet(gem_id)->surface().toGlobal(gem_lp);
535  return gem_gp;
536 }
537 
539  detid_to_simLinks_.clear();
540 
541  detid_to_digis_.clear();
542  chamber_to_digis_.clear();
543  superchamber_to_digis_.clear();
544 
545  detid_to_pads_.clear();
546  chamber_to_pads_.clear();
547  superchamber_to_pads_.clear();
548 
549  detid_to_clusters_.clear();
550  chamber_to_clusters_.clear();
551  superchamber_to_clusters_.clear();
552 
553  superchamber_to_copads_.clear();
554 }
std::set< unsigned int > chamberIdsPad(int gem_type=MuonHitHelper::GEM_ALL) const
void matchCoPadsToSimTrack(const GEMCoPadDigiCollection &)
std::set< int > stripNumbersInDetId(unsigned int) const
std::vector< GEMCoPadDigi > GEMCoPadDigiContainer
constexpr int station() const
Definition: GEMDetId.h:179
bool isGE11() const
Definition: GEMDetId.cc:9
constexpr int region() const
Definition: GEMDetId.h:171
void match(const SimTrack &t, const SimVertex &v)
do the matching
int nLayersWithPadsInSuperChamber(unsigned int) const
std::set< unsigned int > detIdsCluster(int gem_type=MuonHitHelper::GEM_ALL) const
std::set< unsigned int > superChamberIdsCoPad(int gem_type=MuonHitHelper::GEM_ALL) const
GlobalPoint getGlobalPointPad(unsigned int rawId, const GEMPadDigi &tp) const
std::set< unsigned int > superChamberIdsDigi(int gem_type=MuonHitHelper::GEM_ALL) const
const GEMPadDigiContainer & padsInChamber(unsigned int) const
void matchPadsToSimTrack(const GEMPadDigiCollection &)
int nLayersWithClustersInSuperChamber(unsigned int) const
GEMDigiMatcher(edm::ParameterSet const &iPS, edm::ConsumesCollector &&iC)
int nCoPads() const
How many coincidence pads in GEM did this simtrack get in total?
int nLayersWithDigisInSuperChamber(unsigned int) const
std::set< unsigned int > detIdsDigi(int gem_type=MuonHitHelper::GEM_ALL) const
GlobalPoint getGlobalPointDigi(unsigned int rawId, const GEMDigi &d) const
Log< level::Error, false > LogError
constexpr int layer() const
Definition: GEMDetId.h:190
const GEMPadDigiContainer & padsInSuperChamber(unsigned int) const
void matchClustersToSimTrack(const GEMPadDigiClusterCollection &)
std::set< int > partitionNumbersWithCoPads() const
constexpr int chamber() const
Definition: GEMDetId.h:183
const GEMCoPadDigiContainer & coPadsInSuperChamber(unsigned int) const
std::set< unsigned int > detIdsPad(int gem_type=MuonHitHelper::GEM_ALL) const
std::vector< GEMDigi > GEMDigiContainer
std::vector< GEMPadDigiCluster > GEMPadDigiClusterContainer
void matchDigisToSimTrack(const GEMDigiCollection &)
int iEvent
Definition: GenABIO.cc:224
const GEMPadDigiClusterContainer & clustersInSuperChamber(unsigned int) const
const GEMPadDigiContainer & padsInDetId(unsigned int) const
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
std::set< unsigned int > superChamberIdsCluster(int gem_type=MuonHitHelper::GEM_ALL) const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
bool isME0() const
Definition: GEMDetId.cc:13
constexpr int ring() const
Definition: GEMDetId.h:176
bool isMatched(TrackingRecHit const &hit)
const GEMDigiContainer & digisInSuperChamber(unsigned int) const
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
d
Definition: ztail.py:151
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:316
int nPads() const
How many pads in GEM did this simtrack get in total?
const GEMDigiContainer & digisInChamber(unsigned int) const
bool isGE21() const
Definition: GEMDetId.cc:11
Log< level::Info, false > LogInfo
std::vector< GEMPadDigi > GEMPadDigiContainer
std::set< unsigned int > chamberIdsDigi(int gem_type=MuonHitHelper::GEM_ALL) const
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::set< unsigned int > chamberIdsCluster(int gem_type=MuonHitHelper::GEM_ALL) const
void matchDigisSLToSimTrack(const edm::DetSetVector< GEMDigiSimLink > &)
std::set< unsigned int > detIdsSimLink(int gem_type=MuonHitHelper::GEM_ALL) const
const GEMDigiContainer & digisInDetId(unsigned int) const
constexpr GEMDetId superChamberId() const
Definition: GEMDetId.h:207
constexpr int roll() const
Definition: GEMDetId.h:194
std::set< int > padNumbersInDetId(unsigned int) const
const GEMPadDigiClusterContainer & clustersInChamber(unsigned int) const
constexpr GEMDetId chamberId() const
Definition: GEMDetId.h:204
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:305
std::set< int > partitionNumbers() const
void clear(EGIsoObj &c)
Definition: egamma.h:82
std::set< unsigned int > superChamberIdsPad(int gem_type=MuonHitHelper::GEM_ALL) const
const GEMPadDigiClusterContainer & clustersInDetId(unsigned int) const
def move(src, dest)
Definition: eostools.py:511
void init(const edm::Event &e, const edm::EventSetup &eventSetup)