diff --git a/DataFormats/TrackReco/interface/HitPattern.h b/DataFormats/TrackReco/interface/HitPattern.h index fcdde25edc9c9..e23680ac23ec9 100644 --- a/DataFormats/TrackReco/interface/HitPattern.h +++ b/DataFormats/TrackReco/interface/HitPattern.h @@ -279,9 +279,20 @@ namespace reco { int numberOfInactiveHits() const; // not-null, inactive int numberOfInactiveTrackerHits() const; // not-null, inactive, tracker - - int numberOfValidStripLayersWithMonoAndStereo () + int numberOfValidStripLayersWithMonoAndStereo (uint32_t stripdet, uint32_t layer) const; // count strip layers that have non-null, valid mono and stereo hits + + int numberOfValidStripLayersWithMonoAndStereo () + const {return numberOfValidStripLayersWithMonoAndStereo(0,0);} + + int numberOfValidTOBLayersWithMonoAndStereo (uint32_t layer = 0) + const {return numberOfValidStripLayersWithMonoAndStereo(StripSubdetector::TOB,layer);} + int numberOfValidTIBLayersWithMonoAndStereo (uint32_t layer = 0) + const {return numberOfValidStripLayersWithMonoAndStereo(StripSubdetector::TIB,layer);} + int numberOfValidTIDLayersWithMonoAndStereo (uint32_t layer = 0) + const {return numberOfValidStripLayersWithMonoAndStereo(StripSubdetector::TID,layer);} + int numberOfValidTECLayersWithMonoAndStereo (uint32_t layer = 0) + const {return numberOfValidStripLayersWithMonoAndStereo(StripSubdetector::TEC,layer);} uint32_t getTrackerLayerCase(uint32_t substr, uint32_t layer) const; uint32_t getTrackerMonoStereo (uint32_t substr, uint32_t layer) const; diff --git a/DataFormats/TrackReco/src/HitPattern.cc b/DataFormats/TrackReco/src/HitPattern.cc index 6edfba5c580ec..a0dcd74241960 100644 --- a/DataFormats/TrackReco/src/HitPattern.cc +++ b/DataFormats/TrackReco/src/HitPattern.cc @@ -220,8 +220,7 @@ int HitPattern::numberOfHits() const { return count; } - -int HitPattern::numberOfValidStripLayersWithMonoAndStereo () const { +int HitPattern::numberOfValidStripLayersWithMonoAndStereo (uint32_t stripdet, uint32_t layer) const { static const int nHits = (PatternSize * 32) / HitSize; bool hasMono[SubstrMask + 1][LayerMask + 1]; // printf("sizeof(hasMono) = %d\n", sizeof(hasMono)); @@ -233,17 +232,19 @@ int HitPattern::numberOfValidStripLayersWithMonoAndStereo () const { uint32_t pattern = getHitPattern(i); if (pattern == 0) break; if (validHitFilter(pattern) && stripHitFilter(pattern)) { + if (stripdet!=0 && getSubStructure(pattern)!=stripdet) continue; + if (layer!=0 && getSubSubStructure(pattern)!=layer) continue; switch (getSide(pattern)) { case 0: // mono - hasMono[getSubStructure(pattern)][getLayer(pattern)] - = true; - break; + hasMono[getSubStructure(pattern)][getLayer(pattern)] + = true; + break; case 1: // stereo - hasStereo[getSubStructure(pattern)][getLayer(pattern)] - = true; - break; + hasStereo[getSubStructure(pattern)][getLayer(pattern)] + = true; + break; default: - break; + break; } } @@ -253,7 +254,7 @@ int HitPattern::numberOfValidStripLayersWithMonoAndStereo () const { for (int i = 0; i < SubstrMask + 1; ++i) for (int j = 0; j < LayerMask + 1; ++j) if (hasMono[i][j] && hasStereo[i][j]) - count++; + count++; return count; }