22 declareInterface<IjFEXPileupAndNoise>(
this);
31 ATH_CHECK(m_jTowerContainerKey.initialize());
35 return StatusCode::SUCCESS;
42 if(! m_jTowerContainer.isValid()) {
43 ATH_MSG_ERROR(
"Could not retrieve jTowerContainer " << m_jTowerContainerKey.key());
44 return StatusCode::FAILURE;
47 return StatusCode::SUCCESS;
53 m_apply_pileup2jets=0;
60 return StatusCode::SUCCESS;
83 ATH_MSG_DEBUG(
"---------------- jFEXPileupAndNoise::setup ----------------");
93 ATH_MSG_DEBUG(
"---------------- jFEXPileupAndNoise::setup ----------------");
110 for(
int ieta=0;ieta<m_etaMAX;ieta++){
115 TTID = m_FPGA_forward[iphi][ieta];
118 TTID = m_FPGA_central[iphi][ieta];
125 const LVL1::jTower *tmpTower = m_jTowerContainer->findTower(TTID);
127 int tmp_eta = getTTowerEta(tmpTower);
130 int em_granularity = 25;
131 int had_granularity = tmp_eta < 15 ? 500 : 25;
133 int tmp_energy_EM = getET_EM(tmpTower)/em_granularity;
134 int tmp_energy_HAD = getET_HAD(tmpTower)/had_granularity;
135 int tmp_EM_AreaINV = getTTAreaINV_EM(tmpTower);
136 int tmp_HD_AreaINV = getTTAreaINV_HAD(tmpTower);
137 m_FPGA_ET_EM[TTID] = getET_EM(tmpTower);
138 m_FPGA_ET_HAD[TTID] = getET_HAD(tmpTower);
148 if(tmp_energy_EM > myDBTool->get_PUThrLowEm() and tmp_energy_EM < myDBTool->get_PUThrHighEm()) {
149 m_rho_EM += tmp_energy_EM;
156 if(tmp_energy_HAD > myDBTool->get_PUThrLowHadTrex() and tmp_energy_HAD < myDBTool->get_PUThrHighHadTrex()){
157 m_rho_HAD1 += tmp_energy_HAD;
162 else if(tmp_eta < 16 ){
163 if(tmp_energy_HAD > myDBTool->get_PUThrLowHadHecOverlap() and tmp_energy_HAD < myDBTool->get_PUThrHighHadHecOverlap()){
164 m_rho_HAD2 += tmp_energy_HAD;
169 else if(tmp_eta < 32 ){
170 if(tmp_energy_HAD > myDBTool->get_PUThrLowHadLar() and tmp_energy_HAD < myDBTool->get_PUThrHighHadLar()){
171 m_rho_HAD3 += tmp_energy_HAD;
176 else if(tmp_eta >= 32){
180 if(tmp_energy_HAD > myDBTool->get_PUThrLowFcal() and tmp_energy_HAD < myDBTool->get_PUThrHighFcal()){
181 m_rho_FCAL += tmp_energy_HAD;
187 if(tmp_energy_EM > myDBTool->get_PUThrLowFcal() and tmp_energy_EM < myDBTool->get_PUThrHighFcal()){
188 m_rho_FCAL += tmp_energy_EM;
206 std::vector<int> rho_values {m_rho_EM*25,m_rho_HAD1*500,m_rho_HAD2*25,m_rho_HAD3*25,m_rho_FCAL*25};
223 for(
int ieta=0; ieta<m_etaMAX; ieta++) {
228 TTID = m_FPGA_forward[iphi][ieta];
231 TTID = m_FPGA_central[iphi][ieta];
234 if(TTID == 0)
continue;
236 const LVL1::jTower *tmpTower = m_jTowerContainer->findTower(TTID);
237 int tmp_eta = getTTowerEta(tmpTower);
238 int tmp_EM_Area = getTTArea_EM(tmpTower);
239 int tmp_HD_Area = getTTArea_HAD(tmpTower);
248 else if(tmp_eta < 16 ) {
251 else if(tmp_eta < 32 ) {
254 else if(tmp_eta >= 32) {
274 return StatusCode::FAILURE;
277 m_apply_pileup2jets = myDBTool->get_doPileUpJet();
278 m_apply_pileup2met = myDBTool->get_doPileUpMet();
280 return StatusCode::SUCCESS;
284 m_apply_noise2jets =
b;
288 m_apply_noise2met =
b;
296 m_map_Etvalues_EM.clear();
300 for(
int ieta=0; ieta<m_etaMAX; ieta++) {
305 TTID = m_FPGA_forward[iphi][ieta];
308 TTID = m_FPGA_central[iphi][ieta];
311 if(TTID == 0)
continue;
312 const LVL1::jTower *tmpTower = m_jTowerContainer->findTower(TTID);
315 std::vector<int> v_energies;
317 v_energies.resize(2,0);
320 int tmp_TotalEt_jet=getET_EM(tmpTower);
321 int tmp_TotalEt_met=getET_EM(tmpTower);
324 if(m_apply_pileup2jets){
325 tmp_TotalEt_jet = m_FPGA_ET_EM[TTID];
329 if(m_apply_pileup2met){
330 tmp_TotalEt_met = m_FPGA_ET_EM[TTID];
333 v_energies[0]=tmp_TotalEt_jet;
334 v_energies[1]=tmp_TotalEt_met;
336 m_map_Etvalues_EM.insert(std::make_pair(TTID, v_energies));
340 if(m_apply_noise2jets || m_apply_noise2met) ApplyNoiseCuts(m_map_Etvalues_EM,0);
342 return m_map_Etvalues_EM;
348 m_map_Etvalues_HAD.clear();
352 for(
int ieta=0; ieta<m_etaMAX; ieta++) {
357 TTID = m_FPGA_forward[iphi][ieta];
360 TTID = m_FPGA_central[iphi][ieta];
363 if(TTID == 0)
continue;
364 const LVL1::jTower *tmpTower = m_jTowerContainer->findTower(TTID);
367 std::vector<int> v_energies;
369 v_energies.resize(2,0);
372 int tmp_TotalEt_jet=getET_HAD(tmpTower);
373 int tmp_TotalEt_met=getET_HAD(tmpTower);
376 if(m_apply_pileup2jets){
377 tmp_TotalEt_jet = m_FPGA_ET_HAD[TTID];
381 if(m_apply_pileup2met){
382 tmp_TotalEt_met = m_FPGA_ET_HAD[TTID];
385 v_energies[0]=tmp_TotalEt_jet;
386 v_energies[1]=tmp_TotalEt_met;
388 m_map_Etvalues_HAD.insert(std::make_pair(TTID, v_energies));
392 if(m_apply_noise2jets || m_apply_noise2met) ApplyNoiseCuts(m_map_Etvalues_HAD,1);
394 return m_map_Etvalues_HAD;
401 for(
auto [
key,
vec] : map_Etvalues){
403 tmpTower = m_jTowerContainer->findTower(
key);
407 if(m_apply_noise2jets && map_Etvalues[
key][0]<=Jet_NoiseCut){
408 map_Etvalues[
key][0]=0.;
410 if(m_apply_noise2met && map_Etvalues[
key][1]<=Met_NoiseCut){
411 map_Etvalues[
key][1]=0.;
421 std::unordered_map<int,std::vector<int> > map_Etvalues;
422 map_Etvalues.clear();
430 std::vector<int> Et_energy;
432 for(
auto [
key,
vec] : m_map_Etvalues_EM){
435 Et_energy.resize(2,0);
437 Et_energy[0]=m_map_Etvalues_EM[
key][0]+m_map_Etvalues_HAD[
key][0];
438 Et_energy[1]=m_map_Etvalues_EM[
key][1]+m_map_Etvalues_HAD[
key][1];
439 map_Etvalues[
key] = Et_energy;
447 return tmpTower->
iEta() < 0 ? std::abs(tmpTower->
iEta()+1) : tmpTower->
iEta() ;