50 if (!inputTowers.isValid())
53 return StatusCode::FAILURE;
56 std::unique_ptr<xAOD::JGTowerContainer> outputTowers(shallowCopy.first);
57 std::unique_ptr<xAOD::ShallowAuxContainer> outputTowersAux(shallowCopy.second);
62 std::array<std::vector<const xAOD::JGTower *>, nFPGAs> fpgas;
64 std::array<TH1F, nFPGAs> fpgaHistograms;
65 std::vector<float> fpgaRhos(3, 0.0);
66 for (std::size_t i = 0; i < nFPGAs; ++i)
67 fpgaHistograms.at(i) = TH1F((
"hFPGA" + std::to_string(i)).c_str(),
"", 50, 0, 5000);
76 fpgas.at(
static_cast<std::size_t
>(fpga)).push_back(tower);
77 fpgaHistograms.at(
static_cast<std::size_t
>(fpga)).Fill(tower->et());
81 for (std::size_t i = 0; i < nFPGAs; ++i)
83 float threshold = 3 * fpgaHistograms.at(i).GetRMS();
84 const std::vector<const xAOD::JGTower *> &towers = fpgas.at(i);
89 float area = accArea(*tower);
90 float etSub = tower->et() -
area * rho;
92 outputTowers->at(tower->index())->setEt(etSub <
threshold ? 0 : etSub);
97 ATH_CHECK(outputHandle.record(std::move(outputTowers), std::move(outputTowersAux)));
100 auto rhoCont = std::make_unique<xAOD::EnergySumRoI>();
101 auto rhoContAux = std::make_unique<xAOD::EnergySumRoIAuxInfo>();
102 rhoCont->setStore(rhoContAux.get());
103 decRho(*rhoCont) = std::move(fpgaRhos);
105 ATH_CHECK(outputRhoHandle.record(std::move(rhoCont), std::move(rhoContAux)));
106 return StatusCode::SUCCESS;
std::pair< std::unique_ptr< T >, std::unique_ptr< ShallowAuxContainer > > shallowCopyContainer(const T &cont, const EventContext &ctx)
Function making a shallow copy of a constant container.