274 {
275
278 return StatusCode::SUCCESS;
279 }
280
281 SG::ReadHandle<xAOD::jFexMETRoIContainer> jXE_EDM(
m_jXE_EDMKey);
283
284 int global_ExTopo = 0;
285 int global_EyTopo = 0;
286 int central_ExTopo = 0;
287 int central_EyTopo = 0;
288
290
291
294 int jFexNumber = jFexRoI->jFexNumber();
295 int fpgaNumber = jFexRoI->fpgaNumber();
296
297 int hemisphere = fpgaNumber == 0 ? -1 : 1;
298
299 ExTopo = hemisphere * ExTopo;
300 EyTopo = hemisphere * EyTopo;
301
302 global_ExTopo += ExTopo;
303 global_EyTopo += EyTopo;
304
305
306 if( jFexNumber!=0 && jFexNumber!=5 ) {
307 central_ExTopo += ExTopo;
308 central_EyTopo += EyTopo;
309 }
310
312 << jFexNumber
313 << " FPGA Number: "
314 << fpgaNumber
315 << " Ex: "
316 << ExTopo
317 << " Ey: "
318 << EyTopo
319 );
320 }
321
322 long long global_ExTopoLong = static_cast<long long>(global_ExTopo);
323 long long global_EyTopoLong = static_cast<long long>(global_EyTopo);
324 long long central_ExTopoLong = static_cast<long long>(central_ExTopo);
325 long long central_EyTopoLong = static_cast<long long>(central_EyTopo);
326
327 unsigned long long Et2Topo = global_ExTopoLong*global_ExTopoLong + global_EyTopoLong*global_EyTopoLong;
328 unsigned long long EtTopo = std::sqrt( Et2Topo );
329 unsigned long long Et2Topo_central = central_ExTopoLong*central_ExTopoLong + central_EyTopoLong*central_EyTopoLong;
330 unsigned long long EtTopo_central = std::sqrt( Et2Topo_central );
331
332 TCS::jXETOB jxe( global_ExTopo, global_EyTopo, EtTopo,
TCS::JXE );
333 TCS::jXETOB jxec( central_ExTopo, central_EyTopo, EtTopo_central,
TCS::JXEC );
334
338 jxe.setEt2( Et2Topo );
342 jxec.setEt2( Et2Topo_central );
343
346 auto mon_h_jXE_Pt = Monitored::Scalar("jXETOBPt", jxe.EtDouble());
347 auto mon_h_jXE_Phi = Monitored::Scalar("jXETOBPhi", atan2(jxe.Ey(),jxe.Ex()));
348 auto mon_h_jXEC_Pt = Monitored::Scalar("jXECTOBPt", jxec.EtDouble());
349 auto mon_h_jXEC_Phi = Monitored::Scalar("jXECTOBPhi", atan2(jxec.Ey(),jxec.Ex()));
350 Monitored::Group(
m_monTool, mon_h_jXE_Pt, mon_h_jXE_Phi, mon_h_jXEC_Pt, mon_h_jXEC_Phi);
351
352
353
354
356 ATH_MSG_DEBUG(
"gFex XE input disabled, skip filling combined XE");
357 return StatusCode::SUCCESS;
358 }
360 if (! gXEJWOJ_EDM.isValid() ) {
361
362 ATH_MSG_DEBUG(
"gFex input is not available, skip filling cXE");
363 return StatusCode::SUCCESS;
364 }
365
366
367
368
369 long long gXE_ExTopoLong{0};
370 long long gXE_EyTopoLong{0};
371
373
374 auto globalType = gFexRoI->globalType();
375 if ( globalType != 2 ) { continue; }
376
378 << gFexRoI->globalType()
379 << " Ex: "
380 << gFexRoI->METquantityOne()
381 << " Ey: "
382 << gFexRoI->METquantityTwo()
383 );
384
387
388 gXE_ExTopoLong = static_cast<unsigned long long>(ExTopo);
389 gXE_EyTopoLong = static_cast<unsigned long long>(EyTopo);
390
391 break;
392 }
393
394
395
396 unsigned jWeight = 0.55 *
pow(2,8);
397 unsigned gWeight = 0.45 *
pow(2,8);
398 long long cXE_x = (jWeight * global_ExTopoLong + gWeight * gXE_ExTopoLong) >> 8;
399 long long cXE_y = (jWeight * global_EyTopoLong + gWeight * gXE_EyTopoLong) >> 8;
400
401 unsigned long long cXE_mag2 = cXE_x*cXE_x + cXE_y*cXE_y;
402 unsigned long long cXE_mag = std::sqrt( cXE_mag2 );
403
404 TCS::jXETOB cxe_tob( cXE_x, cXE_y, cXE_mag,
TCS::CXE );
405 inputEvent.
setcXE( cxe_tob );
406
407
408
409 return StatusCode::SUCCESS;
410}
constexpr int pow(int base, int exp) noexcept
gFexGlobalRoI_v1 gFexGlobalRoI
Define the latest version of the eFexEMRoI class.
jFexMETRoI_v1 jFexMETRoI
Define the latest version of the jFexMETRoI class.