Go to the documentation of this file.00001
00017
00018 #include "DataFormats/L1GlobalTrigger/interface/L1TcsWord.h"
00019
00020
00021 #include <iomanip>
00022
00023
00024 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00025 #include "FWCore/MessageLogger/interface/MessageDrop.h"
00026
00027
00028
00029
00030
00031
00032 L1TcsWord::L1TcsWord()
00033 {
00034
00035 m_boardId = 0;
00036 m_bxNr = 0;
00037 m_daqNr = 0;
00038 m_triggerType = 0;
00039 m_status = 0;
00040 m_luminositySegmentNr = 0;
00041 m_partRunNr = 0;
00042 m_assignedPartitions = 0;
00043 m_partTrigNr = 0;
00044 m_eventNr = 0;
00045 m_orbitNr = 0;
00046
00047 }
00048
00049
00050 L1TcsWord::L1TcsWord(
00051 boost::uint16_t boardIdValue,
00052 boost::uint16_t bxNrValue,
00053 boost::uint16_t daqNrValue,
00054 boost::uint16_t triggerTypeValue,
00055 boost::uint16_t statusValue,
00056 boost::uint16_t luminositySegmentNrValue,
00057 boost::uint32_t partRunNrValue,
00058 boost::uint32_t assignedPartitionsValue,
00059 boost::uint32_t partTrigNrValue,
00060 boost::uint32_t eventNrValue,
00061 boost::uint64_t orbitNrValue )
00062 {
00063
00064 m_boardId = boardIdValue;
00065 m_bxNr = bxNrValue;
00066 m_daqNr = daqNrValue;
00067 m_triggerType = triggerTypeValue;
00068 m_status = statusValue;
00069 m_luminositySegmentNr = luminositySegmentNrValue;
00070 m_partRunNr = partRunNrValue;
00071 m_assignedPartitions = assignedPartitionsValue;
00072 m_partTrigNr = partTrigNrValue;
00073 m_eventNr = eventNrValue;
00074 m_orbitNr = orbitNrValue;
00075
00076 }
00077
00078
00079 L1TcsWord::~L1TcsWord()
00080 {
00081
00082
00083
00084 }
00085
00086
00087 bool L1TcsWord::operator==(const L1TcsWord& result) const
00088 {
00089
00090 if (m_boardId != result.m_boardId) {
00091 return false;
00092 }
00093
00094 if (m_bxNr != result.m_bxNr) {
00095 return false;
00096 }
00097
00098 if (m_daqNr != result.m_daqNr) {
00099 return false;
00100 }
00101
00102 if (m_triggerType != result.m_triggerType) {
00103 return false;
00104 }
00105
00106 if (m_status != result.m_status) {
00107 return false;
00108 }
00109
00110 if (m_luminositySegmentNr != result.m_luminositySegmentNr) {
00111 return false;
00112 }
00113
00114 if (m_partRunNr != result.m_partRunNr) {
00115 return false;
00116 }
00117
00118 if (m_assignedPartitions != result.m_assignedPartitions) {
00119 return false;
00120 }
00121
00122 if (m_partTrigNr != result.m_partTrigNr) {
00123 return false;
00124 }
00125
00126 if (m_eventNr != result.m_eventNr) {
00127 return false;
00128 }
00129
00130 if (m_orbitNr != result.m_orbitNr) {
00131 return false;
00132 }
00133
00134
00135 return true;
00136
00137 }
00138
00139
00140 bool L1TcsWord::operator!=(const L1TcsWord& result) const
00141 {
00142
00143 return !( result == *this);
00144
00145 }
00146
00147
00148
00149
00150 void L1TcsWord::setBoardId(const boost::uint64_t& word64)
00151 {
00152 m_boardId = (word64 & BoardIdMask) >> BoardIdShift;
00153
00154 }
00155
00156
00157
00158 void L1TcsWord::setBoardIdWord64(boost::uint64_t& word64, int iWord)
00159 {
00160
00161 if (iWord == BoardIdWord) {
00162 word64 = word64 | (static_cast<boost::uint64_t> (m_boardId) << BoardIdShift);
00163 }
00164
00165 }
00166
00167
00168
00169 void L1TcsWord::setBxNr(const boost::uint64_t& word64)
00170 {
00171
00172 m_bxNr = (word64 & BxNrMask) >> BxNrShift;
00173
00174 }
00175
00176
00177
00178 void L1TcsWord::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
00190 void L1TcsWord::setDaqNr(const boost::uint64_t& word64)
00191 {
00192
00193 m_daqNr = (word64 & DaqNrMask) >> DaqNrShift;
00194
00195 }
00196
00197
00198
00199 void L1TcsWord::setDaqNrWord64(boost::uint64_t& word64, int iWord)
00200 {
00201
00202 if (iWord == DaqNrWord) {
00203 word64 = word64 | (static_cast<boost::uint64_t> (m_daqNr) << DaqNrShift);
00204 }
00205
00206 }
00207
00208
00209
00210 void L1TcsWord::setTriggerType(const boost::uint64_t& word64)
00211 {
00212
00213 m_triggerType = (word64 & TriggerTypeMask) >> TriggerTypeShift;
00214
00215 }
00216
00217
00218
00219 void L1TcsWord::setTriggerTypeWord64(boost::uint64_t& word64, int iWord)
00220 {
00221
00222 if (iWord == TriggerTypeWord) {
00223 word64 = word64 |
00224 (static_cast<boost::uint64_t> (m_triggerType) << TriggerTypeShift);
00225 }
00226
00227 }
00228
00229
00230
00231 void L1TcsWord::setStatus(const boost::uint64_t& word64)
00232 {
00233
00234 m_status = (word64 & StatusMask) >> StatusShift;
00235
00236 }
00237
00238
00239
00240 void L1TcsWord::setStatusWord64(boost::uint64_t& word64, int iWord)
00241 {
00242
00243 if (iWord == StatusWord) {
00244 word64 = word64 | (static_cast<boost::uint64_t> (m_status) << StatusShift);
00245 }
00246
00247 }
00248
00249
00250
00251
00252 void L1TcsWord::setLuminositySegmentNr(const boost::uint64_t& word64)
00253 {
00254
00255 m_luminositySegmentNr =
00256 (word64 & LuminositySegmentNrMask) >> LuminositySegmentNrShift;
00257
00258 }
00259
00260
00261
00262 void L1TcsWord::setLuminositySegmentNrWord64(boost::uint64_t& word64, int iWord)
00263 {
00264
00265 if (iWord == LuminositySegmentNrWord) {
00266 word64 = word64 |
00267 (static_cast<boost::uint64_t> (m_luminositySegmentNr) << LuminositySegmentNrShift);
00268 }
00269
00270 }
00271
00272
00273
00274
00275 void L1TcsWord::setPartRunNr(const boost::uint64_t& word64)
00276 {
00277
00278 m_partRunNr = (word64 & PartRunNrMask) >> PartRunNrShift;
00279
00280 }
00281
00282
00283
00284 void L1TcsWord::setPartRunNrWord64(boost::uint64_t& word64, int iWord)
00285 {
00286
00287 if (iWord == PartRunNrWord) {
00288 word64 = word64 |
00289 (static_cast<boost::uint64_t> (m_partRunNr) << PartRunNrShift);
00290 }
00291
00292 }
00293
00294
00295
00296
00297 void L1TcsWord::setAssignedPartitions(const boost::uint64_t& word64)
00298 {
00299
00300 m_assignedPartitions = (word64 & AssignedPartitionsMask)
00301 >> AssignedPartitionsShift;
00302
00303 }
00304
00305
00306
00307 void L1TcsWord::setAssignedPartitionsWord64(boost::uint64_t& word64, int iWord)
00308 {
00309
00310 if (iWord == AssignedPartitionsWord) {
00311 word64 = word64 |
00312 (static_cast<boost::uint64_t> (m_assignedPartitions)
00313 << AssignedPartitionsShift);
00314 }
00315
00316 }
00317
00318
00319
00320
00321 void L1TcsWord::setPartTrigNr(const boost::uint64_t& word64)
00322 {
00323
00324 m_partTrigNr = (word64 & PartTrigNrMask) >> PartTrigNrShift;
00325
00326 }
00327
00328
00329
00330 void L1TcsWord::setPartTrigNrWord64(boost::uint64_t& word64, int iWord)
00331 {
00332
00333 if (iWord == PartTrigNrWord) {
00334 word64 = word64 |
00335 (static_cast<boost::uint64_t> (m_partTrigNr) << PartTrigNrShift);
00336 }
00337
00338 }
00339
00340
00341
00342
00343 void L1TcsWord::setEventNr(const boost::uint64_t& word64)
00344 {
00345
00346 m_eventNr = (word64 & EventNrMask) >> EventNrShift;
00347
00348 }
00349
00350
00351
00352 void L1TcsWord::setEventNrWord64(boost::uint64_t& word64, int iWord)
00353 {
00354
00355 if (iWord == EventNrWord) {
00356 word64 = word64 |
00357 (static_cast<boost::uint64_t> (m_eventNr) << EventNrShift);
00358 }
00359
00360 }
00361
00362
00363
00364
00365 void L1TcsWord::setOrbitNrFrom(const boost::uint64_t& word64)
00366 {
00367
00368 m_orbitNr = (word64 & OrbitNrMask) >> OrbitNrShift;
00369
00370 }
00371
00372
00373
00374 void L1TcsWord::setOrbitNrWord64(boost::uint64_t& word64, int iWord)
00375 {
00376
00377 if (iWord == OrbitNrWord) {
00378 word64 = word64 | (static_cast<boost::uint64_t> (m_orbitNr) << OrbitNrShift);
00379 }
00380
00381 }
00382
00383
00384
00385 void L1TcsWord::reset()
00386 {
00387
00388 m_boardId = 0;
00389 m_bxNr = 0;
00390 m_daqNr = 0;
00391 m_triggerType = 0;
00392 m_status = 0;
00393 m_luminositySegmentNr = 0;
00394 m_partRunNr = 0;
00395 m_assignedPartitions = 0;
00396 m_partTrigNr = 0;
00397 m_eventNr = 0;
00398 m_orbitNr = 0;
00399
00400
00401 }
00402
00403
00404
00405 void L1TcsWord::print(std::ostream& myCout) const
00406 {
00407
00408 myCout << "\n L1TcsWord::print \n" << std::endl;
00409
00410 int iWord = 0;
00411
00412 myCout << "\n Word " << iWord << std::endl;
00413
00414 myCout << " Board Id: "
00415 << std::hex << " hex: " << " "<< std::setw(4) << std::setfill('0') << m_boardId
00416 << std::setfill(' ')
00417 << std::dec << " dec: " << m_boardId
00418 << std::endl;
00419
00420
00421 myCout << " BxNr: "
00422 << std::hex << " hex: " << " " << std::setw(3) << std::setfill('0') << m_bxNr
00423 << std::setfill(' ')
00424 << std::dec << " dec: " << m_bxNr
00425 << std::endl;
00426
00427
00428 myCout << " DaqNr: "
00429 << std::hex << " hex: " << " " << std::setw(1) << m_daqNr
00430 << std::dec << " dec: " << m_daqNr
00431 << std::endl;
00432
00433 myCout << " TriggerType: "
00434 << std::hex << " hex: " << " " << std::setw(1) << m_triggerType
00435 << std::dec << " dec: " << m_triggerType
00436 << std::endl;
00437
00438 myCout << " Status: "
00439 << std::hex << " hex: " << " " << std::setw(1) << m_status
00440 << std::dec << " dec: " << m_status
00441 << std::endl;
00442
00443 myCout << " LuminositySegmentNr: "
00444 << std::hex << " hex: " << " " << std::setw(4) << m_luminositySegmentNr
00445 << std::dec << " dec: " << m_luminositySegmentNr
00446 << std::endl;
00447
00448
00449 iWord++;
00450 myCout << "\n Word " << iWord << std::endl;
00451
00452 myCout << " PartRunNr: "
00453 << std::hex << " hex: " << " " << std::setw(8) << std::setfill('0') << m_partRunNr
00454 << std::setfill(' ')
00455 << std::dec << " dec: " << m_partRunNr
00456 << std::endl;
00457
00458 myCout << " AssignedPartitions: "
00459 << std::hex << " hex: " << " " << std::setw(8) << std::setfill('0')
00460 << m_assignedPartitions
00461 << std::setfill(' ')
00462 << std::dec << " dec: " << m_assignedPartitions
00463 << std::endl;
00464
00465
00466 iWord++;
00467 myCout << "\n Word " << iWord << std::endl;
00468
00469 myCout << " PartTrigNr: "
00470 << std::hex << " hex: " << " " << std::setw(8) << std::setfill('0') << m_partTrigNr
00471 << std::setfill(' ')
00472 << std::dec << " dec: " << m_partTrigNr
00473 << std::endl;
00474
00475
00476 myCout << " EventNr: "
00477 << std::hex << " hex: " << " " << std::setw(8) << std::setfill('0') << m_eventNr
00478 << std::setfill(' ')
00479 << std::dec << " dec: " << m_eventNr
00480 << std::endl;
00481
00482 iWord++;
00483 myCout << "\n Word " << iWord << std::endl;
00484
00485 myCout << " OrbitNr: "
00486 << std::hex << " hex: " << "" << std::setw(12) << std::setfill('0') << m_orbitNr
00487 << std::setfill(' ')
00488 << std::dec << " dec: " << m_orbitNr
00489 << std::endl;
00490
00491 iWord++;
00492 myCout << "\n Word " << iWord << std::endl;
00493
00494 myCout << " Empty word "
00495 << std::endl;
00496
00497 }
00498
00499
00500
00501
00502 void L1TcsWord::unpack(const unsigned char* tcsPtr)
00503 {
00504 LogDebug("L1GtTcsWord")
00505 << "\nUnpacking TCS block.\n"
00506 << std::endl;
00507
00508 const boost::uint64_t* payload =
00509 reinterpret_cast<boost::uint64_t*>(const_cast<unsigned char*>(tcsPtr));
00510
00511 setBoardId(payload[BoardIdWord]);
00512 setBxNr(payload[BxNrWord]);
00513 setDaqNr(payload[DaqNrWord]);
00514 setTriggerType(payload[TriggerTypeWord]);
00515 setStatus(payload[StatusWord]);
00516 setLuminositySegmentNr(payload[LuminositySegmentNrWord]);
00517
00518 setPartRunNr(payload[PartRunNrWord]);
00519 setAssignedPartitions(payload[AssignedPartitionsWord]);
00520
00521 setPartTrigNr(payload[PartTrigNrWord]);
00522 setEventNr(payload[EventNrWord]);
00523
00524 setOrbitNrFrom(payload[OrbitNrWord]);
00525
00526 if ( edm::isDebugEnabled() ) {
00527
00528 for (int iWord = 0; iWord < BlockSize; ++iWord) {
00529 LogTrace("L1GtTcsWord")
00530 << std::setw(4) << iWord << " "
00531 << std::hex << std::setfill('0')
00532 << std::setw(16) << payload[iWord]
00533 << std::dec << std::setfill(' ')
00534 << std::endl;
00535 }
00536
00537 }
00538
00539 }
00540
00541
00542
00543
00544
00545
00546 const int L1TcsWord::BlockSize = 5;
00547
00548
00549
00550
00551 const int L1TcsWord::BoardIdWord = 0;
00552 const int L1TcsWord::BxNrWord = 0;
00553 const int L1TcsWord::DaqNrWord = 0;
00554 const int L1TcsWord::TriggerTypeWord = 0;
00555 const int L1TcsWord::StatusWord = 0;
00556 const int L1TcsWord::LuminositySegmentNrWord = 0;
00557
00558
00559 const boost::uint64_t L1TcsWord::BoardIdMask = 0xFFFF000000000000ULL;
00560 const boost::uint64_t L1TcsWord::BxNrMask = 0x00000FFF00000000ULL;
00561 const boost::uint64_t L1TcsWord::DaqNrMask = 0x000000000F000000ULL;
00562 const boost::uint64_t L1TcsWord::TriggerTypeMask = 0x0000000000F00000ULL;
00563 const boost::uint64_t L1TcsWord::StatusMask = 0x00000000000F0000ULL;
00564 const boost::uint64_t L1TcsWord::LuminositySegmentNrMask = 0x000000000000FFFFULL;
00565
00566
00567 const int L1TcsWord::BoardIdShift = 48;
00568 const int L1TcsWord::BxNrShift = 32;
00569 const int L1TcsWord::DaqNrShift = 24;
00570 const int L1TcsWord::TriggerTypeShift = 20;
00571 const int L1TcsWord::StatusShift = 16;
00572 const int L1TcsWord::LuminositySegmentNrShift = 0;
00573
00574
00575
00576 const int L1TcsWord::PartRunNrWord = 1;
00577 const int L1TcsWord::AssignedPartitionsWord = 1;
00578
00579 const boost::uint64_t L1TcsWord::PartRunNrMask = 0xFFFFFFFF00000000ULL;
00580 const boost::uint64_t L1TcsWord::AssignedPartitionsMask = 0x00000000FFFFFFFFULL;
00581
00582 const int L1TcsWord::PartRunNrShift = 32;
00583 const int L1TcsWord::AssignedPartitionsShift = 0;
00584
00585
00586
00587 const int L1TcsWord::PartTrigNrWord = 2;
00588 const int L1TcsWord::EventNrWord = 2;
00589
00590 const boost::uint64_t L1TcsWord::PartTrigNrMask = 0xFFFFFFFF00000000ULL;
00591 const boost::uint64_t L1TcsWord::EventNrMask = 0x00000000FFFFFFFFULL;
00592
00593 const int L1TcsWord::PartTrigNrShift = 32;
00594 const int L1TcsWord::EventNrShift = 0;
00595
00596
00597
00598 const int L1TcsWord::OrbitNrWord = 3;
00599
00600 const boost::uint64_t L1TcsWord::OrbitNrMask = 0x0000FFFFFFFFFFFFULL;
00601
00602 const int L1TcsWord::OrbitNrShift = 0;
00603
00604
00605
00606
00607
00608
00609
00610