CMS 3D CMS Logo

HitPattern.cc
Go to the documentation of this file.
10 
12 
14 
15 #include <bitset>
16 
17 using namespace reco;
18 
20  : hitCount(0), beginTrackHits(0), endTrackHits(0), beginInner(0), endInner(0), beginOuter(0), endOuter(0) {
22 }
23 
25  : hitCount(other.hitCount),
26  beginTrackHits(other.beginTrackHits),
27  endTrackHits(other.endTrackHits),
28  beginInner(other.beginInner),
29  endInner(other.endInner),
30  beginOuter(other.beginOuter),
31  endOuter(other.endOuter) {
32  memcpy(this->hitPattern, other.hitPattern, sizeof(uint16_t) * HitPattern::ARRAY_LENGTH);
33 }
34 
36 
38  if (this == &other) {
39  return *this;
40  }
41 
42  this->hitCount = other.hitCount;
43 
44  this->beginTrackHits = other.beginTrackHits;
45  this->endTrackHits = other.endTrackHits;
46 
47  this->beginInner = other.beginInner;
48  this->endInner = other.endInner;
49 
50  this->beginOuter = other.beginOuter;
51  this->endOuter = other.endOuter;
52 
53  memcpy(this->hitPattern, other.hitPattern, sizeof(uint16_t) * HitPattern::ARRAY_LENGTH);
54 
55  return *this;
56 }
57 
58 void HitPattern::clear(void) {
59  this->hitCount = 0;
60  this->beginTrackHits = 0;
61  this->endTrackHits = 0;
62  this->beginInner = 0;
63  this->endInner = 0;
64  this->beginOuter = 0;
65  this->endOuter = 0;
66 
67  memset(this->hitPattern, EMPTY_PATTERN, sizeof(uint16_t) * HitPattern::ARRAY_LENGTH);
68 }
69 
71  return appendHit(*ref, ttopo);
72 }
73 
74 uint16_t HitPattern::encode(const TrackingRecHit& hit, const TrackerTopology& ttopo) {
75  return encode(hit.geographicalId(), hit.getType(), ttopo);
76 }
77 
78 namespace {
79  uint16_t encodeMuonLayer(const DetId& id) {
80  uint16_t detid = id.det();
81  uint16_t subdet = id.subdetId();
82 
83  uint16_t layer = 0x0;
84  if (detid == DetId::Muon) {
85  switch (subdet) {
86  case MuonSubdetId::DT:
87  layer = ((DTLayerId(id.rawId()).station() - 1) << 2);
88  layer |= DTLayerId(id.rawId()).superLayer();
89  break;
90  case MuonSubdetId::CSC:
91  layer = ((CSCDetId(id.rawId()).station() - 1) << 2);
92  layer |= (CSCDetId(id.rawId()).ring() - 1);
93  break;
94  case MuonSubdetId::RPC: {
95  RPCDetId rpcid(id.rawId());
96  layer = ((rpcid.station() - 1) << 2);
97  layer |= (rpcid.station() <= 2) ? ((rpcid.layer() - 1) << 1) : 0x0;
98  layer |= abs(rpcid.region());
99  } break;
100  case MuonSubdetId::GEM: {
101  GEMDetId gemid(id.rawId());
102  layer = ((gemid.station() - 1) << 2);
103  layer |= abs(gemid.layer() - 1);
104  } break;
105  case MuonSubdetId::ME0: {
106  ME0DetId me0id(id.rawId());
107  //layer = ((me0id.roll()-1)<<1) + abs(me0id.layer()-1);
108  //layer = ((me0id.roll()-1)<<1) + abs(me0id.layer());
109  //Only layer information that is meaningful is in the roll/etapartition
110  layer = (me0id.roll());
111  } break;
112  }
113  }
114  return layer;
115  }
116  uint16_t encodeTimingLayer(const DetId& id) {
117  uint16_t detid = id.det();
118  uint16_t subdet = id.subdetId();
119  uint16_t layer = 0x0;
120  if (detid == DetId::Forward && subdet == FastTime) {
121  MTDDetId mtdid(id);
122  switch (mtdid.mtdSubDetector()) {
123  case MTDDetId::BTL:
124  layer = BTLDetId(id).modType();
125  break;
126  case MTDDetId::ETL:
127  layer = ETLDetId(id).mtdRR();
128  break;
129  default:
130  throw cms::Exception("HitPattern") << "Invalid MTD Subdetector " << mtdid.mtdSubDetector() << "!";
131  }
132  } else {
133  throw cms::Exception("HitPattern") << "Invalid DetId for FastTime det= " << detid << " subdet= " << subdet << "!";
134  }
135  return layer;
136  }
137 } // namespace
138 
139 uint16_t HitPattern::encode(const DetId& id, TrackingRecHit::Type hitType, const TrackerTopology& ttopo) {
140  uint16_t detid = id.det();
141  uint16_t subdet = id.subdetId();
142 
143  // adding layer/disk/wheel bits
144  uint16_t layer = 0x0;
145  if (detid == DetId::Tracker) {
146  layer = ttopo.layer(id);
147  } else if (detid == DetId::Muon) {
148  layer = encodeMuonLayer(id);
149  } else if (detid == DetId::Forward && subdet == FastTime) {
150  layer = encodeTimingLayer(id);
151  }
152 
153  // adding mono/stereo bit
154  uint16_t side = 0x0;
155  if (detid == DetId::Tracker) {
156  side = isStereo(id, ttopo);
157  } else if (detid == DetId::Muon || (detid == DetId::Forward && subdet == FastTime)) {
158  side = 0x0;
159  }
160 
161  // juggle the detid around to deal with the fact the bitwidth is larger
162  // DetId::Muon is 2 and DetId::Forward is 6, must map to 0 and 2 respectively
163  if (detid == DetId::Tracker) {
164  detid = TRACKER_HIT;
165  } else if (detid == DetId::Muon) {
166  detid = MUON_HIT; // DetId::Muon is 2 and needs to be reordered to match old encoding where it got masked
167  } else if (detid == DetId::Forward && subdet == FastTime) {
168  detid = MTD_HIT; // since DetId::Forward is some other number, reorder it here
169  }
170 
171  return encode(detid, subdet, layer, side, hitType);
172 }
173 
174 uint16_t HitPattern::encode(uint16_t det, uint16_t subdet, uint16_t layer, uint16_t side, TrackingRecHit::Type hitType) {
176 
177  // adding tracker/muon/mtd detector bits
179 
180  // adding substructure (PXB, PXF, TIB, TID, TOB, TEC, or DT, CSC, RPC,GEM, or BTL, ETL) bits
181  pattern |= (subdet & SubstrMask) << SubstrOffset;
182 
183  // adding layer/disk/wheel/ring/modType bits
185 
186  // adding mono/stereo bit
187  pattern |= (side & SideMask) << SideOffset;
188 
189  TrackingRecHit::Type patternHitType =
194  : hitType);
195 
196  pattern |= (patternHitType & HitTypeMask) << HitTypeOffset;
197 
198  return pattern;
199 }
200 
202  return appendHit(hit.geographicalId(), hit.getType(), ttopo);
203 }
204 
205 bool HitPattern::appendHit(const DetId& id, TrackingRecHit::Type hitType, const TrackerTopology& ttopo) {
206  //if HitPattern is full, journey ends no matter what.
208  return false;
209  }
210 
211  uint16_t pattern = HitPattern::encode(id, hitType, ttopo);
212 
213  return appendHit(pattern, hitType);
214 }
215 
216 bool HitPattern::appendHit(const uint16_t pattern, TrackingRecHit::Type hitType) {
217  //if HitPattern is full, journey ends no matter what.
219  return false;
220  }
221 
222  switch (hitType) {
226  case TrackingRecHit::bad:
227  // hitCount != endT => we are not inserting T type of hits but of T'
228  // 0 != beginT || 0 != endT => we already have hits of T type
229  // so we already have hits of T in the vector and we don't want to
230  // mess them with T' hits.
231  if UNLIKELY (((hitCount != endTrackHits) && (0 != beginTrackHits || 0 != endTrackHits))) {
232  cms::Exception("HitPattern") << "TRACK_HITS"
233  << " were stored on this object before hits of some other category were inserted "
234  << "but hits of the same category should be inserted in a row. "
235  << "Please rework the code so it inserts all "
236  << "TRACK_HITS"
237  << " in a row.";
238  return false;
239  }
240  return insertTrackHit(pattern);
241  break;
244  if UNLIKELY (((hitCount != endInner) && (0 != beginInner || 0 != endInner))) {
245  cms::Exception("HitPattern") << "MISSING_INNER_HITS"
246  << " were stored on this object before hits of some other category were inserted "
247  << "but hits of the same category should be inserted in a row. "
248  << "Please rework the code so it inserts all "
249  << "MISSING_INNER_HITS"
250  << " in a row.";
251  return false;
252  }
254  break;
257  if UNLIKELY (((hitCount != endOuter) && (0 != beginOuter || 0 != endOuter))) {
258  cms::Exception("HitPattern") << "MISSING_OUTER_HITS"
259  << " were stored on this object before hits of some other category were inserted "
260  << "but hits of the same category should be inserted in a row. "
261  << "Please rework the code so it inserts all "
262  << "MISSING_OUTER_HITS"
263  << " in a row.";
264  return false;
265  }
267  break;
268  }
269 
270  return false;
271 }
272 
273 bool HitPattern::appendTrackerHit(uint16_t subdet, uint16_t layer, uint16_t stereo, TrackingRecHit::Type hitType) {
274  return appendHit(encode(TRACKER_HIT, subdet, layer, stereo, hitType), hitType);
275 }
276 
278  //if HitPattern is full, journey ends no matter what.
280  return false;
281  }
282 
283  if UNLIKELY (id.det() != DetId::Muon) {
284  throw cms::Exception("HitPattern")
285  << "Got DetId from det " << id.det()
286  << " that is not Muon in appendMuonHit(), which should only be used for muon hits in the HitPattern IO rule";
287  }
288 
289  uint16_t subdet = id.subdetId();
290  return appendHit(encode(MUON_HIT, subdet, encodeMuonLayer(id), 0, hitType), hitType);
291 }
292 
294  if UNLIKELY ((position < 0 || position >= hitCount)) {
296  }
297  /*
298  Note: you are not taking a consecutive sequence of HIT_LENGTH bits starting from position * HIT_LENGTH
299  as the bit order in the words are reversed.
300  e.g. if position = 0 you take the lowest 12 bits of the first word.
301 
302  I hope this can clarify what is the memory layout of such thing
303 
304  straight 01234567890123456789012345678901 | 23456789012345678901234567890123 | 4567
305  (global) 0 1 2 3 | 3 4 5 6 | 6
306  words [--------------0---------------] | [--------------1---------------] | [---
307  word 01234567890123456789012345678901 | 01234567890123456789012345678901 | 0123
308  (str) 0 1 2 3 | 0 1 2 3 | 0
309  [--------------0---------------] | [--------------1---------------] | [---
310  word 10987654321098765432109876543210 | 10987654321098765432109876543210 | 1098
311  (rev) 32 21 10 0 | 32 21 10 0 | 32
312  reverse 10987654321098765432109876543210 | 32109876543210987654321098765432 | 5432
313  32 21 10 0 | 6 65 54 43 3 9
314 
315  ugly enough, but it's not my fault, I was not even in CMS at that time [gpetrucc]
316  */
317 
318  uint16_t bitEndOffset = (position + 1) * HIT_LENGTH;
319  uint8_t secondWord = (bitEndOffset >> 4);
320  uint8_t secondWordBits = bitEndOffset & (16 - 1); // that is, bitEndOffset % 16
321  if (secondWordBits >= HIT_LENGTH) { // full block is in this word
322  uint8_t lowBitsToTrash = secondWordBits - HIT_LENGTH;
323  uint16_t myResult = (hitPattern[secondWord] >> lowBitsToTrash) & ((1 << HIT_LENGTH) - 1);
324  return myResult;
325  } else {
326  uint8_t firstWordBits = HIT_LENGTH - secondWordBits;
327  uint16_t firstWordBlock = hitPattern[secondWord - 1] >> (16 - firstWordBits);
328  uint16_t secondWordBlock = hitPattern[secondWord] & ((1 << secondWordBits) - 1);
329  uint16_t myResult = firstWordBlock + (secondWordBlock << firstWordBits);
330  return myResult;
331  }
332 }
333 
335  for (int i = beginTrackHits; i < endTrackHits; ++i) {
337  bool pixelHitFilter = ((det == 1 && pixelBarrelHitFilter(pattern)) || (det == 2 && pixelEndcapHitFilter(pattern)));
339  return true;
340  }
341  }
342  return false;
343 }
344 
345 int HitPattern::numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const {
346  bool hasMono[SubstrMask + 1][LayerMask + 1];
347  bool hasStereo[SubstrMask + 1][LayerMask + 1];
348  memset(hasMono, 0, sizeof(hasMono));
349  memset(hasStereo, 0, sizeof(hasStereo));
350 
351  // mark which layers have mono/stereo hits
352  for (int i = beginTrackHits; i < endTrackHits; ++i) {
354  uint16_t subStructure = getSubStructure(pattern);
355 
357  if (stripdet != 0 && subStructure != stripdet) {
358  continue;
359  }
360 
361  if (layer != 0 && getSubSubStructure(pattern) != layer) {
362  continue;
363  }
364 
365  switch (getSide(pattern)) {
366  case 0: // mono
367  hasMono[subStructure][getLayer(pattern)] = true;
368  break;
369  case 1: // stereo
370  hasStereo[subStructure][getLayer(pattern)] = true;
371  break;
372  default:;
373  break;
374  }
375  }
376  }
377 
378  // count how many layers have mono and stereo hits
379  int count = 0;
380  for (int i = 0; i < SubstrMask + 1; ++i) {
381  for (int j = 0; j < LayerMask + 1; ++j) {
382  if (hasMono[i][j] && hasStereo[i][j]) {
383  count++;
384  }
385  }
386  }
387  return count;
388 }
389 
391  auto category = TRACK_HITS;
392  std::bitset<128> side[2];
393  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
394  for (int i = range.first; i < range.second; ++i) {
396  if (pattern > maxTrackerWord)
397  continue;
398  if (pattern < minStripWord)
399  continue;
400  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
401  if (hitType != HIT_TYPE::VALID)
402  continue;
403  auto apattern = (pattern - minTrackerWord) >> LayerOffset;
404  // assert(apattern<128);
405  side[getSide(pattern)].set(apattern);
406  }
407  // assert(numberOfValidStripLayersWithMonoAndStereo(0, 0)==int((side[0]&side[1]).count()));
408  return (side[0] & side[1]).count();
409 }
410 
413 }
414 
417 }
418 
421 }
422 
425 }
426 
427 uint32_t HitPattern::getTrackerLayerCase(HitCategory category, uint16_t substr, uint16_t layer) const {
428  uint16_t tk_substr_layer =
429  (0x1 << SubDetectorOffset) + ((substr & SubstrMask) << SubstrOffset) + ((layer & LayerMask) << LayerOffset);
430 
432 
433  // layer case 0: valid + (missing, off, bad) ==> with measurement
434  // layer case 1: missing + (off, bad) ==> without measurement
435  // layer case 2: off, bad ==> totally off or bad, cannot say much
436  // layer case NULL_RETURN: track outside acceptance or in gap ==> null
437  uint32_t layerCase = NULL_RETURN;
438  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
439  for (int i = range.first; i < range.second; ++i) {
441  if ((pattern & mask) == tk_substr_layer) {
442  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
443  if (hitType < layerCase) {
444  // BAD and INACTIVE as the same type (as INACTIVE)
445  layerCase = (hitType == HIT_TYPE::BAD ? (uint32_t)HIT_TYPE::INACTIVE : hitType);
446  if (layerCase == HIT_TYPE::VALID) {
447  break;
448  }
449  }
450  }
451  }
452  return layerCase;
453 }
454 
455 uint16_t HitPattern::getTrackerMonoStereo(HitCategory category, uint16_t substr, uint16_t layer) const {
456  uint16_t tk_substr_layer =
457  (0x1 << SubDetectorOffset) + ((substr & SubstrMask) << SubstrOffset) + ((layer & LayerMask) << LayerOffset);
459 
460  // 0: neither a valid mono nor a valid stereo hit
461  // MONO: valid mono hit
462  // STEREO: valid stereo hit
463  // MONO | STEREO: both
464  uint16_t monoStereo = 0x0;
465  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
466  for (int i = range.first; i < range.second; ++i) {
468  if ((pattern & mask) == tk_substr_layer) {
469  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
470  if (hitType == HIT_TYPE::VALID) {
471  switch (getSide(pattern)) {
472  case 0: // mono
473  monoStereo |= MONO;
474  break;
475  case 1: // stereo
476  monoStereo |= STEREO;
477  break;
478  }
479  }
480 
481  if (monoStereo == (MONO | STEREO)) {
482  break;
483  }
484  }
485  }
486  return monoStereo;
487 }
488 
490  auto category = TRACK_HITS;
491  std::bitset<128> layerOk;
492  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
493  for (int i = range.first; i < range.second; ++i) {
496  continue;
497  if (pattern > minStripWord)
498  continue;
499  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
500  if (hitType != HIT_TYPE::VALID)
501  continue;
503  // assert(pattern<128);
504  layerOk.set(pattern);
505  }
506  // assert(pixelLayersWithMeasurementOld()==int(layerOk.count()));
507  return layerOk.count();
508 }
509 
511  auto category = TRACK_HITS;
512  std::bitset<128> layerOk;
513  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
514  for (int i = range.first; i < range.second; ++i) {
517  continue;
518  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
519  if (hitType != HIT_TYPE::VALID)
520  continue;
522  // assert(pattern<128);
523  layerOk.set(pattern);
524  }
525  // assert(trackerLayersWithMeasurementOld()==int(layerOk.count()));
526  return layerOk.count();
527 }
528 
530  std::bitset<128> layerOk;
531  std::bitset<128> layerMissed;
532  std::pair<uint8_t, uint8_t> range = getCategoryIndexRange(category);
533  for (int i = range.first; i < range.second; ++i) {
536  continue;
537  uint16_t hitType = (pattern >> HitTypeOffset) & HitTypeMask;
539  // assert(pattern<128);
540  if (hitType == HIT_TYPE::VALID)
541  layerOk.set(pattern);
542  if (hitType == HIT_TYPE::MISSING)
543  layerMissed.set(pattern);
544  }
545  layerMissed &= ~layerOk;
546 
547  // assert(trackerLayersWithoutMeasurementOld(category)==int(layerMissed.count()));
548 
549  return layerMissed.count();
550 }
551 
553  int count = 0;
554  uint16_t NPixBarrel = 4;
555  for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
557  count++;
558  }
559  }
560  return count;
561 }
562 
564  int count = 0;
565  uint16_t NPixForward = 3;
566  for (uint16_t layer = 1; layer <= NPixForward; layer++) {
568  count++;
569  }
570  }
571  return count;
572 }
573 
575  int count = 0;
576  for (uint16_t layer = 1; layer <= 4; layer++) {
577  if (getTrackerLayerCase(TRACK_HITS, StripSubdetector::TIB, layer) == HIT_TYPE::VALID) {
578  count++;
579  }
580  }
581  return count;
582 }
583 
585  int count = 0;
586  for (uint16_t layer = 1; layer <= 3; layer++) {
587  if (getTrackerLayerCase(TRACK_HITS, StripSubdetector::TID, layer) == HIT_TYPE::VALID) {
588  count++;
589  }
590  }
591  return count;
592 }
593 
595  int count = 0;
596  for (uint16_t layer = 1; layer <= 6; layer++) {
597  if (getTrackerLayerCase(TRACK_HITS, StripSubdetector::TOB, layer) == HIT_TYPE::VALID) {
598  count++;
599  }
600  }
601  return count;
602 }
603 
605  int count = 0;
606  for (uint16_t layer = 1; layer <= 9; layer++) {
607  if (getTrackerLayerCase(TRACK_HITS, StripSubdetector::TEC, layer) == HIT_TYPE::VALID) {
608  count++;
609  }
610  }
611  return count;
612 }
613 
615  int count = 0;
616  uint16_t NPixBarrel = 4;
617  for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
618  if (getTrackerLayerCase(category, PixelSubdetector::PixelBarrel, layer) == HIT_TYPE::MISSING) {
619  count++;
620  }
621  }
622  return count;
623 }
624 
626  int count = 0;
627  uint16_t NPixForward = 3;
628  for (uint16_t layer = 1; layer <= NPixForward; layer++) {
629  if (getTrackerLayerCase(category, PixelSubdetector::PixelEndcap, layer) == HIT_TYPE::MISSING) {
630  count++;
631  }
632  }
633  return count;
634 }
635 
637  int count = 0;
638  for (uint16_t layer = 1; layer <= 4; layer++) {
639  if (getTrackerLayerCase(category, StripSubdetector::TIB, layer) == HIT_TYPE::MISSING) {
640  count++;
641  }
642  }
643  return count;
644 }
645 
647  int count = 0;
648  for (uint16_t layer = 1; layer <= 3; layer++) {
649  if (getTrackerLayerCase(category, StripSubdetector::TID, layer) == HIT_TYPE::MISSING) {
650  count++;
651  }
652  }
653  return count;
654 }
655 
657  int count = 0;
658  for (uint16_t layer = 1; layer <= 6; layer++) {
659  if (getTrackerLayerCase(category, StripSubdetector::TOB, layer) == HIT_TYPE::MISSING) {
660  count++;
661  }
662  }
663  return count;
664 }
665 
667  int count = 0;
668  for (uint16_t layer = 1; layer <= 9; layer++) {
669  if (getTrackerLayerCase(category, StripSubdetector::TEC, layer) == HIT_TYPE::MISSING) {
670  count++;
671  }
672  }
673  return count;
674 }
675 
677  int count = 0;
678  uint16_t NPixBarrel = 4;
679  for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
680  if (getTrackerLayerCase(category, PixelSubdetector::PixelBarrel, layer) == HIT_TYPE::INACTIVE) {
681  count++;
682  }
683  }
684  return count;
685 }
686 
688  int count = 0;
689  uint16_t NPixForward = 3;
690  for (uint16_t layer = 1; layer <= NPixForward; layer++) {
691  if (getTrackerLayerCase(category, PixelSubdetector::PixelEndcap, layer) == HIT_TYPE::INACTIVE) {
692  count++;
693  }
694  }
695  return count;
696 }
697 
699  int count = 0;
700  for (uint16_t layer = 1; layer <= 4; layer++) {
701  if (getTrackerLayerCase(category, StripSubdetector::TIB, layer) == HIT_TYPE::INACTIVE) {
702  count++;
703  }
704  }
705  return count;
706 }
707 
709  int count = 0;
710  for (uint16_t layer = 1; layer <= 3; layer++) {
711  if (getTrackerLayerCase(category, StripSubdetector::TID, layer) == HIT_TYPE::INACTIVE) {
712  count++;
713  }
714  }
715  return count;
716 }
717 
719  int count = 0;
720  for (uint16_t layer = 1; layer <= 6; layer++) {
721  if (getTrackerLayerCase(category, StripSubdetector::TOB, layer) == HIT_TYPE::INACTIVE) {
722  count++;
723  }
724  }
725  return count;
726 }
727 
729  int count = 0;
730  for (uint16_t layer = 1; layer <= 9; layer++) {
731  if (getTrackerLayerCase(category, StripSubdetector::TEC, layer) == HIT_TYPE::INACTIVE) {
732  count++;
733  }
734  }
735  return count;
736 }
737 
739  int count = 0;
740  uint16_t NPixBarrel = 4;
741  for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
743  count++;
744  }
745  }
746  return count;
747 }
748 
750  int count = 0;
751  uint16_t NPixForward = 3;
752  for (uint16_t layer = 1; layer <= NPixForward; layer++) {
754  count++;
755  }
756  }
757  return count;
758 }
759 
761  int count = 0;
762  for (uint16_t layer = 1; layer <= 4; layer++) {
764  count++;
765  }
766  }
767  return count;
768 }
769 
771  int count = 0;
772  for (uint16_t layer = 1; layer <= 3; layer++) {
774  count++;
775  }
776  }
777  return count;
778 }
779 
781  int count = 0;
782  for (uint16_t layer = 1; layer <= 6; layer++) {
784  count++;
785  }
786  }
787  return count;
788 }
789 
791  int count = 0;
792  for (uint16_t layer = 1; layer <= 9; layer++) {
794  count++;
795  }
796  }
797  return count;
798 }
799 
801  uint16_t pattern = getHitPattern(category, position);
802  stream << "\t";
803  if (muonHitFilter(pattern)) {
804  stream << "muon";
805  } else if (trackerHitFilter(pattern)) {
806  stream << "tracker";
807  } else if (timingHitFilter(pattern)) {
808  stream << "timing";
809  }
810 
811  stream << "\tsubstructure " << getSubStructure(pattern);
812  if (muonHitFilter(pattern)) {
813  stream << "\tstation " << getMuonStation(pattern);
814  if (muonDTHitFilter(pattern)) {
815  stream << "\tdt superlayer " << getDTSuperLayer(pattern);
816  } else if (muonCSCHitFilter(pattern)) {
817  stream << "\tcsc ring " << getCSCRing(pattern);
818  } else if (muonRPCHitFilter(pattern)) {
819  stream << "\trpc " << (getRPCregion(pattern) ? "endcaps" : "barrel") << ", layer " << getRPCLayer(pattern);
820  } else if (muonGEMHitFilter(pattern)) {
821  stream << "\tgem " << (getGEMLayer(pattern) ? "layer1" : "layer2") << ", station " << getGEMStation(pattern);
822  } else if (muonME0HitFilter(pattern)) {
823  stream << "\tme0 ";
824  } else {
825  stream << "(UNKNOWN Muon SubStructure!) \tsubsubstructure " << getSubStructure(pattern);
826  }
827  } else if (timingHitFilter(pattern)) {
828  stream << "\tdetector " << getSubStructure(pattern);
829  } else {
830  stream << "\tlayer " << getLayer(pattern);
831  }
832  stream << "\thit type " << getHitType(pattern);
833  stream << std::endl;
834 }
835 
836 void HitPattern::print(HitCategory category, std::ostream& stream) const {
837  stream << "HitPattern" << std::endl;
838  for (int i = 0; i < numberOfAllHits(category); ++i) {
840  }
841  std::ios_base::fmtflags flags = stream.flags();
842  stream.setf(std::ios_base::hex, std::ios_base::basefield);
843  stream.setf(std::ios_base::showbase);
844 
845  for (int i = 0; i < this->numberOfAllHits(category); ++i) {
846  stream << getHitPattern(category, i) << std::endl;
847  }
848 
849  stream.flags(flags);
850 }
851 
852 uint16_t HitPattern::isStereo(DetId i, const TrackerTopology& ttopo) {
853  if (i.det() != DetId::Tracker) {
854  return 0;
855  }
856 
857  switch (i.subdetId()) {
860  return 0;
862  return ttopo.tibIsStereo(i);
864  return ttopo.tidIsStereo(i);
866  return ttopo.tobIsStereo(i);
868  return ttopo.tecIsStereo(i);
869  default:
870  return 0;
871  }
872 }
873 
874 int HitPattern::muonStations(int subdet, int hitType) const {
875  int stations[4] = {0, 0, 0, 0};
876  for (int i = beginTrackHits; i < endTrackHits; ++i) {
878  if (muonHitFilter(pattern) && (subdet == 0 || int(getSubStructure(pattern)) == subdet) &&
879  (hitType == -1 || int(getHitType(pattern)) == hitType)) {
880  stations[getMuonStation(pattern) - 1] = 1;
881  }
882  }
883 
884  return stations[0] + stations[1] + stations[2] + stations[3];
885 }
886 
888  int ret = 0;
889  for (int i = beginTrackHits; i < endTrackHits; ++i) {
891  if (muonHitFilter(pattern) && (hitType == -1 || int(getHitType(pattern)) == hitType)) {
892  int stat = getMuonStation(pattern);
893  if (ret == 0 || stat < ret) {
894  ret = stat;
895  }
896  }
897  }
898 
899  return ret;
900 }
901 
903  int ret = 0;
904  for (int i = beginTrackHits; i < endTrackHits; ++i) {
906  if (muonHitFilter(pattern) && (hitType == -1 || int(getHitType(pattern)) == hitType)) {
907  int stat = getMuonStation(pattern);
908  if (ret == 0 || stat > ret) {
909  ret = stat;
910  }
911  }
912  }
913  return ret;
914 }
915 
917  int stations[4] = {0, 0, 0, 0};
918  for (int i = beginTrackHits; i < endTrackHits; ++i) {
920 
922  stations[getMuonStation(pattern) - 1] = 1;
923  }
924  }
925  return stations[0] + stations[1] + stations[2] + stations[3];
926 }
927 
929  int stations[4] = {0, 0, 0, 0};
930  for (int i = beginTrackHits; i < endTrackHits; ++i) {
933  stations[getMuonStation(pattern) - 1] = 1;
934  }
935  }
936  return stations[0] + stations[1] + stations[2] + stations[3];
937 }
938 
940  int stations[4][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
941  for (int i = beginTrackHits; i < endTrackHits; ++i) {
944  stations[getMuonStation(pattern) - 1][getDTSuperLayer(pattern) == 2] = 1;
945  }
946  }
947 
948  return stations[0][0] * stations[0][1] + stations[1][0] * stations[1][1] + stations[2][0] * stations[2][1] +
949  stations[3][0] * stations[3][1];
950 }
951 
952 void HitPattern::insertHit(const uint16_t pattern) {
953  int offset = hitCount * HIT_LENGTH;
954  for (int i = 0; i < HIT_LENGTH; i++) {
955  int pos = offset + i;
956  uint16_t bit = (pattern >> i) & 0x1;
957  //equivalent to hitPattern[pos / 16] += bit << ((offset + i) % 16);
958  hitPattern[pos >> 4] += bit << ((offset + i) & (16 - 1));
959  }
960  hitCount++;
961 }
962 
963 bool HitPattern::insertTrackHit(const uint16_t pattern) {
964  // if begin is 0, this is the first hit of this type being inserted, so
965  // we need to update begin so it points to the correct index, the first
966  // empty index.
967  // unlikely, because it will happen only when inserting
968  // the first hit of this type
969  if UNLIKELY ((0 == beginTrackHits && 0 == endTrackHits)) {
971  // before the first hit of this type is inserted, there are no hits
973  }
974 
976  endTrackHits++;
977 
978  return true;
979 }
980 
982  if UNLIKELY ((0 == beginInner && 0 == endInner)) {
985  }
986 
988  endInner++;
989 
990  return true;
991 }
992 
994  if UNLIKELY ((0 == beginOuter && 0 == endOuter)) {
997  }
998 
1000  endOuter++;
1001 
1002  return true;
1003 }
reco::HitPattern::appendHit
bool appendHit(const TrackingRecHit &hit, const TrackerTopology &ttopo)
Definition: HitPattern.cc:201
runTheMatrix.ret
ret
prodAgent to be discontinued
Definition: runTheMatrix.py:543
reco::HitPattern::operator=
HitPattern & operator=(const HitPattern &other)
Definition: HitPattern.cc:37
MuonSubdetId::GEM
static constexpr int GEM
Definition: MuonSubdetId.h:14
Likely.h
reco::HitPattern::getHitPattern
uint16_t getHitPattern(HitCategory category, int position) const
Definition: HitPattern.h:531
reco::HitPattern::getSubStructure
static uint32_t getSubStructure(uint16_t pattern)
Definition: HitPattern.h:707
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
taus_updatedMVAIds_cff.category
category
Definition: taus_updatedMVAIds_cff.py:31
BTLDetId.h
MuonSubdetId::CSC
static constexpr int CSC
Definition: MuonSubdetId.h:12
reco::HitPattern::HIT_LENGTH
const static unsigned short HIT_LENGTH
Definition: HitPattern.h:157
mps_fire.i
i
Definition: mps_fire.py:428
reco::HitPattern::LayerOffset
const static unsigned short LayerOffset
Definition: HitPattern.h:448
TrackingRecHit::missing_inner
Definition: TrackingRecHit.h:50
PixelSubdetector::PixelEndcap
Definition: PixelSubdetector.h:11
reco::HitPattern::beginTrackHits
uint8_t beginTrackHits
Definition: HitPattern.h:493
reco::HitPattern::pixelEndcapLayersWithMeasurement
int pixelEndcapLayersWithMeasurement() const
Definition: HitPattern.cc:563
PixelSubdetector::PixelBarrel
Definition: PixelSubdetector.h:11
reco::HitPattern::stripTOBLayersWithMeasurement
int stripTOBLayersWithMeasurement() const
Definition: HitPattern.cc:594
reco::HitPattern::trackerLayersWithoutMeasurement
int trackerLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:529
TrackerTopology::tobIsStereo
bool tobIsStereo(const DetId &id) const
Definition: TrackerTopology.h:264
reco::HitPattern::stripTIBLayersWithoutMeasurement
int stripTIBLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:636
reco::HitPattern::beginInner
uint8_t beginInner
Definition: HitPattern.h:495
reco::HitPattern::muonRPCHitFilter
static bool muonRPCHitFilter(uint16_t pattern)
Definition: HitPattern.h:648
reco::HitPattern::numberOfValidTOBLayersWithMonoAndStereo
int numberOfValidTOBLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:411
DTLayerId.h
reco::HitPattern::SideMask
const static unsigned short SideMask
Definition: HitPattern.h:445
CSCDetId::ring
int ring() const
Definition: CSCDetId.h:68
TrackerTopology
Definition: TrackerTopology.h:16
reco::HitPattern::validHitFilter
static bool validHitFilter(uint16_t pattern)
Definition: HitPattern.h:783
ME0DetId.h
RPCDetId
Definition: RPCDetId.h:16
pos
Definition: PixelAliasList.h:18
reco::HitPattern::HitTypeOffset
const static unsigned short HitTypeOffset
Definition: HitPattern.h:440
reco::HitPattern::clear
void clear()
Definition: HitPattern.cc:58
reco::HitPattern::muonHitFilter
static bool muonHitFilter(uint16_t pattern)
Definition: HitPattern.h:677
reco::HitPattern::trackerHitFilter
static bool trackerHitFilter(uint16_t pattern)
Definition: HitPattern.h:673
TrackerTopology::tecIsStereo
bool tecIsStereo(const DetId &id) const
Definition: TrackerTopology.h:265
cms::cuda::stream
uint32_t const T *__restrict__ const uint32_t *__restrict__ int32_t int Histo::index_type cudaStream_t stream
Definition: HistoContainer.h:51
reco::HitPattern::stripTIBLayersNull
int stripTIBLayersNull() const
Definition: HitPattern.cc:760
reco::HitPattern::getGEMLayer
static uint16_t getGEMLayer(uint16_t pattern)
GEM layer: 1,2. Only valid for muon GEM patterns, of course.
Definition: HitPattern.h:781
reco::HitPattern::MUON_HIT
Definition: HitPattern.h:151
TrackerTopology::layer
unsigned int layer(const DetId &id) const
Definition: TrackerTopology.cc:47
reco::HitPattern::muonGEMHitFilter
static bool muonGEMHitFilter(uint16_t pattern)
Definition: HitPattern.h:657
reco::HitPattern::HitPattern
HitPattern()
Definition: HitPattern.cc:19
reco::HitPattern::beginOuter
uint8_t beginOuter
Definition: HitPattern.h:497
reco::HitPattern::getCSCRing
static uint16_t getCSCRing(uint16_t pattern)
CSC ring (1-4). Only valid for muon CSC patterns, of course.
Definition: HitPattern.h:753
reco::HitPattern::muonCSCHitFilter
static bool muonCSCHitFilter(uint16_t pattern)
Definition: HitPattern.h:639
ETLDetId
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:15
MTDDetId::mtdRR
int mtdRR() const
Definition: MTDDetId.h:64
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
DTSuperLayerId::superLayer
int superLayer() const
Return the superlayer number.
Definition: DTSuperLayerId.h:39
reco::HitPattern::insertExpectedInnerHit
bool insertExpectedInnerHit(const uint16_t pattern)
Definition: HitPattern.cc:981
ETLDetId.h
reco::HitPattern::maxTrackerWord
const static unsigned short maxTrackerWord
Definition: HitPattern.h:460
reco::HitPattern::getRPCLayer
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:755
reco::HitPattern::getHitType
static uint32_t getHitType(uint16_t pattern)
Definition: HitPattern.h:741
reco::HitPattern::getSide
static uint32_t getSide(uint16_t pattern)
Definition: HitPattern.h:733
CSCDetId.h
reco::HitPattern::pixelLayersWithMeasurement
int pixelLayersWithMeasurement() const
Definition: HitPattern.cc:489
reco::HitPattern::stripTOBLayersWithoutMeasurement
int stripTOBLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:656
reco::HitPattern::STEREO
Definition: HitPattern.h:149
edm::Ref
Definition: AssociativeIterator.h:58
TrackerTopology::tidIsStereo
bool tidIsStereo(const DetId &id) const
Definition: TrackerTopology.h:267
reco::HitPattern::pixelBarrelLayersWithMeasurement
int pixelBarrelLayersWithMeasurement() const
Definition: HitPattern.cc:552
DetId
Definition: DetId.h:17
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
reco::HitPattern::minTrackerWord
const static unsigned short minTrackerWord
Definition: HitPattern.h:459
TrackerTopology.h
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
reco::HitPattern
Definition: HitPattern.h:147
TrackingRecHit.h
reco::HitPattern::pixelBarrelLayersNull
int pixelBarrelLayersNull() const
Definition: HitPattern.cc:738
BTLDetId
Detector identifier class for the Barrel Timing Layer. The crystal count must start from 0,...
Definition: BTLDetId.h:18
reco::HitPattern::TRACKER_HIT
Definition: HitPattern.h:151
reco::HitPattern::endOuter
uint8_t endOuter
Definition: HitPattern.h:498
reco::HitPattern::encode
static uint16_t encode(const TrackingRecHit &hit, const TrackerTopology &ttopo)
Definition: HitPattern.cc:74
reco::HitPattern::trackerLayersWithMeasurement
int trackerLayersWithMeasurement() const
Definition: HitPattern.cc:510
reco::HitPattern::getTrackerLayerCase
uint32_t getTrackerLayerCase(HitCategory category, uint16_t substr, uint16_t layer) const
Definition: HitPattern.cc:427
reco::HitPattern::getSubSubStructure
static uint32_t getSubSubStructure(uint16_t pattern)
Definition: HitPattern.h:717
TrackingRecHit::Type
Type
Definition: TrackingRecHit.h:45
reco::HitPattern::stripTIDLayersTotallyOffOrBad
int stripTIDLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:708
reco::HitPattern::print
void print(HitCategory category, std::ostream &stream=std::cout) const
Definition: HitPattern.cc:836
reco::HitPattern::minStripWord
const static unsigned short minStripWord
Definition: HitPattern.h:462
reco::HitPattern::pixelEndcapLayersTotallyOffOrBad
int pixelEndcapLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:687
reco::HitPattern::getGEMStation
static uint16_t getGEMStation(uint16_t pattern)
GEM station: 1,2. Only valid for muon GEM patterns, of course.
Definition: HitPattern.h:769
TrackerTopology::tibIsStereo
bool tibIsStereo(const DetId &id) const
Definition: TrackerTopology.h:266
reco::HitPattern::getCategoryIndexRange
std::pair< uint8_t, uint8_t > getCategoryIndexRange(HitCategory category) const
Definition: HitPattern.h:506
submitPVResolutionJobs.count
count
Definition: submitPVResolutionJobs.py:352
reco::HitPattern::hasValidHitInPixelLayer
bool hasValidHitInPixelLayer(enum PixelSubdetector::SubDetector, uint16_t layer) const
Definition: HitPattern.cc:334
StripSubdetector::TIB
static constexpr auto TIB
Definition: StripSubdetector.h:16
trackingPlots.other
other
Definition: trackingPlots.py:1464
MuonSubdetId::DT
static constexpr int DT
Definition: MuonSubdetId.h:11
reco::HitPattern::pixelBarrelLayersWithoutMeasurement
int pixelBarrelLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:614
reco::HitPattern::insertHit
void insertHit(const uint16_t pattern)
Definition: HitPattern.cc:952
DTLayerId
Definition: DTLayerId.h:12
reco::HitPattern::getRPCregion
static uint16_t getRPCregion(uint16_t pattern)
RPC region: 0 = barrel, 1 = endcap. Only valid for muon RPC patterns, of course.
Definition: HitPattern.h:766
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
reco::HitPattern::SideOffset
const static unsigned short SideOffset
Definition: HitPattern.h:444
TrackingRecHit::inactive_inner
Definition: TrackingRecHit.h:52
PixelSubdetector::SubDetector
SubDetector
Definition: PixelSubdetector.h:11
TrackingRecHit::bad
Definition: TrackingRecHit.h:49
RPCDetId.h
reco::HitPattern::pixelHitFilter
static bool pixelHitFilter(uint16_t pattern)
Definition: HitPattern.h:575
reco::HitPattern::stripTIBLayersWithMeasurement
int stripTIBLayersWithMeasurement() const
Definition: HitPattern.cc:574
reco::HitPattern::numberOfDTStationsWithBothViews
int numberOfDTStationsWithBothViews() const
Definition: HitPattern.cc:939
reco::HitPattern::getLayer
static uint32_t getLayer(uint16_t pattern)
Definition: HitPattern.h:715
reco::HitPattern::printHitPattern
void printHitPattern(HitCategory category, int position, std::ostream &stream) const
Definition: HitPattern.cc:800
DetId::Tracker
Definition: DetId.h:25
reco::HitPattern::pixelEndcapHitFilter
static bool pixelEndcapHitFilter(uint16_t pattern)
Definition: HitPattern.h:593
reco::HitPattern::stripTECLayersTotallyOffOrBad
int stripTECLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:728
BTLDetId::modType
int modType() const
Definition: BTLDetId.h:99
TrackingRecHit::missing
Definition: TrackingRecHit.h:47
reco::HitPattern::SubstrMask
const static unsigned short SubstrMask
Definition: HitPattern.h:453
GEMDetId
Definition: GEMDetId.h:18
CSCDetId
Definition: CSCDetId.h:26
FastTime
Definition: ForwardSubdetector.h:6
reco::HitPattern::timingHitFilter
static bool timingHitFilter(uint16_t pattern)
Definition: HitPattern.h:699
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
reco::HitPattern::numberOfValidTECLayersWithMonoAndStereo
int numberOfValidTECLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:423
TrackingRecHit::inactive_outer
Definition: TrackingRecHit.h:53
reco::HitPattern::EMPTY_PATTERN
static const uint16_t EMPTY_PATTERN
Definition: HitPattern.h:161
topSingleLeptonDQM_PU_cfi.pattern
pattern
Definition: topSingleLeptonDQM_PU_cfi.py:39
reco::HitPattern::stripTIDLayersWithoutMeasurement
int stripTIDLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:646
TrackingRecHit::missing_outer
Definition: TrackingRecHit.h:51
reco::HitPattern::getMuonStation
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:749
ME0DetId
Definition: ME0DetId.h:16
MuonSubdetId::ME0
static constexpr int ME0
Definition: MuonSubdetId.h:15
reco::HitPattern::getHitPatternByAbsoluteIndex
uint16_t getHitPatternByAbsoluteIndex(int position) const
Definition: HitPattern.cc:293
HitPattern.h
reco::HitPattern::SubDetectorMask
const static unsigned short SubDetectorMask
Definition: HitPattern.h:457
reco::HitPattern::LayerMask
const static unsigned short LayerMask
Definition: HitPattern.h:449
reco::HitPattern::isStereo
static uint16_t isStereo(DetId i, const TrackerTopology &ttopo)
Definition: HitPattern.cc:852
TrackingRecHit::valid
Definition: TrackingRecHit.h:46
reco::HitPattern::pixelBarrelLayersTotallyOffOrBad
int pixelBarrelLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:676
reco::HitPattern::TRACK_HITS
Definition: HitPattern.h:155
TrackingRecHit
Definition: TrackingRecHit.h:21
reco::HitPattern::ARRAY_LENGTH
const static unsigned short ARRAY_LENGTH
Definition: HitPattern.h:156
reco::HitPattern::~HitPattern
~HitPattern()
Definition: HitPattern.cc:35
reco::HitPattern::pixelEndcapLayersNull
int pixelEndcapLayersNull() const
Definition: HitPattern.cc:749
reco::HitPattern::stripTOBLayersTotallyOffOrBad
int stripTOBLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:718
MTDDetId::BTL
Definition: MTDDetId.h:27
GEMDetId.h
reco::HitPattern::stripTIDLayersWithMeasurement
int stripTIDLayersWithMeasurement() const
Definition: HitPattern.cc:584
reco::HitPattern::numberOfAllHits
int numberOfAllHits(HitCategory category) const
Definition: HitPattern.h:791
reco::HitPattern::HitCategory
HitCategory
Definition: HitPattern.h:155
StripSubdetector::TEC
static constexpr auto TEC
Definition: StripSubdetector.h:19
reco::HitPattern::muonStations
int muonStations(int subdet, int hitType) const
subdet = 0(all), 1(DT), 2(CSC), 3(RPC) 4(GEM); hitType=-1(all), 0=valid, 3=bad
Definition: HitPattern.cc:874
reco::HitPattern::appendMuonHit
bool appendMuonHit(const DetId &id, TrackingRecHit::Type hitType)
Definition: HitPattern.cc:277
MuonSubdetId::RPC
static constexpr int RPC
Definition: MuonSubdetId.h:13
reco::HitPattern::innermostMuonStationWithHits
int innermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
Definition: HitPattern.cc:887
MTDDetId::ETL
Definition: MTDDetId.h:27
MTDDetId
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
Exception
Definition: hltDiff.cc:245
reco::HitPattern::appendTrackerHit
bool appendTrackerHit(uint16_t subdet, uint16_t layer, uint16_t stereo, TrackingRecHit::Type hitType)
Definition: HitPattern.cc:273
StripSubdetector::TOB
static constexpr auto TOB
Definition: StripSubdetector.h:18
reco::HitPattern::HitTypeMask
const static unsigned short HitTypeMask
Definition: HitPattern.h:441
reco::HitPattern::hitCount
uint8_t hitCount
Definition: HitPattern.h:491
reco::HitPattern::pixelEndcapLayersWithoutMeasurement
int pixelEndcapLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:625
reco::HitPattern::MTD_HIT
Definition: HitPattern.h:151
reco::HitPattern::numberOfDTStationsWithRPhiView
int numberOfDTStationsWithRPhiView() const
Definition: HitPattern.cc:916
reco::HitPattern::NULL_RETURN
static const uint32_t NULL_RETURN
Definition: HitPattern.h:160
reco::HitPattern::endTrackHits
uint8_t endTrackHits
Definition: HitPattern.h:494
TrackingRecHit::inactive
Definition: TrackingRecHit.h:48
reco::HitPattern::SubstrOffset
const static unsigned short SubstrOffset
Definition: HitPattern.h:452
hcaldqm::constants::BAD
const double BAD
Definition: Constants.h:15
reco::HitPattern::MONO
Definition: HitPattern.h:149
reco::HitPattern::pixelBarrelHitFilter
static bool pixelBarrelHitFilter(uint16_t pattern)
Definition: HitPattern.h:584
DetId::Muon
Definition: DetId.h:26
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
reco::HitPattern::numberOfValidStripLayersWithMonoAndStereo
int numberOfValidStripLayersWithMonoAndStereo() const
Definition: HitPattern.cc:390
CSCDetId::station
int station() const
Definition: CSCDetId.h:79
reco::HitPattern::numberOfValidTIDLayersWithMonoAndStereo
int numberOfValidTIDLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:419
reco::HitPattern::stripTECLayersWithMeasurement
int stripTECLayersWithMeasurement() const
Definition: HitPattern.cc:604
reco::HitPattern::outermostMuonStationWithHits
int outermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
Definition: HitPattern.cc:902
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
DetId::Forward
Definition: DetId.h:30
reco::HitPattern::insertExpectedOuterHit
bool insertExpectedOuterHit(const uint16_t pattern)
Definition: HitPattern.cc:993
edm_modernize_messagelogger.stat
stat
Definition: edm_modernize_messagelogger.py:27
reco::HitPattern::stripTIBLayersTotallyOffOrBad
int stripTIBLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
Definition: HitPattern.cc:698
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
HLT_FULL_cff.flags
flags
Definition: HLT_FULL_cff.py:13168
reco::HitPattern::SubDetectorOffset
const static unsigned short SubDetectorOffset
Definition: HitPattern.h:456
reco::HitPattern::stripHitFilter
static bool stripHitFilter(uint16_t pattern)
Definition: HitPattern.h:602
reco::HitPattern::MaxHits
const static unsigned short MaxHits
Definition: HitPattern.h:158
reco::HitPattern::muonDTHitFilter
static bool muonDTHitFilter(uint16_t pattern)
Definition: HitPattern.h:630
reco::HitPattern::getTrackerMonoStereo
uint16_t getTrackerMonoStereo(HitCategory category, uint16_t substr, uint16_t layer) const
Definition: HitPattern.cc:455
reco::HitPattern::numberOfDTStationsWithRZView
int numberOfDTStationsWithRZView() const
Definition: HitPattern.cc:928
reco::HitPattern::getDTSuperLayer
static uint16_t getDTSuperLayer(uint16_t pattern)
DT superlayer (1-3). Where the "hit" was a DT segment, superlayer is 0. Only valid for muon DT patter...
Definition: HitPattern.h:751
reco::HitPattern::endInner
uint8_t endInner
Definition: HitPattern.h:496
reco::HitPattern::hitPattern
uint16_t hitPattern[ARRAY_LENGTH]
Definition: HitPattern.h:490
reco::HitPattern::numberOfValidTIBLayersWithMonoAndStereo
int numberOfValidTIBLayersWithMonoAndStereo(uint32_t layer=0) const
Definition: HitPattern.cc:415
reco::HitPattern::muonME0HitFilter
static bool muonME0HitFilter(uint16_t pattern)
Definition: HitPattern.h:666
StripSubdetector::TID
static constexpr auto TID
Definition: StripSubdetector.h:17
reco::HitPattern::stripTECLayersNull
int stripTECLayersNull() const
Definition: HitPattern.cc:790
DTChamberId::station
int station() const
Return the station number.
Definition: DTChamberId.h:42
hit
Definition: SiStripHitEffFromCalibTree.cc:88
reco::HitPattern::stripTECLayersWithoutMeasurement
int stripTECLayersWithoutMeasurement(HitCategory category) const
Definition: HitPattern.cc:666
reco::HitPattern::insertTrackHit
bool insertTrackHit(const uint16_t pattern)
Definition: HitPattern.cc:963
reco::HitPattern::stripTOBLayersNull
int stripTOBLayersNull() const
Definition: HitPattern.cc:780
reco::HitPattern::stripTIDLayersNull
int stripTIDLayersNull() const
Definition: HitPattern.cc:770