18 const IInterface*
p) :
30 if (fullLUTFileName.empty() ) {
32 return StatusCode::FAILURE;
35 TFile* lutFile = TFile::Open(fullLUTFileName.c_str() );
36 if (lutFile->IsZombie() )
return StatusCode::FAILURE;
39 lutFile->GetObject(
"LUT", lutFromFile);
42 return StatusCode::FAILURE;
45 m_LUT.reset(
dynamic_cast<TH2*
>(lutFromFile->Clone() ) );
46 m_LUT->SetDirectory(0);
48 return StatusCode::SUCCESS;
55 if (evtStore()->contains<xAOD::EnergySumRoI>(
m_outputName.key()) )
return StatusCode::SUCCESS;
58 if (!originalL1.isValid()){
60 return StatusCode::FAILURE;
64 if (!originalL1.isValid()){
66 return StatusCode::FAILURE;
70 if (!originalL1.isValid()){
72 return StatusCode::FAILURE;
74 ATH_CHECK(l1_kf.record(std::make_unique<xAOD::EnergySumRoI>(), std::make_unique<xAOD::EnergySumRoIAuxInfo>()));
81 float KFMETx = l1_kf->exMiss();
82 float KFMETy = l1_kf->eyMiss();
83 float KFSumEt = l1_kf->energyT();
85 for (
const auto jet : *l1Jets) {
87 int ptBin =
m_LUT->GetYaxis()->FindBin( log2(
jet->et8x8() / 1000.) );
88 if (ptBin==0) ptBin=1;
89 float KFweight =
m_LUT->GetBinContent(
etaBin, ptBin);
90 float jetContribution =
jet->et8x8() * KFweight;
92 KFMETx -= jetContribution *
cos(
jet->phi() );
93 KFMETy -= jetContribution *
sin(
jet->phi() );
94 KFSumEt += jetContribution;
96 l1_kf->setEnergyX(-KFMETx);
97 l1_kf->setEnergyY(-KFMETy);
98 l1_kf->setEnergyT(KFSumEt);
101 return StatusCode::SUCCESS;