236 {
237
238
239
240
242 if (!gFexFiberTowerContainer.isValid()) {
244 << gFexFiberTowerContainer.key());
245 return StatusCode::FAILURE;
246 }
247
248 if (gFexFiberTowerContainer->empty()) {
250 << gFexFiberTowerContainer->size());
251 return StatusCode::SUCCESS;
252 }
253
254
257 Xgt[irow][icolumn] = 0;
258 XgtF[irow][icolumn] = 0;
259 Xsaturation[irow][icolumn] = 0;
260 }
261 }
262
263
264
265 std::array<int, LVL1::gFEXPos::AB_TOWERS> etowerData{};
266 std::array<int, LVL1::gFEXPos::AB_TOWERS> htowerData{};
267 std::array<int, LVL1::gFEXPos::ABC_ROWS> xetowerData{};
268 std::array<int, LVL1::gFEXPos::ABC_ROWS> xhtowerData{};
269 std::array<int, LVL1::gFEXPos::ABC_ROWS> ohtowerData{};
270
271
272 std::array<int, LVL1::gFEXPos::AB_TOWERS> etowerDataF{};
273 std::array<int, LVL1::gFEXPos::AB_TOWERS> htowerDataF{};
274 std::array<int, LVL1::gFEXPos::ABC_ROWS> xetowerDataF{};
275 std::array<int, LVL1::gFEXPos::ABC_ROWS> xhtowerDataF{};
276 std::array<int, LVL1::gFEXPos::ABC_ROWS> ohtowerDataF{};
277
278
279 std::array<bool, LVL1::gFEXPos::AB_TOWERS> saturationData{};
280
281
283
284 unsigned int fiberTowerFpga = gfexFiberTower->fpga();
285 if (fiberTowerFpga != XFPGA) continue;
286
287
288 unsigned int fiberTowerId = gfexFiberTower->gFEXtowerID();
289 unsigned int offset = (XFPGA == 2) ? 20000 : (XFPGA == 1) ? 10000 : 0;
290 unsigned int iFiber = (fiberTowerId -
offset)/16;
291
292
294 if (iFiber >= maxFiberN) continue;
295
296 ATH_MSG_DEBUG(
" accessing " << fiberTowerId <<
" " << XFPGA <<
" " << offset <<
" " << iFiber);
297
298 unsigned int iDatum = fiberTowerId%16;
299
301 (XFPGA == 1) ? LVL1::gFEXPos::
BMPD_NFI[iFiber] : LVL1::gFEXPos::
CMPD_NFI[iFiber];
302
303
304
305
306
307
308
309
310
314
315
319
320
321
322
325
326
327 bool fiberSaturation = (
bool)(gfexFiberTower->isSaturated());
328 if (fiberSaturation) {
329 saturationData[ntower] = fiberSaturation;
330 }
331
332
333 unsigned int Toweret_mle = (
unsigned int)(gfexFiberTower->towerEt());
334
335
336 if(caloType < 3) {
337 switch(dataType){
338 case 0:
339 etowerData[ntower] = Toweret_mle;
341 etowerDataF[ntower] = etowerData[ntower];
342 break;
343 case 1:
344 htowerData[ntower] = Toweret_mle;
345
346
347
348 htowerData[ntower] = 20*htowerData[ntower];
349 htowerDataF[ntower] = htowerData[ntower];
350 break;
351
352 case 2:
353 xetowerData[ntower] = Toweret_mle;
354 undoMLE( xetowerData[ntower] );
355 xetowerDataF[ntower] = xetowerData[ntower];
356 break;
357
358 case 3:
359 xhtowerData[ntower] = Toweret_mle;
360 undoMLE( xhtowerData[ntower] );
361 xhtowerDataF[ntower] = xhtowerData[ntower];
362 break;
363
364 case 6:
365 ohtowerData[ntower] = Toweret_mle;
366 undoMLE( ohtowerData[ntower] );
367 ohtowerDataF[ntower] = ohtowerData[ntower];
368 break;
369
370 case 11:
371 htowerData[ntower] = Toweret_mle;
373 htowerDataF[ntower] = htowerData[ntower];
374 break;
375 }
376 } else {
377
378
379
380 switch(dataType){
381 case 2:
382
383 etowerData[ntower] = Toweret_mle;
385 etowerDataF[ntower] = etowerData[ntower];
386
387 break;
388
389 case 3:
390 htowerData[ntower] = Toweret_mle;
392 htowerDataF[ntower] = htowerData[ntower];
393 break;
394
395 case 15:
396 break;
397
398 case 99:
399 break;
400
401 default:
403 << dataType);
404 return StatusCode::FAILURE;
405
406 }
407 }
408
409 ATH_MSG_DEBUG(
" end of loop: " << XFPGA <<
" tower: " << ntower <<
" e " << etowerDataF[ntower] <<
" h " << htowerData[ntower] <<
" fibertower " << fiberTowerId);
410
411 }
412
413
414 if( XFPGA == 0 ) {
415 for(int itower=0;itower<384;itower++){
416 int icolumn = itower%12;
417 int irow = itower/12;
418
419
420 Xsaturation[irow][icolumn] = saturationData[itower];
421
422
423
424 int xF = etowerDataF[itower] + htowerDataF[itower];
425
426 int x = ( (etowerData[itower]>>2) + (htowerData[itower]>>2) );
427
428 ATH_MSG_DEBUG(
"sss1 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x <<
" " << etowerDataF[itower] <<
" " << htowerDataF[itower]);
429
432
433 ATH_MSG_DEBUG(
"sss2 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x);
434
435 Xgt[irow][icolumn] =
x;
436 XgtF[irow][icolumn] = xF;
437
438 ATH_MSG_DEBUG(
"sss3 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
439
440
441 if ( icolumn == 0) {
442 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
444 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
445 ATH_MSG_DEBUG(
"sss4 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
446 }
447
448 if ( icolumn == 4) {
449
450 int ox = (ohtowerData[irow] >> 2 ) ;
452 Xgt[irow][icolumn] = Xgt[irow][icolumn] + ox ;
453 ATH_MSG_DEBUG(
"sss5 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
454 }
455
456 ATH_MSG_DEBUG(
"sss filling standard " << Xgt[irow][icolumn] <<
" fiber " << XgtF[irow][icolumn]);
457 }
458 }
459 else if ( XFPGA == 1 ) {
460 for(int itower=0;itower<384;itower++){
461 int icolumn = itower%12;
462 int irow = itower/12;
463
464
465 Xsaturation[irow][icolumn] = saturationData[itower];
466
467
468 int xF = etowerDataF[itower] + htowerDataF[itower] ;
469
470 int x = ( (etowerData[itower]>>2) + (htowerData[itower] >> 2) );
471
474
475 Xgt[irow][icolumn] =
x;
476 XgtF[irow][icolumn] = xF;
477
478
479 if ( icolumn == 11) {
480
481 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
483 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
484 }
485 if ( icolumn == 7 ) {
486
487 int xo = ohtowerData[irow]>>2;
489 Xgt[irow][icolumn] = Xgt[irow][icolumn] + xo;
490 }
491 }
492 }
493 else if ( XFPGA == 2 ) {
494 for(int itower=0;itower<384;itower++){
495 int icolumn = itower%12;
496 int irow = itower/12;
497
498
499 Xsaturation[irow][icolumn] = saturationData[itower];
500
501
502 int xF = etowerDataF[itower] + htowerDataF[itower] ;
503
504 int x = ( (etowerData[itower]>>2 ) + (htowerData[itower]>>2));
507
508 Xgt[irow][icolumn] =
x;
509 XgtF[irow][icolumn] = xF;
510 }
511 }
512
513 return StatusCode::SUCCESS;
514}
#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