CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HitPattern.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 
3 #ifndef TrackReco_HitPattern_h
4 #define TrackReco_HitPattern_h
5 
6 //
7 // File: DataFormats/TrackReco/interface/HitPattern.h
8 //
9 // Marcel Vos, INFN Pisa
10 // v1.10 2007/05/08 bellan
11 // Zongru Wan, Kansas State University
12 // Jean-Roch Vlimant
13 // Kevin Burkett
14 // Boris Mangano
15 //
16 // Hit pattern is the summary information of the hits associated to track in
17 // AOD. When RecHits are no longer available, the compact hit pattern should
18 // allow basic track selection based on the hits in various subdetectors.
19 // The hits of a track are saved in unit16_t hitPattern[MaxHits].
20 //
21 // uint16_t
22 // +--------+---------------+---------------------------+-----------------+----------------+
23 // | tk/mu | sub-structure | sub-sub-structure | stereo | hit type |
24 // +--------+---------------+---------------------------+-----------------+----------------+
25 // | 10 | 9 8 7 | 6 5 4 3 | 2 | 1 0 | bit
26 // +--------+---------------+---------------------------+-----------------+----------------|
27 // | tk = 1 | PXB = 1 | layer = 1-3 | | hit type = 0-3 |
28 // | tk = 1 | PXF = 2 | disk = 1-2 | | hit type = 0-3 |
29 // | tk = 1 | TIB = 3 | layer = 1-4 | 0=rphi,1=stereo | hit type = 0-3 |
30 // | tk = 1 | TID = 4 | wheel = 1-3 | 0=rphi,1=stereo | hit type = 0-3 |
31 // | tk = 1 | TOB = 5 | layer = 1-6 | 0=rphi,1=stereo | hit type = 0-3 |
32 // | tk = 1 | TEC = 6 | wheel = 1-9 | 0=rphi,1=stereo | hit type = 0-3 |
33 // | mu = 0 | DT = 1 | 4*(stat-1)+superlayer | | hit type = 0-3 |
34 // | mu = 0 | CSC = 2 | 4*(stat-1)+(ring-1) | | hit type = 0-3 |
35 // | mu = 0 | RPC = 3 | 4*(stat-1)+2*layer+region | | hit type = 0-3 |
36 // +--------+---------------+---------------------------+-----------------+----------------+
37 //
38 // hit type, see DataFormats/TrackingRecHit/interface/TrackingRecHit.h
39 // VALID = valid hit = 0
40 // MISSING = detector is good, but no rec hit found = 1
41 // INACTIVE = detector is off, so there was no hope = 2
42 // BAD = there were many bad strips within the ellipse = 3
43 //
44 // It had been shown by Zongru using a 100 GeV muon sample with 5000 events
45 // uniform in eta and phi, the average (maximum) number of tracker hits is
46 // 13 (17) and the average (maximum) number of muon detector hits is about
47 // 26 (50). If the number of hits of a track is larger than 80 then the extra
48 // hits are ignored by hit pattern. The static hit pattern array might be
49 // improved to a dynamic one in the future.
50 //
51 // Because of tracking with/without overlaps and with/without hit-splitting,
52 // the final number of hits per track is pretty "variable". Compared with the
53 // number of valid hits, the number of crossed layers with measurement should
54 // be more robust to discriminate between good and fake track.
55 //
56 // Since 4-bit for sub-sub-structure is not enough to specify a muon layer,
57 // the layer case counting methods are implemented for tracker only. This is
58 // different from the hit counting methods which are implemented for both
59 // tracker and muon detector.
60 //
61 // Given a tracker layer, specified by sub-structure and layer, the method
62 // getTrackerLayerCase(substr, layer) groups all of the hits in the hit pattern
63 // array for the layer together and returns one of the four cases
64 //
65 // crossed
66 // layer case 0: VALID + (MISSING, OFF, BAD) ==> with measurement
67 // layer case 1: MISSING + (OFF, BAD) ==> without measurement
68 // layer case 2: OFF, BAD ==> totally off or bad, cannot say much
69 // not crossed
70 // layer case NULL_RETURN: track outside acceptance or in gap ==> null
71 //
72 // Given a tracker layer, specified by sub-structure and layer, the method
73 // getTrackerMonoStereo(substr, layer) groups all of the valid hits in the hit
74 // pattern array for the layer together and returns
75 //
76 // 0: neither a valid mono nor a valid stereo hit
77 // MONO: valid mono hit
78 // STEREO: valid stereo hit
79 // MONO | STEREO: both
80 //
81 //
82 // Given a track, here is an example usage of hit pattern
83 //
84 // // hit pattern of the track
85 // const reco::HitPattern &p = track->hitPattern();
86 //
87 // // loop over the hits of the track.
88 // for (int i = 0; i < p.numberOfHits(HitPattern::TRACK_HITS); i++) {
89 // uint32_t hit = p.getHitPattern(HitPattern::TRACK_HITS, i);
90 //
91 // // if the hit is valid and in pixel barrel, print out the layer
92 // if (p.validHitFilter(hit) && p.pixelBarrelHitFilter(hit)){
93 // cout << "valid hit found in pixel barrel layer "
94 // << p.getLayer(hit)
95 // << endl;
96 // }
97 //
98 // // expert level: printout the hit in 11-bit binary format
99 // cout << "hit in 11-bit binary format = ";
100 // for (int j = 10; j >= 0; j--){
101 // int bit = (hit >> j) & 0x1;
102 // cout << bit;
103 // }
104 // cout << endl;
105 // }
106 //
107 // //count the number of valid pixel barrel *** hits ***
108 // cout << "number of of valid pixel barrel hits is "
109 // << p.numberOfValidPixelBarrelHits()
110 // << endl;
111 //
112 // //count the number of pixel barrel *** layers *** with measurement
113 // cout << "number of of pixel barrel layers with measurement is "
114 // << p.pixelBarrelLayersWithMeasurement()
115 // << endl;
116 //
117 
125 
126 #include <utility>
127 #include <algorithm>
128 #include <iostream>
129 #include <ostream>
130 #include <memory>
131 
132 namespace reco
133 {
134 
136 {
137 
138 public:
139  enum {
140  MONO = 1,
141  STEREO = 2
142  };
143 
144  enum HIT_TYPE {
145  VALID = 0,
146  MISSING = 1,
147  INACTIVE = 2,
148  BAD = 3
149  };
150 
151  enum HitCategory {
155  };
156  const static unsigned short ARRAY_LENGTH = 50;
157  const static unsigned short HIT_LENGTH = 11;
158  const static unsigned short MaxHits = (8 * sizeof(uint16_t) * ARRAY_LENGTH) / HIT_LENGTH;
159 
160  static const uint32_t NULL_RETURN = 999999;
161  static const uint16_t EMPTY_PATTERN = 0x0;
162 
163  static bool trackerHitFilter(uint16_t pattern);
164  static bool muonHitFilter(uint16_t pattern);
165 
166  static bool validHitFilter(uint16_t pattern);
167  static bool missingHitFilter(uint16_t pattern);
168  static bool inactiveHitFilter(uint16_t pattern);
169  static bool badHitFilter(uint16_t pattern);
170 
171  static bool pixelHitFilter(uint16_t pattern);
172  static bool pixelBarrelHitFilter(uint16_t pattern);
173  static bool pixelEndcapHitFilter(uint16_t pattern);
174  static bool stripHitFilter(uint16_t pattern);
175  static bool stripTIBHitFilter(uint16_t pattern);
176  static bool stripTIDHitFilter(uint16_t pattern);
177  static bool stripTOBHitFilter(uint16_t pattern);
178  static bool stripTECHitFilter(uint16_t pattern);
179 
180  static bool muonDTHitFilter(uint16_t pattern);
181  static bool muonCSCHitFilter(uint16_t pattern);
182  static bool muonRPCHitFilter(uint16_t pattern);
183 
184  static uint32_t getHitType(uint16_t pattern);
185 
186  // mono (0) or stereo (1)
187  static uint32_t getSide(uint16_t pattern);
188  static uint32_t getLayer(uint16_t pattern);
189  static uint32_t getSubSubStructure(uint16_t pattern);
190  static uint32_t getSubStructure(uint16_t pattern);
191  static uint32_t getSubDetector(uint16_t pattern);
192 
194  static uint16_t getMuonStation(uint16_t pattern);
195 
197  static uint16_t getDTSuperLayer(uint16_t pattern); // only for DT patterns
198 
200  static uint16_t getCSCRing(uint16_t pattern) ;
201 
203  static uint16_t getRPCLayer(uint16_t pattern) ;
204 
206  static uint16_t getRPCregion(uint16_t pattern);
207 
208  HitPattern();
209 
210  ~HitPattern();
211 
212  HitPattern(const HitPattern &other);
213 
214  HitPattern &operator=(const HitPattern &other);
215 
216  template<typename I>
217  bool appendHits(const I &begin, const I &end);
218  bool appendHit(const TrackingRecHit &hit);
219  bool appendHit(const TrackingRecHitRef &ref);
220  bool appendHit(const DetId &id, TrackingRecHit::Type hitType);
221 
222  // get the pattern of the position-th hit
223  uint16_t getHitPattern(HitCategory category, int position) const;
224 
225  void clear();
226 
227  // print the pattern of the position-th hit
228  void printHitPattern(HitCategory category, int position, std::ostream &stream) const;
229  void print(HitCategory category, std::ostream &stream = std::cout) const;
230 
231  bool hasValidHitInFirstPixelBarrel() const; // has valid hit in PXB layer 1
232  bool hasValidHitInFirstPixelEndcap() const; // has valid hit in PXF layer 1
233 
234  int numberOfHits(HitCategory category) const; // not-null
235  int numberOfValidHits() const; // not-null, valid
236 
237  int numberOfTrackerHits(HitCategory category) const; // not-null, tracker
238  int numberOfValidTrackerHits() const; // not-null, valid, tracker
239  int numberOfValidPixelHits() const; // not-null, valid, pixel
240  int numberOfValidPixelBarrelHits() const; // not-null, valid, pixel PXB
241  int numberOfValidPixelEndcapHits() const; // not-null, valid, pixel PXF
242  int numberOfValidStripHits() const; // not-null, valid, strip
243  int numberOfValidStripTIBHits() const; // not-null, valid, strip TIB
244  int numberOfValidStripTIDHits() const; // not-null, valid, strip TID
245  int numberOfValidStripTOBHits() const; // not-null, valid, strip TOB
246  int numberOfValidStripTECHits() const; // not-null, valid, strip TEC
247 
248  int numberOfLostHits(HitCategory category) const; // not-null, not valid
249  int numberOfLostTrackerHits(HitCategory category) const; // not-null, not valid, tracker
250  int numberOfLostPixelHits(HitCategory category) const; // not-null, not valid, pixel
251  int numberOfLostPixelBarrelHits(HitCategory category) const; // not-null, not valid, pixel PXB
252  int numberOfLostPixelEndcapHits(HitCategory category) const; // not-null, not valid, pixel PXF
253  int numberOfLostStripHits(HitCategory category) const; // not-null, not valid, strip
254  int numberOfLostStripTIBHits(HitCategory category) const; // not-null, not valid, strip TIB
255  int numberOfLostStripTIDHits(HitCategory category) const; // not-null, not valid, strip TID
256  int numberOfLostStripTOBHits(HitCategory category) const; // not-null, not valid, strip TOB
257  int numberOfLostStripTECHits(HitCategory category) const; // not-null, not valid, strip TEC
258 
259  int numberOfMuonHits() const; // not-null, muon
260  int numberOfValidMuonHits() const; // not-null, valid, muon
261  int numberOfValidMuonDTHits() const; // not-null, valid, muon DT
262  int numberOfValidMuonCSCHits() const; // not-null, valid, muon CSC
263  int numberOfValidMuonRPCHits() const; // not-null, valid, muon RPC
264  int numberOfLostMuonHits() const; // not-null, not valid, muon
265  int numberOfLostMuonDTHits() const; // not-null, not valid, muon DT
266  int numberOfLostMuonCSCHits() const; // not-null, not valid, muon CSC
267  int numberOfLostMuonRPCHits() const; // not-null, not valid, muon RPC
268  int numberOfBadHits() const; // not-null, bad (only used in Muon Ch.)
269  int numberOfBadMuonHits() const; // not-null, bad, muon
270  int numberOfBadMuonDTHits() const; // not-null, bad, muon DT
271  int numberOfBadMuonCSCHits() const; // not-null, bad, muon CSC
272  int numberOfBadMuonRPCHits() const; // not-null, bad, muon RPC
273 
274  int numberOfInactiveHits() const; // not-null, inactive
275  int numberOfInactiveTrackerHits() const; // not-null, inactive, tracker
276 
277  // count strip layers that have non-null, valid mono and stereo hits
278  int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const;
280  int numberOfValidTOBLayersWithMonoAndStereo(uint32_t layer = 0) const;
281  int numberOfValidTIBLayersWithMonoAndStereo(uint32_t layer = 0) const;
282  int numberOfValidTIDLayersWithMonoAndStereo(uint32_t layer = 0) const;
283  int numberOfValidTECLayersWithMonoAndStereo(uint32_t layer = 0) const;
284 
285  uint32_t getTrackerLayerCase(HitCategory category, uint16_t substr, uint16_t layer) const;
286  uint16_t getTrackerMonoStereo(HitCategory category, uint16_t substr, uint16_t layer) const;
287 
288  int trackerLayersWithMeasurementOld() const; // case 0: tracker
289  int trackerLayersWithMeasurement() const; // case 0: tracker
290  int pixelLayersWithMeasurementOld() const; // case 0: pixel
291  int pixelLayersWithMeasurement() const; // case 0: pixel
292  int stripLayersWithMeasurement() const; // case 0: strip
293  int pixelBarrelLayersWithMeasurement() const; // case 0: pixel PXB
294  int pixelEndcapLayersWithMeasurement() const; // case 0: pixel PXF
295  int stripTIBLayersWithMeasurement() const; // case 0: strip TIB
296  int stripTIDLayersWithMeasurement() const; // case 0: strip TID
297  int stripTOBLayersWithMeasurement() const; // case 0: strip TOB
298  int stripTECLayersWithMeasurement() const; // case 0: strip TEC
299 
300  int trackerLayersWithoutMeasurement(HitCategory category) const; // case 1: tracker
301  int trackerLayersWithoutMeasurementOld(HitCategory category) const; // case 1: tracker
302  int pixelLayersWithoutMeasurement(HitCategory category) const; // case 1: pixel
303  int stripLayersWithoutMeasurement(HitCategory category) const; // case 1: strip
304  int pixelBarrelLayersWithoutMeasurement(HitCategory category) const; // case 1: pixel PXB
305  int pixelEndcapLayersWithoutMeasurement(HitCategory category) const; // case 1: pixel PXF
306  int stripTIBLayersWithoutMeasurement(HitCategory category) const; // case 1: strip TIB
307  int stripTIDLayersWithoutMeasurement(HitCategory category) const; // case 1: strip TID
308  int stripTOBLayersWithoutMeasurement(HitCategory category) const; // case 1: strip TOB
309  int stripTECLayersWithoutMeasurement(HitCategory category) const; // case 1: strip TEC
310 
311  int trackerLayersTotallyOffOrBad() const; // case 2: tracker
312  int pixelLayersTotallyOffOrBad() const; // case 2: pixel
313  int stripLayersTotallyOffOrBad() const; // case 2: strip
314  int pixelBarrelLayersTotallyOffOrBad() const; // case 2: pixel PXB
315  int pixelEndcapLayersTotallyOffOrBad() const; // case 2: pixel PXF
316  int stripTIBLayersTotallyOffOrBad() const; // case 2: strip TIB
317  int stripTIDLayersTotallyOffOrBad() const; // case 2: strip TID
318  int stripTOBLayersTotallyOffOrBad() const; // case 2: strip TOB
319  int stripTECLayersTotallyOffOrBad() const; // case 2: strip TEC
320 
321  int trackerLayersNull() const; // case NULL_RETURN: tracker
322  int pixelLayersNull() const; // case NULL_RETURN: pixel
323  int stripLayersNull() const; // case NULL_RETURN: strip
324  int pixelBarrelLayersNull() const; // case NULL_RETURN: pixel PXB
325  int pixelEndcapLayersNull() const; // case NULL_RETURN: pixel PXF
326  int stripTIBLayersNull() const; // case NULL_RETURN: strip TIB
327  int stripTIDLayersNull() const; // case NULL_RETURN: strip TID
328  int stripTOBLayersNull() const; // case NULL_RETURN: strip TOB
329  int stripTECLayersNull() const; // case NULL_RETURN: strip TEC
330 
332  int muonStations(int subdet, int hitType) const ;
333 
334  int muonStationsWithValidHits() const;
335  int muonStationsWithBadHits() const;
336  int muonStationsWithAnyHits() const;
337 
338  int dtStationsWithValidHits() const;
339  int dtStationsWithBadHits() const;
340  int dtStationsWithAnyHits() const;
341 
342  int cscStationsWithValidHits() const;
343  int cscStationsWithBadHits() const;
344  int cscStationsWithAnyHits() const;
345 
346  int rpcStationsWithValidHits() const;
347  int rpcStationsWithBadHits() const;
348  int rpcStationsWithAnyHits() const;
349 
351  int innermostMuonStationWithHits(int hitType) const;
355 
357  int outermostMuonStationWithHits(int hitType) const;
361 
362  int numberOfDTStationsWithRPhiView() const;
363  int numberOfDTStationsWithRZView() const;
365 
366 private:
367 
368  // 3 bits for hit type
369  const static unsigned short HitTypeOffset = 0;
370  const static unsigned short HitTypeMask = 0x3;
371 
372  // 1 bit to identify the side in double-sided detectors
373  const static unsigned short SideOffset = 2;
374  const static unsigned short SideMask = 0x1;
375 
376  // 4 bits to identify the layer/disk/wheel within the substructure
377  const static unsigned short LayerOffset = 3;
378  const static unsigned short LayerMask = 0xF;
379 
380  // 3 bits to identify the tracker/muon detector substructure
381  const static unsigned short SubstrOffset = 7;
382  const static unsigned short SubstrMask = 0x7;
383 
384  // 1 bit to distinguish tracker and muon subsystems
385  const static unsigned short SubDetectorOffset = 10;
386  const static unsigned short SubDetectorMask = 0x1;
387 
388  const static unsigned short minTrackerWord = 1<< SubDetectorOffset;
389  const static unsigned short minPixelWord = minTrackerWord | (1<<SubstrOffset);
390  const static unsigned short minStripWord = minTrackerWord | (3<<SubstrOffset);
391 
392 
393  // detector side for tracker modules (mono/stereo)
394  static uint16_t isStereo(DetId i);
395  static bool stripSubdetectorHitFilter(uint16_t pattern, StripSubdetector::SubDetector substructure);
396 
397  static uint16_t encode(const TrackingRecHit &hit);
398  static uint16_t encode(const DetId &id, TrackingRecHit::Type hitType);
399 
400  // generic count methods
401  typedef bool filterType(uint16_t);
402 
403  template<typename F>
404  void call(HitCategory category, filterType typeFilter, F f) const;
405 
408 
409  bool insertTrackHit(const uint16_t pattern);
410  bool insertExpectedInnerHit(const uint16_t pattern);
411  bool insertExpectedOuterHit(const uint16_t pattern);
412  void insertHit(const uint16_t pattern);
413 
414  uint16_t getHitPatternByAbsoluteIndex(int position) const;
415 
416  std::pair<uint8_t, uint8_t> getCategoryIndexRange(HitCategory category) const;
417 
419  uint8_t hitCount;
420 
421  uint8_t beginTrackHits;
422  uint8_t endTrackHits;
423  uint8_t beginInner;
424  uint8_t endInner;
425  uint8_t beginOuter;
426  uint8_t endOuter;
427 };
428 
429 inline std::pair<uint8_t, uint8_t> HitPattern::getCategoryIndexRange(HitCategory category) const
430 {
431  switch (category) {
432  case TRACK_HITS:
433  return std::pair<uint8_t, uint8_t>(beginTrackHits, endTrackHits);
434  break;
435  case MISSING_INNER_HITS:
436  return std::pair<uint8_t, uint8_t>(beginInner, endInner);
437  break;
438  case MISSING_OUTER_HITS:
439  return std::pair<uint8_t, uint8_t>(beginOuter, endOuter);
440  break;
441  }
442  return std::pair<uint8_t, uint8_t>(-1, -1);
443 }
444 
445 template<typename I>
446 bool HitPattern::appendHits(const I &begin, const I &end)
447 {
448  for (I hit = begin; hit != end; hit++) {
449  if unlikely((!appendHit(*hit))) {
450  return false;
451  }
452  }
453  return true;
454 }
455 
457 {
458  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
459  if unlikely((position < 0 || (position + range.first) >= range.second)) {
461  }
462 
463  return getHitPatternByAbsoluteIndex(range.first + position);
464 }
465 
466 inline int HitPattern::countHits(HitCategory category, filterType filter) const
467 {
468  int count = 0;
469  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
470  for (int i = range.first; i < range.second; ++i) {
472  ++count;
473  }
474  }
475  return count;
476 }
477 
478 
479 template<typename F>
480 void HitPattern::call(HitCategory category, filterType typeFilter, F f) const
481 {
482  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
483  for (int i = range.first; i < range.second; i++) {
485  // f() return false to ask to stop looping
486  if (typeFilter(pattern) && !f(pattern)) {
487  break;
488  }
489  }
490 }
491 
492 inline int HitPattern::countTypedHits(HitCategory category, filterType typeFilter, filterType filter) const
493 {
494  int count = 0;
495  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
496  for (int i = range.first; i < range.second; ++i) {
498  if (typeFilter(pattern) && filter(pattern)) {
499  ++count;
500  }
501  }
502  return count;
503 }
504 
505 inline bool HitPattern::pixelHitFilter(uint16_t pattern)
506 {
507  if unlikely(!trackerHitFilter(pattern)) {
508  return false;
509  }
510 
511  uint32_t substructure = getSubStructure(pattern);
512  return (substructure == PixelSubdetector::PixelBarrel ||
513  substructure == PixelSubdetector::PixelEndcap);
514 }
515 
517 {
518  if unlikely(!trackerHitFilter(pattern)) {
519  return false;
520  }
521 
522  uint32_t substructure = getSubStructure(pattern);
523  return (substructure == PixelSubdetector::PixelBarrel);
524 }
525 
527 {
528  if unlikely(!trackerHitFilter(pattern)) {
529  return false;
530  }
531 
532  uint32_t substructure = getSubStructure(pattern);
533  return (substructure == PixelSubdetector::PixelEndcap);
534 }
535 
536 inline bool HitPattern::stripHitFilter(uint16_t pattern)
537 {
538  return pattern > minStripWord;
539 }
540 
541 
543 {
544  if unlikely(!trackerHitFilter(pattern)) {
545  return false;
546  }
547 
548  return substructure == getSubStructure(pattern);
549 }
550 
552 {
554 }
555 
557 {
559 }
560 
562 {
564 }
565 
567 {
569 }
570 
572 {
573  if unlikely(!muonHitFilter(pattern)) {
574  return false;
575  }
576 
577  uint32_t substructure = getSubStructure(pattern);
578  return (substructure == (uint32_t) MuonSubdetId::DT);
579 }
580 
582 {
583  if unlikely(!muonHitFilter(pattern)) {
584  return false;
585  }
586 
587  uint32_t substructure = getSubStructure(pattern);
588  return (substructure == (uint32_t) MuonSubdetId::CSC);
589 }
590 
592 {
593  if unlikely(!muonHitFilter(pattern)) {
594  return false;
595  }
596 
597  uint32_t substructure = getSubStructure(pattern);
598  return (substructure == (uint32_t) MuonSubdetId::RPC);
599 }
600 
602 {
603  return pattern > minTrackerWord;
604 }
605 
606 inline bool HitPattern::muonHitFilter(uint16_t pattern)
607 {
608  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
609  return false;
610  }
611 
612  return (((pattern >> SubDetectorOffset) & SubDetectorMask) == 0);
613 }
614 
615 inline uint32_t HitPattern::getSubStructure(uint16_t pattern)
616 {
617  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
618  return NULL_RETURN;
619  }
620 
621  return ((pattern >> SubstrOffset) & SubstrMask);
622 }
623 
624 inline uint32_t HitPattern::getLayer(uint16_t pattern)
625 {
626  return HitPattern::getSubSubStructure(pattern);
627 }
628 
629 inline uint32_t HitPattern::getSubSubStructure(uint16_t pattern)
630 {
631  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
632  return NULL_RETURN;
633  }
634 
635  return ((pattern >> LayerOffset) & LayerMask);
636 }
637 
638 inline uint32_t HitPattern::getSubDetector(uint16_t pattern)
639 {
640  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
641  return NULL_RETURN;
642  }
643 
644  return ((pattern >> SubDetectorOffset) & SubDetectorMask);
645 }
646 
647 
648 inline uint32_t HitPattern::getSide(uint16_t pattern)
649 {
650  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
651  return NULL_RETURN;
652  }
653 
654  return (pattern >> SideOffset) & SideMask;
655 }
656 
657 inline uint32_t HitPattern::getHitType(uint16_t pattern)
658 {
659  if unlikely(pattern == HitPattern::EMPTY_PATTERN) {
660  return NULL_RETURN;
661  }
662 
663  return ((pattern >> HitTypeOffset) & HitTypeMask);
664 }
665 
666 inline uint16_t HitPattern::getMuonStation(uint16_t pattern)
667 {
668  return (getSubSubStructure(pattern) >> 2) + 1;
669 }
670 
671 inline uint16_t HitPattern::getDTSuperLayer(uint16_t pattern)
672 {
673  return (getSubSubStructure(pattern) & 3);
674 }
675 
676 inline uint16_t HitPattern::getCSCRing(uint16_t pattern)
677 {
678  return (getSubSubStructure(pattern) & 3) + 1;
679 }
680 
681 inline uint16_t HitPattern::getRPCLayer(uint16_t pattern)
682 {
683  uint16_t subSubStructure = getSubSubStructure(pattern);
684  uint16_t stat = subSubStructure >> 2;
685 
686  if likely(stat <= 1) {
687  return ((subSubStructure >> 1) & 1) + 1;
688  }
689 
690  return 0;
691 }
692 
693 inline uint16_t HitPattern::getRPCregion(uint16_t pattern)
694 {
695  return getSubSubStructure(pattern) & 1;
696 }
697 
698 inline bool HitPattern::validHitFilter(uint16_t pattern)
699 {
700  return getHitType(pattern) == HitPattern::VALID;
701 }
702 
704 {
705  return getHitType(pattern) == HitPattern::MISSING;
706 }
707 
709 {
710  return getHitType(pattern) == HitPattern::INACTIVE;
711 }
712 
713 inline bool HitPattern::badHitFilter(uint16_t pattern)
714 {
715  return getHitType(pattern) == HitPattern::BAD;
716 }
717 
719 {
720  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
721  return range.second - range.first;
722 }
723 
725 {
726  return countHits(category, trackerHitFilter);
727 }
728 
730 {
732 }
733 
735 {
737 }
738 
740 {
742 }
743 
745 {
747 }
748 
750 {
752 }
753 
755 {
757 }
758 
760 {
762 }
763 
765 {
767 }
768 
770 {
772 }
773 
775 {
777 }
778 
780 {
782 }
783 
785 {
787 }
788 
790 {
792 }
793 
795 {
797 }
798 
800 {
802 }
803 
805 {
806  return countHits(category, missingHitFilter);
807 }
808 
810 {
812 }
813 
815 {
817 }
818 
820 {
822 }
823 
825 {
827 }
828 
830 {
832 }
833 
835 {
837 }
838 
840 {
842 }
843 
845 {
847 }
848 
850 {
852 }
853 
855 {
857 }
858 
860 {
862 }
863 
865 {
867 }
868 
870 {
872 }
873 
874 inline int HitPattern::numberOfBadHits() const
875 {
877 }
878 
880 {
882 }
883 
885 {
887 }
888 
890 {
892 }
893 
895 {
897 }
898 
900 {
902 }
903 
905 {
907 }
908 
910 {
912 }
913 
915 {
917 }
918 
920 {
923 }
924 
926 {
927  return pixelLayersWithoutMeasurement(category) +
929 }
930 
932 {
933  return pixelBarrelLayersWithoutMeasurement(category) +
935 }
936 
938 {
939  return stripTIBLayersWithoutMeasurement(category) +
943 }
944 
946 {
947  return pixelLayersTotallyOffOrBad() +
949 }
950 
952 {
955 }
956 
958 {
963 }
964 
966 {
967  return pixelLayersNull() +
968  stripLayersNull();
969 }
970 
971 inline int HitPattern::pixelLayersNull() const
972 {
973  return pixelBarrelLayersNull() +
975 }
976 
977 inline int HitPattern::stripLayersNull() const
978 {
979  return stripTIBLayersNull() +
983 }
984 
986 {
987  return muonStations(0, 0);
988 }
989 
991 {
992  return muonStations(0, 3);
993 }
994 
996 {
997  return muonStations(0, -1);
998 }
999 
1001 {
1002  return muonStations(1, 0);
1003 }
1004 
1006 {
1007  return muonStations(1, 3);
1008 }
1009 
1011 {
1012  return muonStations(1, -1);
1013 }
1014 
1016 {
1017  return muonStations(2, 0);
1018 }
1019 
1021 {
1022  return muonStations(2, 3);
1023 }
1024 
1026 {
1027  return muonStations(2, -1);
1028 }
1029 
1031 {
1032  return muonStations(3, 0);
1033 }
1034 
1036 {
1037  return muonStations(3, 3);
1038 }
1039 
1041 {
1042  return muonStations(3, -1);
1043 }
1044 
1046 {
1047  return innermostMuonStationWithHits(0);
1048 }
1049 
1051 {
1052  return innermostMuonStationWithHits(3);
1053 }
1054 
1056 {
1057  return innermostMuonStationWithHits(-1);
1058 }
1059 
1061 {
1062  return outermostMuonStationWithHits(0);
1063 }
1064 
1066 {
1067  return outermostMuonStationWithHits(3);
1068 }
1069 
1071 {
1072  return outermostMuonStationWithHits(-1);
1073 }
1074 
1075 #ifndef CMS_NOCXX11 // cint....
1076 
1077 template<int N = HitPattern::MaxHits>
1078 struct PatternSet {
1079  static constexpr int MaxHits = N;
1080  unsigned char hit[N];
1081  unsigned char nhit;
1082 
1083  unsigned char const *begin() const
1084  {
1085  return hit;
1086  }
1087 
1088  unsigned char const *end() const
1089  {
1090  return hit + nhit;
1091  }
1092 
1093  unsigned char *begin()
1094  {
1095  return hit;
1096  }
1097 
1098  unsigned char *end()
1099  {
1100  return hit + nhit;
1101  }
1102 
1103  int size() const
1104  {
1105  return nhit;
1106  }
1107 
1108  unsigned char operator[](int i) const
1109  {
1110  return hit[i];
1111  }
1112 
1113  PatternSet() : nhit(0) {}
1114 
1115  PatternSet(HitPattern::HitCategory category, HitPattern const &hp)
1116  {
1117  fill(category, hp);
1118  }
1119 
1120  void fill(HitPattern::HitCategory category, HitPattern const &hp)
1121  {
1122  int lhit = 0;
1123  auto unpack = [&lhit, this](uint16_t pattern) -> bool {
1124  unsigned char p = 255 & (pattern >> 3);
1125  hit[lhit++] = p;
1126 
1127  // bouble sort
1128  if (lhit > 1) {
1129  for (auto h = hit + lhit - 1; h != hit; --h) {
1130  if ((*(h - 1)) <= p) {
1131  break;
1132  }
1133  (*h) = *(h - 1);
1134  *(h - 1) = p;
1135  }
1136  }
1137  return lhit < MaxHits;
1138  };
1139 
1140  hp.call(category, HitPattern::validHitFilter, unpack);
1141  nhit = lhit;
1142  }
1143 };
1144 
1145 template<int N>
1146 inline PatternSet<N> commonHits(PatternSet<N> const &p1, PatternSet<N> const &p2)
1147 {
1148  PatternSet<N> comm;
1149  comm.nhit = std::set_intersection(p1.begin(), p1.end(), p2.begin(), p2.end(), comm.begin()) - comm.begin();
1150  return comm;
1151 }
1152 #endif // gcc11
1153 
1154 } // namespace reco
1155 
1156 #endif
1157 
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:563
static uint16_t getCSCRing(uint16_t pattern)
CSC ring (1-4). Only valid for muon CSC patterns, of course.
Definition: HitPattern.h:676
static bool stripTECHitFilter(uint16_t pattern)
Definition: HitPattern.h:566
int pixelBarrelLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:585
int i
Definition: DBlmapReader.cc:9
int cscStationsWithAnyHits() const
Definition: HitPattern.h:1025
static uint32_t getLayer(uint16_t pattern)
Definition: HitPattern.h:624
void insertHit(const uint16_t pattern)
Definition: HitPattern.cc:961
int numberOfLostStripTIBHits(HitCategory category) const
Definition: HitPattern.h:839
int outermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
Definition: HitPattern.cc:902
static const unsigned short HIT_LENGTH
Definition: HitPattern.h:157
int outermostMuonStationWithValidHits() const
Definition: HitPattern.h:1060
static const unsigned short ARRAY_LENGTH
Definition: HitPattern.h:156
static const uint32_t NULL_RETURN
Definition: HitPattern.h:160
string fill
Definition: lumiContext.py:319
int pixelBarrelLayersNull() const
Definition: HitPattern.cc:723
int numberOfLostStripTOBHits(HitCategory category) const
Definition: HitPattern.h:849
static bool pixelHitFilter(uint16_t pattern)
Definition: HitPattern.h:505
int stripTIBLayersNull() const
Definition: HitPattern.cc:747
int numberOfInactiveHits() const
Definition: HitPattern.h:899
int stripTIBLayersWithMeasurement() const
Definition: HitPattern.cc:541
static bool badHitFilter(uint16_t pattern)
Definition: HitPattern.h:713
int stripTECLayersNull() const
Definition: HitPattern.cc:780
static const unsigned short SideOffset
Definition: HitPattern.h:373
static const uint16_t EMPTY_PATTERN
Definition: HitPattern.h:161
int muonStations(int subdet, int hitType) const
subdet = 0(all), 1(DT), 2(CSC), 3(RPC); hitType=-1(all), 0=valid, 3=bad
Definition: HitPattern.cc:870
static uint16_t getDTSuperLayer(uint16_t pattern)
DT superlayer (1-3). Where the &quot;hit&quot; was a DT segment, superlayer is 0. Only valid for muon DT patter...
Definition: HitPattern.h:671
static const unsigned short SubstrOffset
Definition: HitPattern.h:381
int stripTOBLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:631
int numberOfValidHits() const
Definition: HitPattern.h:734
int numberOfLostPixelHits(HitCategory category) const
Definition: HitPattern.h:819
int numberOfDTStationsWithRPhiView() const
Definition: HitPattern.cc:918
int numberOfBadHits() const
Definition: HitPattern.h:874
int cscStationsWithValidHits() const
Definition: HitPattern.h:1015
int pixelLayersNull() const
Definition: HitPattern.h:971
void call(HitCategory category, filterType typeFilter, F f) const
Definition: HitPattern.h:480
HitPattern & operator=(const HitPattern &other)
Definition: HitPattern.cc:46
uint16_t getTrackerMonoStereo(HitCategory category, uint16_t substr, uint16_t layer) const
Definition: HitPattern.cc:419
static const unsigned short MaxHits
Definition: HitPattern.h:158
uint32_t getTrackerLayerCase(HitCategory category, uint16_t substr, uint16_t layer) const
Definition: HitPattern.cc:387
int numberOfValidStripHits() const
Definition: HitPattern.h:764
int rpcStationsWithValidHits() const
Definition: HitPattern.h:1030
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:458
int countTypedHits(HitCategory category, filterType typeFilter, filterType filter) const
Definition: HitPattern.h:492
int numberOfValidStripLayersWithMonoAndStereo() const
Definition: HitPattern.cc:347
bool filterType(uint16_t)
Definition: HitPattern.h:401
int pixelEndcapLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:597
int numberOfLostMuonHits() const
Definition: HitPattern.h:814
static bool missingHitFilter(uint16_t pattern)
Definition: HitPattern.h:703
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:477
static const unsigned short HitTypeMask
Definition: HitPattern.h:370
static bool pixelBarrelHitFilter(uint16_t pattern)
Definition: HitPattern.h:516
int pixelEndcapLayersWithMeasurement() const
Definition: HitPattern.cc:529
static uint16_t encode(const TrackingRecHit &hit)
Definition: HitPattern.cc:86
int numberOfValidStripTOBHits() const
Definition: HitPattern.h:779
#define constexpr
int numberOfValidMuonCSCHits() const
Definition: HitPattern.h:794
int numberOfMuonHits() const
Definition: HitPattern.h:729
bool insertExpectedOuterHit(const uint16_t pattern)
Definition: HitPattern.cc:1005
static bool pixelEndcapHitFilter(uint16_t pattern)
Definition: HitPattern.h:526
int numberOfLostTrackerHits(HitCategory category) const
Definition: HitPattern.h:809
int numberOfLostStripHits(HitCategory category) const
Definition: HitPattern.h:834
int numberOfValidMuonRPCHits() const
Definition: HitPattern.h:799
bool hasValidHitInFirstPixelEndcap() const
Definition: HitPattern.cc:288
static bool validHitFilter(uint16_t pattern)
Definition: HitPattern.h:698
int muonStationsWithBadHits() const
Definition: HitPattern.h:990
#define unlikely(x)
uint8_t endInner
Definition: HitPattern.h:424
int trackerLayersWithoutMeasurementOld(HitCategory category) const
Definition: HitPattern.h:925
void printHitPattern(HitCategory category, int position, std::ostream &stream) const
Definition: HitPattern.cc:791
int stripLayersNull() const
Definition: HitPattern.h:977
#define likely(x)
int numberOfLostStripTIDHits(HitCategory category) const
Definition: HitPattern.h:844
int muonStationsWithValidHits() const
Definition: HitPattern.h:985
static const int CSC
Definition: MuonSubdetId.h:13
int pixelLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.h:931
int stripTOBLayersTotallyOffOrBad() const
Definition: HitPattern.cc:700
int rpcStationsWithBadHits() const
Definition: HitPattern.h:1035
static const unsigned short minTrackerWord
Definition: HitPattern.h:388
int innermostMuonStationWithAnyHits() const
Definition: HitPattern.h:1055
int trackerLayersTotallyOffOrBad() const
Definition: HitPattern.h:945
uint16_t hitPattern[ARRAY_LENGTH]
Definition: HitPattern.h:418
int numberOfValidPixelBarrelHits() const
Definition: HitPattern.h:754
int stripTIDLayersTotallyOffOrBad() const
Definition: HitPattern.cc:689
static bool muonCSCHitFilter(uint16_t pattern)
Definition: HitPattern.h:581
static uint32_t getHitType(uint16_t pattern)
Definition: HitPattern.h:657
int numberOfValidTECLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:382
int stripTIDLayersWithMeasurement() const
Definition: HitPattern.cc:552
susybsm::HSCParticleRefProd hp
Definition: classes.h:27
static const unsigned short SubDetectorMask
Definition: HitPattern.h:386
int numberOfTrackerHits(HitCategory category) const
Definition: HitPattern.h:724
int muonStationsWithAnyHits() const
Definition: HitPattern.h:995
static bool stripHitFilter(uint16_t pattern)
Definition: HitPattern.h:536
int pixelLayersTotallyOffOrBad() const
Definition: HitPattern.h:951
int stripTECLayersTotallyOffOrBad() const
Definition: HitPattern.cc:712
int stripLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.h:937
int numberOfBadMuonHits() const
Definition: HitPattern.h:879
T operator[](int i) const
int numberOfValidStripTIDHits() const
Definition: HitPattern.h:774
const std::complex< double > I
Definition: I.h:8
int numberOfDTStationsWithRZView() const
Definition: HitPattern.cc:932
double f[11][100]
bool appendHits(const I &begin, const I &end)
Definition: HitPattern.h:446
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
int numberOfValidStripTECHits() const
Definition: HitPattern.h:784
uint8_t beginInner
Definition: HitPattern.h:423
#define end
Definition: vmac.h:37
int stripTIDLayersNull() const
Definition: HitPattern.cc:758
int numberOfLostMuonRPCHits() const
Definition: HitPattern.h:869
static const unsigned short HitTypeOffset
Definition: HitPattern.h:369
double p2[4]
Definition: TauolaWrapper.h:90
int numberOfBadMuonRPCHits() const
Definition: HitPattern.h:894
int numberOfValidTIDLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:377
int dtStationsWithValidHits() const
Definition: HitPattern.h:1000
int stripLayersTotallyOffOrBad() const
Definition: HitPattern.h:957
int cscStationsWithBadHits() const
Definition: HitPattern.h:1020
uint8_t beginTrackHits
Definition: HitPattern.h:421
static uint32_t getSubStructure(uint16_t pattern)
Definition: HitPattern.h:615
int numberOfDTStationsWithBothViews() const
Definition: HitPattern.cc:945
static bool inactiveHitFilter(uint16_t pattern)
Definition: HitPattern.h:708
static const unsigned short minPixelWord
Definition: HitPattern.h:389
int numberOfValidTIBLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:372
static uint16_t getRPCregion(uint16_t pattern)
RPC region: 0 = barrel, 1 = endcap. Only valid for muon RPC patterns, of course.
Definition: HitPattern.h:693
static uint32_t getSubDetector(uint16_t pattern)
Definition: HitPattern.h:638
int dtStationsWithAnyHits() const
Definition: HitPattern.h:1010
int stripTIDLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:620
int pixelLayersWithMeasurementOld() const
Definition: HitPattern.h:914
Definition: DetId.h:18
int innermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
Definition: HitPattern.cc:885
int numberOfInactiveTrackerHits() const
Definition: HitPattern.h:904
static bool muonHitFilter(uint16_t pattern)
Definition: HitPattern.h:606
static bool trackerHitFilter(uint16_t pattern)
Definition: HitPattern.h:601
uint8_t endTrackHits
Definition: HitPattern.h:422
int numberOfLostPixelEndcapHits(HitCategory category) const
Definition: HitPattern.h:829
static const unsigned short SideMask
Definition: HitPattern.h:374
#define N
Definition: blowfish.cc:9
static const unsigned short minStripWord
Definition: HitPattern.h:390
std::pair< uint8_t, uint8_t > getCategoryIndexRange(HitCategory category) const
Definition: HitPattern.h:429
uint8_t hitCount
Definition: HitPattern.h:419
int innermostMuonStationWithBadHits() const
Definition: HitPattern.h:1050
uint8_t beginOuter
Definition: HitPattern.h:425
static const unsigned short SubDetectorOffset
Definition: HitPattern.h:385
int trackerLayersNull() const
Definition: HitPattern.h:965
int stripLayersWithMeasurement() const
Definition: HitPattern.h:919
int pixelBarrelLayersWithMeasurement() const
Definition: HitPattern.cc:517
int numberOfBadMuonDTHits() const
Definition: HitPattern.h:884
int outermostMuonStationWithBadHits() const
Definition: HitPattern.h:1065
int dtStationsWithBadHits() const
Definition: HitPattern.h:1005
int numberOfValidStripTIBHits() const
Definition: HitPattern.h:769
static bool stripTOBHitFilter(uint16_t pattern)
Definition: HitPattern.h:561
int numberOfLostHits(HitCategory category) const
Definition: HitPattern.h:804
int numberOfValidTrackerHits() const
Definition: HitPattern.h:739
int numberOfValidPixelEndcapHits() const
Definition: HitPattern.h:759
uint16_t getHitPatternByAbsoluteIndex(int position) const
Definition: HitPattern.cc:234
static uint32_t getSide(uint16_t pattern)
Definition: HitPattern.h:648
int numberOfLostPixelBarrelHits(HitCategory category) const
Definition: HitPattern.h:824
int stripTOBLayersNull() const
Definition: HitPattern.cc:769
static bool muonDTHitFilter(uint16_t pattern)
Definition: HitPattern.h:571
int trackerLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:494
bool insertExpectedInnerHit(const uint16_t pattern)
Definition: HitPattern.cc:992
int numberOfLostStripTECHits(HitCategory category) const
Definition: HitPattern.h:854
static bool stripTIBHitFilter(uint16_t pattern)
Definition: HitPattern.h:551
int pixelBarrelLayersTotallyOffOrBad() const
Definition: HitPattern.cc:654
int numberOfLostMuonDTHits() const
Definition: HitPattern.h:859
#define begin
Definition: vmac.h:30
double p1[4]
Definition: TauolaWrapper.h:89
static const unsigned short SubstrMask
Definition: HitPattern.h:382
int numberOfBadMuonCSCHits() const
Definition: HitPattern.h:889
static const int RPC
Definition: MuonSubdetId.h:14
static uint16_t isStereo(DetId i)
Definition: HitPattern.cc:839
static const unsigned short LayerOffset
Definition: HitPattern.h:377
static int position[264][3]
Definition: ReadPGInfo.cc:509
int numberOfValidMuonDTHits() const
Definition: HitPattern.h:789
bool insertTrackHit(const uint16_t pattern)
Definition: HitPattern.cc:973
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:574
int stripTECLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:642
int pixelEndcapLayersTotallyOffOrBad() const
Definition: HitPattern.cc:666
int numberOfValidPixelHits() const
Definition: HitPattern.h:749
bool appendHit(const TrackingRecHit &hit)
Definition: HitPattern.cc:168
static uint16_t getRPCLayer(uint16_t pattern)
RPC layer: for station 1 and 2, layer = 1(inner) or 2(outer); for station 3, 4 layer is always 0...
Definition: HitPattern.h:681
tuple cout
Definition: gather_cfg.py:121
static uint16_t getMuonStation(uint16_t pattern)
Muon station (1-4). Only valid for muon patterns, of course. only for patterns from muon...
Definition: HitPattern.h:666
static const int DT
Definition: MuonSubdetId.h:12
void print(HitCategory category, std::ostream &stream=std::cout) const
Definition: HitPattern.cc:822
int numberOfValidTOBLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:367
bool hasValidHitInFirstPixelBarrel() const
Definition: HitPattern.cc:276
int countHits(HitCategory category, filterType filter) const
Definition: HitPattern.h:466
int numberOfValidMuonHits() const
Definition: HitPattern.h:744
static uint32_t getSubSubStructure(uint16_t pattern)
Definition: HitPattern.h:629
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
uint16_t getHitPattern(HitCategory category, int position) const
Definition: HitPattern.h:456
int stripTIBLayersTotallyOffOrBad() const
Definition: HitPattern.cc:678
static const unsigned short LayerMask
Definition: HitPattern.h:378
static bool stripTIDHitFilter(uint16_t pattern)
Definition: HitPattern.h:556
static bool muonRPCHitFilter(uint16_t pattern)
Definition: HitPattern.h:591
int rpcStationsWithAnyHits() const
Definition: HitPattern.h:1040
uint8_t endOuter
Definition: HitPattern.h:426
int trackerLayersWithMeasurementOld() const
Definition: HitPattern.h:909
tuple size
Write out results.
static bool stripSubdetectorHitFilter(uint16_t pattern, StripSubdetector::SubDetector substructure)
Definition: HitPattern.h:542
int innermostMuonStationWithValidHits() const
Definition: HitPattern.h:1045
int numberOfHits(HitCategory category) const
Definition: HitPattern.h:718
int numberOfLostMuonCSCHits() const
Definition: HitPattern.h:864
int outermostMuonStationWithAnyHits() const
Definition: HitPattern.h:1070
int stripTIBLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:609
int pixelEndcapLayersNull() const
Definition: HitPattern.cc:735