20 : hitCount(0), beginTrackHits(0), endTrackHits(0), beginInner(0), endInner(0), beginOuter(0), endOuter(0) {
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) {
75 return encode(
hit.geographicalId(),
hit.getType(), ttopo);
79 uint16_t encodeMuonLayer(
const DetId&
id) {
80 uint16_t detid =
id.det();
81 uint16_t subdet =
id.subdetId();
96 layer = ((rpcid.station() - 1) << 2);
97 layer |= (rpcid.station() <= 2) ? ((rpcid.layer() - 1) << 1) : 0x0;
98 layer |=
abs(rpcid.region());
102 layer = ((gemid.station() - 1) << 2);
103 layer |=
abs(gemid.layer() - 1);
110 layer = (me0id.roll());
116 uint16_t encodeTimingLayer(
const DetId&
id) {
117 uint16_t detid =
id.det();
118 uint16_t subdet =
id.subdetId();
119 uint16_t layer = 0x0;
122 switch (mtdid.mtdSubDetector()) {
130 throw cms::Exception(
"HitPattern") <<
"Invalid MTD Subdetector " << mtdid.mtdSubDetector() <<
"!";
133 throw cms::Exception(
"HitPattern") <<
"Invalid DetId for FastTime det= " << detid <<
" subdet= " << subdet <<
"!";
140 uint16_t detid =
id.det();
141 uint16_t subdet =
id.subdetId();
144 uint16_t layer = 0x0;
146 layer = ttopo.
layer(
id);
148 layer = encodeMuonLayer(
id);
150 layer = encodeTimingLayer(
id);
171 return encode(detid, subdet, layer, side, hitType);
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 "
247 <<
"MISSING_INNER_HITS"
248 <<
" were stored on this object before hits of some other category were inserted "
249 <<
"but hits of the same category should be inserted in a row. "
250 <<
"Please rework the code so it inserts all "
251 <<
"MISSING_INNER_HITS"
262 <<
"MISSING_OUTER_HITS"
263 <<
" were stored on this object before hits of some other category were inserted "
264 <<
"but hits of the same category should be inserted in a row. "
265 <<
"Please rework the code so it inserts all "
266 <<
"MISSING_OUTER_HITS"
289 <<
"Got DetId from det " <<
id.det()
290 <<
" that is not Muon in appendMuonHit(), which should only be used for muon hits in the HitPattern IO rule";
293 uint16_t subdet =
id.subdetId();
322 uint8_t secondWord = (bitEndOffset >> 4);
323 uint8_t secondWordBits = bitEndOffset & (16 - 1);
325 uint8_t lowBitsToTrash = secondWordBits -
HIT_LENGTH;
329 uint8_t firstWordBits =
HIT_LENGTH - secondWordBits;
330 uint16_t firstWordBlock =
hitPattern[secondWord - 1] >> (16 - firstWordBits);
331 uint16_t secondWordBlock =
hitPattern[secondWord] & ((1 << secondWordBits) - 1);
332 uint16_t myResult = firstWordBlock + (secondWordBlock << firstWordBits);
351 memset(hasMono, 0,
sizeof(hasMono));
352 memset(hasStereo, 0,
sizeof(hasStereo));
360 if (stripdet != 0 && subStructure != stripdet) {
385 if (hasMono[
i][
j] && hasStereo[
i][
j]) {
395 std::bitset<128> side[2];
404 if (hitType != HIT_TYPE::VALID)
411 return (side[0] & side[1]).count();
431 uint16_t tk_substr_layer =
444 if ((
pattern & mask) == tk_substr_layer) {
446 if (hitType < layerCase) {
448 layerCase = (hitType ==
HIT_TYPE::BAD ? (uint32_t)HIT_TYPE::INACTIVE : hitType);
449 if (layerCase == HIT_TYPE::VALID) {
459 uint16_t tk_substr_layer =
467 uint16_t monoStereo = 0x0;
471 if ((
pattern & mask) == tk_substr_layer) {
473 if (hitType == HIT_TYPE::VALID) {
494 std::bitset<128> layerOk;
503 if (hitType != HIT_TYPE::VALID)
510 return layerOk.count();
515 std::bitset<128> layerOk;
522 if (hitType != HIT_TYPE::VALID)
529 return layerOk.count();
533 std::bitset<128> layerOk;
534 std::bitset<128> layerMissed;
543 if (hitType == HIT_TYPE::VALID)
545 if (hitType == HIT_TYPE::MISSING)
548 layerMissed &= ~layerOk;
552 return layerMissed.count();
557 uint16_t NPixBarrel = 4;
558 for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
568 uint16_t NPixForward = 3;
569 for (uint16_t layer = 1; layer <= NPixForward; layer++) {
579 for (uint16_t layer = 1; layer <= 4; layer++) {
589 for (uint16_t layer = 1; layer <= 3; layer++) {
599 for (uint16_t layer = 1; layer <= 6; layer++) {
609 for (uint16_t layer = 1; layer <= 9; layer++) {
619 uint16_t NPixBarrel = 4;
620 for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
630 uint16_t NPixForward = 3;
631 for (uint16_t layer = 1; layer <= NPixForward; layer++) {
641 for (uint16_t layer = 1; layer <= 4; layer++) {
651 for (uint16_t layer = 1; layer <= 3; layer++) {
661 for (uint16_t layer = 1; layer <= 6; layer++) {
671 for (uint16_t layer = 1; layer <= 9; layer++) {
681 uint16_t NPixBarrel = 4;
682 for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
692 uint16_t NPixForward = 3;
693 for (uint16_t layer = 1; layer <= NPixForward; layer++) {
703 for (uint16_t layer = 1; layer <= 4; layer++) {
713 for (uint16_t layer = 1; layer <= 3; layer++) {
723 for (uint16_t layer = 1; layer <= 6; layer++) {
733 for (uint16_t layer = 1; layer <= 9; layer++) {
743 uint16_t NPixBarrel = 4;
744 for (uint16_t layer = 1; layer <= NPixBarrel; layer++) {
754 uint16_t NPixForward = 3;
755 for (uint16_t layer = 1; layer <= NPixForward; layer++) {
765 for (uint16_t layer = 1; layer <= 4; layer++) {
775 for (uint16_t layer = 1; layer <= 3; layer++) {
785 for (uint16_t layer = 1; layer <= 6; layer++) {
795 for (uint16_t layer = 1; layer <= 9; layer++) {
840 stream <<
"HitPattern" << std::endl;
845 stream.setf(std::ios_base::hex, std::ios_base::basefield);
846 stream.setf(std::ios_base::showbase);
860 switch (
i.subdetId()) {
878 int stations[4] = {0, 0, 0, 0};
887 return stations[0] + stations[1] + stations[2] + stations[3];
920 int stations[4] = {0, 0, 0, 0};
928 return stations[0] + stations[1] + stations[2] + stations[3];
932 int stations[4] = {0, 0, 0, 0};
939 return stations[0] + stations[1] + stations[2] + stations[3];
943 int stations[4][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
951 return stations[0][0] * stations[0][1] + stations[1][0] * stations[1][1] + stations[2][0] * stations[2][1] +
952 stations[3][0] * stations[3][1];