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 bool fiberSaturation = (
bool)(gfexFiberTower->isSaturated());
311 if (fiberSaturation) {
312 saturationData[ntower] = fiberSaturation;
313 }
314
315
316 unsigned int Toweret_mle = (
unsigned int)(gfexFiberTower->towerEt());
317
318
319 if(caloType < 3) {
320 switch(dataType){
321 case 0:
322 etowerData[ntower] = Toweret_mle;
324 etowerDataF[ntower] = etowerData[ntower];
325 break;
326 case 1:
327 htowerData[ntower] = Toweret_mle;
328
329
330
331 htowerData[ntower] = 20*htowerData[ntower];
332 htowerDataF[ntower] = htowerData[ntower];
333 break;
334
335 case 2:
336 xetowerData[ntower] = Toweret_mle;
337 undoMLE( xetowerData[ntower] );
338 xetowerDataF[ntower] = xetowerData[ntower];
339 break;
340
341 case 3:
342 xhtowerData[ntower] = Toweret_mle;
343 undoMLE( xhtowerData[ntower] );
344 xhtowerDataF[ntower] = xhtowerData[ntower];
345 break;
346
347 case 6:
348 ohtowerData[ntower] = Toweret_mle;
349 undoMLE( ohtowerData[ntower] );
350 ohtowerDataF[ntower] = ohtowerData[ntower];
351 break;
352
353 case 11:
354 htowerData[ntower] = Toweret_mle;
356 htowerDataF[ntower] = htowerData[ntower];
357 break;
358 }
359 } else {
360
361
362
363 switch(dataType){
364 case 2:
365
366 etowerData[ntower] = Toweret_mle;
368 etowerDataF[ntower] = etowerData[ntower];
369
370 break;
371
372 case 3:
373 htowerData[ntower] = Toweret_mle;
375 htowerDataF[ntower] = htowerData[ntower];
376 break;
377
378 case 15:
379 break;
380
381 case 99:
382 break;
383
384 default:
386 << dataType);
387 return StatusCode::FAILURE;
388
389 }
390 }
391
392 ATH_MSG_DEBUG(
" end of loop: " << XFPGA <<
" tower: " << ntower <<
" e " << etowerDataF[ntower] <<
" h " << htowerData[ntower] <<
" fibertower " << fiberTowerId);
393
394 }
395
396
397 if( XFPGA == 0 ) {
398 for(int itower=0;itower<384;itower++){
399 int icolumn = itower%12;
400 int irow = itower/12;
401
402
403 Xsaturation[irow][icolumn] = saturationData[itower];
404
405
406
407 int xF = etowerDataF[itower] + htowerDataF[itower];
408
409 int x = ( (etowerData[itower]>>2) + (htowerData[itower]>>2) );
410
411 ATH_MSG_DEBUG(
"sss1 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x <<
" " << etowerDataF[itower] <<
" " << htowerDataF[itower]);
412
415
416 ATH_MSG_DEBUG(
"sss2 " << icolumn <<
" " << irow <<
" " << xF <<
" " <<
x);
417
418 Xgt[irow][icolumn] =
x;
419 XgtF[irow][icolumn] = xF;
420
421 ATH_MSG_DEBUG(
"sss3 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
422
423
424 if ( icolumn == 0) {
425 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
427 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
428 ATH_MSG_DEBUG(
"sss4 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
429 }
430
431 if ( icolumn == 4) {
432
433 int ox = (ohtowerData[irow] >> 2 ) ;
435 Xgt[irow][icolumn] = Xgt[irow][icolumn] + ox ;
436 ATH_MSG_DEBUG(
"sss5 " << icolumn <<
" " << irow <<
" " << XgtF[irow][icolumn] <<
" " << Xgt[irow][icolumn]);
437 }
438
439 ATH_MSG_DEBUG(
"sss filling standard " << Xgt[irow][icolumn] <<
" fiber " << XgtF[irow][icolumn]);
440 }
441 }
442 else if ( XFPGA == 1 ) {
443 for(int itower=0;itower<384;itower++){
444 int icolumn = itower%12;
445 int irow = itower/12;
446
447
448 Xsaturation[irow][icolumn] = saturationData[itower];
449
450
451 int xF = etowerDataF[itower] + htowerDataF[itower] ;
452
453 int x = ( (etowerData[itower]>>2) + (htowerData[itower] >> 2) );
454
457
458 Xgt[irow][icolumn] =
x;
459 XgtF[irow][icolumn] = xF;
460
461
462 if ( icolumn == 11) {
463
464 int xx = ( (xetowerData[irow]>>2) + (xhtowerData[irow]>>2) );
466 Xgt[irow][icolumn] = Xgt[irow][icolumn] +
xx;
467 }
468 if ( icolumn == 7 ) {
469
470 int xo = ohtowerData[irow]>>2;
472 Xgt[irow][icolumn] = Xgt[irow][icolumn] + xo;
473 }
474 }
475 }
476 else if ( XFPGA == 2 ) {
477 for(int itower=0;itower<384;itower++){
478 int icolumn = itower%12;
479 int irow = itower/12;
480
481
482 Xsaturation[irow][icolumn] = saturationData[itower];
483
484
485 int xF = etowerDataF[itower] + htowerDataF[itower] ;
486
487 int x = ( (etowerData[itower]>>2 ) + (htowerData[itower]>>2));
490
491 Xgt[irow][icolumn] =
x;
492 XgtF[irow][icolumn] = xF;
493 }
494 }
495
496 return StatusCode::SUCCESS;
497}
#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