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;
227 memset(hasMono, 0,
sizeof(hasMono));
229 memset(hasStereo, 0,
sizeof(hasStereo));
231 for (
int i = 0;
i < nHits;
i++) {
233 if (pattern == 0)
break;
256 if (hasMono[
i][
j] && hasStereo[
i][
j])
262 uint32_t tk_substr_layer =
279 uint32_t layerCase = 999999;
283 if (pattern == 0)
break;
284 if ((pattern & mask) == tk_substr_layer) {
286 if (hitType < layerCase) {
288 if (hitType == 3) layerCase = 2;
297 uint32_t tk_substr_layer =
311 uint32_t monoStereo = 0;
315 if (pattern == 0)
break;
316 if ((pattern & mask) == tk_substr_layer)
341 uint32_t NPixBarrel = 4;
342 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
351 uint32_t NPixForward = 3;
352 for (uint32_t layer=1; layer<=NPixForward; layer++) {
361 for (uint32_t layer=1; layer<=4; layer++) {
370 for (uint32_t layer=1; layer<=3; layer++) {
379 for (uint32_t layer=1; layer<=6; layer++) {
388 for (uint32_t layer=1; layer<=9; layer++) {
398 uint32_t NPixBarrel = 4;
399 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
408 uint32_t NPixForward = 3;
409 for (uint32_t layer=1; layer<=NPixForward; layer++) {
418 for (uint32_t layer=1; layer<=4; layer++) {
427 for (uint32_t layer=1; layer<=3; layer++) {
436 for (uint32_t layer=1; layer<=6; layer++) {
445 for (uint32_t layer=1; layer<=9; layer++) {
455 uint32_t NPixBarrel = 4;
456 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
465 uint32_t NPixForward = 3;
466 for (uint32_t layer=1; layer<=NPixForward; layer++) {
475 for (uint32_t layer=1; layer<=4; layer++) {
484 for (uint32_t layer=1; layer<=3; layer++) {
493 for (uint32_t layer=1; layer<=6; layer++) {
502 for (uint32_t layer=1; layer<=9; layer++) {
512 uint32_t NPixBarrel = 4;
513 for (uint32_t layer=1; layer<=NPixBarrel; layer++) {
522 uint32_t NPixForward = 3;
523 for (uint32_t layer=1; layer<=NPixForward; layer++) {
532 for (uint32_t layer=1; layer<=4; layer++) {
541 for (uint32_t layer=1; layer<=3; layer++) {
550 for (uint32_t layer=1; layer<=6; layer++) {
559 for (uint32_t layer=1; layer<=9; layer++) {
579 stream <<
"\tcsc ring " <<
getCSCRing(pattern);
583 stream <<
"(UNKNOWN Muon SubStructure!) \tsubsubstructure " <<
getSubStructure(pattern);
586 stream <<
"\tlayer " <<
getLayer(pattern);
588 stream <<
"\thit type " <<
getHitType(pattern);
594 stream <<
"HitPattern" << std::endl;
597 std::ios_base::fmtflags
flags = stream.flags();
598 stream.setf ( std::ios_base::hex, std::ios_base::basefield );
599 stream.setf ( std::ios_base::showbase );
602 stream << pattern << std::endl;
618 return id.isStereo();
623 return id.isStereo();
628 return id.isStereo();
633 return id.isStereo();
648 if (pattern == 0)
break;
651 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
655 return stations[0]+stations[1]+stations[2]+stations[3];
663 if (pattern == 0)
break;
665 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
667 if (ret == 0 || stat < ret) ret = stat;
677 if (pattern == 0)
break;
679 (hitType == -1 ||
int(
getHitType(pattern)) == hitType)) {
681 if (ret == 0 || stat > ret) ret = stat;
692 if (pattern == 0)
break;
697 return stations[0]+stations[1]+stations[2]+stations[3];
704 if (pattern == 0)
break;
709 return stations[0]+stations[1]+stations[2]+stations[3];
713 int stations[4][2] = { {0,0}, {0,0}, {0,0}, {0,0} };
716 if (pattern == 0)
break;
721 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 uint32_t getSubSubStructure(uint32_t pattern)
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 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)
Abs< T >::type abs(const T &t)
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
int numberOfValidStripLayersWithMonoAndStereo() 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.