ATLAS Offline Software
Loading...
Searching...
No Matches
TrigMETMonitorAlgorithm.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
7#include <TVector3.h>
8#include <cmath>
9
10TrigMETMonitorAlgorithm::TrigMETMonitorAlgorithm( const std::string& name, ISvcLocator* pSvcLocator )
11 : AthMonitorAlgorithm(name,pSvcLocator)
12{
13}
14
15
17
18
20 ATH_CHECK( m_EventInfoKey.initialize() );
21 ATH_CHECK( m_offline_met_key.initialize() );
22 ATH_CHECK( m_hlt_electron_key.initialize() );
23 ATH_CHECK( m_hlt_muon_key.initialize() );
24 ATH_CHECK( m_topoclusters_key.initialize() );
25 ATH_CHECK( m_tracks_key.initialize() );
26 ATH_CHECK( m_vertex_key.initialize() );
27 ATH_CHECK( m_offline_vertex_key.initialize() );
29 ATH_CHECK( m_l1_jFexMet_key.initialize() );
30 ATH_CHECK( m_l1_jFexSumEt_key.initialize() );
31 ATH_CHECK( m_l1_gFexJwojScalar_key.initialize() );
35 ATH_CHECK( m_l1_gFexNCMETScalar_key.initialize() );
39 ATH_CHECK( m_hlt_cell_met_key.initialize() );
40 ATH_CHECK( m_hlt_mht_met_key.initialize() );
41 ATH_CHECK( m_hlt_tc_met_key.initialize() );
42 ATH_CHECK( m_hlt_tc_em_met_key.initialize() );
43 ATH_CHECK( m_hlt_tcpufit_met_key.initialize() );
45 ATH_CHECK( m_hlt_trkmht_met_key.initialize() );
46 ATH_CHECK( m_hlt_pfsum_met_key.initialize() );
47 ATH_CHECK( m_hlt_pfopufit_met_key.initialize() );
49 ATH_CHECK( m_hlt_cvfpufit_met_key.initialize() );
52 ATH_CHECK( m_hlt_met_nn_key.initialize() );
53 ATH_CHECK( m_hlt_pfsum_cssk_met_key.initialize() );
54 ATH_CHECK( m_hlt_pfsum_vssk_met_key.initialize() );
55
57}
58
59
60StatusCode TrigMETMonitorAlgorithm::fillHistograms( const EventContext& ctx ) const {
61 using namespace Monitored;
62
63
64 if(m_trigDecTool->ExperimentalAndExpertMethods().isHLTTruncated()){
65 ATH_MSG_WARNING("HLTResult truncated, skip trigger analysis");
66 return StatusCode::SUCCESS;
67 } // ATR-31454
68
69
70 // access event info container
72 if (! eventInfo.isValid() ){
73 ATH_MSG_DEBUG("Container "<< eventInfo << " does not exist");
74 }
75
76 // access lepton containers
78 if (! hlt_electron_cont.isValid() ) {
79 ATH_MSG_DEBUG("Container "<< m_hlt_electron_key << " does not exist");
80 }
81
83 if (! hlt_muon_cont.isValid() ) {
84 ATH_MSG_DEBUG("Container "<< m_hlt_muon_key << " does not exist");
85 }
86
87 // access topoclusters container
89 if (! hlt_topoclusters_cont.isValid() ) {
90 ATH_MSG_DEBUG("Container "<< m_topoclusters_key << " does not exist");
91 }
92
93 // access tracks container
95 if (! hlt_tracks_cont.isValid() ) {
96 ATH_MSG_DEBUG("Container "<< m_tracks_key << " does not exist");
97 }
98
99 // access vertex container
101 if (! hlt_vertex_cont.isValid() ) {
102 ATH_MSG_DEBUG("Container "<< m_vertex_key << " does not exist");
103 }
104
106 if (! offline_vertex_cont.isValid() ) {
107 ATH_MSG_DEBUG("Container "<< m_offline_vertex_key << " does not exist");
108 }
109
110 // access offline met containers
112 if (! offline_met_cont.isValid() ) {
113 ATH_MSG_DEBUG("Container "<< m_offline_met_key << " does not exist");
114 }
115
116 // access L1 met containers
117 std::optional<SG::ReadHandle<xAOD::EnergySumRoI>> l1_roi_cont_rh;
118 const xAOD::EnergySumRoI* l1_roi_cont = nullptr;
119 if (!m_lvl1_roi_key.empty()) {
120 l1_roi_cont_rh.emplace(m_lvl1_roi_key, ctx);
121 if (l1_roi_cont_rh->isValid()) l1_roi_cont = l1_roi_cont_rh->cptr();
122 }
123
124 // access L1 Fex met containers
126 if (! l1_jFexMet_cont.isValid() ) {
127 ATH_MSG_DEBUG("Container "<< m_l1_jFexMet_key << " does not exist");
128 }
130 if (! l1_jFexSumEt_cont.isValid() ) {
131 ATH_MSG_DEBUG("Container "<< m_l1_jFexSumEt_key << " does not exist");
132 }
134 if (! l1_gFexJwojScalar_cont.isValid() ) {
135 ATH_MSG_DEBUG("Container "<< m_l1_gFexJwojScalar_key << " does not exist");
136 }
138 if (! l1_gFexJwojMETComponents_cont.isValid() ) {
139 ATH_MSG_DEBUG("Container "<< m_l1_gFexJwojMETComponents_key << " does not exist");
140 }
142 if (! l1_gFexJwojMHTComponents_cont.isValid() ) {
143 ATH_MSG_DEBUG("Container "<< m_l1_gFexJwojMHTComponents_key << " does not exist");
144 }
146 if (! l1_gFexJwojMSTComponents_cont.isValid() ) {
147 ATH_MSG_DEBUG("Container "<< m_l1_gFexJwojMSTComponents_key << " does not exist");
148 }
150 if (! l1_gFexNCMETScalar_cont.isValid() ) {
151 ATH_MSG_DEBUG("Container "<< m_l1_gFexNCMETScalar_key << " does not exist");
152 }
154 if (! l1_gFexNCMETComponents_cont.isValid() ) {
155 ATH_MSG_DEBUG("Container "<< m_l1_gFexNCMETComponents_key << " does not exist");
156 }
158 if (! l1_gFexRhoMETScalar_cont.isValid() ) {
159 ATH_MSG_DEBUG("Container "<< m_l1_gFexRhoMETScalar_key << " does not exist");
160 }
162 if (! l1_gFexRhoMETComponents_cont.isValid() ) {
163 ATH_MSG_DEBUG("Container "<< m_l1_gFexRhoMETComponents_key << " does not exist");
164 }
165
166 // access HLT met containers
168 if (! hlt_cell_met_cont.isValid() ) {
169 ATH_MSG_DEBUG("Container "<< m_hlt_cell_met_key << " does not exist");
170 }
171
173 if (! hlt_mht_met_cont.isValid() ) {
174 ATH_MSG_DEBUG("Container "<< m_hlt_mht_met_key << " does not exist");
175 }
176
178 if (! hlt_tc_met_cont.isValid() ) {
179 ATH_MSG_DEBUG("Container "<< m_hlt_tc_met_key << " does not exist");
180 }
181
183 if (! hlt_tc_em_met_cont.isValid() ) {
184 ATH_MSG_DEBUG("Container "<< m_hlt_tc_em_met_key << " does not exist");
185 }
186
188 if (! hlt_tcpufit_met_cont.isValid() ) {
189 ATH_MSG_DEBUG("Container "<< m_hlt_tcpufit_met_key << " does not exist");
190 }
191
193 if (! hlt_tcpufit_sig30_met_cont.isValid() ) {
194 ATH_MSG_DEBUG("Container "<< m_hlt_tcpufit_sig30_met_key << " does not exist");
195 }
196
198 if (! hlt_trkmht_met_cont.isValid() ) {
199 ATH_MSG_DEBUG("Container "<< m_hlt_trkmht_met_key << " does not exist");
200 }
201
203 if (! hlt_pfsum_met_cont.isValid() ) {
204 ATH_MSG_DEBUG("Container "<< m_hlt_pfsum_met_key << " does not exist");
205 }
206
208 if (! hlt_pfsum_cssk_met_cont.isValid() ) {
209 ATH_MSG_DEBUG("Container "<< m_hlt_pfsum_cssk_met_key << " does not exist");
210 }
211
213 if (! hlt_pfsum_vssk_met_cont.isValid() ) {
214 ATH_MSG_DEBUG("Container "<< m_hlt_pfsum_vssk_met_key << " does not exist");
215 }
216
218 if (! hlt_pfopufit_met_cont.isValid() ) {
219 ATH_MSG_DEBUG("Container "<< m_hlt_pfopufit_met_key << " does not exist");
220 }
221
223 if (! hlt_pfopufit_sig30_met_cont.isValid() ) {
224 ATH_MSG_DEBUG("Container "<< m_hlt_pfopufit_sig30_met_key << " does not exist");
225 }
226
228 if (! hlt_cvfpufit_met_cont.isValid() ) {
229 ATH_MSG_DEBUG("Container "<< m_hlt_cvfpufit_met_key << " does not exist");
230 }
231
233 if (! hlt_mhtpufit_pf_met_cont.isValid() ) {
234 ATH_MSG_DEBUG("Container "<< m_hlt_mhtpufit_pf_met_key << " does not exist");
235 }
236
238 if (! hlt_mhtpufit_em_met_cont.isValid() ) {
239 ATH_MSG_DEBUG("Container "<< m_hlt_mhtpufit_em_met_key << " does not exist");
240 }
241
243 if (! hlt_met_nn_cont.isValid() ) {
244 ATH_MSG_DEBUG("Container "<< m_hlt_met_nn_key << " does not exist");
245 }
246
247 // define variables
248 auto act_IPBC = Monitored::Scalar<float>("act_IPBC",0.0);
249 auto hlt_el_mult = Monitored::Scalar<int>("hlt_el_mult",0.0);
250 auto hlt_el_pt = Monitored::Scalar<float>("hlt_el_pt",0.0);
251 auto hlt_mu_mult = Monitored::Scalar<int>("hlt_mu_mult",0.0);
252 auto hlt_mu_pt = Monitored::Scalar<float>("hlt_mu_pt",0.0);
253
254 auto hlt_topoclusters_mult = Monitored::Scalar<int>("hlt_topoclusters_mult",0.0);
255 auto hlt_topoclusters_pt = Monitored::Scalar<float>("hlt_topoclusters_pt",0.0);
256 auto hlt_tracks_mult = Monitored::Scalar<int>("hlt_tracks_mult",0.0);
257 auto hlt_tracks_pt = Monitored::Scalar<float>("hlt_tracks_pt",0.0);
258 auto hlt_tracks_phi = Monitored::Scalar<float>("hlt_tracks_phi",0.0);
259 auto hlt_tracks_eta = Monitored::Scalar<float>("hlt_tracks_eta",0.0);
260 auto hlt_tracks_leading_pt = Monitored::Scalar<float>("hlt_tracks_leading_pt",0.0);
261 auto hlt_tracks_vec_sumPt = Monitored::Scalar<float>("hlt_tracks_vec_sumPt",0.0);
262 auto hlt_tracks_sca_sumPt = Monitored::Scalar<float>("hlt_tracks_sca_sumPt",0.0);
263 auto hlt_vertex_mult = Monitored::Scalar<int>("hlt_vertex_mult",0.0);
264 auto hlt_vertex_mult_mu = Monitored::Scalar<int>("hlt_vertex_mult_mu",0.0);
265 auto hlt_vertex_z = Monitored::Scalar<float>("hlt_vertex_z",0.0);
266 auto hlt_vertex_z_diff = Monitored::Scalar<float>("hlt_vertex_z_diff",0.0);
267
268 auto offline_Ex = Monitored::Scalar<float>("offline_Ex",0.0);
269 auto offline_Ey = Monitored::Scalar<float>("offline_Ey",0.0);
270 auto offline_Et = Monitored::Scalar<float>("offline_Et",0.0);
271 auto offline_sumEt = Monitored::Scalar<float>("offline_sumEt",0.0);
272 auto offline_Et_eff = Monitored::Scalar<float>("offline_Et_eff",0.0);
273 auto offline_NoMu_Ex = Monitored::Scalar<float>("offline_NoMu_Ex",0.0);
274 auto offline_NoMu_Ey = Monitored::Scalar<float>("offline_NoMu_Ey",0.0);
275 auto offline_NoMu_Et = Monitored::Scalar<float>("offline_NoMu_Et",0.0);
276 auto offline_NoMu_sumEt = Monitored::Scalar<float>("offline_NoMu_sumEt",0.0);
277 auto offline_NoMu_Et_eff = Monitored::Scalar<float>("offline_NoMu_Et_eff",0.0);
278
279 auto HLT_MET_status = Monitored::Scalar<int>("HLT_MET_status",0.0);
280 auto MET_status = Monitored::Scalar<float>("MET_status",0.0);
281 auto HLT_MET_component = Monitored::Scalar<int>("HLT_MET_component",0.0);
282 auto component_Et = Monitored::Scalar<float>("component_Et",0.0);
283 auto component = Monitored::Scalar<int>("component",0.0);
284 auto component_status = Monitored::Scalar<int>("component_status",0.0);
285 auto component_status_weight = Monitored::Scalar<int>("component_status_weight",0.0);
286
287 // constant floor for log plots
288 double epsilon = 1.189;
289
290 // for histogram filling
291 // Fill. First argument is the tool (GMT) name as defined in the py file,
292 // all others are the variables to be saved.
293 auto tool = getGroup("TrigMETMonitor");
294
295 // access pileup <mu>
296 act_IPBC = eventInfo->actualInteractionsPerCrossing();
297
298 // access lepton values
299 // access events with electron passing primary single electron chain
300 bool passedPrimaryEl = false;
301 for (const std::string& chain : m_hltChainEl){
302 if(getTrigDecisionTool()->isPassed(chain)){
303 passedPrimaryEl = true;
304 break;
305 }
306 }
307 if ( hlt_electron_cont.isValid() && passedPrimaryEl ){
308 hlt_el_mult = hlt_electron_cont->size();
309 fill(tool,hlt_el_mult);
310 if( hlt_electron_cont->size() > 0 ) {
311 for (auto Electron: *hlt_electron_cont) {
312 hlt_el_pt = Electron->pt()/Gaudi::Units::GeV;
313 fill(tool, hlt_el_pt);
314 }
315 }
316 }
317
318 // access events with muon passing primary single muon chain
319 bool passedPrimaryMu = false;
320 for (const std::string& chain : m_hltChainMu){
321 if(getTrigDecisionTool()->isPassed(chain)){
322 passedPrimaryMu = true;
323 break;
324 }
325 }
326 if( hlt_muon_cont.isValid() &&passedPrimaryMu ){
327 hlt_mu_mult = hlt_muon_cont->size();
328 fill(tool,hlt_mu_mult);
329 if ( hlt_muon_cont->size() > 0 ){
330 for(auto Muon : *hlt_muon_cont){
331 hlt_mu_pt = Muon->pt()/Gaudi::Units::GeV;
332 fill(tool, hlt_mu_pt);
333 }
334 }
335 }
336
337 // access topoclusters container
338 if(hlt_topoclusters_cont.isValid() && hlt_topoclusters_cont->size() > 0){
339 hlt_topoclusters_mult = hlt_topoclusters_cont->size();
340 for(auto topoclusters : *hlt_topoclusters_cont){
341 hlt_topoclusters_pt = topoclusters->pt()/Gaudi::Units::GeV;
342 if(hlt_topoclusters_pt > 0){
343 fill(tool, hlt_topoclusters_pt);
344 }
345 }
346
347 if(hlt_topoclusters_mult > 0){
348 fill(tool, hlt_topoclusters_mult);
349 }
350 }
351
352 // access tracks container
353 if( hlt_tracks_cont.isValid() && hlt_tracks_cont->size() > 0){
354 hlt_tracks_mult = hlt_tracks_cont->size();
355 float scalarSumPt = 0.0;
356 float scalarSumPx = 0.0;
357 float scalarSumPy = 0.0;
358 for(auto tracks : *hlt_tracks_cont){
359 float i_track_pt = tracks->pt()/Gaudi::Units::GeV;
360 hlt_tracks_pt = i_track_pt;
361 scalarSumPt += i_track_pt;
362 scalarSumPx += (tracks->p4().Px());
363 scalarSumPy += (tracks->p4().Py());
364
365 if(hlt_tracks_pt > hlt_tracks_leading_pt){
366 hlt_tracks_leading_pt = i_track_pt;
367 }
368
369 if(hlt_tracks_pt > 0){
370 fill(tool, hlt_tracks_pt);
371 }
372
373 if(hlt_tracks_pt > 3){
374 hlt_tracks_eta = (tracks->eta());
375 hlt_tracks_phi = (tracks->phi());
376 fill(tool, hlt_tracks_eta, hlt_tracks_phi);
377 }
378 }
379
380 hlt_tracks_vec_sumPt = std::sqrt(scalarSumPx*scalarSumPx + scalarSumPy*scalarSumPy)/Gaudi::Units::GeV;
381 hlt_tracks_sca_sumPt = scalarSumPt;
382
383 fill(tool, hlt_tracks_mult, hlt_tracks_leading_pt, hlt_tracks_vec_sumPt, hlt_tracks_sca_sumPt);
384 }
385
386 // access vertex container
387 if(hlt_vertex_cont.isValid() && hlt_vertex_cont->size() > 0){
388 hlt_vertex_mult = hlt_vertex_cont->size();
389 hlt_vertex_mult_mu = hlt_vertex_cont->size();
390 const xAOD::Vertex_v1* hlt_vertex = nullptr;
391 for(auto vertex : *hlt_vertex_cont){
392 if(vertex->vertexType() == xAOD::VxType::VertexType::PriVtx){
393 hlt_vertex = vertex;
394 break;
395 }
396 }
397
398 if(hlt_vertex){
399 hlt_vertex_z = hlt_vertex->z();
400 fill(tool, hlt_vertex_z);
401
402 if(offline_vertex_cont.isValid() && offline_vertex_cont->size() > 0){
403 const xAOD::Vertex_v1* offline_vertex = nullptr;
404 for(auto vertex : *offline_vertex_cont){
405 if(vertex->vertexType() == xAOD::VxType::VertexType::PriVtx){
406 offline_vertex = vertex;
407 break;
408 }
409 }
410
411 if(offline_vertex){
412 hlt_vertex_z_diff = hlt_vertex_z - offline_vertex->z();
413 fill(tool, hlt_vertex_z_diff);
414 }
415 }
416 }
417 }else{
418 hlt_vertex_mult = -1;
419 hlt_vertex_mult_mu = 1;
420 act_IPBC = -1.;
421 }
422 fill(tool, hlt_vertex_mult);
423 fill(tool, act_IPBC, hlt_vertex_mult_mu);
424
425 // access offline MET values
426 const xAOD::MissingET *finalTrkMET = 0;
427 const xAOD::MissingET *muonsMET = 0;
428 if ( offline_met_cont.isValid() && offline_met_cont->size() > 0 ) {
429 finalTrkMET = ((*offline_met_cont)["FinalTrk"]);
430 muonsMET = ((*offline_met_cont)["Muons"]);
431
432 if(finalTrkMET) {
433 offline_Ex = - finalTrkMET->mpx()/Gaudi::Units::GeV;
434 offline_Ey = - finalTrkMET->mpy()/Gaudi::Units::GeV;
435 offline_sumEt = finalTrkMET->sumet()/Gaudi::Units::GeV;
436 offline_Et = std::sqrt(offline_Ex*offline_Ex + offline_Ey*offline_Ey);
437 offline_Et_eff = std::sqrt(offline_Ex*offline_Ex + offline_Ey*offline_Ey);
438 fill(tool,offline_Ex,offline_Ey,offline_Et,offline_sumEt);
439
440 if(muonsMET){
441 xAOD::MissingET finalTrkNoMuMET = *finalTrkMET - *muonsMET;
442 offline_NoMu_Ex = - finalTrkNoMuMET.mpx()/Gaudi::Units::GeV;
443 offline_NoMu_Ey = - finalTrkNoMuMET.mpy()/Gaudi::Units::GeV;
444 offline_NoMu_sumEt = finalTrkNoMuMET.sumet()/Gaudi::Units::GeV;
445 offline_NoMu_Et = std::sqrt(offline_NoMu_Ex*offline_NoMu_Ex + offline_NoMu_Ey*offline_NoMu_Ey);
446 offline_NoMu_Et_eff = std::sqrt(offline_NoMu_Ex*offline_NoMu_Ex + offline_NoMu_Ey*offline_NoMu_Ey);
447 fill(tool,offline_NoMu_Ex,offline_NoMu_Ey,offline_NoMu_Et,offline_NoMu_sumEt);
448 }
449 }
450 }
451
452 // access L1 MET values
453 for (const std::string& alg : m_algsL1) {
454 if (alg == "roi" && l1_roi_cont != nullptr) {
455
456 if ((l1_roi_cont->energyX())>-9e12 && (l1_roi_cont->energyX())<9e12 && (l1_roi_cont->energyY())>-9e12 && (l1_roi_cont->energyY())<9e12) {
457 float L1_met_Ex = - l1_roi_cont->energyX()/Gaudi::Units::GeV;
458 float L1_met_Ey = - l1_roi_cont->energyY()/Gaudi::Units::GeV;
459 float L1_met_Et = std::sqrt(L1_met_Ex*L1_met_Ex + L1_met_Ey*L1_met_Ey);
460 float L1_met_sumEt = l1_roi_cont->energyT()/Gaudi::Units::GeV;
461 float L1_met_Ex_log = signed_log(L1_met_Ex, epsilon);
462 float L1_met_Ey_log = signed_log(L1_met_Ey, epsilon);
463 float L1_met_Et_log = signed_log(L1_met_Et, epsilon);
464 float L1_met_sumEt_log = signed_log(L1_met_sumEt, epsilon);
465 TVector3 v(L1_met_Ex, L1_met_Ey, 0.0);
466 float L1_met_phi = v.Phi();
467
468 auto L1_Ex = Monitored::Scalar<float>("L1_"+alg+"_Ex", static_cast<float>(L1_met_Ex));
469 auto L1_Ey = Monitored::Scalar<float>("L1_"+alg+"_Ey", static_cast<float>(L1_met_Ey));
470 auto L1_Et = Monitored::Scalar<float>("L1_"+alg+"_Et", static_cast<float>(L1_met_Et));
471 auto L1_sumEt = Monitored::Scalar<float>("L1_"+alg+"_sumEt", static_cast<float>(L1_met_sumEt));
472 auto L1_Ex_log = Monitored::Scalar<float>("L1_"+alg+"_Ex_log", static_cast<float>(L1_met_Ex_log));
473 auto L1_Ey_log = Monitored::Scalar<float>("L1_"+alg+"_Ey_log", static_cast<float>(L1_met_Ey_log));
474 auto L1_Et_log = Monitored::Scalar<float>("L1_"+alg+"_Et_log", static_cast<float>(L1_met_Et_log));
475 auto L1_sumEt_log = Monitored::Scalar<float>("L1_"+alg+"_sumEt_log", static_cast<float>(L1_met_sumEt_log));
476 auto L1_phi = Monitored::Scalar<float>("L1_"+alg+"_phi", static_cast<float>(L1_met_phi));
477 fill(tool, L1_Ex, L1_Ey, L1_Et, L1_sumEt,
478 L1_Ex_log, L1_Ey_log, L1_Et_log, L1_sumEt_log, L1_phi);
479 }
480 }
481 }
482
483 // access L1 jFex MET values
484 if (l1_jFexMet_cont.isValid() && l1_jFexMet_cont->size() > 0) {
485 float L1_met_Ex = 0;
486 float L1_met_Ey = 0;
487 for (const auto l1_jmet: *l1_jFexMet_cont) {
488 L1_met_Ex += l1_jmet->Ex()/Gaudi::Units::GeV;
489 L1_met_Ey += l1_jmet->Ey()/Gaudi::Units::GeV;
490 }
491 float L1_met_Et = std::sqrt(L1_met_Ex*L1_met_Ex + L1_met_Ey*L1_met_Ey);
492 float L1_met_Ex_log = signed_log(L1_met_Ex, epsilon);
493 float L1_met_Ey_log = signed_log(L1_met_Ey, epsilon);
494 float L1_met_Et_log = signed_log(L1_met_Et, epsilon);
495 TVector3 v(L1_met_Ex, L1_met_Ey, 0.0);
496 float L1_met_phi = v.Phi();
497 auto L1_Ex = Monitored::Scalar<float>("L1_jFex_Ex", static_cast<float>(L1_met_Ex));
498 auto L1_Ey = Monitored::Scalar<float>("L1_jFex_Ey", static_cast<float>(L1_met_Ey));
499 auto L1_Et = Monitored::Scalar<float>("L1_jFex_Et", static_cast<float>(L1_met_Et));
500 auto L1_Ex_log = Monitored::Scalar<float>("L1_jFex_Ex_log", static_cast<float>(L1_met_Ex_log));
501 auto L1_Ey_log = Monitored::Scalar<float>("L1_jFex_Ey_log", static_cast<float>(L1_met_Ey_log));
502 auto L1_Et_log = Monitored::Scalar<float>("L1_jFex_Et_log", static_cast<float>(L1_met_Et_log));
503 auto L1_phi = Monitored::Scalar<float>("L1_jFex_phi", static_cast<float>(L1_met_phi));
504 fill(tool, L1_Ex, L1_Ey, L1_Et, L1_Ex_log, L1_Ey_log, L1_Et_log, L1_phi);
505 }
506 if (l1_jFexSumEt_cont.isValid() && l1_jFexSumEt_cont->size() > 0) {
507 float L1_met_sumEt = 0;
508 for (const auto l1_jsumEt: *l1_jFexSumEt_cont) {
509 L1_met_sumEt += l1_jsumEt->Et_lower()/Gaudi::Units::GeV + l1_jsumEt->Et_upper()/Gaudi::Units::GeV;
510 }
511 float L1_met_sumEt_log = signed_log(L1_met_sumEt, epsilon);
512 auto L1_sumEt = Monitored::Scalar<float>("L1_jFex_sumEt", static_cast<float>(L1_met_sumEt));
513 auto L1_sumEt_log = Monitored::Scalar<float>("L1_jFex_sumEt_log", static_cast<float>(L1_met_sumEt_log));
514 fill(tool, L1_sumEt, L1_sumEt_log);
515 }
516
517 // define L1 gFex MET object
518 const xAOD::gFexGlobalRoI *l1_gmet;
519
520 // access L1 gFex MET values
521 // This will be properly implemented when it's ready
522 if (l1_gFexJwojScalar_cont.isValid() && l1_gFexJwojScalar_cont->size() > 0) {
523 l1_gmet = l1_gFexJwojScalar_cont->at(0);
524 float L1_met_Et = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
525 float L1_met_sumEt = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
526 float L1_met_Et_log = signed_log(L1_met_Et, epsilon);
527 float L1_met_sumEt_log = signed_log(L1_met_sumEt, epsilon);
528 auto L1_Et = Monitored::Scalar<float>("L1_gFexJwoj_Et", static_cast<float>(L1_met_Et));
529 auto L1_Et_log = Monitored::Scalar<float>("L1_gFexJwoj_Et_log", static_cast<float>(L1_met_Et_log));
530 auto L1_sumEt = Monitored::Scalar<float>("L1_gFexJwoj_sumEt", static_cast<float>(L1_met_sumEt));
531 auto L1_sumEt_log = Monitored::Scalar<float>("L1_gFexJwoj_sumEt_log", static_cast<float>(L1_met_sumEt_log));
532 fill(tool, L1_Et, L1_Et_log, L1_sumEt, L1_sumEt_log);
533 }
534
535 if (l1_gFexJwojMETComponents_cont.isValid() && l1_gFexJwojMETComponents_cont->size() > 0) {
536 l1_gmet = l1_gFexJwojMETComponents_cont->at(0);
537 float L1_met_Ex = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
538 float L1_met_Ex_log = signed_log(L1_met_Ex, epsilon);
539 float L1_met_Ey = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
540 float L1_met_Ey_log = signed_log(L1_met_Ey, epsilon);
541 TVector3 v(L1_met_Ex, L1_met_Ey, 0.0);
542 float L1_met_phi = v.Phi();
543 auto L1_Ex = Monitored::Scalar<float>("L1_gFexJwoj_Ex", static_cast<float>(L1_met_Ex));
544 auto L1_Ey = Monitored::Scalar<float>("L1_gFexJwoj_Ey", static_cast<float>(L1_met_Ey));
545 auto L1_Ex_log = Monitored::Scalar<float>("L1_gFexJwoj_Ex_log", static_cast<float>(L1_met_Ex_log));
546 auto L1_Ey_log = Monitored::Scalar<float>("L1_gFexJwoj_Ey_log", static_cast<float>(L1_met_Ey_log));
547 auto L1_phi = Monitored::Scalar<float>("L1_gFexJwoj_phi", static_cast<float>(L1_met_phi));
548 fill(tool, L1_Ex, L1_Ey, L1_Ex_log, L1_Ey_log, L1_phi);
549 }
550
551 if (l1_gFexJwojMHTComponents_cont.isValid() && l1_gFexJwojMHTComponents_cont->size() > 0) {
552 l1_gmet = l1_gFexJwojMHTComponents_cont->at(0);
553 float L1_met_HT_Ex = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
554 float L1_met_HT_Ex_log = signed_log(L1_met_HT_Ex, epsilon);
555 float L1_met_HT_Ey = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
556 float L1_met_HT_Ey_log = signed_log(L1_met_HT_Ey, epsilon);
557 TVector3 v(L1_met_HT_Ex, L1_met_HT_Ey, 0.0);
558 float L1_met_HT_phi = v.Phi();
559 auto L1_HT_Ex = Monitored::Scalar<float>("L1_gFexJwoj_HT_Ex", static_cast<float>(L1_met_HT_Ex));
560 auto L1_HT_Ey = Monitored::Scalar<float>("L1_gFexJwoj_HT_Ey", static_cast<float>(L1_met_HT_Ey));
561 auto L1_HT_Ex_log = Monitored::Scalar<float>("L1_gFexJwoj_HT_Ex_log", static_cast<float>(L1_met_HT_Ex_log));
562 auto L1_HT_Ey_log = Monitored::Scalar<float>("L1_gFexJwoj_HT_Ey_log", static_cast<float>(L1_met_HT_Ey_log));
563 auto L1_HT_phi = Monitored::Scalar<float>("L1_gFexJwoj_HT_phi", static_cast<float>(L1_met_HT_phi));
564 fill(tool, L1_HT_Ex, L1_HT_Ey, L1_HT_Ex_log, L1_HT_Ey_log, L1_HT_phi);
565 }
566
567 if (l1_gFexJwojMSTComponents_cont.isValid() && l1_gFexJwojMSTComponents_cont->size() > 0) {
568 l1_gmet = l1_gFexJwojMSTComponents_cont->at(0);
569 float L1_met_ST_Ex = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
570 float L1_met_ST_Ex_log = signed_log(L1_met_ST_Ex, epsilon);
571 float L1_met_ST_Ey = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
572 float L1_met_ST_Ey_log = signed_log(L1_met_ST_Ey, epsilon);
573 TVector3 v(L1_met_ST_Ex, L1_met_ST_Ey, 0.0);
574 float L1_met_ST_phi = v.Phi();
575 auto L1_ST_Ex = Monitored::Scalar<float>("L1_gFexJwoj_ST_Ex", static_cast<float>(L1_met_ST_Ex));
576 auto L1_ST_Ey = Monitored::Scalar<float>("L1_gFexJwoj_ST_Ey", static_cast<float>(L1_met_ST_Ey));
577 auto L1_ST_Ex_log = Monitored::Scalar<float>("L1_gFexJwoj_ST_Ex_log", static_cast<float>(L1_met_ST_Ex_log));
578 auto L1_ST_Ey_log = Monitored::Scalar<float>("L1_gFexJwoj_ST_Ey_log", static_cast<float>(L1_met_ST_Ey_log));
579 auto L1_ST_phi = Monitored::Scalar<float>("L1_gFexJwoj_ST_phi", static_cast<float>(L1_met_ST_phi));
580 fill(tool, L1_ST_Ex, L1_ST_Ey, L1_ST_Ex_log, L1_ST_Ey_log, L1_ST_phi);
581 }
582
583 if (l1_gFexNCMETScalar_cont.isValid() && l1_gFexNCMETScalar_cont->size() > 0) {
584 l1_gmet = l1_gFexNCMETScalar_cont->at(0);
585 float L1_met_Et = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
586 float L1_met_sumEt = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
587 float L1_met_Et_log = signed_log(L1_met_Et, epsilon);
588 float L1_met_sumEt_log = signed_log(L1_met_sumEt, epsilon);
589 auto L1_Et = Monitored::Scalar<float>("L1_gFexNC_Et", static_cast<float>(L1_met_Et));
590 auto L1_Et_log = Monitored::Scalar<float>("L1_gFexNC_Et_log", static_cast<float>(L1_met_Et_log));
591 auto L1_sumEt = Monitored::Scalar<float>("L1_gFexNC_sumEt", static_cast<float>(L1_met_sumEt));
592 auto L1_sumEt_log = Monitored::Scalar<float>("L1_gFexNC_sumEt_log", static_cast<float>(L1_met_sumEt_log));
593 fill(tool, L1_Et, L1_Et_log, L1_sumEt, L1_sumEt_log);
594 }
595
596 if (l1_gFexNCMETComponents_cont.isValid() && l1_gFexNCMETComponents_cont->size() > 0) {
597 l1_gmet = l1_gFexNCMETComponents_cont->at(0);
598 float L1_met_Ex = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
599 float L1_met_Ex_log = signed_log(L1_met_Ex, epsilon);
600 float L1_met_Ey = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
601 float L1_met_Ey_log = signed_log(L1_met_Ey, epsilon);
602 TVector3 v(L1_met_Ex, L1_met_Ey, 0.0);
603 float L1_met_phi = v.Phi();
604 auto L1_Ex = Monitored::Scalar<float>("L1_gFexNC_Ex", static_cast<float>(L1_met_Ex));
605 auto L1_Ey = Monitored::Scalar<float>("L1_gFexNC_Ey", static_cast<float>(L1_met_Ey));
606 auto L1_Ex_log = Monitored::Scalar<float>("L1_gFexNC_Ex_log", static_cast<float>(L1_met_Ex_log));
607 auto L1_Ey_log = Monitored::Scalar<float>("L1_gFexNC_Ey_log", static_cast<float>(L1_met_Ey_log));
608 auto L1_phi = Monitored::Scalar<float>("L1_gFexNC_phi", static_cast<float>(L1_met_phi));
609 fill(tool, L1_Ex, L1_Ey, L1_Ex_log, L1_Ey_log, L1_phi);
610 }
611
612 if (l1_gFexRhoMETScalar_cont.isValid() && l1_gFexRhoMETScalar_cont->size() > 0) {
613 l1_gmet = l1_gFexRhoMETScalar_cont->at(0);
614 float L1_met_Et = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
615 float L1_met_sumEt = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
616 float L1_met_Et_log = signed_log(L1_met_Et, epsilon);
617 float L1_met_sumEt_log = signed_log(L1_met_sumEt, epsilon);
618 auto L1_Et = Monitored::Scalar<float>("L1_gFexRho_Et", static_cast<float>(L1_met_Et));
619 auto L1_Et_log = Monitored::Scalar<float>("L1_gFexRho_Et_log", static_cast<float>(L1_met_Et_log));
620 auto L1_sumEt = Monitored::Scalar<float>("L1_gFexRho_sumEt", static_cast<float>(L1_met_sumEt));
621 auto L1_sumEt_log = Monitored::Scalar<float>("L1_gFexRho_sumEt_log", static_cast<float>(L1_met_sumEt_log));
622 fill(tool, L1_Et, L1_Et_log, L1_sumEt, L1_sumEt_log);
623 }
624
625 if (l1_gFexRhoMETComponents_cont.isValid() && l1_gFexRhoMETComponents_cont->size() > 0) {
626 l1_gmet = l1_gFexRhoMETComponents_cont->at(0);
627 float L1_met_Ex = l1_gmet->METquantityOne()/Gaudi::Units::GeV;
628 float L1_met_Ex_log = signed_log(L1_met_Ex, epsilon);
629 float L1_met_Ey = l1_gmet->METquantityTwo()/Gaudi::Units::GeV;
630 float L1_met_Ey_log = signed_log(L1_met_Ey, epsilon);
631 TVector3 v(L1_met_Ex, L1_met_Ey, 0.0);
632 float L1_met_phi = v.Phi();
633 auto L1_Ex = Monitored::Scalar<float>("L1_gFexRho_Ex", static_cast<float>(L1_met_Ex));
634 auto L1_Ey = Monitored::Scalar<float>("L1_gFexRho_Ey", static_cast<float>(L1_met_Ey));
635 auto L1_Ex_log = Monitored::Scalar<float>("L1_gFexRho_Ex_log", static_cast<float>(L1_met_Ex_log));
636 auto L1_Ey_log = Monitored::Scalar<float>("L1_gFexRho_Ey_log", static_cast<float>(L1_met_Ey_log));
637 auto L1_phi = Monitored::Scalar<float>("L1_gFexRho_phi", static_cast<float>(L1_met_phi));
638 fill(tool, L1_Ex, L1_Ey, L1_Ex_log, L1_Ey_log, L1_phi);
639 }
640
641 // define TrigMissingET object
642 const xAOD::TrigMissingET *hlt_met = 0;
643
644 // status, component from HLT cell
645 int nComponent = m_compNames.size();
646 int nStatus = m_bitNames.size();
647 if ( hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0 ) {
648 hlt_met = hlt_cell_met_cont->at(0);
649 for (int j=0; j<nStatus; ++j) { //status loop
650 unsigned mask = (1u<<j);
651 if (hlt_met->flag() & mask) {
652 MET_status = 1.;
653 } else {
654 MET_status = 0;
655 }
656 auto mon1 = Monitored::Scalar<std::string>( "HLT_MET_status",m_bitNames[j]);
657 fill(tool,mon1,MET_status);
658 }
659
660 for (int i=0; i<nComponent; ++i) { //component loop
661 float ex = hlt_met->exComponent(i)/Gaudi::Units::GeV;
662 float ey = hlt_met->eyComponent(i)/Gaudi::Units::GeV;
663 component_Et = sqrt(ex*ex+ey*ey);
664 auto mon2 = Monitored::Scalar<std::string>( "HLT_MET_component",m_compNames[i]);
665 fill(tool,mon2,component_Et);
666 }
667
668 for (int i=0; i<nComponent; ++i) { //component loop
669 for (int j=0; j<nStatus; ++j) { //status loop
670 unsigned mask = (1u<<j);
671 if (hlt_met->statusComponent(i) & mask) {
672 component_status_weight = 1.;
673 } else {
674 component_status_weight = 0;
675 }
676 auto mon_bit = Monitored::Scalar<std::string>( "component_status",m_bitNames[j]);
677 auto mon_comp = Monitored::Scalar<std::string>( "component",m_compNames[i]);
678 fill(tool,mon_comp,mon_bit,component_status_weight);
679 }
680 }
681 }
682
683 // get L1 MET for pre-selection
684 float L1_roiMet_Et = 0;
685 if ( l1_roi_cont != nullptr ) {
686 if ((l1_roi_cont->energyX())>-9e12 && (l1_roi_cont->energyX())<9e12 && (l1_roi_cont->energyY())>-9e12 && (l1_roi_cont->energyY())<9e12) {
687 float Ex = - l1_roi_cont->energyX()/Gaudi::Units::GeV;
688 float Ey = - l1_roi_cont->energyY()/Gaudi::Units::GeV;
689 L1_roiMet_Et = std::sqrt(Ex*Ex + Ey*Ey);
690 }
691 }
692 float L1_jFexMet_Et = 0;
693 if (l1_jFexMet_cont.isValid() && l1_jFexMet_cont->size() > 0) {
694 float L1_met_Ex = 0;
695 float L1_met_Ey = 0;
696 for (const auto l1_jmet: *l1_jFexMet_cont) {
697 L1_met_Ex += l1_jmet->Ex()/Gaudi::Units::GeV;
698 L1_met_Ey += l1_jmet->Ey()/Gaudi::Units::GeV;
699 }
700 L1_jFexMet_Et = std::sqrt(L1_met_Ex*L1_met_Ex + L1_met_Ey*L1_met_Ey);
701 }
702 float L1_gFexJWOJMet_Et = 0;
703
704 float L1_PreSelMet_Et = L1_roiMet_Et;
705 if (m_L1MetAlg == 1) L1_PreSelMet_Et = L1_jFexMet_Et;
706 if (m_L1MetAlg == 2) L1_PreSelMet_Et = L1_gFexJWOJMet_Et;
707
708 // access HLT MET values
709 for (const std::string& alg : m_algsHLT) {
710 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
711 hlt_met = hlt_cell_met_cont->at(0);
712 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
713 hlt_met = hlt_mht_met_cont->at(0);
714 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
715 hlt_met = hlt_tc_met_cont->at(0);
716 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
717 hlt_met = hlt_tc_em_met_cont->at(0);
718 } else if (alg == "tcpufit" && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0) {
719 hlt_met = hlt_tcpufit_met_cont->at(0);
720 } else if (alg == "tcpufit_sig30" && hlt_tcpufit_sig30_met_cont.isValid() && hlt_tcpufit_sig30_met_cont->size() > 0) {
721 hlt_met = hlt_tcpufit_sig30_met_cont->at(0);
722 } else if (alg == "trkmht" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
723 hlt_met = hlt_trkmht_met_cont->at(0);
724 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
725 hlt_met = hlt_pfsum_met_cont->at(0);
726 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
727 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
728 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
729 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
730 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
731 hlt_met = hlt_pfopufit_met_cont->at(0);
732 } else if (alg == "pfopufit_sig30" && hlt_pfopufit_sig30_met_cont.isValid() && hlt_pfopufit_sig30_met_cont->size() > 0) {
733 hlt_met = hlt_pfopufit_sig30_met_cont->at(0);
734 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
735 hlt_met = hlt_cvfpufit_met_cont->at(0);
736 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
737 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
738 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
739 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
740 } else if (alg == "met_nn" && hlt_met_nn_cont.isValid() && hlt_met_nn_cont->size() > 0) {
741 hlt_met = hlt_met_nn_cont->at(0);
742 } else {
743 hlt_met = 0;
744 }
745
746 if ( hlt_met ) {
747 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
748 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
749 float hlt_Ez = hlt_met->ez()/Gaudi::Units::GeV;
750 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
751 float hlt_sumEt = hlt_met->sumEt()/Gaudi::Units::GeV;
752 float hlt_Ex_log = signed_log(hlt_Ex, epsilon);
753 float hlt_Ey_log = signed_log(hlt_Ey, epsilon);
754 float hlt_Et_log = signed_log(hlt_Et, epsilon);
755 float hlt_sumEt_log = signed_log(hlt_sumEt, epsilon);
756 TVector3 v(hlt_Ex, hlt_Ey, hlt_Ez);
757 float hlt_eta = v.Eta();
758 float hlt_phi = v.Phi();
759
760 auto met_Ex = Monitored::Scalar<float>(alg+"_Ex", static_cast<float>(hlt_Ex));
761 auto met_Ey = Monitored::Scalar<float>(alg+"_Ey", static_cast<float>(hlt_Ey));
762 auto met_Et = Monitored::Scalar<float>(alg+"_Et", static_cast<float>(hlt_Et));
763 auto met_sumEt = Monitored::Scalar<float>(alg+"_sumEt", static_cast<float>(hlt_sumEt));
764 auto met_Ex_log = Monitored::Scalar<float>(alg+"_Ex_log", static_cast<float>(hlt_Ex_log));
765 auto met_Ey_log = Monitored::Scalar<float>(alg+"_Ey_log", static_cast<float>(hlt_Ey_log));
766 auto met_Et_log = Monitored::Scalar<float>(alg+"_Et_log", static_cast<float>(hlt_Et_log));
767 auto met_sumEt_log = Monitored::Scalar<float>(alg+"_sumEt_log", static_cast<float>(hlt_sumEt_log));
768 auto met_eta = Monitored::Scalar<float>(alg+"_eta", static_cast<float>(hlt_eta));
769 auto met_phi = Monitored::Scalar<float>(alg+"_phi", static_cast<float>(hlt_phi));
770 fill(tool,met_Ex,met_Ey,met_Et,met_sumEt,
771 met_Ex_log,met_Ey_log,met_Et_log,met_sumEt_log,
772 met_eta,met_phi);
773
774 }
775 }
776
777 // access HLT pre-selection MET values
778 for (const std::string& alg : m_algsHLTPreSel) {
779 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
780 hlt_met = hlt_cell_met_cont->at(0);
781 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
782 hlt_met = hlt_mht_met_cont->at(0);
783 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
784 hlt_met = hlt_tc_met_cont->at(0);
785 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
786 hlt_met = hlt_tc_em_met_cont->at(0);
787 } else if (alg == "tcpufit" && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0) {
788 hlt_met = hlt_tcpufit_met_cont->at(0);
789 } else if (alg == "tcpufit_sig30" && hlt_tcpufit_sig30_met_cont.isValid() && hlt_tcpufit_sig30_met_cont->size() > 0) {
790 hlt_met = hlt_tcpufit_sig30_met_cont->at(0);
791 } else if (alg == "trkmht" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
792 hlt_met = hlt_trkmht_met_cont->at(0);
793 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
794 hlt_met = hlt_pfsum_met_cont->at(0);
795 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
796 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
797 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
798 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
799 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
800 hlt_met = hlt_pfopufit_met_cont->at(0);
801 } else if (alg == "pfopufit_sig30" && hlt_pfopufit_sig30_met_cont.isValid() && hlt_pfopufit_sig30_met_cont->size() > 0) {
802 hlt_met = hlt_pfopufit_sig30_met_cont->at(0);
803 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
804 hlt_met = hlt_cvfpufit_met_cont->at(0);
805 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
806 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
807 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
808 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
809 } else if (alg == "met_nn" && hlt_met_nn_cont.isValid() && hlt_met_nn_cont->size() > 0) {
810 hlt_met = hlt_met_nn_cont->at(0);
811 } else {
812 hlt_met = 0;
813 }
814
815 if ( hlt_met ) {
816 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
817 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
818 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
819 if (L1_PreSelMet_Et > m_L1MetCut && !std::isnan(hlt_Et)) {
820 auto met_presel_Et = Monitored::Scalar<float>(alg+"_presel_Et", hlt_Et);
821 fill(tool,met_presel_Et);
822 }
823 }
824 }
825
826 for (const std::string& alg : m_LArNoiseBurstVetoAlgs) {
827 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
828 hlt_met = hlt_cell_met_cont->at(0);
829 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
830 hlt_met = hlt_mht_met_cont->at(0);
831 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
832 hlt_met = hlt_tc_met_cont->at(0);
833 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
834 hlt_met = hlt_tc_em_met_cont->at(0);
835 } else if (alg == "tcpufit" && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0) {
836 hlt_met = hlt_tcpufit_met_cont->at(0);
837 } else if (alg == "trkmht" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
838 hlt_met = hlt_trkmht_met_cont->at(0);
839 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
840 hlt_met = hlt_pfsum_met_cont->at(0);
841 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
842 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
843 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
844 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
845 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
846 hlt_met = hlt_pfopufit_met_cont->at(0);
847 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
848 hlt_met = hlt_cvfpufit_met_cont->at(0);
849 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
850 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
851 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
852 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
853 } else {
854 hlt_met = 0;
855 }
856
857 if ( hlt_met ) {
858 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
859 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
860 float hlt_Ez = hlt_met->ez()/Gaudi::Units::GeV;
861 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
862 float hlt_sumEt = hlt_met->sumEt()/Gaudi::Units::GeV;
863 float hlt_Ex_log = signed_log(hlt_Ex, epsilon);
864 float hlt_Ey_log = signed_log(hlt_Ey, epsilon);
865 float hlt_Et_log = signed_log(hlt_Et, epsilon);
866 float hlt_sumEt_log = signed_log(hlt_sumEt, epsilon);
867 TVector3 v(hlt_Ex, hlt_Ey, hlt_Ez);
868 float hlt_eta = v.Eta();
869 float hlt_phi = v.Phi();
870
871
872 // LAr noiseburst Veto
873 bool LArNoiseBurst = eventInfo->isEventFlagBitSet(xAOD::EventInfo::LAr,LArEventBitInfo::NOISEBURSTVETO);
874 if (!LArNoiseBurst){
875 auto met_Ex = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Ex", static_cast<float>(hlt_Ex));
876 auto met_Ey = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Ey", static_cast<float>(hlt_Ey));
877 auto met_Et = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Et", static_cast<float>(hlt_Et));
878 auto met_sumEt = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_sumEt", static_cast<float>(hlt_sumEt));
879 auto met_Ex_log = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Ex_log", static_cast<float>(hlt_Ex_log));
880 auto met_Ey_log = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Ey_log", static_cast<float>(hlt_Ey_log));
881 auto met_Et_log = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_Et_log", static_cast<float>(hlt_Et_log));
882 auto met_sumEt_log = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_sumEt_log", static_cast<float>(hlt_sumEt_log));
883 auto met_phi = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_phi", static_cast<float>(hlt_phi));
884 auto met_eta = Monitored::Scalar<float>(alg+"_LArNoiseBurstVeto_eta", static_cast<float>(hlt_eta));
885 fill(tool,met_Ex,met_Ey,met_Et,met_sumEt,
886 met_Ex_log,met_Ey_log,met_Et_log,met_sumEt_log,
887 met_eta,met_phi);
888 }
889 }
890 }
891
892
893 for (const std::string& alg : m_signalLepAlgs) {
894 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
895 hlt_met = hlt_cell_met_cont->at(0);
896 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
897 hlt_met = hlt_mht_met_cont->at(0);
898 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
899 hlt_met = hlt_tc_met_cont->at(0);
900 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
901 hlt_met = hlt_tc_em_met_cont->at(0);
902 } else if (alg == "tcpufit" && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0) {
903 hlt_met = hlt_tcpufit_met_cont->at(0);
904 } else if (alg == "trkmht" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
905 hlt_met = hlt_trkmht_met_cont->at(0);
906 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
907 hlt_met = hlt_pfsum_met_cont->at(0);
908 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
909 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
910 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
911 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
912 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
913 hlt_met = hlt_pfopufit_met_cont->at(0);
914 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
915 hlt_met = hlt_cvfpufit_met_cont->at(0);
916 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
917 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
918 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
919 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
920 } else {
921 hlt_met = 0;
922 }
923
924 if ( hlt_met ) {
925 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
926 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
927 float hlt_Ez = hlt_met->ez()/Gaudi::Units::GeV;
928 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
929 float hlt_sumEt = hlt_met->sumEt()/Gaudi::Units::GeV;
930 float hlt_Ex_log = signed_log(hlt_Ex, epsilon);
931 float hlt_Ey_log = signed_log(hlt_Ey, epsilon);
932 float hlt_Et_log = signed_log(hlt_Et, epsilon);
933 float hlt_sumEt_log = signed_log(hlt_sumEt, epsilon);
934 TVector3 v(hlt_Ex, hlt_Ey, hlt_Ez);
935 float hlt_eta = v.Eta();
936 float hlt_phi = v.Phi();
937
938// access events with electron passing primary single electron chain
939 if(passedPrimaryEl){
940 auto met_Ex = Monitored::Scalar<float>(alg+"_SigEl_Ex", static_cast<float>(hlt_Ex));
941 auto met_Ey = Monitored::Scalar<float>(alg+"_SigEl_Ey", static_cast<float>(hlt_Ey));
942 auto met_Et = Monitored::Scalar<float>(alg+"_SigEl_Et", static_cast<float>(hlt_Et));
943 auto met_sumEt = Monitored::Scalar<float>(alg+"_SigEl_sumEt", static_cast<float>(hlt_sumEt));
944 auto met_Ex_log = Monitored::Scalar<float>(alg+"_SigEl_Ex_log", static_cast<float>(hlt_Ex_log));
945 auto met_Ey_log = Monitored::Scalar<float>(alg+"_SigEl_Ey_log", static_cast<float>(hlt_Ey_log));
946 auto met_Et_log = Monitored::Scalar<float>(alg+"_SigEl_Et_log", static_cast<float>(hlt_Et_log));
947 auto met_sumEt_log = Monitored::Scalar<float>(alg+"_SigEl_sumEt_log", static_cast<float>(hlt_sumEt_log));
948 auto met_eta = Monitored::Scalar<float>(alg+"_SigEl_eta", static_cast<float>(hlt_eta));
949 auto met_phi = Monitored::Scalar<float>(alg+"_SigEl_phi", static_cast<float>(hlt_phi));
950 fill(tool,met_Ex,met_Ey,met_Et,met_sumEt,
951 met_Ex_log,met_Ey_log,met_Et_log,met_sumEt_log,
952 met_eta,met_phi);
953 }
954
955// access events with muon passing primary single muon chain
956 if(passedPrimaryMu){
957 auto met_Ex = Monitored::Scalar<float>(alg+"_SigMu_Ex", static_cast<float>(hlt_Ex));
958 auto met_Ey = Monitored::Scalar<float>(alg+"_SigMu_Ey", static_cast<float>(hlt_Ey));
959 auto met_Et = Monitored::Scalar<float>(alg+"_SigMu_Et", static_cast<float>(hlt_Et));
960 auto met_sumEt = Monitored::Scalar<float>(alg+"_SigMu_sumEt", static_cast<float>(hlt_sumEt));
961 auto met_Ex_log = Monitored::Scalar<float>(alg+"_SigMu_Ex_log", static_cast<float>(hlt_Ex_log));
962 auto met_Ey_log = Monitored::Scalar<float>(alg+"_SigMu_Ey_log", static_cast<float>(hlt_Ey_log));
963 auto met_Et_log = Monitored::Scalar<float>(alg+"_SigMu_Et_log", static_cast<float>(hlt_Et_log));
964 auto met_sumEt_log = Monitored::Scalar<float>(alg+"_SigMu_sumEt_log", static_cast<float>(hlt_sumEt_log));
965 auto met_eta = Monitored::Scalar<float>(alg+"_SigMu_eta", static_cast<float>(hlt_eta));
966 auto met_phi = Monitored::Scalar<float>(alg+"_SigMu_phi", static_cast<float>(hlt_phi));
967 fill(tool,met_Ex,met_Ey,met_Et,met_sumEt,
968 met_Ex_log,met_Ey_log,met_Et_log,met_sumEt_log,
969 met_eta,met_phi);
970 }
971 }
972 }
973
974 // access HLT MET Expert values
975 for (const std::string& alg : m_algsHLTExpert) {
976 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
977 hlt_met = hlt_cell_met_cont->at(0);
978 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
979 hlt_met = hlt_mht_met_cont->at(0);
980 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
981 hlt_met = hlt_tc_met_cont->at(0);
982 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
983 hlt_met = hlt_tc_em_met_cont->at(0);
984 } else if (alg == "tcpufit" && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0) {
985 hlt_met = hlt_tcpufit_met_cont->at(0);
986 } else if (alg == "tcpufit_sig30" && hlt_tcpufit_sig30_met_cont.isValid() && hlt_tcpufit_sig30_met_cont->size() > 0) {
987 hlt_met = hlt_tcpufit_sig30_met_cont->at(0);
988 } else if (alg == "trkmht" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
989 hlt_met = hlt_trkmht_met_cont->at(0);
990 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
991 hlt_met = hlt_pfsum_met_cont->at(0);
992 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
993 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
994 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
995 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
996 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
997 hlt_met = hlt_pfopufit_met_cont->at(0);
998 } else if (alg == "pfopufit_sig30" && hlt_pfopufit_sig30_met_cont.isValid() && hlt_pfopufit_sig30_met_cont->size() > 0) {
999 hlt_met = hlt_pfopufit_sig30_met_cont->at(0);
1000 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
1001 hlt_met = hlt_cvfpufit_met_cont->at(0);
1002 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
1003 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
1004 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
1005 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
1006 } else if (alg == "met_nn" && hlt_met_nn_cont.isValid() && hlt_met_nn_cont->size() > 0) {
1007 hlt_met = hlt_met_nn_cont->at(0);
1008 } else {
1009 hlt_met = 0;
1010 }
1011
1012 if ( hlt_met ) {
1013 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
1014 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
1015 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
1016 float hlt_sumEt = hlt_met->sumEt()/Gaudi::Units::GeV;
1017 if (!std::isnan(hlt_Et)) {
1018 auto met_Ex = Monitored::Scalar<float>(alg+"_Ex", static_cast<float>(hlt_Ex));
1019 auto met_Ey = Monitored::Scalar<float>(alg+"_Ey", static_cast<float>(hlt_Ey));
1020 auto met_Et = Monitored::Scalar<float>(alg+"_Et", static_cast<float>(hlt_Et));
1021 auto met_sumEt = Monitored::Scalar<float>(alg+"_sumEt", static_cast<float>(hlt_sumEt));
1022 fill(tool,met_Ex,met_Ey,met_Et,met_sumEt);
1023 ATH_MSG_DEBUG(alg << ": hlt_Et = " << hlt_Et);
1024 if (L1_roiMet_Et > 50.) {
1025 auto met_presel_Et = Monitored::Scalar<float>(alg+"_presel_Et", static_cast<float>(hlt_Et));
1026 fill(tool,met_presel_Et);
1027 }
1028 }
1029 }
1030 }
1031
1032 // Make 2D tcpufit MET distributions wrt track-based MET
1033 const xAOD::TrigMissingET *hlt_tcpufit_met = 0;
1034 for (const std::string& alg : m_algsMET2d_tcpufit) {
1035 if (alg == "cell" && hlt_cell_met_cont.isValid() && hlt_cell_met_cont->size() > 0) {
1036 hlt_met = hlt_cell_met_cont->at(0);
1037 } else if (alg == "mht" && hlt_mht_met_cont.isValid() && hlt_mht_met_cont->size() > 0) {
1038 hlt_met = hlt_mht_met_cont->at(0);
1039 } else if (alg == "tc" && hlt_tc_met_cont.isValid() && hlt_tc_met_cont->size() > 0) {
1040 hlt_met = hlt_tc_met_cont->at(0);
1041 } else if (alg == "tc_em" && hlt_tc_em_met_cont.isValid() && hlt_tc_em_met_cont->size() > 0) {
1042 hlt_met = hlt_tc_em_met_cont->at(0);
1043 } else if (alg == "trkmht_pf" && hlt_trkmht_met_cont.isValid() && hlt_trkmht_met_cont->size() > 0) {
1044 hlt_met = hlt_trkmht_met_cont->at(0);
1045 } else if (alg == "pfsum" && hlt_pfsum_met_cont.isValid() && hlt_pfsum_met_cont->size() > 0) {
1046 hlt_met = hlt_pfsum_met_cont->at(0);
1047 } else if (alg == "pfsum_cssk" && hlt_pfsum_cssk_met_cont.isValid() && hlt_pfsum_cssk_met_cont->size() > 0) {
1048 hlt_met = hlt_pfsum_cssk_met_cont->at(0);
1049 } else if (alg == "pfsum_vssk" && hlt_pfsum_vssk_met_cont.isValid() && hlt_pfsum_vssk_met_cont->size() > 0) {
1050 hlt_met = hlt_pfsum_vssk_met_cont->at(0);
1051 } else if (alg == "pfopufit" && hlt_pfopufit_met_cont.isValid() && hlt_pfopufit_met_cont->size() > 0) {
1052 hlt_met = hlt_pfopufit_met_cont->at(0);
1053 } else if (alg == "cvfpufit" && hlt_cvfpufit_met_cont.isValid() && hlt_cvfpufit_met_cont->size() > 0) {
1054 hlt_met = hlt_cvfpufit_met_cont->at(0);
1055 } else if (alg == "mhtpufit_pf" && hlt_mhtpufit_pf_met_cont.isValid() && hlt_mhtpufit_pf_met_cont->size() > 0) {
1056 hlt_met = hlt_mhtpufit_pf_met_cont->at(0);
1057 } else if (alg == "mhtpufit_em" && hlt_mhtpufit_em_met_cont.isValid() && hlt_mhtpufit_em_met_cont->size() > 0) {
1058 hlt_met = hlt_mhtpufit_em_met_cont->at(0);
1059 } else {
1060 hlt_met = 0;
1061 }
1062
1063 if(hlt_met && hlt_tcpufit_met_cont.isValid() && hlt_tcpufit_met_cont->size() > 0){
1064 hlt_tcpufit_met = hlt_tcpufit_met_cont->at(0);
1065 float hlt_Ex = hlt_met->ex()/Gaudi::Units::GeV;
1066 float hlt_Ey = hlt_met->ey()/Gaudi::Units::GeV;
1067 float hlt_Et = std::sqrt(hlt_Ex*hlt_Ex + hlt_Ey*hlt_Ey);
1068 auto met_Et = Monitored::Scalar<float>(alg+"_2D_Et", static_cast<float>(hlt_Et));
1069
1070 float hlt_tcpufit_Ex = hlt_tcpufit_met->ex()/Gaudi::Units::GeV;
1071 float hlt_tcpufit_Ey = hlt_tcpufit_met->ey()/Gaudi::Units::GeV;
1072 float hlt_tcpufit_Et = std::sqrt(hlt_tcpufit_Ex*hlt_tcpufit_Ex + hlt_tcpufit_Ey*hlt_tcpufit_Ey);
1073 auto tcpufit_met_Et = Monitored::Scalar<float>("tcpufit_2D_Et", static_cast<float>(hlt_tcpufit_Et));
1074 fill(tool, met_Et, tcpufit_met_Et);
1075 }
1076 }
1077
1078 // efficiency plots
1079 for (const std::string& chain : m_l1Chains) {
1080 auto pass_chain = Monitored::Scalar<float>("pass_" + chain, static_cast<float>(getTrigDecisionTool()->isPassed(chain)));
1081 fill(tool, pass_chain,offline_NoMu_Et_eff);
1082 }
1083 for (const std::string& chain : m_hltChains) {
1084 auto pass_chain = Monitored::Scalar<float>("pass_" + chain, static_cast<float>(getTrigDecisionTool()->isPassed(chain)));
1085 fill(tool, pass_chain,offline_NoMu_Et_eff);
1086 }
1087 for (const std::string& chain : m_hltChainsVal) {
1088 auto pass_chain = Monitored::Scalar<float>("pass_" + chain, static_cast<float>(getTrigDecisionTool()->isPassed(chain)));
1089 fill(tool, pass_chain,offline_NoMu_Et_eff);
1090 }
1091 for (const std::string& chain : m_hltChainsT0) {
1092 auto pass_chain = Monitored::Scalar<float>("pass_" + chain, static_cast<float>(getTrigDecisionTool()->isPassed(chain)));
1093 fill(tool, pass_chain,offline_NoMu_Et_eff);
1094 }
1095
1096 return StatusCode::SUCCESS;
1097}
1098
1099
1100double TrigMETMonitorAlgorithm::signed_log(double e, double epsilon) const {
1101
1102
1103 double e_log = -9e9;
1104 if (std::abs(e) > epsilon)
1105 e_log = std::copysign(std::log10(std::abs(e)), e);
1106 else
1107 e_log = 0.01;
1108
1109 return e_log;
1110}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
virtual StatusCode initialize() override
initialize
const ToolHandle< Trig::TrigDecisionTool > & getTrigDecisionTool() const
Get the trigger decision tool member.
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
Tool to tell whether a specific trigger is passed.
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.
Declare a monitored scalar variable.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexNCMETComponents_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexJwojScalar_key
Gaudi::Property< std::vector< std::string > > m_hltChains
SG::ReadHandleKey< xAOD::ElectronContainer > m_hlt_electron_key
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Gaudi::Property< std::vector< std::string > > m_compNames
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_tcpufit_met_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_tc_em_met_key
Gaudi::Property< double > m_L1MetCut
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_pfopufit_sig30_met_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexRhoMETScalar_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_mhtpufit_em_met_key
Gaudi::Property< std::vector< std::string > > m_l1Chains
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_cvfpufit_met_key
Gaudi::Property< std::vector< std::string > > m_algsL1
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_pfsum_met_key
Gaudi::Property< std::vector< std::string > > m_hltChainsVal
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_topoclusters_key
SG::ReadHandleKey< xAOD::VertexContainer > m_offline_vertex_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_tc_met_key
Gaudi::Property< std::vector< std::string > > m_bitNames
double signed_log(double e, double epsilon) const
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexRhoMETComponents_key
SG::ReadHandleKey< xAOD::VertexContainer > m_vertex_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexJwojMSTComponents_key
SG::ReadHandleKey< xAOD::jFexMETRoIContainer > m_l1_jFexMet_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_pfsum_cssk_met_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_cell_met_key
Gaudi::Property< std::vector< std::string > > m_algsHLTExpert
Gaudi::Property< std::vector< std::string > > m_signalLepAlgs
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_trkmht_met_key
Gaudi::Property< std::vector< std::string > > m_LArNoiseBurstVetoAlgs
SG::ReadHandleKey< xAOD::jFexSumETRoIContainer > m_l1_jFexSumEt_key
SG::ReadHandleKey< xAOD::MuonContainer > m_hlt_muon_key
Gaudi::Property< std::vector< std::string > > m_hltChainEl
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_tcpufit_sig30_met_key
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracks_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexJwojMHTComponents_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexJwojMETComponents_key
SG::ReadHandleKey< xAOD::gFexGlobalRoIContainer > m_l1_gFexNCMETScalar_key
Gaudi::Property< std::vector< std::string > > m_algsHLT
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_met_nn_key
Gaudi::Property< std::vector< std::string > > m_hltChainMu
Gaudi::Property< std::vector< std::string > > m_algsMET2d_tcpufit
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_mht_met_key
SG::ReadHandleKey< xAOD::MissingETContainer > m_offline_met_key
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_mhtpufit_pf_met_key
Gaudi::Property< int > m_L1MetAlg
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_pfsum_vssk_met_key
Gaudi::Property< std::vector< std::string > > m_hltChainsT0
Gaudi::Property< std::vector< std::string > > m_algsHLTPreSel
TrigMETMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadHandleKey< xAOD::EnergySumRoI > m_lvl1_roi_key
virtual StatusCode initialize() override
initialize
SG::ReadHandleKey< xAOD::TrigMissingETContainer > m_hlt_pfopufit_met_key
Class describing an electron.
float energyT() const
The deposited total transverse energy.
float energyX() const
The total energy deposited in the X direction.
float energyY() const
The total energy deposited in the Y direction.
@ LAr
The LAr calorimeter.
float sumet() const
Returns.
float mpx() const
Returns .
float mpy() const
Returns .
int flag() const
Get the status flag.
float ex() const
Get the x component of the missing energy.
float exComponent(unsigned int index) const
Get the x component fo the energy of a component.
float eyComponent(unsigned int index) const
Get the y component fo the energy of a component.
float sumEt() const
Get the sum of the ET of the missing energy.
short statusComponent(unsigned int index) const
Get Status.
float ez() const
Get the z component of the missing energy.
float ey() const
Get the y component of the missing energy.
Class describing a Vertex.
Definition Vertex_v1.h:42
float z() const
Returns the z position.
float METquantityTwo() const
floating point value (GeV, TOB scale)
float METquantityOne() const
retrieves the Et index from the 32-bit word
Generic monitoring tool for athena components.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
@ PriVtx
Primary vertex.
MissingET_v1 MissingET
Version control by type defintion.
gFexGlobalRoI_v1 gFexGlobalRoI
Define the latest version of the eFexEMRoI class.
TrigMissingET_v1 TrigMissingET
Define the most recent version of the TrigMissingET class.
EnergySumRoI_v2 EnergySumRoI
void fill(H5::Group &out_file, size_t iterations)