219 {
220
221
222
223
225 if (!gFexFiberTowerContainer.isValid()) {
227 << gFexFiberTowerContainer.key());
228 return StatusCode::FAILURE;
229 }
230
231 if (gFexFiberTowerContainer->empty()) {
233 << gFexFiberTowerContainer->size());
234 return StatusCode::SUCCESS;
235 }
236
237
240 Xgt[irow][icolumn] = 0;
241 XgtF[irow][icolumn] = 0;
242 Xsaturation[irow][icolumn] = 0;
243 }
244 }
245
246
247
248 std::array<int, LVL1::gFEXPos::AB_TOWERS> etowerData{};
249 std::array<int, LVL1::gFEXPos::AB_TOWERS> htowerData{};
250 std::array<int, LVL1::gFEXPos::ABC_ROWS> xetowerData{};
251 std::array<int, LVL1::gFEXPos::ABC_ROWS> xhtowerData{};
252 std::array<int, LVL1::gFEXPos::ABC_ROWS> ohtowerData{};
253
254
255 std::array<int, LVL1::gFEXPos::AB_TOWERS> etowerDataF{};
256 std::array<int, LVL1::gFEXPos::AB_TOWERS> htowerDataF{};
257 std::array<int, LVL1::gFEXPos::ABC_ROWS> xetowerDataF{};
258 std::array<int, LVL1::gFEXPos::ABC_ROWS> xhtowerDataF{};
259 std::array<int, LVL1::gFEXPos::ABC_ROWS> ohtowerDataF{};
260
261
262 std::array<bool, LVL1::gFEXPos::AB_TOWERS> saturationData{};
263
264
266
267 unsigned int fiberTowerFpga = gfexFiberTower->fpga();
268 if (fiberTowerFpga != XFPGA) continue;
269
270
271 unsigned int fiberTowerId = gfexFiberTower->gFEXtowerID();
272 unsigned int offset = (XFPGA == 2) ? 20000 : (XFPGA == 1) ? 10000 : 0;
273 unsigned int iFiber = (fiberTowerId -
offset)/16;
274
275
277 if (iFiber >= maxFiberN) continue;
278
279 ATH_MSG_DEBUG(
" accessing " << fiberTowerId <<
" " << XFPGA <<
" " << offset <<
" " << iFiber);
280
281 unsigned int iDatum = fiberTowerId%16;
282
284 (XFPGA == 1) ? LVL1::gFEXPos::
BMPD_NFI[iFiber] : LVL1::gFEXPos::
CMPD_NFI[iFiber];
285
286
287
288
289
290
291
292
293
297
298
302
303
304
305
308
309
310
311
312
313
314
315
316
317
318
319
320 bool fiberSaturation = (
bool)(gfexFiberTower->isSaturated());
321 if (fiberSaturation) {
322 if (XFPGA < 2) {
323
324 switch (dataType) {
325 case 0:
326 case 1:
327 saturationData[ntower] = true;
328 break;
329 case 11:
330
331 if (XFPGA != 1) {
332 saturationData[ntower] = true;
333 }
334 break;
335 case 2:
336 case 3:
337 {
338 int extCol = (XFPGA == 0) ? 0 : 11;
339 int extTower = ntower * 12 + extCol;
340 if (extTower >= 0 && extTower < 384) {
341 saturationData[extTower] = true;
342 }
343 }
344 break;
345 case 6:
346 {
347 int olapCol = (XFPGA == 0) ? 4 : 7;
348 int olapTower = ntower * 12 + olapCol;
349 if (olapTower >= 0 && olapTower < 384) {
350 saturationData[olapTower] = true;
351 }
352 }
353 break;
354 default:
355 break;
356 }
357 } else {
358
359 saturationData[ntower] = true;
360 }
361 }
362
363
364 unsigned int Toweret_mle = (
unsigned int)(gfexFiberTower->towerEt());
365
366
367 if(caloType < 3) {
368 switch(dataType){
369 case 0:
370 etowerData[ntower] = Toweret_mle;
372 etowerDataF[ntower] = etowerData[ntower];
373 break;
374 case 1:
375 htowerData[ntower] = Toweret_mle;
376
377
378
379 htowerData[ntower] = 20*htowerData[ntower];
380 htowerDataF[ntower] = htowerData[ntower];
381 break;
382
383 case 2:
384 xetowerData[ntower] = Toweret_mle;
385 undoMLE( xetowerData[ntower] );
386 xetowerDataF[ntower] = xetowerData[ntower];
387 break;
388
389 case 3:
390 xhtowerData[ntower] = Toweret_mle;
391 undoMLE( xhtowerData[ntower] );
392 xhtowerDataF[ntower] = xhtowerData[ntower];
393 break;
394
395 case 6:
396 ohtowerData[ntower] = Toweret_mle;
397 undoMLE( ohtowerData[ntower] );
398 ohtowerDataF[ntower] = ohtowerData[ntower];
399 break;
400
401 case 11:
402 htowerData[ntower] = Toweret_mle;
404 htowerDataF[ntower] = htowerData[ntower];
405 break;
406 }
407 } else {
408
409
410
411 switch(dataType){
412 case 2:
413
414 etowerData[ntower] = Toweret_mle;
416 etowerDataF[ntower] = etowerData[ntower];
417
418 break;
419
420 case 3:
421 htowerData[ntower] = Toweret_mle;
423 htowerDataF[ntower] = htowerData[ntower];
424 break;
425
426 case 15:
427 break;
428
429 case 99:
430 break;
431
432 default:
434 << dataType);
435 return StatusCode::FAILURE;
436
437 }
438 }
439
440 ATH_MSG_DEBUG(
" end of loop: " << XFPGA <<
" tower: " << ntower <<
" e " << etowerDataF[ntower] <<
" h " << htowerData[ntower] <<
" fibertower " << fiberTowerId);
441
442 }
443
444
445 if( XFPGA == 0 ) {
446 for(int itower=0;itower<384;itower++){
447 int icolumn = itower%12;
448 int irow = itower/12;
449
450
451 Xsaturation[irow][icolumn] = saturationData[itower];
452
453
454
455 int xF = etowerDataF[itower] + htowerDataF[itower];
456
457 int x = ( (etowerData[itower]>>2) + (htowerData[itower]>>2) );
458
459 ATH_MSG_DEBUG(
"sss1 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x <<
" " << etowerDataF[itower] <<
" " << htowerDataF[itower]);
460
463
464 ATH_MSG_DEBUG(
"sss2 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x);
465
466 Xgt[irow][icolumn] =
x;
467 XgtF[irow][icolumn] = xF;
468
469 ATH_MSG_DEBUG(
"sss3 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
470
471
472 if ( icolumn == 0) {
473 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
475 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
476 ATH_MSG_DEBUG(
"sss4 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
477 }
478
479 if ( icolumn == 4) {
480
481 int ox = (ohtowerData[irow] >> 2 ) ;
483 Xgt[irow][icolumn] = Xgt[irow][icolumn] + ox ;
484 ATH_MSG_DEBUG(
"sss5 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
485 }
486
487 ATH_MSG_DEBUG(
"sss filling standard " << Xgt[irow][icolumn] <<
" fiber " << XgtF[irow][icolumn]);
488 }
489 }
490 else if ( XFPGA == 1 ) {
491 for(int itower=0;itower<384;itower++){
492 int icolumn = itower%12;
493 int irow = itower/12;
494
495
496 Xsaturation[irow][icolumn] = saturationData[itower];
497
498
499 int xF = etowerDataF[itower] + htowerDataF[itower] ;
500
501 int x = ( (etowerData[itower]>>2) + (htowerData[itower] >> 2) );
502
505
506 Xgt[irow][icolumn] =
x;
507 XgtF[irow][icolumn] = xF;
508
509
510 if ( icolumn == 11) {
511
512 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
514 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
515 }
516 if ( icolumn == 7 ) {
517
518 int xo = ohtowerData[irow]>>2;
520 Xgt[irow][icolumn] = Xgt[irow][icolumn] + xo;
521 }
522 }
523 }
524 else if ( XFPGA == 2 ) {
525 for(int itower=0;itower<384;itower++){
526 int icolumn = itower%12;
527 int irow = itower/12;
528
529
530 Xsaturation[irow][icolumn] = saturationData[itower];
531
532
533 int xF = etowerDataF[itower] + htowerDataF[itower] ;
534
535 int x = ( (etowerData[itower]>>2 ) + (htowerData[itower]>>2));
538
539 Xgt[irow][icolumn] =
x;
540 XgtF[irow][icolumn] = xF;
541 }
542 }
543
544 return StatusCode::SUCCESS;
545}
#define ATH_MSG_WARNING(x)
void signExtend(int *xptr, int upto) const
SG::ReadHandleKey< xAOD::gFexTowerContainer > m_gFexFiberTowersReadKey
void undoMLE(int &datumPtr) const
constexpr std::array< std::array< int, 16 >, 100 > AMPD_GTRN_ARR
constexpr std::array< std::array< char, 20 >, 4 > CMPD_DTYP_ARR
constexpr std::array< int, 100 > CMPD_NFI
constexpr std::array< std::array< int, 16 >, 100 > CMPD_GTRN_ARR
constexpr std::array< int, 100 > ACALO_TYPE
constexpr std::array< std::array< char, 20 >, 4 > AMPD_DTYP_ARR
constexpr std::array< std::array< char, 20 >, 4 > BMPD_DTYP_ARR
constexpr std::array< int, 100 > BCALO_TYPE
constexpr std::array< int, 100 > CCALO_TYPE
constexpr std::array< int, 100 > AMPD_NFI
constexpr std::array< int, 100 > BMPD_NFI
constexpr std::array< std::array< int, 16 >, 100 > BMPD_GTRN_ARR
gFexTower_v1 gFexTower
Define the latest version of the TriggerTower class.
setBGCode setTAP setLVL2ErrorBits bool