50 if (!inputTowers.isValid())
53 return StatusCode::FAILURE;
60 std::array<std::vector<const xAOD::JGTower *>, nFPGAs> fpgas;
62 std::array<TH1F, nFPGAs> fpgaHistograms;
63 std::vector<float> fpgaRhos(3, 0.0);
64 for (std::size_t i = 0; i < nFPGAs; ++i)
65 fpgaHistograms.at(i) = TH1F((
"hFPGA" + std::to_string(i)).c_str(),
"", 50, 0, 5000);
74 fpgas.at(
static_cast<std::size_t
>(fpga)).push_back(tower);
75 fpgaHistograms.at(
static_cast<std::size_t
>(fpga)).Fill(tower->et());
79 for (std::size_t i = 0; i < nFPGAs; ++i)
81 float threshold = 3 * fpgaHistograms.at(i).GetRMS();
82 const std::vector<const xAOD::JGTower *> &towers = fpgas.at(i);
87 float area = accArea(*tower);
88 float etSub = tower->et() -
area * rho;
90 outputTowers->at(tower->index())->setEt(etSub <
threshold ? 0 : etSub);
95 ATH_CHECK(outputHandle.record(std::move(outputTowers), std::move(outputTowersAux)));
98 auto rhoCont = std::make_unique<xAOD::EnergySumRoI>();
99 auto rhoContAux = std::make_unique<xAOD::EnergySumRoIAuxInfo>();
100 rhoCont->setStore(rhoContAux.get());
101 decRho(*rhoCont) = std::move(fpgaRhos);
103 ATH_CHECK(outputRhoHandle.record(std::move(rhoCont), std::move(rhoContAux)));
104 return StatusCode::SUCCESS;