22 uint32_t
detid =
id.det();
23 uint32_t hitType = (uint32_t) hit.
getType();
32 uint32_t subdet =
id.subdetId();
54 layer = ((
CSCDetId(
id.rawId()).station()-1)<<2) + (
CSCDetId(
id.rawId()).ring()-1);
83 uint32_t bit = (pattern >>
i) & 0x1;
92 uint32_t
detid =
id.det();
93 uint32_t subdet =
id.subdetId();
95 std::vector<const TrackingRecHit*> hits;
107 hits.push_back(&hit);
111 std::vector<const TrackingRecHit*> seg2D = hit.
recHits();
113 for(std::vector<const TrackingRecHit*>::const_iterator it = seg2D.begin(); it != seg2D.end(); ++it){
114 std::vector<const TrackingRecHit*> hits1D = (*it)->recHits();
115 copy(hits1D.begin(),hits1D.end(),back_inserter(hits));
124 hits.push_back(&hit);
132 hits.push_back(&hit);
137 for(std::vector<const TrackingRecHit*>::const_iterator it = hits.begin(); it != hits.end(); ++it)
163 uint16_t bitEndOffset = (position+1) *
HitSize;
164 uint8_t secondWord = (bitEndOffset >> 5);
165 uint8_t secondWordBits = bitEndOffset & (32-1);
166 if (secondWordBits >=
HitSize) {
167 uint8_t lowBitsToTrash = secondWordBits -
HitSize;
168 uint32_t myResult = (
hitPattern_[secondWord] >> lowBitsToTrash) & ((1 << HitSize)-1);
171 uint8_t firstWordBits =
HitSize - secondWordBits;
172 uint32_t firstWordBlock =
hitPattern_[secondWord-1] >> (32-firstWordBits);
173 uint32_t secondWordBlock =
hitPattern_[secondWord] & ((1<<secondWordBits)-1);
174 uint32_t myResult = firstWordBlock + (secondWordBlock << firstWordBits);
186 if (pattern == 0)
break;
201 if (pattern == 0)
break;
217 if (pattern == 0)
break;
228 memset(hasMono, 0,
sizeof(hasMono));
230 memset(hasStereo, 0,
sizeof(hasStereo));
232 for (
int i = 0;
i < nHits;
i++) {
234 if (pattern == 0)
break;
255 if (hasMono[
i][
j] && hasStereo[
i][
j])
261 uint32_t tk_substr_layer =
278 uint32_t layerCase = 999999;
282 if (pattern == 0)
break;
283 if ((pattern & mask) == tk_substr_layer) {
285 if (hitType < layerCase) {
287 if (hitType == 3) layerCase = 2;
296 uint32_t tk_substr_layer =
310 uint32_t monoStereo = 0;
314 if (pattern == 0)
break;
315 if ((pattern & mask) == tk_substr_layer)
340 uint32_t NPixBarrel = 4;
341 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
350 uint32_t NPixForward = 3;
351 for (uint32_t layer=1; layer<=NPixForward; layer++) {
360 for (uint32_t layer=1; layer<=4; layer++) {
369 for (uint32_t layer=1; layer<=3; layer++) {
378 for (uint32_t layer=1; layer<=6; layer++) {
387 for (uint32_t layer=1; layer<=9; layer++) {
397 uint32_t NPixBarrel = 4;
398 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
407 uint32_t NPixForward = 3;
408 for (uint32_t layer=1; layer<=NPixForward; layer++) {
417 for (uint32_t layer=1; layer<=4; layer++) {
426 for (uint32_t layer=1; layer<=3; layer++) {
435 for (uint32_t layer=1; layer<=6; layer++) {
444 for (uint32_t layer=1; layer<=9; layer++) {
454 uint32_t NPixBarrel = 4;
455 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
464 uint32_t NPixForward = 3;
465 for (uint32_t layer=1; layer<=NPixForward; layer++) {
474 for (uint32_t layer=1; layer<=4; layer++) {
483 for (uint32_t layer=1; layer<=3; layer++) {
492 for (uint32_t layer=1; layer<=6; layer++) {
501 for (uint32_t layer=1; layer<=9; layer++) {
511 uint32_t NPixBarrel = 4;
512 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
521 uint32_t NPixForward = 3;
522 for (uint32_t layer=1; layer<=NPixForward; layer++) {
531 for (uint32_t layer=1; layer<=4; layer++) {
540 for (uint32_t layer=1; layer<=3; layer++) {
549 for (uint32_t layer=1; layer<=6; layer++) {
558 for (uint32_t layer=1; layer<=9; layer++) {
578 stream <<
"\tcsc ring " <<
getCSCRing(pattern);
582 stream <<
"(UNKNOWN Muon SubStructure!) \tsubsubstructure " <<
getSubStructure(pattern);
585 stream <<
"\tlayer " <<
getLayer(pattern);
587 stream <<
"\thit type " <<
getHitType(pattern);
593 stream <<
"HitPattern" << std::endl;
596 std::ios_base::fmtflags
flags = stream.flags();
597 stream.setf ( std::ios_base::hex, std::ios_base::basefield );
598 stream.setf ( std::ios_base::showbase );
601 stream << pattern << std::endl;
617 return id.isStereo();
622 return id.isStereo();
627 return id.isStereo();
632 return id.isStereo();
647 if (pattern == 0)
break;
650 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
654 return stations[0]+stations[1]+stations[2]+stations[3];
662 if (pattern == 0)
break;
664 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
666 if (ret == 0 || stat < ret) ret = stat;
676 if (pattern == 0)
break;
678 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
680 if (ret == 0 || stat > ret) ret = stat;
691 if (pattern == 0)
break;
696 return stations[0]+stations[1]+stations[2]+stations[3];
703 if (pattern == 0)
break;
708 return stations[0]+stations[1]+stations[2]+stations[3];
712 int stations[4][2] = { {0,0}, {0,0}, {0,0}, {0,0} };
715 if (pattern == 0)
break;
720 return stations[0][0]*stations[0][1] + stations[1][0]*stations[1][1] + stations[2][0]*stations[2][1] + stations[3][0]*stations[3][1];
int stripTOBLayersWithMeasurement() const
virtual int dimension() const =0
static uint32_t getRPCLayer(uint32_t pattern)
RPC layer: for station 1 and 2, layer = 1(inner) or 2(outer); for station 3, 4 layer is always 0...
int outermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
static uint32_t getDTSuperLayer(uint32_t pattern)
DT superlayer (1-3). Where the "hit" was a DT segment, superlayer is 0. Only valid for muon DT patter...
int pixelBarrelLayersNull() const
int stripTIBLayersNull() const
unsigned int layer() const
layer id
static uint32_t getLayer(uint32_t pattern)
void appendHit(const TrackingRecHit &hit)
static uint32_t isStereo(DetId)
static uint32_t getCSCRing(uint32_t pattern)
CSC ring (1-4). Only valid for muon CSC patterns, of course.
uint32_t hitPattern_[PatternSize]
int stripTIBLayersWithMeasurement() const
int stripTECLayersNull() const
static const unsigned short SideOffset
uint32_t encode(const TrackingRecHit &, unsigned int)
int muonStations(int subdet, int hitType) const
subdet = 0(all), 1(DT), 2(CSC), 3(RPC); hitType=-1(all), 0=valid, 3=bad
static bool muonDTHitFilter(uint32_t pattern)
static const unsigned short SubstrOffset
static bool trackerHitFilter(uint32_t pattern)
uint32_t getTrackerMonoStereo(uint32_t substr, uint32_t layer) const
int numberOfDTStationsWithRPhiView() const
static uint32_t getHitType(uint32_t pattern)
std::vector< Variable::Flags > flags
int stripTIDLayersWithoutMeasurement() const
static uint32_t getMuonStation(uint32_t pattern)
Muon station (1-4). Only valid for muon patterns, of course.
void set(const I &begin, const I &end)
void print(std::ostream &stream=std::cout) const
static const unsigned short PatternSize
int numberOfValidStripLayersWithMonoAndStereo() const
int pixelBarrelLayersWithoutMeasurement() const
static const unsigned short HitTypeMask
int pixelEndcapLayersWithMeasurement() const
static int position[TOTALCHAMBERS][3]
unsigned int layer() const
layer id
bool hasValidHitInFirstPixelEndcap() const
static bool muonHitFilter(uint32_t pattern)
int stripTOBLayersTotallyOffOrBad() const
int stripTIDLayersTotallyOffOrBad() const
int stripTIDLayersWithMeasurement() const
static const unsigned short SubDetectorMask
int stripTECLayersTotallyOffOrBad() const
virtual std::vector< const TrackingRecHit * > recHits() const =0
Access to component RecHits (if any)
static uint32_t getSubStructure(uint32_t pattern)
int stripTIBLayersWithoutMeasurement() const
int numberOfDTStationsWithRZView() const
static bool muonRPCHitFilter(uint32_t pattern)
static bool validHitFilter(uint32_t pattern)
int stripTIDLayersNull() const
unsigned int offset(bool)
static const unsigned short HitTypeOffset
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
unsigned int disk() const
disk id
int numberOfDTStationsWithBothViews() const
static const unsigned short HitSize
static uint32_t getSide(uint32_t pattern)
int innermostMuonStationWithHits(int hitType) const
hitType=-1(all), 0=valid, 3=bad; 0 = no stations at all
static const unsigned short SideMask
int pixelEndcapLayersWithoutMeasurement() const
static const unsigned short SubDetectorOffset
int pixelBarrelLayersWithMeasurement() const
static uint32_t getRPCregion(uint32_t pattern)
RPC region: 0 = barrel, 1 = endcap. Only valid for muon RPC patterns, of course.
unsigned int wheel() const
wheel id
unsigned int layer() const
layer id
int stripTOBLayersNull() const
uint32_t getTrackerLayerCase(uint32_t substr, uint32_t layer) const
int pixelBarrelLayersTotallyOffOrBad() const
static const unsigned short SubstrMask
static const unsigned short LayerOffset
int stripTECLayersWithoutMeasurement() const
static bool stripHitFilter(uint32_t pattern)
int stripTECLayersWithMeasurement() const
int stripTOBLayersWithoutMeasurement() const
int pixelEndcapLayersTotallyOffOrBad() const
static bool pixelEndcapHitFilter(uint32_t pattern)
static bool muonCSCHitFilter(uint32_t pattern)
void printHitPattern(int position, std::ostream &stream) const
bool hasValidHitInFirstPixelBarrel() const
DetId geographicalId() const
int stripTIBLayersTotallyOffOrBad() const
static const unsigned short LayerMask
Detector det() const
get the detector field from this detid
uint32_t getHitPattern(int position) const
static bool pixelBarrelHitFilter(uint32_t pattern)
unsigned int wheel() const
wheel id
int pixelEndcapLayersNull() const
void setHitPattern(int position, uint32_t pattern)
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.