00001
00002 #ifndef TrackReco_HitPattern_h
00003 #define TrackReco_HitPattern_h
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 #include <ostream>
00113 #include "DataFormats/DetId/interface/DetId.h"
00114 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00115 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
00116 #include "DataFormats/MuonDetId/interface/MuonSubdetId.h"
00117 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
00118 #include "FWCore/Utilities/interface/Likely.h"
00119 namespace reco {
00120 class HitPattern {
00121 public:
00122 enum { MONO = 1, STEREO = 2 };
00123
00124
00125
00126 HitPattern() { for (int i=0; i<PatternSize; i++) hitPattern_[i] = 0; }
00127
00128
00129 template<typename I>
00130 HitPattern(const I & begin, const I & end) { set(begin, end); }
00131
00132
00133 template<typename C>
00134 HitPattern(const C & c) { set(c); }
00135
00136
00137
00138
00139 template<typename I>
00140 void set(const I & begin, const I & end) {
00141 for (int i=0; i<PatternSize; i++) hitPattern_[i] = 0;
00142 unsigned int counter = 0;
00143 for (I hit=begin; hit!=end && counter<32*PatternSize/HitSize;
00144 hit++, counter++)
00145 set(*hit, counter);
00146 }
00147
00148
00149
00150 typedef bool filterType(unsigned int);
00151 int countHits(filterType filter, bool fullScan) const {
00152 int count = 0;
00153 for (int i=0; i<(PatternSize * 32) / HitSize; i++) {
00154 uint32_t pattern = getHitPattern(i);
00155 if (pattern == 0 && !fullScan) break;
00156 if (filter(pattern)) ++count;
00157 }
00158 return count;
00159 }
00160
00161 int countTypedHits(filterType typeFilter, filterType filter, bool fullScan) const {
00162 int count = 0;
00163 for (int i=0; i<(PatternSize * 32) / HitSize; i++) {
00164 uint32_t pattern = getHitPattern(i);
00165 if (pattern == 0 && !fullScan) break;
00166 if (typeFilter(pattern)&&filter(pattern)) ++count;
00167 }
00168 return count;
00169 }
00170
00171
00172 void printHitPattern (int position, std::ostream &stream) const;
00173 void print (std::ostream &stream = std::cout) const;
00174
00175
00176 void set(const TrackingRecHit &, unsigned int i);
00177
00178
00179 uint32_t getHitPattern(int position) const;
00180
00181 static bool trackerHitFilter(uint32_t pattern);
00182 static bool muonHitFilter(uint32_t pattern);
00183
00184 static uint32_t getSubStructure(uint32_t pattern);
00185 static bool pixelHitFilter(uint32_t pattern);
00186 static bool pixelBarrelHitFilter(uint32_t pattern);
00187 static bool pixelEndcapHitFilter(uint32_t pattern);
00188 static bool stripHitFilter(uint32_t pattern);
00189 static bool stripTIBHitFilter(uint32_t pattern);
00190 static bool stripTIDHitFilter(uint32_t pattern);
00191 static bool stripTOBHitFilter(uint32_t pattern);
00192 static bool stripTECHitFilter(uint32_t pattern);
00193 static bool muonDTHitFilter(uint32_t pattern);
00194 static bool muonCSCHitFilter(uint32_t pattern);
00195 static bool muonRPCHitFilter(uint32_t pattern);
00196
00197 static uint32_t getLayer(uint32_t pattern);
00198 static uint32_t getSubSubStructure(uint32_t pattern);
00199
00201 static uint32_t getMuonStation(uint32_t pattern);
00203 static uint32_t getDTSuperLayer(uint32_t pattern);
00205 static uint32_t getCSCRing(uint32_t pattern) ;
00207 static uint32_t getRPCLayer(uint32_t pattern) ;
00209 static uint32_t getRPCregion(uint32_t pattern);
00210
00211 static uint32_t getHitType(uint32_t pattern);
00212 static bool validHitFilter(uint32_t pattern);
00213 static bool type_1_HitFilter(uint32_t pattern);
00214 static bool type_2_HitFilter(uint32_t pattern);
00215 static bool type_3_HitFilter(uint32_t pattern);
00216
00217 static uint32_t getSide (uint32_t pattern);
00218
00219 bool hasValidHitInFirstPixelBarrel() const;
00220 bool hasValidHitInFirstPixelEndcap() const;
00221
00222 int numberOfHits() const;
00223 int numberOfValidHits() const;
00224 int numberOfValidTrackerHits() const;
00225 int numberOfValidMuonHits() const;
00226 int numberOfValidPixelHits() const;
00227 int numberOfValidPixelBarrelHits() const;
00228 int numberOfValidPixelEndcapHits() const;
00229 int numberOfValidStripHits() const;
00230 int numberOfValidStripTIBHits() const;
00231 int numberOfValidStripTIDHits() const;
00232 int numberOfValidStripTOBHits() const;
00233 int numberOfValidStripTECHits() const;
00234 int numberOfValidMuonDTHits() const;
00235 int numberOfValidMuonCSCHits() const;
00236 int numberOfValidMuonRPCHits() const;
00237 int numberOfLostHits() const;
00238 int numberOfLostTrackerHits() const;
00239 int numberOfLostMuonHits() const;
00240 int numberOfLostPixelHits() const;
00241 int numberOfLostPixelBarrelHits() const;
00242 int numberOfLostPixelEndcapHits() const;
00243 int numberOfLostStripHits() const;
00244 int numberOfLostStripTIBHits() const;
00245 int numberOfLostStripTIDHits() const;
00246 int numberOfLostStripTOBHits() const;
00247 int numberOfLostStripTECHits() const;
00248 int numberOfLostMuonDTHits() const;
00249 int numberOfLostMuonCSCHits() const;
00250 int numberOfLostMuonRPCHits() const;
00251 int numberOfBadHits() const;
00252 int numberOfBadMuonHits() const;
00253 int numberOfBadMuonDTHits() const;
00254 int numberOfBadMuonCSCHits() const;
00255 int numberOfBadMuonRPCHits() const;
00256 int numberOfInactiveHits() const;
00257 int numberOfInactiveTrackerHits() const;
00258
00259
00260 int numberOfValidStripLayersWithMonoAndStereo ()
00261 const;
00262
00263 uint32_t getTrackerLayerCase(uint32_t substr, uint32_t layer) const;
00264 uint32_t getTrackerMonoStereo (uint32_t substr, uint32_t layer) const;
00265
00266 int trackerLayersWithMeasurement() const;
00267 int pixelLayersWithMeasurement() const;
00268 int stripLayersWithMeasurement() const;
00269 int pixelBarrelLayersWithMeasurement() const;
00270 int pixelEndcapLayersWithMeasurement() const;
00271 int stripTIBLayersWithMeasurement() const;
00272 int stripTIDLayersWithMeasurement() const;
00273 int stripTOBLayersWithMeasurement() const;
00274 int stripTECLayersWithMeasurement() const;
00275 int trackerLayersWithoutMeasurement() const;
00276 int pixelLayersWithoutMeasurement() const;
00277 int stripLayersWithoutMeasurement() const;
00278 int pixelBarrelLayersWithoutMeasurement() const;
00279 int pixelEndcapLayersWithoutMeasurement() const;
00280 int stripTIBLayersWithoutMeasurement() const;
00281 int stripTIDLayersWithoutMeasurement() const;
00282 int stripTOBLayersWithoutMeasurement() const;
00283 int stripTECLayersWithoutMeasurement() const;
00284 int trackerLayersTotallyOffOrBad() const;
00285 int pixelLayersTotallyOffOrBad() const;
00286 int stripLayersTotallyOffOrBad() const;
00287 int pixelBarrelLayersTotallyOffOrBad() const;
00288 int pixelEndcapLayersTotallyOffOrBad() const;
00289 int stripTIBLayersTotallyOffOrBad() const;
00290 int stripTIDLayersTotallyOffOrBad() const;
00291 int stripTOBLayersTotallyOffOrBad() const;
00292 int stripTECLayersTotallyOffOrBad() const;
00293 int trackerLayersNull() const;
00294 int pixelLayersNull() const;
00295 int stripLayersNull() const;
00296 int pixelBarrelLayersNull() const;
00297 int pixelEndcapLayersNull() const;
00298 int stripTIBLayersNull() const;
00299 int stripTIDLayersNull() const;
00300 int stripTOBLayersNull() const;
00301 int stripTECLayersNull() const;
00302
00303
00304
00306 int muonStations(int subdet, int hitType) const ;
00307
00308 int muonStationsWithValidHits() const ;
00309 int muonStationsWithBadHits() const ;
00310 int muonStationsWithAnyHits() const ;
00311 int dtStationsWithValidHits() const ;
00312 int dtStationsWithBadHits() const ;
00313 int dtStationsWithAnyHits() const ;
00314 int cscStationsWithValidHits() const ;
00315 int cscStationsWithBadHits() const ;
00316 int cscStationsWithAnyHits() const ;
00317 int rpcStationsWithValidHits() const ;
00318 int rpcStationsWithBadHits() const ;
00319 int rpcStationsWithAnyHits() const ;
00320
00322 int innermostMuonStationWithHits(int hitType) const ;
00323 int innermostMuonStationWithValidHits() const ;
00324 int innermostMuonStationWithBadHits() const ;
00325 int innermostMuonStationWithAnyHits() const ;
00326
00328 int outermostMuonStationWithHits(int hitType) const ;
00329 int outermostMuonStationWithValidHits() const ;
00330 int outermostMuonStationWithBadHits() const ;
00331 int outermostMuonStationWithAnyHits() const ;
00332
00333 int numberOfDTStationsWithRPhiView() const ;
00334 int numberOfDTStationsWithRZView() const ;
00335 int numberOfDTStationsWithBothViews() const ;
00336 private:
00337
00338
00339 const static unsigned short PatternSize = 25;
00340
00341
00342 const static unsigned short HitSize = 11;
00343
00344
00345 const static unsigned short SubDetectorOffset = 10;
00346 const static unsigned short SubDetectorMask = 0x1;
00347
00348
00349 const static unsigned short SubstrOffset = 7;
00350 const static unsigned short SubstrMask = 0x7;
00351
00352
00353 const static unsigned short LayerOffset = 3;
00354 const static unsigned short LayerMask = 0xF;
00355
00356
00357 const static unsigned short SideOffset = 2;
00358 const static unsigned short SideMask = 0x1;
00359
00360
00361 const static unsigned short HitTypeOffset = 0;
00362 const static unsigned short HitTypeMask = 0x3;
00363
00364
00365 uint32_t hitPattern_[ PatternSize ];
00366
00367
00368 void setHitPattern(int position, uint32_t pattern);
00369
00370
00371 void set(const TrackingRecHitRef & ref, unsigned int i) { set(* ref, i); }
00372
00373
00374 static uint32_t isStereo (DetId);
00375 };
00376
00377
00378
00379 inline bool HitPattern::pixelHitFilter(uint32_t pattern) {
00380 if unlikely(!trackerHitFilter(pattern)) return false;
00381 uint32_t substructure = getSubStructure(pattern);
00382 if (substructure == PixelSubdetector::PixelBarrel ||
00383 substructure == PixelSubdetector::PixelEndcap) return true;
00384 return false;
00385 }
00386
00387 inline bool HitPattern::pixelBarrelHitFilter(uint32_t pattern) {
00388 if unlikely(!trackerHitFilter(pattern)) return false;
00389 uint32_t substructure = getSubStructure(pattern);
00390 if (substructure == PixelSubdetector::PixelBarrel) return true;
00391 return false;
00392 }
00393
00394 inline bool HitPattern::pixelEndcapHitFilter(uint32_t pattern) {
00395 if unlikely(!trackerHitFilter(pattern)) return false;
00396 uint32_t substructure = getSubStructure(pattern);
00397 if (substructure == PixelSubdetector::PixelEndcap) return true;
00398 return false;
00399 }
00400
00401 inline bool HitPattern::stripHitFilter(uint32_t pattern) {
00402 if unlikely(!trackerHitFilter(pattern)) return false;
00403 uint32_t substructure = getSubStructure(pattern);
00404 if (substructure == StripSubdetector::TIB ||
00405 substructure == StripSubdetector::TID ||
00406 substructure == StripSubdetector::TOB ||
00407 substructure == StripSubdetector::TEC) return true;
00408 return false;
00409 }
00410
00411 inline bool HitPattern::stripTIBHitFilter(uint32_t pattern) {
00412 if unlikely(!trackerHitFilter(pattern)) return false;
00413 uint32_t substructure = getSubStructure(pattern);
00414 if (substructure == StripSubdetector::TIB) return true;
00415 return false;
00416 }
00417
00418 inline bool HitPattern::stripTIDHitFilter(uint32_t pattern) {
00419 if unlikely(!trackerHitFilter(pattern)) return false;
00420 uint32_t substructure = getSubStructure(pattern);
00421 if (substructure == StripSubdetector::TID) return true;
00422 return false;
00423 }
00424
00425 inline bool HitPattern::stripTOBHitFilter(uint32_t pattern) {
00426 if unlikely(!trackerHitFilter(pattern)) return false;
00427 uint32_t substructure = getSubStructure(pattern);
00428 if (substructure == StripSubdetector::TOB) return true;
00429 return false;
00430 }
00431
00432 inline bool HitPattern::stripTECHitFilter(uint32_t pattern) {
00433 if unlikely(!trackerHitFilter(pattern)) return false;
00434 uint32_t substructure = getSubStructure(pattern);
00435 if (substructure == StripSubdetector::TEC) return true;
00436 return false;
00437 }
00438
00439 inline bool HitPattern::muonDTHitFilter(uint32_t pattern) {
00440 if unlikely(!muonHitFilter(pattern)) return false;
00441 uint32_t substructure = getSubStructure(pattern);
00442 if (substructure == (uint32_t) MuonSubdetId::DT) return true;
00443 return false;
00444 }
00445
00446 inline bool HitPattern::muonCSCHitFilter(uint32_t pattern) {
00447 if unlikely(!muonHitFilter(pattern)) return false;
00448 uint32_t substructure = getSubStructure(pattern);
00449 if (substructure == (uint32_t) MuonSubdetId::CSC) return true;
00450 return false;
00451 }
00452
00453 inline bool HitPattern::muonRPCHitFilter(uint32_t pattern) {
00454 if unlikely(!muonHitFilter(pattern)) return false;
00455 uint32_t substructure = getSubStructure(pattern);
00456 if (substructure == (uint32_t) MuonSubdetId::RPC) return true;
00457 return false;
00458 }
00459
00460
00461 inline bool HitPattern::trackerHitFilter(uint32_t pattern) {
00462 if unlikely(pattern == 0) return false;
00463 if (((pattern>>SubDetectorOffset) & SubDetectorMask) == 1) return true;
00464 return false;
00465 }
00466
00467 inline bool HitPattern::muonHitFilter(uint32_t pattern) {
00468 if unlikely(pattern == 0) return false;
00469 if (((pattern>>SubDetectorOffset) & SubDetectorMask) == 0) return true;
00470 return false;
00471 }
00472
00473
00474 inline uint32_t HitPattern::getSubStructure(uint32_t pattern) {
00475 if unlikely(pattern == 0) return 999999;
00476 return ((pattern >> SubstrOffset) & SubstrMask);
00477 }
00478
00479
00480 inline uint32_t HitPattern::getLayer(uint32_t pattern) {
00481 if unlikely(pattern == 0) return 999999;
00482 return ((pattern>>LayerOffset) & LayerMask);
00483 }
00484
00485 inline uint32_t HitPattern::getSubSubStructure(uint32_t pattern) {
00486 if unlikely(pattern == 0) return 999999;
00487 return ((pattern>>LayerOffset) & LayerMask);
00488 }
00489
00490
00491 inline uint32_t HitPattern::getSide (uint32_t pattern) {
00492 if unlikely(pattern == 0) return 999999;
00493 return (pattern >> SideOffset) & SideMask;
00494 }
00495
00496 inline uint32_t HitPattern::getHitType( uint32_t pattern ) {
00497 if unlikely(pattern == 0) return 999999;
00498 return ((pattern>>HitTypeOffset) & HitTypeMask);
00499 }
00500
00501 inline uint32_t HitPattern::getMuonStation(uint32_t pattern) {
00502 return (getSubSubStructure(pattern)>>2) + 1;
00503 }
00504
00505 inline uint32_t HitPattern::getDTSuperLayer(uint32_t pattern) {
00506 return (getSubSubStructure(pattern) & 3) + 1;
00507 }
00508
00509 inline uint32_t HitPattern::getCSCRing(uint32_t pattern) {
00510 return (getSubSubStructure(pattern) & 3) + 1;
00511 }
00512
00513 inline uint32_t HitPattern::getRPCLayer(uint32_t pattern) {
00514 uint32_t sss = getSubSubStructure(pattern), stat = sss >> 2;
00515 if likely(stat <= 1) return ((sss >> 1) & 1) + 1;
00516 return 0;
00517 }
00518
00519 inline uint32_t HitPattern::getRPCregion(uint32_t pattern) {
00520 return getSubSubStructure(pattern) & 1;
00521 }
00522
00523
00524 inline bool HitPattern::validHitFilter(uint32_t pattern) {
00525 if (getHitType(pattern) == 0) return true;
00526 return false;
00527 }
00528
00529 inline bool HitPattern::type_1_HitFilter(uint32_t pattern) {
00530 if (getHitType(pattern) == 1) return true;
00531 return false;
00532 }
00533
00534 inline bool HitPattern::type_2_HitFilter(uint32_t pattern) {
00535 if (getHitType(pattern) == 2) return true;
00536 return false;
00537 }
00538
00539 inline bool HitPattern::type_3_HitFilter(uint32_t pattern) {
00540 if (getHitType(pattern) == 3) return true;
00541 return false;
00542 }
00543
00544
00545
00546
00547
00548
00549 inline int HitPattern::numberOfValidHits() const {
00550 return countHits(validHitFilter, false);
00551 }
00552
00553 inline int HitPattern::numberOfValidTrackerHits() const {
00554 return countTypedHits(validHitFilter, trackerHitFilter, false);
00555 }
00556
00557 inline int HitPattern::numberOfValidMuonHits() const {
00558 return countTypedHits(validHitFilter, muonHitFilter, false);
00559 }
00560
00561 inline int HitPattern::numberOfValidPixelHits() const {
00562 return countTypedHits(validHitFilter, pixelHitFilter, false);
00563 }
00564
00565 inline int HitPattern::numberOfValidPixelBarrelHits() const {
00566 return countTypedHits(validHitFilter, pixelBarrelHitFilter, false);
00567 }
00568
00569 inline int HitPattern::numberOfValidPixelEndcapHits() const {
00570 return countTypedHits(validHitFilter, pixelEndcapHitFilter, false);
00571 }
00572
00573 inline int HitPattern::numberOfValidStripHits() const {
00574 return countTypedHits(validHitFilter, stripHitFilter, false);
00575 }
00576
00577 inline int HitPattern::numberOfValidStripTIBHits() const {
00578 return countTypedHits(validHitFilter, stripTIBHitFilter, false);
00579 }
00580
00581 inline int HitPattern::numberOfValidStripTIDHits() const {
00582 return countTypedHits(validHitFilter, stripTIDHitFilter, false);
00583 }
00584
00585 inline int HitPattern::numberOfValidStripTOBHits() const {
00586 return countTypedHits(validHitFilter, stripTOBHitFilter, false);
00587 }
00588
00589 inline int HitPattern::numberOfValidStripTECHits() const {
00590 return countTypedHits(validHitFilter, stripTECHitFilter, false);
00591 }
00592
00593 inline int HitPattern::numberOfValidMuonDTHits() const {
00594 return countTypedHits(validHitFilter, muonDTHitFilter, false);
00595 }
00596
00597 inline int HitPattern::numberOfValidMuonCSCHits() const {
00598 return countTypedHits(validHitFilter, muonCSCHitFilter, false);
00599 }
00600
00601 inline int HitPattern::numberOfValidMuonRPCHits() const {
00602 return countTypedHits(validHitFilter, muonRPCHitFilter, false);
00603 }
00604
00605
00606 inline int HitPattern::numberOfLostHits() const {
00607 return countHits(type_1_HitFilter, true);
00608 }
00609
00610 inline int HitPattern::numberOfLostTrackerHits() const {
00611 return countTypedHits(type_1_HitFilter, trackerHitFilter, true);
00612 }
00613
00614 inline int HitPattern::numberOfLostMuonHits() const {
00615 return countTypedHits(type_1_HitFilter, muonHitFilter, true);
00616 }
00617
00618 inline int HitPattern::numberOfLostPixelHits() const {
00619 return countTypedHits(type_1_HitFilter, pixelHitFilter, true);
00620 }
00621
00622 inline int HitPattern::numberOfLostPixelBarrelHits() const {
00623 return countTypedHits(type_1_HitFilter, pixelBarrelHitFilter, true);
00624 }
00625
00626 inline int HitPattern::numberOfLostPixelEndcapHits() const {
00627 return countTypedHits(type_1_HitFilter, pixelEndcapHitFilter, true);
00628 }
00629
00630 inline int HitPattern::numberOfLostStripHits() const {
00631 return countTypedHits(type_1_HitFilter, stripHitFilter, true);
00632 }
00633
00634 inline int HitPattern::numberOfLostStripTIBHits() const {
00635 return countTypedHits(type_1_HitFilter, stripTIBHitFilter, true);
00636 }
00637
00638 inline int HitPattern::numberOfLostStripTIDHits() const {
00639 return countTypedHits(type_1_HitFilter, stripTIDHitFilter, true);
00640 }
00641
00642 inline int HitPattern::numberOfLostStripTOBHits() const {
00643 return countTypedHits(type_1_HitFilter, stripTOBHitFilter, true);
00644 }
00645
00646 inline int HitPattern::numberOfLostStripTECHits() const {
00647 return countTypedHits(type_1_HitFilter, stripTECHitFilter, true);
00648 }
00649
00650 inline int HitPattern::numberOfLostMuonDTHits() const {
00651 return countTypedHits(type_1_HitFilter, muonDTHitFilter, true);
00652 }
00653
00654 inline int HitPattern::numberOfLostMuonCSCHits() const {
00655 return countTypedHits(type_1_HitFilter, muonCSCHitFilter, true);
00656 }
00657
00658 inline int HitPattern::numberOfLostMuonRPCHits() const {
00659 return countTypedHits(type_1_HitFilter, muonRPCHitFilter, true);
00660 }
00661
00662
00663
00664 inline int HitPattern::numberOfBadHits() const {
00665 return countHits(type_3_HitFilter, true);
00666 }
00667
00668 inline int HitPattern::numberOfBadMuonHits() const {
00669 return countTypedHits(type_2_HitFilter, muonHitFilter, true);
00670 }
00671
00672 inline int HitPattern::numberOfBadMuonDTHits() const {
00673 return countTypedHits(type_2_HitFilter, muonDTHitFilter, true);
00674 }
00675
00676 inline int HitPattern::numberOfBadMuonCSCHits() const {
00677 return countTypedHits(type_2_HitFilter, muonCSCHitFilter, true);
00678 }
00679
00680 inline int HitPattern::numberOfBadMuonRPCHits() const {
00681 return countTypedHits(type_2_HitFilter, muonRPCHitFilter, true);
00682 }
00683
00684
00685
00686 inline int HitPattern::numberOfInactiveHits() const {
00687 return countHits(type_2_HitFilter, true);
00688 }
00689
00690 inline int HitPattern::numberOfInactiveTrackerHits() const {
00691 return countTypedHits(type_2_HitFilter, trackerHitFilter, true);
00692 }
00693
00694
00695
00696
00697
00698
00699
00700 inline int HitPattern::trackerLayersWithMeasurement() const {
00701 return pixelLayersWithMeasurement() +
00702 stripLayersWithMeasurement();
00703 }
00704
00705 inline int HitPattern::pixelLayersWithMeasurement() const {
00706 return pixelBarrelLayersWithMeasurement() +
00707 pixelEndcapLayersWithMeasurement();
00708 }
00709
00710 inline int HitPattern::stripLayersWithMeasurement() const {
00711 return stripTIBLayersWithMeasurement() +
00712 stripTIDLayersWithMeasurement() +
00713 stripTOBLayersWithMeasurement() +
00714 stripTECLayersWithMeasurement();
00715 }
00716
00717
00718 inline int HitPattern::trackerLayersWithoutMeasurement() const {
00719 return pixelLayersWithoutMeasurement() +
00720 stripLayersWithoutMeasurement();
00721 }
00722
00723 inline int HitPattern::pixelLayersWithoutMeasurement() const {
00724 return pixelBarrelLayersWithoutMeasurement() +
00725 pixelEndcapLayersWithoutMeasurement();
00726 }
00727
00728 inline int HitPattern::stripLayersWithoutMeasurement() const {
00729 return stripTIBLayersWithoutMeasurement() +
00730 stripTIDLayersWithoutMeasurement() +
00731 stripTOBLayersWithoutMeasurement() +
00732 stripTECLayersWithoutMeasurement();
00733 }
00734
00735
00736 inline int HitPattern::trackerLayersTotallyOffOrBad() const {
00737 return pixelLayersTotallyOffOrBad() +
00738 stripLayersTotallyOffOrBad();
00739 }
00740
00741 inline int HitPattern::pixelLayersTotallyOffOrBad() const {
00742 return pixelBarrelLayersTotallyOffOrBad() +
00743 pixelEndcapLayersTotallyOffOrBad();
00744 }
00745
00746 inline int HitPattern::stripLayersTotallyOffOrBad() const {
00747 return stripTIBLayersTotallyOffOrBad() +
00748 stripTIDLayersTotallyOffOrBad() +
00749 stripTOBLayersTotallyOffOrBad() +
00750 stripTECLayersTotallyOffOrBad();
00751 }
00752
00753 inline int HitPattern::trackerLayersNull() const {
00754 return pixelLayersNull() +
00755 stripLayersNull();
00756 }
00757
00758 inline int HitPattern::pixelLayersNull() const {
00759 return pixelBarrelLayersNull() +
00760 pixelEndcapLayersNull();
00761 }
00762
00763 inline int HitPattern::stripLayersNull() const {
00764 return stripTIBLayersNull() +
00765 stripTIDLayersNull() +
00766 stripTOBLayersNull() +
00767 stripTECLayersNull();
00768 }
00769
00770
00771 inline int HitPattern::muonStationsWithValidHits() const { return muonStations(0, 0); }
00772 inline int HitPattern::muonStationsWithBadHits() const { return muonStations(0, 3); }
00773 inline int HitPattern::muonStationsWithAnyHits() const { return muonStations(0,-1); }
00774 inline int HitPattern::dtStationsWithValidHits() const { return muonStations(1, 0); }
00775 inline int HitPattern::dtStationsWithBadHits() const { return muonStations(1, 3); }
00776 inline int HitPattern::dtStationsWithAnyHits() const { return muonStations(1,-1); }
00777 inline int HitPattern::cscStationsWithValidHits() const { return muonStations(2, 0); }
00778 inline int HitPattern::cscStationsWithBadHits() const { return muonStations(2, 3); }
00779 inline int HitPattern::cscStationsWithAnyHits() const { return muonStations(2,-1); }
00780 inline int HitPattern::rpcStationsWithValidHits() const { return muonStations(3, 0); }
00781 inline int HitPattern::rpcStationsWithBadHits() const { return muonStations(3, 3); }
00782 inline int HitPattern::rpcStationsWithAnyHits() const { return muonStations(3,-1); }
00783
00784 inline int HitPattern::innermostMuonStationWithValidHits() const { return innermostMuonStationWithHits(0); }
00785 inline int HitPattern::innermostMuonStationWithBadHits() const { return innermostMuonStationWithHits(3); }
00786 inline int HitPattern::innermostMuonStationWithAnyHits() const { return innermostMuonStationWithHits(-1); }
00787 inline int HitPattern::outermostMuonStationWithValidHits() const { return outermostMuonStationWithHits(0); }
00788 inline int HitPattern::outermostMuonStationWithBadHits() const { return outermostMuonStationWithHits(3); }
00789 inline int HitPattern::outermostMuonStationWithAnyHits() const { return outermostMuonStationWithHits(-1); }
00790
00791 }
00792
00793 #endif