40 declareInterface<IeFEXSysSim>(
this);
73 return StatusCode::SUCCESS;
80 return StatusCode::SUCCESS;
102 if(!this_eTowerContainer.
isValid()){
104 return StatusCode::FAILURE;
114 int tmp_eTowersIDs_subset_eFEX[10][18];
115 for (
int i_efex{ 0 }; i_efex < 24; i_efex++) {
151 int emecEta = 24;
int emecPhi = 1;
int emecMod = 500000;
152 int initialEMEC =
calcTowerID(emecEta,emecPhi,emecMod);
153 int transEta = 14;
int transPhi = 1;
int transMod = 300000;
154 int initialTRANS =
calcTowerID(transEta,transPhi,transMod);
155 int embEta = 13;
int embPhi = 1;
int embMod = 100000;
156 int initialEMB =
calcTowerID(embEta,embPhi,embMod);
159 for (
int thisEFEX=eFEXa; thisEFEX<=21; thisEFEX+=3){
161 if(fexcounter > 0){ initialEMEC += 8; initialTRANS += 8; initialEMB += 8; }
164 std::map<int,eTower> tmp_eTowersColl_subset;
167 int tmp_eTowersIDs_subset [10][18];
169 int rows =
sizeof tmp_eTowersIDs_subset /
sizeof tmp_eTowersIDs_subset[0];
170 int cols =
sizeof tmp_eTowersIDs_subset[0] /
sizeof tmp_eTowersIDs_subset[0][0];
173 for(
int thisCol=0; thisCol<10; thisCol++){
174 for(
int thisRow=0; thisRow<
rows; thisRow++){
176 int towerid = initialEMEC - (thisCol * 64) + thisRow;
178 if( (thisEFEX == 21) && (thisRow >= 7)){ towerid -= 64; };
180 tmp_eTowersIDs_subset[thisRow][thisCol] = towerid;
181 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
187 for(
int thisRow = 0; thisRow <
rows; thisRow++){
189 int towerid = initialTRANS + thisRow;
191 if( (thisEFEX == 21) && (thisRow >= 7)){ towerid -= 64; };
193 tmp_eTowersIDs_subset[thisRow][10] = towerid;
194 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
199 for(
int thisCol = 11; thisCol <
cols; thisCol++){
200 for(
int thisRow=0; thisRow<
rows; thisRow++){
202 int towerid = initialEMB - ( (thisCol-11) * 64) + thisRow;
204 if( (thisEFEX == 21) && (thisRow >= 7)){ towerid -= 64; };
206 tmp_eTowersIDs_subset[thisRow][thisCol] = towerid;
207 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
215 for (
int thisRow=
rows-1; thisRow>=0; thisRow--){
216 for (
int thisCol=0; thisCol<
cols; thisCol++){
217 int tmptowerid = tmp_eTowersIDs_subset[thisRow][thisCol];
218 const float tmptowereta = this_eTowerContainer->
findTower(tmptowerid)->
eta();
219 const float tmptowerphi = this_eTowerContainer->
findTower(tmptowerid)->
phi();
220 if(thisCol !=
cols-1){
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowerphi <<
"][" << tmptowereta <<
"]) "); }
221 else {
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowereta <<
"][" << tmptowerphi <<
"]) |"); }
240 int embnegEta = 8;
int embnegPhi = 1;
int embnegMod = 100000;
241 int initialEMB_neg =
calcTowerID(embnegEta,embnegPhi,embnegMod);
242 int embposEta = 0;
int embposPhi = 1;
int embposMod = 200000;
243 int initialEMB_pos =
calcTowerID(embposEta,embposPhi,embposMod);
246 for (
int thisEFEX=eFEXb; thisEFEX<=22; thisEFEX+=3){
248 if(fexcounter > 0){ initialEMB_neg += 8; initialEMB_pos += 8; }
251 std::map<int,eTower> tmp_eTowersColl_subset;
254 int tmp_eTowersIDs_subset [10][18];
256 int rows =
sizeof tmp_eTowersIDs_subset /
sizeof tmp_eTowersIDs_subset[0];
257 int cols =
sizeof tmp_eTowersIDs_subset[0] /
sizeof tmp_eTowersIDs_subset[0][0];
260 for(
int thisCol = 0; thisCol <
cols; thisCol++){
261 for(
int thisRow=0; thisRow<
rows; thisRow++){
264 int tmp_initEMB = initialEMB_neg;
267 towerid = tmp_initEMB - ( (thisCol) * 64) + thisRow;
270 tmp_initEMB = initialEMB_pos;
271 towerid = tmp_initEMB + ( (thisCol-9) * 64) + thisRow;
274 if( (thisEFEX == 22) && (thisRow >= 7)){ towerid -= 64; };
276 tmp_eTowersIDs_subset[thisRow][thisCol] = towerid;
278 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
285 for (
int thisRow=
rows-1; thisRow>=0; thisRow--){
286 for (
int thisCol=0; thisCol<
cols; thisCol++){
287 int tmptowerid = tmp_eTowersIDs_subset[thisRow][thisCol];
288 const float tmptowereta = this_eTowerContainer->
findTower(tmptowerid)->
eta();
289 const float tmptowerphi = this_eTowerContainer->
findTower(tmptowerid)->
phi();
290 if(thisCol !=
cols-1){
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowereta <<
"][" << tmptowerphi <<
"]) "); }
291 else {
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowereta <<
"][" << tmptowerphi <<
"]) |"); }
311 emecEta = 15; emecPhi = 1; emecMod = 600000;
312 initialEMEC =
calcTowerID(emecEta,emecPhi,emecMod);
313 transEta = 14; transPhi = 1; transMod = 400000;
314 initialTRANS =
calcTowerID(transEta,transPhi,transMod);
315 embEta = 7; embPhi = 1; embMod = 200000;
319 for (
int thisEFEX=eFEXc; thisEFEX<=23; thisEFEX+=3){
321 if(fexcounter > 0){ initialEMEC += 8; initialTRANS += 8; initialEMB += 8; }
324 std::map<int,eTower> tmp_eTowersColl_subset;
327 int tmp_eTowersIDs_subset [10][18];
329 int rows =
sizeof tmp_eTowersIDs_subset /
sizeof tmp_eTowersIDs_subset[0];
330 int cols =
sizeof tmp_eTowersIDs_subset[0] /
sizeof tmp_eTowersIDs_subset[0][0];
333 for(
int thisCol = 0; thisCol < 7; thisCol++){
334 for(
int thisRow=0; thisRow<
rows; thisRow++){
335 int towerid = initialEMB + ( (thisCol) * 64) + thisRow;
337 if( (thisEFEX == 23) && (thisRow >= 7)){ towerid -= 64; };
339 tmp_eTowersIDs_subset[thisRow][thisCol] = towerid;
340 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
344 for(
int thisRow = 0; thisRow <
rows; thisRow++){
345 int towerid = initialTRANS + thisRow;
347 if( (thisEFEX == 23) && (thisRow >= 7)){ towerid -= 64; };
349 tmp_eTowersIDs_subset[thisRow][7] = towerid;
350 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
353 for(
int thisCol=8; thisCol<
cols; thisCol++){
354 for(
int thisRow=0; thisRow<
rows; thisRow++){
355 int towerid = initialEMEC + ( (thisCol-8) * 64) + thisRow;
357 if( (thisEFEX == 23) && (thisRow >= 7)){ towerid -= 64; };
359 tmp_eTowersIDs_subset[thisRow][thisCol] = towerid;
360 tmp_eTowersColl_subset.insert( std::map<int, eTower>::value_type(towerid, *(this_eTowerContainer->
findTower(towerid))));
367 for (
int thisRow=
rows-1; thisRow>=0; thisRow--){
368 for (
int thisCol=0; thisCol<
cols; thisCol++){
369 int tmptowerid = tmp_eTowersIDs_subset[thisRow][thisCol];
370 const float tmptowereta = this_eTowerContainer->
findTower(tmptowerid)->
eta();
371 const float tmptowerphi = this_eTowerContainer->
findTower(tmptowerid)->
phi();
372 if(thisCol !=
cols-1){
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowereta <<
"][" << tmptowerphi <<
"]) "); }
373 else {
ATH_MSG_DEBUG(
"| " << tmptowerid <<
"([" << tmptowereta <<
"][" << tmptowerphi <<
"]) |"); }
394 m_eContainer = std::make_unique<xAOD::eFexEMRoIContainer> ();
399 m_xeContainer = std::make_unique<xAOD::eFexEMRoIContainer> ();
405 for(
auto &tobObject : tobObjects){
413 std::vector<std::unique_ptr<eFEXegTOB>> emTOBs;
417 std::vector<std::unique_ptr<eFEXegTOB>> tobsSort = std::move(iter->second);
419 std::sort (tobsSort.begin(), tobsSort.end(), std::bind(
TOBetSort<std::unique_ptr<eFEXegTOB>>, std::placeholders::_1, std::placeholders::_2,
false));
421 if (tobsSort.size() > 6) tobsSort.resize(6);
423 for (
unsigned int t = 0;
t < tobsSort.size(); ++
t) emTOBs.push_back(std::move(tobsSort[
t]));
429 for(
auto &tobObject : emTOBs){
430 int efex = tobObject->geteFEXID();
439 ATH_MSG_DEBUG(
" write: " << outputeFexEMxTOBHandle.
key() <<
" = " <<
"..." );
456 if (!omitAltTauContainer) {
461 if (!omitAltTauContainer) {
471 return StatusCode::SUCCESS;
479 std::unique_ptr< xAOD::eFexTauRoIContainer > tauContainer;
480 std::unique_ptr< xAOD::eFexTauRoIAuxContainer > tauAuxContainer;
481 std::unique_ptr< xAOD::eFexTauRoIContainer > xtauContainer;
482 std::unique_ptr< xAOD::eFexTauRoIAuxContainer > xtauAuxContainer;
484 tauContainer = std::make_unique<xAOD::eFexTauRoIContainer> ();
485 tauAuxContainer = std::make_unique<xAOD::eFexTauRoIAuxContainer> ();
486 tauContainer->setStore(tauAuxContainer.get());
488 xtauContainer = std::make_unique<xAOD::eFexTauRoIContainer> ();
489 xtauAuxContainer = std::make_unique<xAOD::eFexTauRoIAuxContainer> ();
490 xtauContainer->setStore(xtauAuxContainer.get());
493 for(
auto const& [efex, tobObjects] : allTauTobObjects ){
494 for(
auto &tobObject: tobObjects ){
502 std::vector<std::unique_ptr<eFEXtauTOB>> tauTOBs;
504 auto iterTau = allTauTobObjects.begin();
505 while (iterTau != allTauTobObjects.end()) {
506 std::vector<std::unique_ptr<eFEXtauTOB>> tobsSort = std::move(iterTau->second);
508 std::sort (tobsSort.begin(), tobsSort.end(), std::bind(
TOBetSort<std::unique_ptr<eFEXtauTOB>>, std::placeholders::_1, std::placeholders::_2,
true));
510 if (tobsSort.size() > 6) tobsSort.resize(6);
512 for (
unsigned int t = 0;
t < tobsSort.size(); ++
t) tauTOBs.push_back(std::move(tobsSort[
t]));
518 for(
auto &tobObject : tauTOBs){
519 int efex = tobObject->geteFEXID();
528 ATH_MSG_DEBUG(
" write: " << outputeFexTauxTOBHandle.
key() <<
" = " <<
"..." );
529 ATH_CHECK(outputeFexTauxTOBHandle.
record(std::move(xtauContainer), std::move(xtauAuxContainer)));
533 ATH_CHECK(outputeFexTauHandle.
record(std::move(tauContainer), std::move(tauAuxContainer)));
535 return StatusCode::SUCCESS;