12 if (linkNo >= 0 && linkNo < 6)
14 else if (linkNo >= 8 && linkNo < 14)
16 else if (linkNo >= 16 && linkNo < 22)
18 else if (linkNo >= 22 && linkNo < 28)
20 else if ( (linkNo >= 28 && linkNo < 30) || (linkNo >= 32 && linkNo < 36))
40 unsigned int ownLinks[] = {4,5,12,13,20,21,22,23,28,29};
42 for (
int i = 0;
i < 10;
i++)
53 int nBX, firstBX, lastBX;
58 LogDebug(
"L1T") <<
"BX override. Set firstBX = lastBX = 0";
67 for(
int ibx = firstBX; ibx <= lastBX; ibx++)
71 for(
unsigned int iw = 0; iw < block.
header().
getSize()/nBX; iw++)
72 inputWords[iw] = payload[iw+(ibx+lastBX)*6];
74 int wheel, sector, trTag;
76 sector = block.
amc().getBoardID() - 1;
77 if ( sector < 0 || sector > 11 )
79 edm::LogInfo (
"l1t:stage2::BMTFUnpackerInputs::unpack") <<
"Sector found out of range so it will be calculated by the slot number";
80 if ( block.
amc().getAMCNumber()%2 != 0 )
81 sector = block.
amc().getAMCNumber()/2 ;
83 sector = 6 + (block.
amc().getAMCNumber()/2 -1);
86 int mbPhi[4], mbPhiB[4], mbQual[4], mbBxC[4], mbRPC[4];
89 for (
int iw = 0; iw < 4; iw++)
91 if ( ((inputWords[iw] & 0xfffffff) == 0) || (inputWords[iw] == 0x505050bc) )
93 else if ( (inputWords[iw] != 0x505050bc) && (inputWords[iw+2] == 0x505050bc) )
97 if ( ((inputWords[iw] >> 11) & 0x1) == 1 )
98 mbPhi[iw] = (inputWords[iw] & 0x7FF ) - 2048;
100 mbPhi[iw] = (inputWords[iw] & 0xFFF );
103 if ( ((inputWords[iw] >> 21) & 0x1) == 1 )
104 mbPhiB[iw] = ( (inputWords[iw] >> 12) & 0x1FF ) - 512;
106 mbPhiB[iw] = (inputWords[iw] >> 12) & 0x3FF;
108 mbQual[iw] = (inputWords[iw] >> 22) & 0x7;
109 mbRPC[iw] = (inputWords[iw] >> 26) & 0x1;
110 mbBxC[iw] = (inputWords[iw] >> 30) & 0x3;
116 phiData.push_back(
L1MuDTChambPhDigi( ibx, wheel, sector, iw+1, mbPhi[iw], mbPhiB[iw], mbQual[iw], trTag, mbBxC[iw], mbRPC[iw] ) );
122 for (
int i = 0;
i < 3;
i++)
125 for(
int j=0;
j<7;
j++)
127 etaHits[
i][
j] = (inputWords[4] >> (
i*7 +
j)) & 0x1;
128 if ( etaHits[
i][
j]!=0 )
134 for (
int i = 0;
i < 3;
i++)
137 theData.push_back(
L1MuDTChambThDigi( ibx, wheel, sector, i+1, etaHits[i], linkAndQual_[blockId/2 - 1].hits[i]) );
145 std::copy(&etaHits[0][0], &etaHits[0][0]+3*7,&temp.
hits[0][0]);
146 linkAndQual_[blockId/2] =
temp;
The_Container const * getContainer() const
bool unpacking(const Block &block, UnpackerCollections *coll, std::map< int, qualityHits > &linkAndQual_, const bool &isNewFw)
void getBXRange(int nbx, int &first, int &last)
BlockHeader header() const
bool checkQual(const unsigned int &value, const bool &isNewFw)
std::vector< uint32_t > payload() const
std::vector< L1MuDTChambPhDigi > Phi_Container
std::vector< L1MuDTChambThDigi > The_Container
void setContainer(const The_Container &inputSegments)
void setContainer(const Phi_Container &inputSegments)
Phi_Container const * getContainer() const
void amc(const amc::Header &h)
void numWheelSectorTrTag(int &wheelNo, int &tagSegID, int linkNo, int amcNo)