44 if (!towers.isValid())
47 return StatusCode::FAILURE;
50 auto outputGBlocks = std::make_unique<xAOD::GBlockContainer>();
51 auto outputGBlocksAux = std::make_unique<xAOD::GBlockAuxContainer>();
52 outputGBlocks->setStore(outputGBlocksAux.get());
58 float dEta = seedTower->deta();
59 float dPhi = seedTower->dphi();
61 std::vector<const xAOD::JGTower *> inputs{seedTower};
65 const xAOD::JGTower *nextPhiTower = towers->at(accNextPhiIndex(*seedTower));
66 dPhi += nextPhiTower->
dphi();
67 const xAOD::JGTower *previousPhiTower = towers->at(accPreviousPhiIndex(*seedTower));
68 dPhi += previousPhiTower->
dphi();
69 inputs.push_back(towers->at(accNextPhiIndex(*seedTower)));
70 inputs.push_back(towers->at(accPreviousPhiIndex(*seedTower)));
71 std::size_t nextEtaIndex = accNextEtaIndex(*seedTower);
72 if (nextEtaIndex != SIZE_MAX)
75 dEta += nextTower->
deta();
78 inputs.push_back(nextTower);
79 inputs.push_back(towers->at(accNextPhiIndex(*nextTower)));
80 inputs.push_back(towers->at(accPreviousPhiIndex(*nextTower)));
83 std::size_t previousEtaIndex = accPreviousEtaIndex(*seedTower);
84 if (previousEtaIndex != SIZE_MAX)
86 const xAOD::JGTower *previousTower = towers->at(previousEtaIndex);
87 dEta += previousTower->
deta();
90 inputs.push_back(previousTower);
91 inputs.push_back(towers->at(accNextPhiIndex(*previousTower)));
92 inputs.push_back(towers->at(accPreviousPhiIndex(*previousTower)));
96 std::vector<ElementLink<xAOD::JGTowerContainer>> links;
100 area += accArea(*tower);
101 links.emplace_back(
m_towersKey.key(), tower->index());
104 outputGBlocks->push_back(block);
105 block->
setEta(seedTower->eta());
106 block->
setPhi(seedTower->phi());
116 ATH_CHECK(gBlockHandle.record(std::move(outputGBlocks), std::move(outputGBlocksAux)));
117 return StatusCode::SUCCESS;