36 std::vector<std::string> partitionsEM = {
"LArFCAL1C",
"LArEMECC",
"LArOverlapC",
"LArEMBC",
"LArEMBA",
"LArOverlapA",
"LArEMECA",
"LArFCAL1A"};
39 std::vector<std::string> partitionsHAD = {
"LArFCAL23C",
"LArHECC",
"TileEBC",
"TileLBC",
"TileLBA",
"TileEBA",
"LArHECA",
"LArFCAL23A"};
42 return StatusCode::SUCCESS;
52 bunchCrossing = ctx.eventID().bunch_crossing_id();
54 const long long eventNumber = ctx.eventID().event_number();
62 return StatusCode::FAILURE;
66 std::vector<MonitorTT> vecMonTT;
77 bool triggerTowerHasMcmError =
false;
78 bool triggerTowerHasSubstatusError =
false;
82 for (
auto& myTower : vecMonTT) {
85 int cpET = (myTower.tower)->cpET();
86 int jepET = myTower.jepET;
88 bool isEM = (
layer == 0);
89 bool isHAD = (
layer == 1);
90 std::string layerName = (
layer == 0) ?
"EM" :
"HAD";
92 ATH_MSG_DEBUG(
"isEM " << isEM <<
" isHAD " << isHAD <<
" layerName " << layerName);
184 unsigned int tslice = (myTower.tower)->adcPeak();
185 unsigned int adcSize = ((myTower.tower)->
adc()).
size();
194 if (tslice < adcSize) {
197 const int ADC = ((myTower.tower)->
adc())[tslice];
206 int max = myTower.maxADC;
207 int maxADCPlus1 =
max + 1;
226 short unsigned int peak = (myTower.tower)->peak();
228 if (cpET > 0 && tslice < adcSize) {
230 adcBCID = ((myTower.tower)->
adc())[tslice];
231 uint8_t bcidWord = (myTower.tower)->bcidVec()[peak];
233 if (bcidWord ==
char(0) || bcidWord ==
char(1)) {
237 else if (bcidWord ==
char(2) || bcidWord ==
char(3)) {
241 else if (bcidWord ==
char(4) || bcidWord ==
char(5)) {
245 else if (bcidWord ==
char(6) || bcidWord ==
char(7)) {
249 if (bcidWord ==
char(5) || bcidWord ==
char(7)) {
253 if (bcidWord ==
char(3) || bcidWord ==
char(7)) {
257 if (bcidWord ==
char(1)) {
267 if (cpET > 0 && tslice < adcSize && peak < (myTower.tower)->sat80Vec().size()) {
269 for(
unsigned int i = 0;
i < 8;
i++) {
278 const std::vector<short unsigned int> &vADC((myTower.tower)->adc());
283 std::vector<short unsigned int>::const_iterator
it = vADC.begin();
284 std::vector<short unsigned int>::const_iterator
itE = vADC.end();
304 bool isPedCorrOverflow =
false;
305 bool isPedCorrUnderflow =
false;
307 for (
auto pedCorr : (myTower.tower)->correction()) {
308 if ( pedCorr >= 511 ) isPedCorrOverflow =
true;
309 else if ( pedCorr <= -512 ) isPedCorrUnderflow =
true;
315 fill(
groupName, eta_TT, mask_PedCorrOverflow, mask_PedCorrUnderflow);
322 const int maxErrorsPerLB = 10;
326 if ( (myTower.tower)->errorWord()) {
329 const int crate = coolId.
crate();
331 const int ypos = (crate < 4) ?
module + crate * 16 :
module + (crate - 4) * 16;
338 for (
int bit = 0; bit < 8; ++bit) {
345 if (
err.get(bit + DataError::ChannelDisabled)) {
346 fill(
"group1DMCMErrorSummary", bit_2D);
348 if (crate < 4)
fill(
"groupErrorMCMField03", bit_2D, y_2D );
349 else fill(
"groupMCMErrorField47", bit_2D, y_2D );
351 if ((m_errorLB_tt_counter[currentLumiblock]<maxErrorsPerLB) && (!triggerTowerHasMcmError)) {
352 fill(
"groupMCMErrorEventNumbers", eventMonitor, bit_2D );
354 triggerTowerHasMcmError =
true;
361 if (
err.get(bit + DataError::GLinkParity)) {
362 fill(
"group1DSubStatErrorSummary", bit_2D);
364 if (crate < 4)
fill(
"groupSubStatError03", bit_2D, y_2D );
365 else fill(
"groupSubStatError47", bit_2D, y_2D );
367 if ((m_errorLB_tt_counter[currentLumiblock]<maxErrorsPerLB) && (!triggerTowerHasSubstatusError)) {
368 fill(
"groupSubStatErrorEventNumbers", eventMonitor, bit_2D );
370 triggerTowerHasSubstatusError =
true;
374 if (triggerTowerHasMcmError || triggerTowerHasSubstatusError) {
375 m_errorLB_tt_counter[currentLumiblock]+=1;
378 if (
err.get(DataError::ChannelDisabled) ||
379 err.get(DataError::MCMAbsent))
380 overview[crate] |= 1;
383 err.get(DataError::EventMismatch) ||
384 err.get(DataError::BunchMismatch) ||
385 err.get(DataError::FIFOCorrupt) ||
err.get(DataError::PinParity))
386 overview[crate] |= (1 << 1);
388 if (
err.get(DataError::GLinkParity) ||
389 err.get(DataError::GLinkProtocol) ||
390 err.get(DataError::FIFOOverflow) ||
391 err.get(DataError::ModuleError) ||
err.get(DataError::GLinkDown) ||
392 err.get(DataError::GLinkTimeout) ||
err.get(DataError::BCNMismatch))
393 overview[crate] |= (1 << 2);
400 auto save = std::make_unique<ErrorVector>(overview);
404 return StatusCode::FAILURE;
407 return StatusCode::SUCCESS;
411 std::vector<MonitorTT> &vecMonTT)
const
414 const double phi =
tt->phi();
419 const std::vector<uint_least8_t>& jepETvec =
tt->lut_jep();
420 if (jepETvec.size() > 0) jepET =
tt->jepET();
423 const std::vector<short unsigned int> &
ADC(
tt->adc() );
432 vecMonTT.push_back(monTT);
434 return StatusCode::SUCCESS;
441 const int slices = vFADC.size();
444 int maxAdc = vFADC[0];
445 for (
int sl = 1; sl <
slices; ++sl) {
446 if (vFADC[sl] > maxAdc) {
449 }
else if (vFADC[sl] == maxAdc)
464 for (
int sl = slbeg; sl < slend; ++sl) {
472 sum -= (slend - slbeg) *
min;
483 std::string
part =
"";
490 part =
"LArOverlapC";
496 part =
"LArOverlapA";
525 const std::string& weightName,
535 const std::vector<double> offset32 = {1.5, 0.5, -0.5, -1.5};
536 const std::vector<double> offset25 = {0.5, -0.5};
537 std::vector<double>
offset = {};
541 phiMod = std::floor(phiMod/4)*4. + 2.;
546 phiMod = std::floor(phiMod/2)*2. + 1.;
554 for (
auto phiOffset :
offset) {
559 ATH_MSG_DEBUG(
"etaTT_2D: " << etaTT_2D <<
" phiTT_2D: " << phiTT_2D <<
" weight_2D: " << weight_2D);
565 return StatusCode::SUCCESS;
576 const std::vector<double> offset32 = {1.5, 0.5, -0.5, -1.5};
577 const std::vector<double> offset25 = {0.5, -0.5};
578 std::vector<double>
offset = {};
596 for (
auto phiOffset :
offset) {
602 return StatusCode::SUCCESS;