File indexing completed on 2024-09-11 04:32:37
0001 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h"
0002 #include "DQM/SiPixelMonitorRawData/interface/SiPixelRawDataErrorModule.h"
0003 #include "DQMServices/Core/interface/DQMStore.h"
0004
0005 #include "FWCore/ServiceRegistry/interface/Service.h"
0006
0007 #include <cstdlib>
0008 #include <iostream>
0009 #include <memory>
0010 #include <sstream>
0011 #include <string>
0012 #include <vector>
0013
0014
0015 #include "DataFormats/DetId/interface/DetId.h"
0016 #include "DataFormats/TrackerCommon/interface/PixelBarrelName.h"
0017 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
0018 #include "DataFormats/TrackerCommon/interface/PixelEndcapName.h"
0019 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
0020 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0021
0022 using namespace std;
0023
0024 const int SiPixelRawDataErrorModule::LINK_bits = 6;
0025 const int SiPixelRawDataErrorModule::ROC_bits = 5;
0026 const int SiPixelRawDataErrorModule::DCOL_bits = 5;
0027 const int SiPixelRawDataErrorModule::PXID_bits = 8;
0028 const int SiPixelRawDataErrorModule::ADC_bits = 8;
0029 const int SiPixelRawDataErrorModule::DataBit_bits = 1;
0030
0031 const int SiPixelRawDataErrorModule::ADC_shift = 0;
0032 const int SiPixelRawDataErrorModule::PXID_shift = ADC_shift + ADC_bits;
0033 const int SiPixelRawDataErrorModule::DCOL_shift = PXID_shift + PXID_bits;
0034 const int SiPixelRawDataErrorModule::ROC_shift = DCOL_shift + DCOL_bits;
0035 const int SiPixelRawDataErrorModule::LINK_shift = ROC_shift + ROC_bits;
0036 const int SiPixelRawDataErrorModule::DB0_shift = 0;
0037 const int SiPixelRawDataErrorModule::DB1_shift = DB0_shift + DataBit_bits;
0038 const int SiPixelRawDataErrorModule::DB2_shift = DB1_shift + DataBit_bits;
0039 const int SiPixelRawDataErrorModule::DB3_shift = DB2_shift + DataBit_bits;
0040 const int SiPixelRawDataErrorModule::DB4_shift = DB3_shift + DataBit_bits;
0041 const int SiPixelRawDataErrorModule::DB5_shift = DB4_shift + DataBit_bits;
0042 const int SiPixelRawDataErrorModule::DB6_shift = DB5_shift + DataBit_bits;
0043 const int SiPixelRawDataErrorModule::DB7_shift = DB6_shift + DataBit_bits;
0044
0045 const uint32_t SiPixelRawDataErrorModule::LINK_mask = ~(~uint32_t(0) << LINK_bits);
0046 const uint32_t SiPixelRawDataErrorModule::ROC_mask = ~(~uint32_t(0) << ROC_bits);
0047 const uint32_t SiPixelRawDataErrorModule::DCOL_mask = ~(~uint32_t(0) << DCOL_bits);
0048 const uint32_t SiPixelRawDataErrorModule::PXID_mask = ~(~uint32_t(0) << PXID_bits);
0049 const uint32_t SiPixelRawDataErrorModule::ADC_mask = ~(~uint32_t(0) << ADC_bits);
0050 const uint32_t SiPixelRawDataErrorModule::DataBit_mask = ~(~uint32_t(0) << DataBit_bits);
0051
0052 const int SiPixelRawDataErrorModule::TRLRBGN_bits = 32;
0053 const int SiPixelRawDataErrorModule::EVTLGT_bits = 24;
0054 const int SiPixelRawDataErrorModule::TRLREND_bits = 8;
0055
0056 const int SiPixelRawDataErrorModule::TRLRBGN_shift = 0;
0057 const int SiPixelRawDataErrorModule::EVTLGT_shift = TRLRBGN_shift + TRLRBGN_bits;
0058 const int SiPixelRawDataErrorModule::TRLREND_shift = EVTLGT_shift + EVTLGT_bits;
0059
0060 const unsigned long long SiPixelRawDataErrorModule::TRLREND_mask = ~(~0ULL << TRLREND_bits);
0061 const unsigned long long SiPixelRawDataErrorModule::EVTLGT_mask = ~(~0ULL << EVTLGT_bits);
0062 const unsigned long long SiPixelRawDataErrorModule::TRLRBGN_mask = ~(~0ULL << TRLRBGN_bits);
0063
0064
0065
0066 SiPixelRawDataErrorModule::SiPixelRawDataErrorModule() : id_(0), ncols_(416), nrows_(160) { _debug_ = false; }
0067
0068 SiPixelRawDataErrorModule::SiPixelRawDataErrorModule(const uint32_t &id) : id_(id), ncols_(416), nrows_(160) {
0069 _debug_ = false;
0070 }
0071
0072 SiPixelRawDataErrorModule::SiPixelRawDataErrorModule(const uint32_t &id, const int &ncols, const int &nrows)
0073 : id_(id), ncols_(ncols), nrows_(nrows) {
0074 _debug_ = false;
0075 }
0076
0077
0078
0079 SiPixelRawDataErrorModule::~SiPixelRawDataErrorModule() {}
0080
0081
0082
0083 void SiPixelRawDataErrorModule::book(const edm::ParameterSet &iConfig,
0084 DQMStore::IBooker &iBooker,
0085 int type,
0086 bool isUpgrade) {}
0087
0088
0089
0090 int SiPixelRawDataErrorModule::fill(const edm::DetSetVector<SiPixelRawDataError> &input,
0091 std::map<std::string, MonitorElement **> *meMapFEDs,
0092 bool modon,
0093 bool ladon,
0094 bool bladeon) {
0095 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
0096 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
0097
0098
0099
0100 unsigned int numberOfSeriousErrors = 0;
0101
0102 edm::DetSetVector<SiPixelRawDataError>::const_iterator isearch = input.find(id_);
0103
0104 if (isearch != input.end()) {
0105
0106 edm::DetSet<SiPixelRawDataError>::const_iterator di;
0107 for (di = isearch->data.begin(); di != isearch->data.end(); di++) {
0108 int FedId = di->getFedId();
0109 int chanNmbr = 0;
0110 int errorType = di->getType();
0111 int TBMType = -1;
0112 int TBMMessage = -1;
0113 int evtSize = -1;
0114 int evtNbr = -1;
0115 int fullType = -1;
0116 bool notReset = true;
0117 const int LINK_bits = 6;
0118 const int LINK_shift = 26;
0119 const uint32_t LINK_mask = ~(~(uint32_t)(0) << LINK_bits);
0120
0121 if (modon) {
0122 if (errorType == 32 || errorType == 33 || errorType == 34) {
0123 long long errorWord = di->getWord64();
0124 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0125 if (errorType == 34)
0126 evtSize = (errorWord >> EVTLGT_shift) & EVTLGT_mask;
0127 } else {
0128 uint32_t errorWord = di->getWord32();
0129 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0130
0131 switch (errorType) {
0132
0133 case (28): {
0134 int NFa = (errorWord >> DB0_shift) & DataBit_mask;
0135 int NFb = (errorWord >> DB1_shift) & DataBit_mask;
0136 int NFc = (errorWord >> DB2_shift) & DataBit_mask;
0137 int NFd = (errorWord >> DB3_shift) & DataBit_mask;
0138 int NFe = (errorWord >> DB4_shift) & DataBit_mask;
0139 int NF2 = (errorWord >> DB6_shift) & DataBit_mask;
0140 int L1A = (errorWord >> DB7_shift) & DataBit_mask;
0141 if (NFa == 1) {
0142 fullType = 1;
0143 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0144 }
0145 if (NFb == 1) {
0146 fullType = 2;
0147 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0148 }
0149 if (NFc == 1) {
0150 fullType = 3;
0151 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0152 }
0153 if (NFd == 1) {
0154 fullType = 4;
0155 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0156 }
0157 if (NFe == 1) {
0158 fullType = 5;
0159 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0160 }
0161 if (NF2 == 1) {
0162 fullType = 6;
0163 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0164 }
0165 if (L1A == 1) {
0166 fullType = 7;
0167 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0168 }
0169 chanNmbr = 0;
0170 break;
0171 }
0172 case (29): {
0173 int CH1 = (errorWord >> DB0_shift) & DataBit_mask;
0174 int CH2 = (errorWord >> DB1_shift) & DataBit_mask;
0175 int CH3 = (errorWord >> DB2_shift) & DataBit_mask;
0176 int CH4 = (errorWord >> DB3_shift) & DataBit_mask;
0177 int CH5 = (errorWord >> DB4_shift) & DataBit_mask;
0178 int BLOCK_bits = 3;
0179 int BLOCK_shift = 8;
0180 uint32_t BLOCK_mask = ~(~uint32_t(0) << BLOCK_bits);
0181 int BLOCK = (errorWord >> BLOCK_shift) & BLOCK_mask;
0182 int localCH = 1 * CH1 + 2 * CH2 + 3 * CH3 + 4 * CH4 + 5 * CH5;
0183 if (BLOCK % 2 == 0)
0184 chanNmbr = (BLOCK / 2) * 9 + localCH;
0185 else
0186 chanNmbr = ((BLOCK - 1) / 2) * 9 + 4 + localCH;
0187 if ((chanNmbr < 1) || (chanNmbr > 36))
0188 chanNmbr = 0;
0189 break;
0190 }
0191 case (30): {
0192 int T0 = (errorWord >> DB0_shift) & DataBit_mask;
0193 int T1 = (errorWord >> DB1_shift) & DataBit_mask;
0194 int T2 = (errorWord >> DB2_shift) & DataBit_mask;
0195 int T3 = (errorWord >> DB3_shift) & DataBit_mask;
0196 int T4 = (errorWord >> DB4_shift) & DataBit_mask;
0197 int T5 = (errorWord >> DB5_shift) & DataBit_mask;
0198 int T6 = (errorWord >> DB6_shift) & DataBit_mask;
0199 int T7 = (errorWord >> DB7_shift) & DataBit_mask;
0200 if (T0 == 1)
0201 TBMMessage = 0;
0202 if (T1 == 1)
0203 TBMMessage = 1;
0204 if (T2 == 1)
0205 TBMMessage = 2;
0206 if (T3 == 1)
0207 TBMMessage = 3;
0208 if (T4 == 1)
0209 TBMMessage = 4;
0210 if (T5 == 1)
0211 TBMMessage = 5;
0212 if (T6 == 1)
0213 TBMMessage = 6;
0214 if (T7 == 1)
0215 TBMMessage = 7;
0216 if (TBMMessage == 5 || TBMMessage == 6)
0217 notReset = false;
0218 int StateMach_bits = 4;
0219 int StateMach_shift = 8;
0220 uint32_t StateMach_mask = ~(~uint32_t(0) << StateMach_bits);
0221 int StateMach = (errorWord >> StateMach_shift) & StateMach_mask;
0222 switch (StateMach) {
0223 case (0): {
0224 TBMType = 0;
0225 break;
0226 }
0227 case (1):
0228 case (9): {
0229 TBMType = 1;
0230 break;
0231 }
0232 case (2):
0233 case (4):
0234 case (6): {
0235 TBMType = 2;
0236 break;
0237 }
0238 case (8): {
0239 TBMType = 3;
0240 break;
0241 }
0242 default:
0243 TBMType = 4;
0244 };
0245 break;
0246 }
0247 case (31): {
0248 evtNbr = (errorWord >> ADC_shift) & ADC_mask;
0249 break;
0250 }
0251 case (36): {
0252
0253 break;
0254 }
0255 case (37): {
0256
0257
0258 break;
0259 }
0260 case (38): {
0261
0262 break;
0263 }
0264 default:
0265 break;
0266 };
0267 }
0268 }
0269
0270 if (ladon && barrel) {
0271 if (errorType == 32 || errorType == 33 || errorType == 34) {
0272 long long errorWord = di->getWord64();
0273 if (errorType == 34)
0274 evtSize = (errorWord >> EVTLGT_shift) & EVTLGT_mask;
0275 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0276 } else {
0277 uint32_t errorWord = di->getWord32();
0278 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0279 switch (errorType) {
0280
0281 case (28): {
0282 int NFa = (errorWord >> DB0_shift) & DataBit_mask;
0283 int NFb = (errorWord >> DB1_shift) & DataBit_mask;
0284 int NFc = (errorWord >> DB2_shift) & DataBit_mask;
0285 int NFd = (errorWord >> DB3_shift) & DataBit_mask;
0286 int NFe = (errorWord >> DB4_shift) & DataBit_mask;
0287 int NF2 = (errorWord >> DB6_shift) & DataBit_mask;
0288 int L1A = (errorWord >> DB7_shift) & DataBit_mask;
0289 if (NFa == 1) {
0290 fullType = 1;
0291 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0292 }
0293 if (NFb == 1) {
0294 fullType = 2;
0295 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0296 }
0297 if (NFc == 1) {
0298 fullType = 3;
0299 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0300 }
0301 if (NFd == 1) {
0302 fullType = 4;
0303 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0304 }
0305 if (NFe == 1) {
0306 fullType = 5;
0307 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0308 }
0309 if (NF2 == 1) {
0310 fullType = 6;
0311 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0312 }
0313 if (L1A == 1) {
0314 fullType = 7;
0315 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0316 }
0317 chanNmbr = 0;
0318 break;
0319 }
0320 case (29): {
0321 int CH1 = (errorWord >> DB0_shift) & DataBit_mask;
0322 int CH2 = (errorWord >> DB1_shift) & DataBit_mask;
0323 int CH3 = (errorWord >> DB2_shift) & DataBit_mask;
0324 int CH4 = (errorWord >> DB3_shift) & DataBit_mask;
0325 int CH5 = (errorWord >> DB4_shift) & DataBit_mask;
0326 int BLOCK_bits = 3;
0327 int BLOCK_shift = 8;
0328 uint32_t BLOCK_mask = ~(~uint32_t(0) << BLOCK_bits);
0329 int BLOCK = (errorWord >> BLOCK_shift) & BLOCK_mask;
0330 int localCH = 1 * CH1 + 2 * CH2 + 3 * CH3 + 4 * CH4 + 5 * CH5;
0331 if (BLOCK % 2 == 0)
0332 chanNmbr = (BLOCK / 2) * 9 + localCH;
0333 else
0334 chanNmbr = ((BLOCK - 1) / 2) * 9 + 4 + localCH;
0335 if ((chanNmbr < 1) || (chanNmbr > 36))
0336 chanNmbr = 0;
0337 break;
0338 }
0339 case (30): {
0340 int T0 = (errorWord >> DB0_shift) & DataBit_mask;
0341 int T1 = (errorWord >> DB1_shift) & DataBit_mask;
0342 int T2 = (errorWord >> DB2_shift) & DataBit_mask;
0343 int T3 = (errorWord >> DB3_shift) & DataBit_mask;
0344 int T4 = (errorWord >> DB4_shift) & DataBit_mask;
0345 int T5 = (errorWord >> DB5_shift) & DataBit_mask;
0346 int T6 = (errorWord >> DB6_shift) & DataBit_mask;
0347 int T7 = (errorWord >> DB7_shift) & DataBit_mask;
0348 if (T0 == 1)
0349 TBMMessage = 0;
0350 if (T1 == 1)
0351 TBMMessage = 1;
0352 if (T2 == 1)
0353 TBMMessage = 2;
0354 if (T3 == 1)
0355 TBMMessage = 3;
0356 if (T4 == 1)
0357 TBMMessage = 4;
0358 if (T5 == 1)
0359 TBMMessage = 5;
0360 if (T6 == 1)
0361 TBMMessage = 6;
0362 if (T7 == 1)
0363 TBMMessage = 7;
0364 int StateMach_bits = 4;
0365 int StateMach_shift = 8;
0366 uint32_t StateMach_mask = ~(~uint32_t(0) << StateMach_bits);
0367 int StateMach = (errorWord >> StateMach_shift) & StateMach_mask;
0368 switch (StateMach) {
0369 case (0): {
0370 TBMType = 0;
0371 break;
0372 }
0373 case (1):
0374 case (9): {
0375 TBMType = 1;
0376 break;
0377 }
0378 case (2):
0379 case (4):
0380 case (6): {
0381 TBMType = 2;
0382 break;
0383 }
0384 case (8): {
0385 TBMType = 3;
0386 break;
0387 }
0388 default:
0389 TBMType = 4;
0390 };
0391 break;
0392 }
0393 case (31): {
0394 evtNbr = (errorWord >> ADC_shift) & ADC_mask;
0395 break;
0396 }
0397 case (36): {
0398
0399 break;
0400 }
0401 case (37): {
0402
0403
0404 break;
0405 }
0406 case (38): {
0407
0408 break;
0409 }
0410 default:
0411 break;
0412 };
0413 }
0414 }
0415
0416 if (bladeon && endcap) {
0417 if (errorType == 32 || errorType == 33 || errorType == 34) {
0418 long long errorWord = di->getWord64();
0419 if (errorType == 34)
0420 evtSize = (errorWord >> EVTLGT_shift) & EVTLGT_mask;
0421 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0422 } else {
0423 uint32_t errorWord = di->getWord32();
0424 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0425 switch (errorType) {
0426
0427 case (28): {
0428 int NFa = (errorWord >> DB0_shift) & DataBit_mask;
0429 int NFb = (errorWord >> DB1_shift) & DataBit_mask;
0430 int NFc = (errorWord >> DB2_shift) & DataBit_mask;
0431 int NFd = (errorWord >> DB3_shift) & DataBit_mask;
0432 int NFe = (errorWord >> DB4_shift) & DataBit_mask;
0433 int NF2 = (errorWord >> DB6_shift) & DataBit_mask;
0434 int L1A = (errorWord >> DB7_shift) & DataBit_mask;
0435 if (NFa == 1) {
0436 fullType = 1;
0437 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0438 }
0439 if (NFb == 1) {
0440 fullType = 2;
0441 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0442 }
0443 if (NFc == 1) {
0444 fullType = 3;
0445 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0446 }
0447 if (NFd == 1) {
0448 fullType = 4;
0449 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0450 }
0451 if (NFe == 1) {
0452 fullType = 5;
0453 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0454 }
0455 if (NF2 == 1) {
0456 fullType = 6;
0457 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0458 }
0459 if (L1A == 1) {
0460 fullType = 7;
0461 ((*meMapFEDs)["meFullType_"][FedId])->Fill((int)fullType);
0462 }
0463 chanNmbr = 0;
0464 break;
0465 }
0466 case (29): {
0467 int CH1 = (errorWord >> DB0_shift) & DataBit_mask;
0468 int CH2 = (errorWord >> DB1_shift) & DataBit_mask;
0469 int CH3 = (errorWord >> DB2_shift) & DataBit_mask;
0470 int CH4 = (errorWord >> DB3_shift) & DataBit_mask;
0471 int CH5 = (errorWord >> DB4_shift) & DataBit_mask;
0472 int BLOCK_bits = 3;
0473 int BLOCK_shift = 8;
0474 uint32_t BLOCK_mask = ~(~uint32_t(0) << BLOCK_bits);
0475 int BLOCK = (errorWord >> BLOCK_shift) & BLOCK_mask;
0476 int localCH = 1 * CH1 + 2 * CH2 + 3 * CH3 + 4 * CH4 + 5 * CH5;
0477 if (BLOCK % 2 == 0)
0478 chanNmbr = (BLOCK / 2) * 9 + localCH;
0479 else
0480 chanNmbr = ((BLOCK - 1) / 2) * 9 + 4 + localCH;
0481 if ((chanNmbr < 1) || (chanNmbr > 36))
0482 chanNmbr = 0;
0483 break;
0484 }
0485 case (30): {
0486 int T0 = (errorWord >> DB0_shift) & DataBit_mask;
0487 int T1 = (errorWord >> DB1_shift) & DataBit_mask;
0488 int T2 = (errorWord >> DB2_shift) & DataBit_mask;
0489 int T3 = (errorWord >> DB3_shift) & DataBit_mask;
0490 int T4 = (errorWord >> DB4_shift) & DataBit_mask;
0491 int T5 = (errorWord >> DB5_shift) & DataBit_mask;
0492 int T6 = (errorWord >> DB6_shift) & DataBit_mask;
0493 int T7 = (errorWord >> DB7_shift) & DataBit_mask;
0494 if (T0 == 1)
0495 TBMMessage = 0;
0496 if (T1 == 1)
0497 TBMMessage = 1;
0498 if (T2 == 1)
0499 TBMMessage = 2;
0500 if (T3 == 1)
0501 TBMMessage = 3;
0502 if (T4 == 1)
0503 TBMMessage = 4;
0504 if (T5 == 1)
0505 TBMMessage = 5;
0506 if (T6 == 1)
0507 TBMMessage = 6;
0508 if (T7 == 1)
0509 TBMMessage = 7;
0510 int StateMach_bits = 4;
0511 int StateMach_shift = 8;
0512 uint32_t StateMach_mask = ~(~uint32_t(0) << StateMach_bits);
0513 int StateMach = (errorWord >> StateMach_shift) & StateMach_mask;
0514 switch (StateMach) {
0515 case (0): {
0516 TBMType = 0;
0517 break;
0518 }
0519 case (1):
0520 case (9): {
0521 TBMType = 1;
0522 break;
0523 }
0524 case (2):
0525 case (4):
0526 case (6): {
0527 TBMType = 2;
0528 break;
0529 }
0530 case (8): {
0531 TBMType = 3;
0532 break;
0533 }
0534 default:
0535 TBMType = 4;
0536 };
0537 break;
0538 }
0539 case (31): {
0540 evtNbr = (errorWord >> ADC_shift) & ADC_mask;
0541 break;
0542 }
0543 case (36): {
0544
0545 break;
0546 }
0547 case (37): {
0548
0549
0550 break;
0551 }
0552 case (38): {
0553
0554 break;
0555 }
0556 default:
0557 break;
0558 };
0559 }
0560 }
0561
0562
0563
0564 if (!(errorType == 30) || notReset) {
0565 std::string hid;
0566 static const char chNfmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErr_%d";
0567 char chNbuf[sizeof(chNfmt) + 2 * 32];
0568 sprintf(chNbuf, chNfmt, FedId, chanNmbr);
0569 hid = chNbuf;
0570 if ((*meMapFEDs)["meFedChNErr_"][FedId])
0571 (*meMapFEDs)["meFedChNErr_"][FedId]->Fill(chanNmbr);
0572
0573 static const char chLfmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChLErr_%d";
0574 char chLbuf[sizeof(chLfmt) + 2 * 32];
0575 sprintf(chLbuf, chLfmt, FedId, chanNmbr);
0576 hid = chLbuf;
0577 if ((*meMapFEDs)["meFedChLErr_"][FedId])
0578 (*meMapFEDs)["meFedChLErr_"][FedId]->setBinContent(chanNmbr + 1, errorType);
0579
0580 numberOfSeriousErrors++;
0581 int messageType = 99;
0582 if (errorType < 30)
0583 messageType = errorType - 25;
0584 else if (errorType > 30)
0585 messageType = errorType - 19;
0586 else if (errorType == 30 && TBMMessage == 0)
0587 messageType = errorType - 25;
0588 else if (errorType == 30 && TBMMessage == 1)
0589 messageType = errorType - 24;
0590 else if (errorType == 30 && (TBMMessage == 2 || TBMMessage == 3 || TBMMessage == 4))
0591 messageType = errorType - 23;
0592 else if (errorType == 30 && TBMMessage == 7)
0593 messageType = errorType - 22;
0594 else if (errorType == 30 && TBMType == 1)
0595 messageType = errorType - 21;
0596 else if (errorType == 30 && TBMType == 2)
0597 messageType = errorType - 20;
0598 else if (errorType == 30 && TBMType == 3)
0599 messageType = errorType - 19;
0600 if (messageType <= 20) {
0601 static const char fmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedETypeNErr_%d";
0602 char buf[sizeof(fmt) + 2 * 32];
0603 sprintf(buf, fmt, FedId, messageType);
0604 hid = buf;
0605 if ((*meMapFEDs)["meFedETypeNErr_"][FedId])
0606 (*meMapFEDs)["meFedETypeNErr_"][FedId]->Fill(messageType);
0607 }
0608 }
0609
0610 (*meMapFEDs)["meNErrors_"][FedId]->Fill((int)numberOfSeriousErrors);
0611 (*meMapFEDs)["meTBMMessage_"][FedId]->Fill((int)TBMMessage);
0612 (*meMapFEDs)["meTBMType_"][FedId]->Fill((int)TBMType);
0613 (*meMapFEDs)["meErrorType_"][FedId]->Fill((int)errorType);
0614 (*meMapFEDs)["meFullType_"][FedId]->Fill((int)fullType);
0615 (*meMapFEDs)["meEvtNbr_"][FedId]->setBinContent(1, (int)evtNbr);
0616 (*meMapFEDs)["meEvtSize_"][FedId]->setBinContent(1, (int)evtSize);
0617 }
0618 }
0619 return numberOfSeriousErrors;
0620 }
0621
0622 int SiPixelRawDataErrorModule::fillFED(const edm::DetSetVector<SiPixelRawDataError> &input,
0623 std::map<std::string, MonitorElement **> *meMapFEDs) {
0624 unsigned int numberOfSeriousErrors = 0;
0625
0626 edm::DetSetVector<SiPixelRawDataError>::const_iterator isearch = input.find(0xffffffff);
0627 if (isearch != input.end()) {
0628
0629 edm::DetSet<SiPixelRawDataError>::const_iterator di;
0630 for (di = isearch->data.begin(); di != isearch->data.end(); di++) {
0631 int FedId = di->getFedId();
0632 int chanNmbr = -1;
0633 int errorType = 0;
0634 if (FedId == static_cast<int>(id_)) {
0635 errorType = di->getType();
0636 ((*meMapFEDs)["meErrorType_"][id_])->Fill((int)errorType);
0637 bool notReset = true;
0638 int TBMType = -1;
0639 int TBMMessage = -1;
0640 int evtSize = -1;
0641 int fullType = -1;
0642 const int LINK_bits = 6;
0643 const int LINK_shift = 26;
0644 const uint32_t LINK_mask = ~(~(uint32_t)(0) << LINK_bits);
0645 if ((errorType == 32) || (errorType == 33) || (errorType == 34)) {
0646 long long errorWord = di->getWord64();
0647 chanNmbr = 0;
0648 switch (errorType) {
0649
0650 case (32): {
0651 break;
0652 }
0653 case (33): {
0654 break;
0655 }
0656 case (34): {
0657 evtSize = (errorWord >> EVTLGT_shift) & EVTLGT_mask;
0658 ((*meMapFEDs)["meEvtSize_"][id_])->setBinContent(1, (int)evtSize);
0659 break;
0660 }
0661 default:
0662 break;
0663 };
0664 } else {
0665 uint32_t errorWord = di->getWord32();
0666 switch (errorType) {
0667
0668 case (25):
0669 case (39): {
0670 chanNmbr = 0;
0671 break;
0672 }
0673 case (28): {
0674 int NFa = (errorWord >> DB0_shift) & DataBit_mask;
0675 int NFb = (errorWord >> DB1_shift) & DataBit_mask;
0676 int NFc = (errorWord >> DB2_shift) & DataBit_mask;
0677 int NFd = (errorWord >> DB3_shift) & DataBit_mask;
0678 int NFe = (errorWord >> DB4_shift) & DataBit_mask;
0679 int NF2 = (errorWord >> DB6_shift) & DataBit_mask;
0680 int L1A = (errorWord >> DB7_shift) & DataBit_mask;
0681 if (NFa == 1) {
0682 fullType = 1;
0683 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0684 }
0685 if (NFb == 1) {
0686 fullType = 2;
0687 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0688 }
0689 if (NFc == 1) {
0690 fullType = 3;
0691 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0692 }
0693 if (NFd == 1) {
0694 fullType = 4;
0695 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0696 }
0697 if (NFe == 1) {
0698 fullType = 5;
0699 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0700 }
0701 if (NF2 == 1) {
0702 fullType = 6;
0703 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0704 }
0705 if (L1A == 1) {
0706 fullType = 7;
0707 ((*meMapFEDs)["meFullType_"][id_])->Fill((int)fullType);
0708 }
0709 chanNmbr = 0;
0710 break;
0711 }
0712 case (29): {
0713 int CH1 = (errorWord >> DB0_shift) & DataBit_mask;
0714 int CH2 = (errorWord >> DB1_shift) & DataBit_mask;
0715 int CH3 = (errorWord >> DB2_shift) & DataBit_mask;
0716 int CH4 = (errorWord >> DB3_shift) & DataBit_mask;
0717 int CH5 = (errorWord >> DB4_shift) & DataBit_mask;
0718 int BLOCK_bits = 3;
0719 int BLOCK_shift = 8;
0720 uint32_t BLOCK_mask = ~(~uint32_t(0) << BLOCK_bits);
0721 int BLOCK = (errorWord >> BLOCK_shift) & BLOCK_mask;
0722 int localCH = 1 * CH1 + 2 * CH2 + 3 * CH3 + 4 * CH4 + 5 * CH5;
0723 if (BLOCK % 2 == 0)
0724 chanNmbr = (BLOCK / 2) * 9 + localCH;
0725 else
0726 chanNmbr = ((BLOCK - 1) / 2) * 9 + 4 + localCH;
0727 if ((chanNmbr < 1) || (chanNmbr > 36))
0728 chanNmbr = 0;
0729 break;
0730 }
0731 case (30): {
0732 int T0 = (errorWord >> DB0_shift) & DataBit_mask;
0733 int T1 = (errorWord >> DB1_shift) & DataBit_mask;
0734 int T2 = (errorWord >> DB2_shift) & DataBit_mask;
0735 int T3 = (errorWord >> DB3_shift) & DataBit_mask;
0736 int T4 = (errorWord >> DB4_shift) & DataBit_mask;
0737 int T5 = (errorWord >> DB5_shift) & DataBit_mask;
0738 int T6 = (errorWord >> DB6_shift) & DataBit_mask;
0739 int T7 = (errorWord >> DB7_shift) & DataBit_mask;
0740 if (!(FedId == 38 && chanNmbr == 7)) {
0741 if (T0 == 1) {
0742 TBMMessage = 0;
0743 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0744 }
0745 if (T1 == 1) {
0746 TBMMessage = 1;
0747 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0748 }
0749 if (T2 == 1) {
0750 TBMMessage = 2;
0751 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0752 }
0753 if (T3 == 1) {
0754 TBMMessage = 3;
0755 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0756 }
0757 if (T4 == 1) {
0758 TBMMessage = 4;
0759 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0760 }
0761 if (T5 == 1) {
0762 TBMMessage = 5;
0763 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0764 }
0765 if (T6 == 1) {
0766 TBMMessage = 6;
0767 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0768 }
0769 if (T7 == 1) {
0770 TBMMessage = 7;
0771 ((*meMapFEDs)["meTBMMessage_"][id_])->Fill((int)TBMMessage);
0772 }
0773 }
0774 if (TBMMessage == 5 || TBMMessage == 6)
0775 notReset = false;
0776 int StateMach_bits = 4;
0777 int StateMach_shift = 8;
0778 uint32_t StateMach_mask = ~(~uint32_t(0) << StateMach_bits);
0779 int StateMach = (errorWord >> StateMach_shift) & StateMach_mask;
0780 switch (StateMach) {
0781 case (0): {
0782 TBMType = 0;
0783 break;
0784 }
0785 case (1):
0786 case (9): {
0787 TBMType = 1;
0788 break;
0789 }
0790 case (2):
0791 case (4):
0792 case (6): {
0793 TBMType = 2;
0794 break;
0795 }
0796 case (8): {
0797 TBMType = 3;
0798 break;
0799 }
0800 default:
0801 TBMType = 4;
0802 };
0803 if (!(FedId == 38 && chanNmbr == 7))
0804 ((*meMapFEDs)["meTBMType_"][id_])->Fill((int)TBMType);
0805 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0806 break;
0807 }
0808 case (31): {
0809 int evtNbr = (errorWord >> ADC_shift) & ADC_mask;
0810 if (!(FedId == 38 && chanNmbr == 7))
0811 ((*meMapFEDs)["meEvtNbr_"][id_])->setBinContent(1, (int)evtNbr);
0812 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0813 break;
0814 }
0815 case (35):
0816 case (36):
0817 case (37):
0818 case (38): {
0819 chanNmbr = (errorWord >> LINK_shift) & LINK_mask;
0820 break;
0821 }
0822 default:
0823 break;
0824 };
0825 }
0826
0827 if (!(errorType == 30) || notReset) {
0828 std::string hid;
0829 static const char chNfmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChNErr_%d";
0830 char chNbuf[sizeof(chNfmt) + 2 * 32];
0831 sprintf(chNbuf, chNfmt, FedId, chanNmbr);
0832 hid = chNbuf;
0833 if ((*meMapFEDs)["meFedChNErr_"][id_])
0834 (*meMapFEDs)["meFedChNErr_"][id_]->Fill(chanNmbr);
0835
0836 static const char chLfmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedChLErr_%d";
0837 char chLbuf[sizeof(chLfmt) + 2 * 32];
0838 sprintf(chLbuf, chLfmt, FedId, chanNmbr);
0839 hid = chLbuf;
0840 if ((*meMapFEDs)["meFedChLErr_"][id_])
0841 (*meMapFEDs)["meFedChLErr_"][id_]->setBinContent(chanNmbr + 1, errorType);
0842
0843 numberOfSeriousErrors++;
0844 int messageType = 99;
0845 if (errorType < 30)
0846 messageType = errorType - 25;
0847 else if (errorType > 30)
0848 messageType = errorType - 19;
0849 else if (errorType == 30 && TBMMessage == 0)
0850 messageType = errorType - 25;
0851 else if (errorType == 30 && TBMMessage == 1)
0852 messageType = errorType - 24;
0853 else if (errorType == 30 && (TBMMessage == 2 || TBMMessage == 3 || TBMMessage == 4))
0854 messageType = errorType - 23;
0855 else if (errorType == 30 && TBMMessage == 7)
0856 messageType = errorType - 22;
0857 else if (errorType == 30 && TBMType == 1)
0858 messageType = errorType - 21;
0859 else if (errorType == 30 && TBMType == 2)
0860 messageType = errorType - 20;
0861 else if (errorType == 30 && TBMType == 3)
0862 messageType = errorType - 19;
0863 if (messageType <= 20) {
0864 static const char fmt[] = "Pixel/AdditionalPixelErrors/FED_%d/FedETypeNErr_%d";
0865 char buf[sizeof(fmt) + 2 * 32];
0866 sprintf(buf, fmt, FedId, messageType);
0867 hid = buf;
0868 if ((*meMapFEDs)["meFedETypeNErr_"][id_])
0869 (*meMapFEDs)["meFedETypeNErr_"][id_]->Fill(messageType);
0870 }
0871 }
0872 }
0873 }
0874 if (numberOfSeriousErrors > 0)
0875 ((*meMapFEDs)["meNErrors_"][id_])->Fill((float)numberOfSeriousErrors);
0876 }
0877 return numberOfSeriousErrors;
0878 }