Go to the documentation of this file.00001
00017
00018 #include "DataFormats/L1GlobalTrigger/interface/L1GtfeWord.h"
00019
00020
00021 #include <iomanip>
00022
00023
00024
00025 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00026 #include "FWCore/MessageLogger/interface/MessageDrop.h"
00027
00028
00029
00030
00031 L1GtfeWord::L1GtfeWord() :
00032 m_boardId(0), m_recordLength1(0), m_recordLength(0), m_bxNr(0), m_setupVersion(0),
00033 m_activeBoards(0), m_altNrBxBoard(0), m_totalTriggerNr(0) {
00034
00035
00036
00037 }
00038
00039
00040 L1GtfeWord::L1GtfeWord(
00041 boost::uint16_t boardIdValue, boost::uint16_t recordLength1Value,
00042 boost::uint16_t recordLengthValue, boost::uint16_t bxNrValue,
00043 boost::uint32_t setupVersionValue, boost::uint16_t activeBoardsValue,
00044 boost::uint16_t altNrBxBoardValue, boost::uint32_t totalTriggerNrValue) :
00045 m_boardId(boardIdValue), m_recordLength1(recordLength1Value),
00046 m_recordLength(recordLengthValue), m_bxNr(bxNrValue),
00047 m_setupVersion(setupVersionValue), m_activeBoards(activeBoardsValue), m_altNrBxBoard(
00048 altNrBxBoardValue), m_totalTriggerNr(totalTriggerNrValue)
00049
00050 {
00051
00052
00053 }
00054
00055
00056 L1GtfeWord::~L1GtfeWord()
00057 {
00058
00059
00060
00061 }
00062
00063
00064 bool L1GtfeWord::operator==(const L1GtfeWord& result) const
00065 {
00066
00067 if(m_boardId != result.m_boardId) {
00068 return false;
00069 }
00070
00071 if(m_recordLength1 != result.m_recordLength1) {
00072 return false;
00073 }
00074
00075 if(m_recordLength != result.m_recordLength) {
00076 return false;
00077 }
00078
00079 if(m_bxNr != result.m_bxNr) {
00080 return false;
00081 }
00082
00083 if(m_setupVersion != result.m_setupVersion) {
00084 return false;
00085 }
00086
00087 if(m_activeBoards != result.m_activeBoards) {
00088 return false;
00089 }
00090
00091 if(m_altNrBxBoard != result.m_altNrBxBoard) {
00092 return false;
00093 }
00094
00095 if(m_totalTriggerNr != result.m_totalTriggerNr) {
00096 return false;
00097 }
00098
00099
00100 return true;
00101
00102 }
00103
00104
00105 bool L1GtfeWord::operator!=(const L1GtfeWord& result) const
00106 {
00107
00108 return !( result == *this);
00109
00110 }
00111
00112
00113
00114
00115 void L1GtfeWord::setBoardId(const boost::uint64_t& word64)
00116 {
00117 m_boardId = (word64 & BoardIdMask) >> BoardIdShift;
00118 }
00119
00120
00121
00122 void L1GtfeWord::setBoardIdWord64(boost::uint64_t& word64, int iWord)
00123 {
00124
00125 if (iWord == BoardIdWord) {
00126 word64 = word64 | (static_cast<boost::uint64_t> (m_boardId) << BoardIdShift);
00127 }
00128
00129 }
00130
00131
00132
00133 void L1GtfeWord::setRecordLength1(const boost::uint64_t& word64)
00134 {
00135 m_recordLength1 = (word64 & RecordLength1Mask) >> RecordLength1Shift;
00136 }
00137
00138
00139
00140 void L1GtfeWord::setRecordLength1Word64(boost::uint64_t& word64, int iWord)
00141 {
00142
00143 if (iWord == RecordLength1Word) {
00144 word64 = word64 |
00145 (static_cast<boost::uint64_t> (m_recordLength1) << RecordLength1Shift);
00146 }
00147
00148 }
00149
00150
00151
00152 void L1GtfeWord::setRecordLength(const boost::uint64_t& word64)
00153 {
00154 m_recordLength = (word64 & RecordLengthMask) >> RecordLengthShift;
00155 }
00156
00157
00158
00159 void L1GtfeWord::setRecordLengthWord64(boost::uint64_t& word64, int iWord)
00160 {
00161
00162 if (iWord == RecordLengthWord) {
00163 word64 = word64 |
00164 (static_cast<boost::uint64_t> (m_recordLength) << RecordLengthShift);
00165 }
00166
00167 }
00168
00169
00170
00171 void L1GtfeWord::setBxNr(const boost::uint64_t& word64)
00172 {
00173 m_bxNr = (word64 & BxNrMask) >> BxNrShift;
00174 }
00175
00176
00177
00178 void L1GtfeWord::setBxNrWord64(boost::uint64_t& word64, int iWord)
00179 {
00180
00181 if (iWord == BxNrWord) {
00182 word64 = word64 | (static_cast<boost::uint64_t> (m_bxNr) << BxNrShift);
00183 }
00184
00185 }
00186
00187
00188
00189 void L1GtfeWord::setSetupVersion(const boost::uint64_t& word64)
00190 {
00191 m_setupVersion = (word64 & SetupVersionMask) >> SetupVersionShift;
00192 }
00193
00194
00195
00196 void L1GtfeWord::setSetupVersionWord64(boost::uint64_t& word64, int iWord)
00197 {
00198
00199 if (iWord == SetupVersionWord) {
00200 word64 = word64 |
00201 (static_cast<boost::uint64_t> (m_setupVersion) << SetupVersionShift);
00202 }
00203
00204 }
00205
00206
00207
00208 const int L1GtfeWord::bstFlag() const {
00209
00210 int bstFlagValue = 0;
00211 bstFlagValue = static_cast<int> (m_setupVersion & BstFlagMask);
00212
00213 return bstFlagValue;
00214
00215 }
00216
00217 void L1GtfeWord::setBstFlag(const int bstFlagValue) {
00218
00219 m_setupVersion = m_setupVersion | ( static_cast<boost::uint32_t> (bstFlagValue) & BstFlagMask );
00220
00221 }
00222
00223
00224
00225
00226 void L1GtfeWord::setActiveBoards(const boost::uint64_t& word64)
00227 {
00228 m_activeBoards = (word64 & ActiveBoardsMask) >> ActiveBoardsShift;
00229 }
00230
00231
00232
00233 void L1GtfeWord::setActiveBoardsWord64(boost::uint64_t& word64, int iWord)
00234 {
00235
00236 if (iWord == ActiveBoardsWord) {
00237 word64 = word64 |
00238 (static_cast<boost::uint64_t> (m_activeBoards) << ActiveBoardsShift);
00239 }
00240
00241 }
00242
00243
00244
00245 void L1GtfeWord::setActiveBoardsWord64(boost::uint64_t& word64, int iWord,
00246 boost::int16_t activeBoardsValue)
00247 {
00248 if (iWord == ActiveBoardsWord) {
00249 word64 = word64 |
00250 (static_cast<boost::uint64_t> (activeBoardsValue) << ActiveBoardsShift);
00251 }
00252
00253 }
00254
00255
00256
00257
00258 void L1GtfeWord::setAltNrBxBoard(const boost::uint64_t& word64)
00259 {
00260 m_altNrBxBoard = (word64 & AltNrBxBoardMask) >> AltNrBxBoardShift;
00261 }
00262
00263
00264
00265 void L1GtfeWord::setAltNrBxBoardWord64(boost::uint64_t& word64, int iWord)
00266 {
00267
00268 if (iWord == AltNrBxBoardWord) {
00269 word64 = word64 |
00270 (static_cast<boost::uint64_t> (m_altNrBxBoard) << AltNrBxBoardShift);
00271 }
00272
00273 }
00274
00275
00276
00277 void L1GtfeWord::setAltNrBxBoardWord64(boost::uint64_t& word64, int iWord,
00278 boost::int16_t altNrBxBoardValue)
00279 {
00280 if (iWord == AltNrBxBoardWord) {
00281 word64 = word64 |
00282 (static_cast<boost::uint64_t> (altNrBxBoardValue) << AltNrBxBoardShift);
00283 }
00284
00285 }
00286
00287
00288 void L1GtfeWord::setTotalTriggerNr(const boost::uint64_t& word64)
00289 {
00290 m_totalTriggerNr = (word64 & TotalTriggerNrMask) >> TotalTriggerNrShift;
00291 }
00292
00293
00294
00295 void L1GtfeWord::setTotalTriggerNrWord64(boost::uint64_t& word64, int iWord)
00296 {
00297
00298 if (iWord == TotalTriggerNrWord) {
00299 word64 = word64 |
00300 (static_cast<boost::uint64_t> (m_totalTriggerNr) << TotalTriggerNrShift);
00301 }
00302
00303 }
00304
00305
00306
00307
00308 void L1GtfeWord::reset()
00309 {
00310
00311 m_boardId = 0;
00312 m_recordLength1 = 0;
00313 m_recordLength = 0;
00314 m_bxNr = 0;
00315 m_setupVersion = 0;
00316
00317 m_activeBoards = 0;
00318 m_altNrBxBoard = 0;
00319 m_totalTriggerNr = 0;
00320 }
00321
00322
00323 void L1GtfeWord::print(std::ostream& myCout) const
00324 {
00325
00326 myCout << "\n L1GtfeWord::print \n" << std::endl;
00327
00328 myCout << " BoardId: "
00329 << std::hex << " hex: " << " " << std::setw(2) << std::setfill('0') << m_boardId
00330 << std::setfill(' ')
00331 << std::dec << " dec: " << m_boardId
00332 << std::endl;
00333
00334 myCout << " BX for alternative 1: "
00335 << std::hex << " hex: " << " " << std::setw(1) << m_recordLength1
00336 << std::dec << " dec: " << m_recordLength1
00337 << std::endl;
00338
00339 myCout << " BX for alternative 0: "
00340 << std::hex << " hex: " << " " << std::setw(1) << m_recordLength
00341 << std::dec << " dec: " << m_recordLength
00342 << std::endl;
00343
00344 myCout << " BxNr: "
00345 << std::hex << " hex: " << " " << std::setw(3) << std::setfill('0') << m_bxNr
00346 << std::setfill(' ')
00347 << std::dec << " dec: " << m_bxNr
00348 << std::endl;
00349
00350 myCout << " SetupVersion: "
00351 << std::hex << " hex: " << std::setw(8) << std::setfill('0') << m_setupVersion
00352 << std::setfill(' ')
00353 << std::dec << " dec: " << m_setupVersion
00354 << std::endl;
00355
00356
00357
00358 myCout << " ActiveBoards: "
00359 << std::hex << " hex: " << " " << std::setw(4) << std::setfill('0') << m_activeBoards
00360 << std::setfill(' ')
00361 << std::dec << " dec: " << m_activeBoards
00362 << std::endl;
00363
00364 myCout << " AltNrBxBoard: "
00365 << std::hex << " hex: " << " " << std::setw(4) << std::setfill('0') << m_altNrBxBoard
00366 << std::setfill(' ')
00367 << std::dec << " dec: " << m_altNrBxBoard
00368 << std::endl;
00369
00370 myCout << " TotalTriggerNr: "
00371 << std::hex << " hex: " << std::setw(8) << std::setfill('0') << m_totalTriggerNr
00372 << std::setfill(' ')
00373 << std::dec << " dec: " << m_totalTriggerNr
00374 << std::endl;
00375
00376
00377 }
00378
00379
00380
00381
00382 void L1GtfeWord::unpack(const unsigned char* gtfePtr)
00383 {
00384 LogDebug("L1GtfeWord")
00385 << "\nUnpacking GTFE block.\n"
00386 << std::endl;
00387
00388 const boost::uint64_t* payload =
00389 reinterpret_cast<boost::uint64_t*>(const_cast<unsigned char*>(gtfePtr));
00390
00391 setBoardId(payload[BoardIdWord]);
00392 setRecordLength1(payload[RecordLength1Word]);
00393 setRecordLength(payload[RecordLengthWord]);
00394 setBxNr(payload[BxNrWord]);
00395 setSetupVersion(payload[SetupVersionWord]);
00396 setActiveBoards(payload[ActiveBoardsWord]);
00397 setAltNrBxBoard(payload[AltNrBxBoardWord]);
00398 setTotalTriggerNr(payload[TotalTriggerNrWord]);
00399
00400
00401 if ( edm::isDebugEnabled() ) {
00402
00403 for (int iWord = 0; iWord < BlockSize; ++iWord) {
00404 LogTrace("L1GtfeWord")
00405 << std::setw(4) << iWord << " "
00406 << std::hex << std::setfill('0')
00407 << std::setw(16) << payload[iWord]
00408 << std::dec << std::setfill(' ')
00409 << std::endl;
00410 }
00411
00412 }
00413
00414 }
00415
00416
00417
00418
00419
00420
00421 const int L1GtfeWord::BlockSize = 2;
00422
00423 const int L1GtfeWord::BoardIdWord = 0;
00424 const int L1GtfeWord::RecordLength1Word = 0;
00425 const int L1GtfeWord::RecordLengthWord = 0;
00426 const int L1GtfeWord::BxNrWord = 0;
00427 const int L1GtfeWord::SetupVersionWord = 0;
00428
00429 const boost::uint64_t L1GtfeWord::BoardIdMask = 0xFF00000000000000ULL;
00430 const boost::uint64_t L1GtfeWord::RecordLength1Mask = 0x00F0000000000000ULL;
00431 const boost::uint64_t L1GtfeWord::RecordLengthMask = 0x000F000000000000ULL;
00432 const boost::uint64_t L1GtfeWord::BxNrMask = 0x00000FFF00000000ULL;
00433 const boost::uint64_t L1GtfeWord::SetupVersionMask = 0x00000000FFFFFFFFULL;
00434
00435 const boost::uint32_t L1GtfeWord::BstFlagMask = 0x0001;
00436
00437
00438 const int L1GtfeWord::BoardIdShift = 56;
00439 const int L1GtfeWord::RecordLength1Shift = 52;
00440 const int L1GtfeWord::RecordLengthShift = 48;
00441 const int L1GtfeWord::BxNrShift = 32;
00442 const int L1GtfeWord::SetupVersionShift = 0;
00443
00444
00445 const int L1GtfeWord::ActiveBoardsWord = 1;
00446 const int L1GtfeWord::AltNrBxBoardWord = 1;
00447 const int L1GtfeWord::TotalTriggerNrWord = 1;
00448
00449 const boost::uint64_t L1GtfeWord::ActiveBoardsMask = 0xFFFF000000000000ULL;
00450 const boost::uint64_t L1GtfeWord::AltNrBxBoardMask = 0x0000FFFF00000000ULL;
00451 const boost::uint64_t L1GtfeWord::TotalTriggerNrMask = 0x00000000FFFFFFFFULL;
00452
00453 const int L1GtfeWord::ActiveBoardsShift = 48;
00454 const int L1GtfeWord::AltNrBxBoardShift = 32;
00455 const int L1GtfeWord::TotalTriggerNrShift = 0;
00456
00457