CMS 3D CMS Logo

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