ATLAS Offline Software
Loading...
Searching...
No Matches
IDPerfMonWenu.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5// **********************************************************************
6// IDPerfMonWenu.cxx
7// AUTHORS: Beate Heinemann, Tobias Golling, Sara Strandberg
8// **********************************************************************
9
10
11#include "TH1.h"
12#include "TH2.h"
13#include "TH1F.h"
14#include "TH2F.h"
15#include "TProfile.h"
16#include "TLorentzVector.h"
17
19
25
29
32
35
36#include "xAODEgamma/Electron.h"
37#include "xAODEgamma/Egamma.h"
38#include "xAODEgamma/Photon.h"
40
43
46
47#include "GaudiKernel/SystemOfUnits.h"
48#include "GaudiKernel/PhysicalConstants.h"
49#include <cmath>
50#include <stdexcept>
51
52// *********************************************************************
53// Public Methods
54// *********************************************************************
55
56namespace{
57template <class T>
58 const T *
59 getCollectionWithCheck(const ServiceHandle<StoreGateSvc> & evtStore,const std::string &contName){
60 const T * container{};
61 if (evtStore->contains<T>(contName)){
62 //retrieve
63 if(evtStore->retrieve(container,contName).isFailure()) return nullptr;
64 }
65 return container;
66 }
67}
68
69IDPerfMonWenu::IDPerfMonWenu( const std::string & type, const std::string & name, const IInterface* parent )
70 :ManagedMonitorToolBase( type, name, parent ),
71 m_region_strings{"incl", "barrel", "eca", "ecc"},
72 m_triggerChainName("NoTriggerSelection")
73{
74 declareProperty("tracksName",m_tracksName);
75 declareProperty("electronsName",m_electronsName="Electrons");
76 declareProperty("photonsName",m_photonsName="Photons");
77 declareProperty("VxPrimContainerName",m_VxPrimContainerName="PrimaryVertices");
78 declareProperty("emclustersName",m_emclustersName="LArClusterEM");
79 declareProperty("metName",m_metName="MET_Reference_AntiKt4LCTopo");
80 declareProperty("METFinalName",m_metRefFinalName="FinalClus");
81 declareProperty("eoverp_standard_min",m_eoverp_standard_min=0.5);
82 declareProperty("eoverp_standard_max",m_eoverp_standard_max=4.0);
83 declareProperty("eoverp_tight_min",m_eoverp_tight_min=0.7);
84 declareProperty("eoverp_tight_max",m_eoverp_tight_max=1.3);
85 declareProperty("CheckRate",m_checkrate=1000);
86 declareProperty("triggerChainName",m_triggerChainName);
87 declareProperty("rejectSecondCluster",m_rejectSecondCluster = true);
88 declareProperty("electronIDLevel",m_electronIDLevel = "Tight");
89}
90
92
95 if (m_tracksName.empty() ){
96 ATH_MSG_WARNING( " no track collection given" );
97 }
99 if (sc.isFailure()){
100 ATH_MSG_WARNING( "Could not initialize ManagedMonitorToolBase" );
101 }
102 //---Electron Likelihood tool---
103 ATH_MSG_DEBUG("IDPerfMonWenu::Initialize() -- Setting up electron LH tool.");
104 m_LHTool2015=std::make_unique<AsgElectronLikelihoodTool> ("m_LHTool2015");
105 if((m_LHTool2015->setProperty("primaryVertexContainer",m_VxPrimContainerName)).isFailure()){
106 ATH_MSG_WARNING("Failure setting primary vertex container " << m_VxPrimContainerName << "in electron likelihood tool");
107 }
108 //Set up electron LH level
109 m_doIDCuts = true;
110 std::string confDir = "ElectronPhotonSelectorTools/offline/mc15_20150712/";
112 ATH_MSG_WARNING("electronIDLevel is set to empty! No electron ID cuts will be applied.");
113 m_doIDCuts = false;
114 } else {
115 if((m_electronIDLevel != "Loose") && (m_electronIDLevel != "Medium") && (m_electronIDLevel != "Tight")){
116 ATH_MSG_WARNING("Unknown electronIDLevel!! (Accepted values: Loose, Medium, Tight)");
117 m_doIDCuts = false;
118 } else {
119 std::string configFile = confDir+"ElectronLikelihood"+m_electronIDLevel+"OfflineConfig2015.conf";
120 ATH_MSG_INFO("Likelihood configuration file: " << configFile);
121 if((m_LHTool2015->setProperty("ConfigFile",configFile)).isFailure()){
122 ATH_MSG_WARNING("Failure loading ConfigFile in electron likelihood tool.");
123 }
124 }
125 }
126 StatusCode lh = m_LHTool2015->initialize();
127 if(lh.isFailure()){
128 ATH_MSG_WARNING("Electron likelihood tool initialize() failed! Turning off electron LH cuts!");
129 m_doIDCuts = false;
130 }
131 return StatusCode::SUCCESS;
132}
133
135{
136 MonGroup al_Wenu_mon ( this, "IDPerfMon/Wenu/" + m_triggerChainName, run);
137 if( newRunFlag() ) {
138 //if user environment specified we don't want to book new histograms at every run boundary
139 //we instead want one histogram per job
140 if(m_histosBooked!=0 && AthenaMonManager::environment()==AthenaMonManager::user) return StatusCode::SUCCESS;
141
142 // ***********************
143 // Book event histograms
144 // ***********************
145
146 m_Nevents = new TH1F("Nevents", "Number of events processed", 1, -.5, 0.5);
147 RegisterHisto(al_Wenu_mon,m_Nevents);
148 m_Wenu_met_sel = new TH1F("Wenu_met_sel","met", 50, 0., 100.);
149 RegisterHisto(al_Wenu_mon,m_Wenu_met_sel);
150 m_Wenu_transmass_sel = new TH1F("Wenu_transmass_sel","Transverse mass of the leading em cluster and the met", 90, 0., 180.);
152 m_Wenu_trk_transmass_sel = new TH1F("Wenu_trk_transmass_sel","Transverse mass of the track and the met", 90, 0., 180.);
154 m_Wenu_trk_transmass_sel_scaled = new TH1F("Wenu_trk_transmass_sel_scaled","Transverse mass of the track and the met scaled to per event", 90, 0., 180.);
156 m_Wenu_clus_pt = new TH1F("Wenu_cluster_pt","Transverse momentum of the leading em cluster",50,0.,100.);
157 RegisterHisto(al_Wenu_mon,m_Wenu_clus_pt);
158
159 // ***********************
160 // Book cluster histograms
161 // ***********************
162
163 // first take care to clear all histogram vectors
164 m_Wenu_Eop.clear();
165 m_Wenu_Eopdiff.clear();
166 m_Wenu_Eop_plus.clear();
167 m_Wenu_Eop_minus.clear();
168 m_Wenu_eta.clear();
169 m_Wenu_phi.clear();
170 m_Wenu_deta.clear();
171 m_Wenu_deta_vs_eta.clear();
172 m_Wenu_deta_vs_phi.clear();
173 m_Wenu_absdeta_vs_eta.clear();
174 m_Wenu_absdeta_vs_phi.clear();
175 m_Wenu_dphi.clear();
176 m_Wenu_dphi_vs_eta.clear();
177 m_Wenu_dphi_vs_phi.clear();
178 m_Wenu_absdphi_vs_eta.clear();
179 m_Wenu_absdphi_vs_phi.clear();
192 m_Wenu_meanEop_vs_p.clear();
194 m_Wenu_meanEop_vs_E.clear();
197 m_Wenu_meanEop_vs_phi.clear();
198 m_Wenu_meanEop_vs_eta.clear();
209 m_Wenu_Eop_lt1_gt1.clear();
210 m_Wenu_Eopdiff_vs_p.clear();
212 m_Wenu_Eopdiff_vs_E.clear();
213 m_Wenu_Eopdiff_vs_phi.clear();
214 m_Wenu_Eopdiff_vs_eta.clear();
215 m_Wenu_Eop_lt1_vs_eta.clear();
216 m_Wenu_Eop_lt1_vs_phi.clear();
217 m_Wenu_Eop_gt1_vs_eta.clear();
218 m_Wenu_Eop_gt1_vs_phi.clear();
221 m_Wenu_Eop_05_25.clear();
222 m_Wenu_Eop_15_25.clear();
224
225 for (int region=0; region!=Nregions; ++region) {
226 std::string title;
227 std::string name;
228
229 name = "Wenu_Eop_" + m_region_strings[region];
230 title = "E/p for Wenu EM-clusters in " + m_region_strings[region];
231 m_Wenu_Eop.push_back(new TH1F(name.c_str(),title.c_str(), 60, 0., 10.));
232
233 RegisterHisto(al_Wenu_mon,m_Wenu_Eop[region]);
234 name = "Wenu_Eopdiff_" + m_region_strings[region];
235 title = "E/p difference (pos-neg) for Wenu EM-clusters in " + m_region_strings[region];
236 m_Wenu_Eopdiff.push_back(new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
237
238 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff[region],true);
239 name = "Wenu_Eop_plus_" + m_region_strings[region];
240 title = "E/p for pos. charged Wenu EM-clusters in " + m_region_strings[region];
241 m_Wenu_Eop_plus.push_back(new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
242 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_plus[region],true);
243
244 name = "Wenu_Eop_minus_" + m_region_strings[region];
245 title = "E/p for neg. charged Wenu EM-clusters in " + m_region_strings[region];
246 m_Wenu_Eop_minus.push_back(new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
247 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_minus[region],true);
248
249 if (region != incl) continue;
250
251 m_Wenu_eta.push_back(new TH1F("Wenu_eta","Eta of Wenu EM-clusters", 15, -3., 3.));
252 RegisterHisto(al_Wenu_mon,m_Wenu_eta[region]);
253 m_Wenu_phi.push_back(new TH1F("Wenu_phi","Phi of Wenu EM-clusters", 15, -3.15, 3.15));
254 RegisterHisto(al_Wenu_mon,m_Wenu_phi[region]);
255
256 m_Wenu_deta.push_back(new TH1F("Wenu_deta","deltaEta(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
257 RegisterHisto(al_Wenu_mon,m_Wenu_deta[region]);
258 m_Wenu_deta_vs_eta.push_back(new TProfile("Wenu_deta_vs_eta","deltaEta(EM-cluster,track) vs. eta in Wenu events", 15, -3., 3.));
259 RegisterHisto(al_Wenu_mon,m_Wenu_deta_vs_eta[region]);
260 m_Wenu_deta_vs_phi.push_back(new TProfile("Wenu_deta_vs_phi","deltaEta(EM-cluster,track) vs. phi in Wenu events", 15, -3.15, 3.15));
261 RegisterHisto(al_Wenu_mon,m_Wenu_deta_vs_phi[region]);
262 m_Wenu_absdeta_vs_eta.push_back(new TProfile("Wenu_absdeta_vs_eta","Abs(deltaEta(EM-cluster,track)) vs. eta in Wenu events", 15, -3., 3.));
263 RegisterHisto(al_Wenu_mon,m_Wenu_absdeta_vs_eta[region]);
264 m_Wenu_absdeta_vs_phi.push_back(new TProfile("Wenu_absdeta_vs_phi","Abs(deltaEta(EM-cluster,track)) vs. phi in Wenu events", 15, -3.15, 3.15));
265 RegisterHisto(al_Wenu_mon,m_Wenu_absdeta_vs_phi[region]);
266 m_Wenu_dphi.push_back(new TH1F("Wenu_dphi","deltaPhi(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
267 RegisterHisto(al_Wenu_mon,m_Wenu_dphi[region]);
268 m_Wenu_dphi_vs_eta.push_back(new TProfile("Wenu_dphi_vs_eta","deltaPhi(EM-cluster,track) vs. eta in Wenu events", 15, -3., 3.));
269 RegisterHisto(al_Wenu_mon,m_Wenu_dphi_vs_eta[region]);
270 m_Wenu_dphi_vs_phi.push_back(new TProfile("Wenu_dphi_vs_phi","deltaPhi(EM-cluster,track) vs. phi in Wenu events", 15, -3.15, 3.15));
271 RegisterHisto(al_Wenu_mon,m_Wenu_dphi_vs_phi[region]);
272 m_Wenu_absdphi_vs_eta.push_back(new TProfile("Wenu_absdphi_vs_eta","Abs(deltaPhi(EM-cluster,track)) vs. eta in Wenu events", 15, -3., 3.));
273 RegisterHisto(al_Wenu_mon,m_Wenu_absdphi_vs_eta[region]);
274 m_Wenu_absdphi_vs_phi.push_back(new TProfile("Wenu_absdphi_vs_phi","Abs(deltaPhi(EM-cluster,track)) vs. phi in Wenu events", 15, -3.15, 3.15));
275 RegisterHisto(al_Wenu_mon,m_Wenu_absdphi_vs_phi[region]);
276
277 m_Wenu_trackmatched_eta.push_back(new TH1F("Wenu_trackmatched_eta","Eta of track-matched Wenu EM-clusters", 15, -3., 3.));
278 RegisterHisto(al_Wenu_mon,m_Wenu_trackmatched_eta[region]);
279 m_Wenu_trackmatched_phi.push_back(new TH1F("Wenu_trackmatched_phi","Phi of track-matched Wenu EM-clusters", 15, -3.15, 3.15));
280 RegisterHisto(al_Wenu_mon,m_Wenu_trackmatched_phi[region]);
281 m_Wenu_trackmatched_Eopmatched_eta.push_back(new TH1F("Wenu_trackmatched_Eopmatched_eta","Eta of track-matched and E/p-matched Wenu EM-clusters", 15, -3., 3.));
283 m_Wenu_trackmatched_Eopmatched_phi.push_back(new TH1F("Wenu_trackmatched_Eopmatched_phi","Phi of track-matched and E/p-matched Wenu EM-clusters", 15, -3.15, 3.15));
285 m_Wenu_trackmatched_tightEopmatched_eta.push_back(new TH1F("Wenu_trackmatched_tightEopmatched_eta","Eta of track-matched and tight E/p-matched Wenu EM-clusters", 15, -3., 3.));
287 m_Wenu_trackmatched_tightEopmatched_phi.push_back(new TH1F("Wenu_trackmatched_tightEopmatched_phi","Phi of track-matched and tight E/p-matched Wenu EM-clusters", 15, -3.15, 3.15));
289
290 m_Wenu_trackmatch_eff_vs_eta.push_back(new TH1F("Wenu_trackmatch_eff_vs_eta","Track-match efficiency for Wenu EM-clusters vs. eta", 15, -3., 3.));
291 RegisterHisto(al_Wenu_mon,m_Wenu_trackmatch_eff_vs_eta[region],1);
292 m_Wenu_trackmatch_eff_vs_phi.push_back(new TH1F("Wenu_trackmatch_eff_vs_phi","Track-match efficiency for Wenu EM-clusters vs. phi", 15, -3.15, 3.15));
293 RegisterHisto(al_Wenu_mon,m_Wenu_trackmatch_eff_vs_phi[region],1);
294 m_Wenu_Eopmatch_eff_vs_eta.push_back(new TH1F("Wenu_Eopmatch_eff_vs_eta","E/p-match efficiency for Wenu EM-clusters vs. eta", 15, -3., 3.));
295 RegisterHisto(al_Wenu_mon,m_Wenu_Eopmatch_eff_vs_eta[region],1);
296 m_Wenu_Eopmatch_eff_vs_phi.push_back(new TH1F("Wenu_Eopmatch_eff_vs_phi","E/p-match efficiency for Wenu EM-clusters vs. phi", 15, -3.15, 3.15));
297 RegisterHisto(al_Wenu_mon,m_Wenu_Eopmatch_eff_vs_phi[region],1);
298 m_Wenu_tightEopmatch_eff_vs_eta.push_back(new TH1F("Wenu_tightEopmatch_eff_vs_eta","Tight E/p-match efficiency for Wenu EM-clusters vs. eta", 15, -3., 3.));
299 RegisterHisto(al_Wenu_mon,m_Wenu_tightEopmatch_eff_vs_eta[region],1);
300 m_Wenu_tightEopmatch_eff_vs_phi.push_back(new TH1F("Wenu_tightEopmatch_eff_vs_phi","Tight E/p-match efficiency for Wenu EM-clusters vs. phi", 15, -3.15, 3.15));
301 RegisterHisto(al_Wenu_mon,m_Wenu_tightEopmatch_eff_vs_phi[region],1);
302
303 m_Wenu_meanEop_vs_p.push_back(new TProfile("Wenu_meanEop_vs_p", "Mean E/p vs p for Wenu EM-clusters", 15, 0., 300.));
304 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_p[region]);
305 m_Wenu_meanEop_vs_invp.push_back(new TProfile("Wenu_meanEop_vs_invp", "Mean E/p vs 1/p for Wenu EM-clusters", 15, 0., 0.05));
306 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_invp[region]);
307 m_Wenu_meanEop_vs_E.push_back(new TProfile("Wenu_meanEop_vs_E", "Mean E/p vs E for Wenu EM-clusters", 15, 0., 300.));
308 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_E[region]);
309 m_Wenu_meanEop_vs_chargedp.push_back(new TProfile("Wenu_meanEop_vs_chargedp", "Mean E/p vs charge*p for Wenu EM-clusters", 30, -300., 300.));
310 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_chargedp[region]);
311 m_Wenu_meanEop_vs_chargedE.push_back(new TProfile("Wenu_meanEop_vs_chargedE", "Mean E/p vs charge*E for Wenu EM-clusters", 30, -300., 300.));
312 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_chargedE[region]);
313 m_Wenu_meanEop_vs_phi.push_back(new TProfile("Wenu_meanEop_vs_phi", "Mean E/p vs phi for Wenu EM-clusters", 15, -3.15, 3.15));
314 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_phi[region]);
315 m_Wenu_meanEop_vs_eta.push_back(new TProfile("Wenu_meanEop_vs_eta", "Mean E/p vs eta for Wenu EM-clusters", 15, -3., 3.));
316 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_eta[region]);
317
318 m_Wenu_meanEop_vs_p_plus.push_back(new TProfile("Wenu_meanEop_vs_p_plus", "Mean E/p vs p for pos. charged Wenu EM-clusters", 15, 0., 300.));
319 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_p_plus[region]);
320 m_Wenu_meanEop_vs_invp_plus.push_back(new TProfile("Wenu_meanEop_vs_invp_plus", "Mean E/p vs 1/p for pos. charged Wenu EM-clusters", 15, 0., 0.05));
321 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_invp_plus[region]);
322 m_Wenu_meanEop_vs_E_plus.push_back(new TProfile("Wenu_meanEop_vs_E_plus", "Mean E/p vs E for pos. charged Wenu EM-clusters", 15, 0., 300.));
323 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_E_plus[region]);
324 m_Wenu_meanEop_vs_phi_plus.push_back(new TProfile("Wenu_meanEop_vs_phi_plus", "Mean E/p vs phi for pos. charged Wenu EM-clusters", 15, -3.15, 3.15));
325 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_phi_plus[region]);
326 m_Wenu_meanEop_vs_eta_plus.push_back(new TProfile("Wenu_meanEop_vs_eta_plus", "Mean E/p vs eta for pos. charged Wenu EM-clusters", 15, -3., 3.));
327 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_eta_plus[region]);
328
329 m_Wenu_meanEop_vs_p_minus.push_back(new TProfile("Wenu_meanEop_vs_p_minus", "Mean E/p vs p for neg. charged Wenu EM-clusters", 15, 0., 300.));
330 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_p_minus[region]);
331 m_Wenu_meanEop_vs_invp_minus.push_back(new TProfile("Wenu_meanEop_vs_invp_minus", "Mean E/p vs 1/p for neg. charged Wenu EM-clusters", 15, 0., 0.05));
332 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_invp_minus[region]);
333 m_Wenu_meanEop_vs_E_minus.push_back(new TProfile("Wenu_meanEop_vs_E_minus", "Mean E/p vs E for neg. charged Wenu EM-clusters", 15, 0., 300.));
334 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_E_minus[region]);
335 m_Wenu_meanEop_vs_phi_minus.push_back(new TProfile("Wenu_meanEop_vs_phi_minus", "Mean E/p vs phi for neg. charged Wenu EM-clusters", 15, -3.15, 3.15));
336 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_phi_minus[region]);
337 m_Wenu_meanEop_vs_eta_minus.push_back(new TProfile("Wenu_meanEop_vs_eta_minus", "Mean E/p vs eta for neg. charged Wenu EM-clusters", 15, -3., 3.));
338 RegisterHisto(al_Wenu_mon,m_Wenu_meanEop_vs_eta_minus[region]);
339
340 m_Wenu_Eop_lt1_gt1.push_back(new TH1F("Wenu_Eop_lt1_gt1", "E/p below/above 1 for Wenu EM-clusters", 2, 0.5, 1.5));
341 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_lt1_gt1[region]);
342
343 m_Wenu_Eopdiff_vs_p.push_back(new TProfile("Wenu_Eopdiff_vs_p", "E/p difference (pos-neg) vs p for Wenu EM-clusters", 15, 0., 300.));
344 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff_vs_p[region]);
345 m_Wenu_Eopdiff_vs_invp.push_back(new TProfile("Wenu_Eopdiff_vs_invp", "E/p difference (pos-neg) vs 1/p for Wenu EM-clusters", 15, 0., 0.05));
346 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff_vs_invp[region]);
347 m_Wenu_Eopdiff_vs_E.push_back(new TProfile("Wenu_Eopdiff_vs_E", "E/p difference (pos-neg) vs E for Wenu EM-clusters", 15, 0., 300.));
348 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff_vs_E[region]);
349 m_Wenu_Eopdiff_vs_phi.push_back(new TProfile("Wenu_Eopdiff_vs_phi", "E/p difference (pos-neg) vs phi for Wenu EM-clusters", 15, -3.15, 3.15));
350 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff_vs_phi[region]);
351 m_Wenu_Eopdiff_vs_eta.push_back(new TProfile("Wenu_Eopdiff_vs_eta", "E/p difference (pos-neg) vs eta for Wenu EM-clusters", 15, -3., 3.));
352 RegisterHisto(al_Wenu_mon,m_Wenu_Eopdiff_vs_eta[region]);
353
354 m_Wenu_Eop_lt1_vs_eta.push_back(new TH1F("Wenu_Eop_lt1_vs_eta","Eta of Wenu EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3., 3.));
355 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_lt1_vs_eta[region]);
356 m_Wenu_Eop_lt1_vs_phi.push_back(new TH1F("Wenu_Eop_lt1_vs_phi","Phi of Wenu EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3.15, 3.15));
357 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_lt1_vs_phi[region]);
358 m_Wenu_Eop_gt1_vs_eta.push_back(new TH1F("Wenu_Eop_gt1_vs_eta","Eta of Wenu EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3., 3.));
359 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_gt1_vs_eta[region]);
360 m_Wenu_Eop_gt1_vs_phi.push_back(new TH1F("Wenu_Eop_gt1_vs_phi","Phi of Wenu EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3.15, 3.15));
361 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_gt1_vs_phi[region]);
362 m_Wenu_frac_Eop_lt1_vs_eta.push_back(new TH1F("Wenu_frac_Eop_lt1_vs_eta","Fraction of Wenu EM-clusters with E/p < 1 (not incl. small E/p) vs Eta", 15, -3., 3.));
363 RegisterHisto(al_Wenu_mon,m_Wenu_frac_Eop_lt1_vs_eta[region],1);
364 m_Wenu_frac_Eop_lt1_vs_phi.push_back(new TH1F("Wenu_frac_Eop_lt1_vs_phi","Fraction of Wenu EM-clusters with E/p < 1 (not incl. small E/p) vs Phi", 15, -3.15, 3.15));
365 RegisterHisto(al_Wenu_mon,m_Wenu_frac_Eop_lt1_vs_phi[region],1);
366
367 m_Wenu_Eop_05_25.push_back(new TH1F("Wenu_Eop_05_25","Number of Wenu events with 0.5 < E/p 2.5", 1, 0., 1.));
368 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_05_25[region]);
369 m_Wenu_Eop_15_25.push_back(new TH1F("Wenu_Eop_15_25","Number of Wenu events with 1.5 < E/p 2.5", 1, 0., 1.));
370 RegisterHisto(al_Wenu_mon,m_Wenu_Eop_15_25[region]);
371 m_Wenu_frac_Eop_05_25_15_25.push_back(new TH1F("Wenu_frac_Eop_05_25_15_25","Fraction of Wenu EM-clusters with 1.5 < E/p < 2.5 and 0.5 < E/p < 2.5", 1, 0., 1.));
372 RegisterHisto(al_Wenu_mon,m_Wenu_frac_Eop_05_25_15_25[region],1);
373 }
374
376 }
377 return StatusCode::SUCCESS;
378}
379
380void IDPerfMonWenu::RegisterHisto(MonGroup& mon, TH1* histo, bool doSumw2) {
381 if (doSumw2) histo->Sumw2();
382 StatusCode sc = mon.regHist(histo);
383 if (sc.isFailure() ) {
384 ATH_MSG_DEBUG( "Cannot book TH1 Histogram:" );
385 }
386}
387
388void IDPerfMonWenu::RegisterHisto(MonGroup& mon, TProfile* histo) {
389 if (mon.regHist(histo).isFailure() ) {
390 ATH_MSG_DEBUG( "Cannot book TProfile Histogram:" );
391 }
392}
393
394void IDPerfMonWenu::RegisterHisto(MonGroup& mon, TH2* histo, bool doSumw2) {
395 if (doSumw2) histo->Sumw2();
396 if (mon.regHist(histo).isFailure() ) {
397 ATH_MSG_WARNING( "Cannot book TH2 Histogram:" );
398 }
399}
400
401StatusCode IDPerfMonWenu::fillHistograms(const EventContext& /*ctx*/)
402{
403 int nevents = (int) m_Nevents->GetEntries();
404 const bool firstEvent{nevents == 1};
405 // get electron container from storegate
406 auto formErrorMessage = [] (const std::string & contName)->std::string {
407 return std::string(std::string("No Collection with name ") + contName + std::string(" found in StoreGate"));
408 };
410
411 if (not electrons){
412 const std::string & errMsg=formErrorMessage(m_electronsName);
413 if (firstEvent) ATH_MSG_WARNING( errMsg );
414 else ATH_MSG_DEBUG(errMsg);
415 return StatusCode::RECOVERABLE;
416 }
417 // get photon container from storegate
418 const xAOD::PhotonContainer* photons = getCollectionWithCheck<xAOD::PhotonContainer>(evtStore(),m_photonsName);
419 if (not photons){
420 const std::string & errMsg = formErrorMessage(m_photonsName);
421 if (firstEvent) ATH_MSG_WARNING( errMsg );
422 else ATH_MSG_DEBUG(errMsg);
423 return StatusCode::RECOVERABLE;
424 }
425 // get emcluster container from storegate
426 const xAOD::CaloClusterContainer* emclusters = getCollectionWithCheck<xAOD::CaloClusterContainer>(evtStore(),m_emclustersName);
427 if (not emclusters){
428 const std::string & errMsg = formErrorMessage(m_emclustersName);
429 if (firstEvent) ATH_MSG_WARNING( errMsg );
430 else ATH_MSG_DEBUG(errMsg);
431 return StatusCode::RECOVERABLE;
432 }
433 // get track container from storegate
434 const xAOD::TrackParticleContainer* tracks = getCollectionWithCheck<xAOD::TrackParticleContainer>(evtStore(),m_tracksName);
435 if (not tracks){
436 const std::string & errMsg = formErrorMessage(m_tracksName);
437 if (firstEvent) ATH_MSG_WARNING( errMsg );
438 else ATH_MSG_DEBUG(errMsg);
439 return StatusCode::RECOVERABLE;
440 }
441 // get met container from storegate
442 const xAOD::MissingETContainer* final_met = getCollectionWithCheck<xAOD::MissingETContainer>(evtStore(),m_metName);
443 if (not final_met){
444 const std::string & errMsg = formErrorMessage(m_metName);
445 if (firstEvent) ATH_MSG_WARNING( errMsg );
446 else ATH_MSG_DEBUG(errMsg);
447 return StatusCode::RECOVERABLE;
448 }
449 m_Nevents->Fill(0.);
450 // ******************
451 // Get the missing ET
452 // ******************
453 const xAOD::MissingET *MET;
454 MET = (*final_met)[m_metRefFinalName];
455 double met = MET->met();
456 msg(MSG::DEBUG) << "MET = " << met << endmsg;
457 // *******************
458 // Look at EM clusters
459 // *******************
460 const xAOD::CaloCluster* LeadingEMcluster = getLeadingEMcluster(photons, electrons);
461 const xAOD::CaloCluster* SecondLeadingEMcluster = getLeadingEMcluster(photons, electrons, LeadingEMcluster);
462 if (LeadingEMcluster) {
463 int leading_eta_region = etaRegion(LeadingEMcluster->eta());
464 double leading_dPhi = electronTrackMatchEta(tracks,LeadingEMcluster);
465 double leading_dEta = electronTrackMatchPhi(tracks,LeadingEMcluster);
466 const xAOD::TrackParticle* track_leading_emcluster = electronTrackMatch(tracks,LeadingEMcluster);
467 int selected = isWenu(LeadingEMcluster, SecondLeadingEMcluster, met);
468 if (selected == 0) {
469 // *********************
470 // Fill event histograms
471 // *********************
472 m_Wenu_met_sel->Fill(met/Gaudi::Units::GeV);
473 m_Wenu_clus_pt->Fill(LeadingEMcluster->pt()/Gaudi::Units::GeV);
474 double cluster_met_transmass = TransMass(LeadingEMcluster,MET);
475 if (cluster_met_transmass > 0.) m_Wenu_transmass_sel->Fill(cluster_met_transmass);
476 double track_met_transmass = 0.;
477 if (track_leading_emcluster ) {
478 track_met_transmass = TransMass(track_leading_emcluster,MET);
479 if (track_met_transmass > 0.) m_Wenu_trk_transmass_sel->Fill(track_met_transmass);
480 }
481 // ***********************
482 // Fill cluster histograms
483 // ***********************
484 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, leading_eta_region, leading_dEta, leading_dPhi);
485 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, incl, leading_dEta, leading_dPhi);
486 }
487 }
488 return StatusCode::SUCCESS;
489}
490
491void IDPerfMonWenu::makeEffHisto(TH1F* h_num, TH1F* h_denom, TH1F* h_eff) {
492 h_eff->Divide(h_num,h_denom,1.,1.,"B");
493}
494
496{
497 if( endOfRunFlag() ) {
498 // PostProcess Wenu histograms
499 for (int region=0; region!=1; ++region) {
506 // commented out for some reason?
507 m_Wenu_Eopdiff[region]->Add(m_Wenu_Eop_plus[region],m_Wenu_Eop_minus[region],1.,-1);
513 //
517 }
518 }
519 return StatusCode::SUCCESS;
520}
521
522
524 const xAOD::CaloCluster* leading_emcluster{nullptr};
525 float max_pt = 0.;
526 for (const auto cl: *clusters) {
527 if (cl == omitCluster) continue;
528 double deltaR = std::sqrt(std::pow(std::abs(cl->phi() - omitCluster->phi()),2) + std::pow(std::abs(cl->eta() - omitCluster->eta()),2));
529 if(deltaR < 0.005) continue;
530 if (cl->pt()/Gaudi::Units::GeV < 10.) continue;
531 if (cl->pt() > max_pt) {
532 leading_emcluster = cl;
533 max_pt = cl->pt();
534 }
535 }
536 return leading_emcluster;
537}
538
540 const xAOD::CaloCluster* leading_emcluster = nullptr;
541 bool LHSel;
542 float max_pt = 0.;
543 for (const auto em: *electrons) {
544 // check ID
545 if(m_doIDCuts){
546 LHSel = false;
547 LHSel = (bool) m_LHTool2015->accept(em);
548 if(!LHSel) continue;
549 ATH_MSG_DEBUG("Electron passes " << m_electronIDLevel << " likelihood selection");
550 }
551 const xAOD::CaloCluster* cl = em->caloCluster();
552 if (cl == omitCluster) continue;
553 if (cl->pt()/Gaudi::Units::GeV < 10.) continue;
554 if (cl->pt() > max_pt) {
555 leading_emcluster = cl;
556 max_pt = cl->pt();
557 }
558 }
559 return leading_emcluster;
560
561}
562
563const xAOD::TrackParticle* IDPerfMonWenu::electronTrackMatch(const xAOD::TrackParticleContainer* tracks, const xAOD::CaloCluster* cluster, double dEta, double dPhi) const {
564 const xAOD::TrackParticle* matched_track = nullptr;
565 double min_dR = 1.0e+20;
566 for (const auto track: *tracks) {
567 double deta = cluster->eta()-track->eta();
568 double dphi = cluster->phi()-track->phi();
569 double dr = std::sqrt(deta*deta + dphi*dphi);
570 if (dr < min_dR && std::abs(deta) < dEta && std::abs(dphi) < dPhi) {
571 min_dR = dr;
572 matched_track = track;
573 }
574 }
575 return matched_track;
576}
577
578double IDPerfMonWenu::electronTrackMatchEta(const xAOD::TrackParticleContainer* tracks, const xAOD::CaloCluster* cluster, double dEta) const {
579 const xAOD::TrackParticle* matched_track = nullptr;
580 double min_dEta = 1.0e+20;
581 for (const auto track: *tracks) {
582 double deta = std::abs(cluster->eta()-track->eta());
583 if (deta < min_dEta && deta < dEta) {
584 min_dEta = deta;
585 matched_track = track;
586 }
587 }
588 double dPhi = 1.0e+20;
589 if (matched_track != nullptr) dPhi = signedDeltaPhi(cluster->phi(),matched_track->phi());
590 return dPhi;
591}
592
593double IDPerfMonWenu::electronTrackMatchPhi(const xAOD::TrackParticleContainer* tracks, const xAOD::CaloCluster* cluster, double dPhi) const {
594 const xAOD::TrackParticle* matched_track = nullptr;
595 double min_dPhi = 1.0e+20;
596 for (const auto track : *tracks) {
597 double dphi = std::abs(signedDeltaPhi(cluster->phi(),track->phi()));
598 if (dphi < min_dPhi && dphi < dPhi) {
599 min_dPhi = dphi;
600 matched_track = track;
601 }
602 }
603 double dEta = 1.0e+20;
604 if (matched_track != nullptr) dEta = cluster->eta()-matched_track->eta();
605 return dEta;
606
607}
608
609int IDPerfMonWenu::isWenu(const xAOD::CaloCluster* em, const xAOD::CaloCluster* em2, double met) const {
610 int selected = 2;
611 if(em->pt()/Gaudi::Units::GeV > 25.) --selected;
612 if(met/Gaudi::Units::GeV > 20.) --selected; // was at 0 for some reason?
613 if(!m_rejectSecondCluster) return selected;
614 // else check 2nd EM cluster veto
615 if(em2 != nullptr){
616 if(em2->pt()/Gaudi::Units::GeV > 25.){
617 ATH_MSG_DEBUG("Event rejected due to second EM cluster w/ pT > 25 GeV");
618 selected++;
619 }
620 }
621 return selected;
622}
623
624double IDPerfMonWenu::InvMass(const xAOD::CaloCluster* EM1, const xAOD::CaloCluster* EM2) const {
625 if (EM1 == nullptr || EM2 == nullptr) return -99.;
626 double invmass = 0.;
627 if (EM1->pt() != 0 && EM2->pt() != 0.) {
628 TLorentzVector particle1;
629 TLorentzVector particle2;
630 particle1.SetPtEtaPhiE(EM1->pt()/Gaudi::Units::GeV,EM1->eta(),EM1->phi(),EM1->e()/Gaudi::Units::GeV);
631 particle2.SetPtEtaPhiE(EM2->pt()/Gaudi::Units::GeV,EM2->eta(),EM2->phi(),EM2->e()/Gaudi::Units::GeV);
632 invmass = (particle1+particle2).Mag();
633 }
634 return invmass;
635}
636
637double IDPerfMonWenu::InvMass(const xAOD::TrackParticle* trk1, const xAOD::TrackParticle* trk2) const {
638 if (trk1 == nullptr || trk2 == nullptr) return -99.;
639 double invmass = 0.;
640 if (trk1->pt() != 0 && trk2->pt() != 0.) {
641 TLorentzVector particle1;
642 TLorentzVector particle2;
643 particle1.SetPtEtaPhiE(trk1->pt()/Gaudi::Units::GeV,trk1->eta(),trk1->phi(),trk1->e()/Gaudi::Units::GeV);
644 particle2.SetPtEtaPhiE(trk2->pt()/Gaudi::Units::GeV,trk2->eta(),trk2->phi(),trk2->e()/Gaudi::Units::GeV);
645 invmass = (particle1+particle2).Mag();
646 }
647 return invmass;
648}
649
651 if (EM == nullptr || met == nullptr) return -99.;
652 double transmass = 0.;
653 float dphi = signedDeltaPhi(EM->phi(),met->phi());
654 transmass = std::sqrt(2.*EM->et()*met->met()*(1.-std::cos(dphi)));
655 return transmass/Gaudi::Units::GeV;
656
657}
658
659double IDPerfMonWenu::TransMass(const xAOD::TrackParticle* track, const xAOD::MissingET* met) const {
660 if (track == nullptr || met == nullptr) return -99.;
661 double transmass = 0.;
662 float dphi = signedDeltaPhi(track->phi(),met->phi());
663 transmass = std::sqrt(2.*(track->p4().Et()/Gaudi::Units::GeV)*(met->met()/Gaudi::Units::GeV)*(1.-std::cos(dphi)));
664 return transmass;
665}
666
667double IDPerfMonWenu::deltaR(const xAOD::CaloCluster* cluster, const xAOD::TrackParticle* track) const {
668 double dr =-999.;
669 if (cluster == nullptr || track == nullptr) return dr;
670 double deta = cluster->eta()-track->eta();
671 double dphi = cluster->phi()-track->phi();
672 if(std::abs(dphi) > M_PI) dphi = 2.*M_PI-std::abs(dphi);
673 dr = std::sqrt(deta*deta + dphi*dphi);
674 return dr;
675
676}
677
678double IDPerfMonWenu::signedDeltaPhi(double phi1, double phi2) const {
679 double phia=phi1;
680 if(phi1>Gaudi::Units::pi) phia=phi1-2.*Gaudi::Units::pi;
681 double phib=phi2;
682 if(phi2>Gaudi::Units::pi) phib=phi2-2.*Gaudi::Units::pi;
683 double dphi=phia-phib;
684 if(dphi>Gaudi::Units::pi) dphi-=2.*Gaudi::Units::pi;
685 if(dphi<-Gaudi::Units::pi) dphi+=2.*Gaudi::Units::pi;
686 return dphi;
687}
688
690 int region = -99;
691 if (std::abs(eta) <= 1.) region = barrel;
692 else if (eta > 1.) region = eca; // eca
693 else if (eta < -1.) region = ecc; // ecc
694 return region;
695
696}
697
698void IDPerfMonWenu::FillHistosPerCluster(const xAOD::CaloCluster* cluster, const xAOD::TrackParticle* track, int region, float dEta, float dPhi) {
699 if (not cluster) return;
700 if (region<0){
701 throw std::out_of_range("Region is negative in IDPerfMonWenu::FillHistosPerCluster");
702 }
703 // THERE IS A CLUSTER
704 if (region == incl) { // inclusive only
705 m_Wenu_eta[region]->Fill(cluster->eta());
706 m_Wenu_phi[region]->Fill(cluster->phi());
707 // match in eta and phi separately and make dEta and dPhi plots
708 if (dEta < 1.0e+20) {
709 m_Wenu_deta[region]->Fill(dEta);
710 if (std::abs(dEta) < 0.05) { // calculate mean only for those in matching window
711 m_Wenu_deta_vs_eta[region]->Fill(cluster->eta(),dEta);
712 m_Wenu_deta_vs_phi[region]->Fill(cluster->phi(),dEta);
713 m_Wenu_absdeta_vs_eta[region]->Fill(cluster->eta(),std::abs(dEta));
714 m_Wenu_absdeta_vs_phi[region]->Fill(cluster->phi(),std::abs(dEta));
715 }
716 }
717 if (dPhi < 1.0e+20) {
718 m_Wenu_dphi[region]->Fill(dPhi);
719 if (std::abs(dPhi) < 0.1) { // calculate mean only for those in matching window
720 m_Wenu_dphi_vs_eta[region]->Fill(cluster->eta(),dPhi);
721 m_Wenu_dphi_vs_phi[region]->Fill(cluster->phi(),dPhi);
722 m_Wenu_absdphi_vs_eta[region]->Fill(cluster->eta(),std::abs(dPhi));
723 m_Wenu_absdphi_vs_phi[region]->Fill(cluster->phi(),std::abs(dPhi));
724 }
725 }
726
727 } // end inclusive only
728
729 if (track == nullptr) return;
730 // TRACK-MATCHED
731 float eoverp = 0.;
732 float track_p = track->pt()*std::cosh(track->eta());
733 if (track_p != 0.) eoverp = cluster->e()/track_p;
734 m_Wenu_Eop[region]->Fill(eoverp);
735 if (track->charge() == 1.) {
736 m_Wenu_Eop_plus[region]->Fill(eoverp);
737 }
738 else if (track->charge() == -1.) {
739 m_Wenu_Eop_minus[region]->Fill(eoverp);
740 }
741 if (region == incl) { // inclusive only
742 auto safeInverseMom = [](float p){
743 if (p == 0.) return 10e10; //arbitrary very large number
744 return 1./(p/Gaudi::Units::GeV);
745 };
746 m_Wenu_trackmatched_eta[region]->Fill(cluster->eta());
747 m_Wenu_trackmatched_phi[region]->Fill(cluster->phi());
748 if (eoverp > m_eoverp_tight_min && eoverp < m_eoverp_tight_max) {
749 m_Wenu_meanEop_vs_p[region]->Fill(track_p/Gaudi::Units::GeV,eoverp);
750 m_Wenu_meanEop_vs_invp[region]->Fill(safeInverseMom(track_p),eoverp);
751 m_Wenu_meanEop_vs_E[region]->Fill(cluster->e()/Gaudi::Units::GeV,eoverp);
752 m_Wenu_meanEop_vs_chargedp[region]->Fill(double(track->charge())*track_p/Gaudi::Units::GeV,eoverp);
753 m_Wenu_meanEop_vs_chargedE[region]->Fill(double(track->charge())*cluster->e()/Gaudi::Units::GeV,eoverp);
754 m_Wenu_meanEop_vs_phi[region]->Fill(track->phi(),eoverp);
755 m_Wenu_meanEop_vs_eta[region]->Fill(track->eta(),eoverp);
756 }
757 if (track->charge() == 1.) {
758 if (eoverp > m_eoverp_tight_min && eoverp < m_eoverp_tight_max) {
759 m_Wenu_meanEop_vs_p_plus[region]->Fill(track_p/Gaudi::Units::GeV,eoverp);
760 m_Wenu_meanEop_vs_invp_plus[region]->Fill(safeInverseMom(track_p),eoverp);
761 m_Wenu_meanEop_vs_E_plus[region]->Fill(cluster->e()/Gaudi::Units::GeV,eoverp);
762 m_Wenu_meanEop_vs_phi_plus[region]->Fill(track->phi(),eoverp);
763 m_Wenu_meanEop_vs_eta_plus[region]->Fill(track->eta(),eoverp);
764 }
765 }
766 else if (track->charge() == -1.) {
767 if (eoverp > m_eoverp_tight_min && eoverp < m_eoverp_tight_max) {
768 m_Wenu_meanEop_vs_p_minus[region]->Fill(track_p/Gaudi::Units::GeV,eoverp);
769 m_Wenu_meanEop_vs_invp_minus[region]->Fill(safeInverseMom(track_p),eoverp);
770 m_Wenu_meanEop_vs_E_minus[region]->Fill(cluster->e()/Gaudi::Units::GeV,eoverp);
771 m_Wenu_meanEop_vs_phi_minus[region]->Fill(track->phi(),eoverp);
772 m_Wenu_meanEop_vs_eta_minus[region]->Fill(track->eta(),eoverp);
773 }
774 }
775 if (eoverp < m_eoverp_standard_max && eoverp > m_eoverp_standard_min) {
776 m_Wenu_trackmatched_Eopmatched_eta[region]->Fill(cluster->eta());
777 m_Wenu_trackmatched_Eopmatched_phi[region]->Fill(cluster->phi());
778 }
779 if (eoverp < m_eoverp_tight_max && eoverp > m_eoverp_tight_min) {
780 m_Wenu_trackmatched_tightEopmatched_eta[region]->Fill(cluster->eta());
781 m_Wenu_trackmatched_tightEopmatched_phi[region]->Fill(cluster->phi());
782 }
783 if (eoverp > m_eoverp_tight_min && eoverp < 1.) {
784 m_Wenu_Eop_lt1_vs_eta[region]->Fill(cluster->eta());
785 m_Wenu_Eop_lt1_vs_phi[region]->Fill(cluster->phi());
786 m_Wenu_Eop_lt1_gt1[region]->Fill(0.75);
787 }
788 else if (eoverp > 1. && eoverp < m_eoverp_tight_max) {
789 m_Wenu_Eop_gt1_vs_eta[region]->Fill(cluster->eta());
790 m_Wenu_Eop_gt1_vs_phi[region]->Fill(cluster->phi());
791 m_Wenu_Eop_lt1_gt1[region]->Fill(1.25);
792 }
793 if (eoverp > 0.5 && eoverp < 2.5) m_Wenu_Eop_05_25[region]->Fill(0.5);
794 if (eoverp > 1.5 && eoverp < 2.5) m_Wenu_Eop_15_25[region]->Fill(0.5);
795
796 } // end inclusive only
797
798}
#define M_PI
Scalar eta() const
pseudorapidity method
#define endmsg
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
This is an Identifier helper class for the TRT subdetector.
static const Attributes_t empty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ServiceHandle< StoreGateSvc > & evtStore()
static Environment_t environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects ...
virtual ~IDPerfMonWenu()
TH1F * m_Wenu_transmass_sel
double m_eoverp_tight_max
std::vector< TProfile * > m_Wenu_meanEop_vs_chargedE
void makeEffHisto(TH1F *h_num, TH1F *h_denom, TH1F *h_eff)
std::vector< TH1F * > m_Wenu_phi
TH1F * m_Wenu_trk_transmass_sel
std::vector< TH1F * > m_Wenu_frac_Eop_lt1_vs_eta
std::string m_photonsName
std::vector< TProfile * > m_Wenu_Eopdiff_vs_E
std::vector< TH1F * > m_Wenu_tightEopmatch_eff_vs_eta
std::vector< TProfile * > m_Wenu_meanEop_vs_phi_minus
std::string m_metRefFinalName
std::vector< TH1F * > m_Wenu_frac_Eop_lt1_vs_phi
std::vector< TProfile * > m_Wenu_dphi_vs_phi
std::vector< TH1F * > m_Wenu_trackmatch_eff_vs_eta
TH1F * m_Wenu_met_sel
std::vector< TProfile * > m_Wenu_meanEop_vs_phi
std::vector< TProfile * > m_Wenu_Eopdiff_vs_p
std::vector< TProfile * > m_Wenu_meanEop_vs_chargedp
std::vector< TH1F * > m_Wenu_trackmatched_eta
std::vector< TProfile * > m_Wenu_meanEop_vs_p_minus
std::vector< TProfile * > m_Wenu_meanEop_vs_invp_plus
std::vector< TProfile * > m_Wenu_deta_vs_phi
std::vector< TH1F * > m_Wenu_Eop_gt1_vs_phi
std::vector< TH1F * > m_Wenu_Eop_plus
std::vector< TH1F * > m_Wenu_trackmatched_tightEopmatched_eta
std::vector< TProfile * > m_Wenu_Eopdiff_vs_invp
int etaRegion(double eta)
double signedDeltaPhi(double phi1, double phi2) const
std::vector< TProfile * > m_Wenu_meanEop_vs_phi_plus
std::string m_electronsName
std::vector< TH1F * > m_Wenu_Eopdiff
std::string m_metName
double electronTrackMatchPhi(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dPhi=0.1) const
std::vector< TH1F * > m_Wenu_Eopmatch_eff_vs_eta
IDPerfMonWenu(const std::string &type, const std::string &name, const IInterface *parent)
std::vector< TH1F * > m_Wenu_deta
std::vector< TH1F * > m_Wenu_tightEopmatch_eff_vs_phi
TH1F * m_Wenu_trk_transmass_sel_scaled
double electronTrackMatchEta(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dEta=0.05) const
std::vector< TH1F * > m_Wenu_Eop_gt1_vs_eta
double m_eoverp_standard_max
double InvMass(const xAOD::CaloCluster *EM1, const xAOD::CaloCluster *EM2) const
std::vector< TProfile * > m_Wenu_meanEop_vs_p
const xAOD::TrackParticle * electronTrackMatch(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dEta=0.05, double dPhi=0.1) const
std::string m_triggerChainName
double m_eoverp_standard_min
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
std::vector< TProfile * > m_Wenu_dphi_vs_eta
std::vector< TProfile * > m_Wenu_meanEop_vs_eta_plus
std::vector< TProfile * > m_Wenu_meanEop_vs_E
std::vector< TProfile * > m_Wenu_absdphi_vs_eta
std::vector< TProfile * > m_Wenu_meanEop_vs_invp_minus
TH1F * m_Wenu_clus_pt
std::unique_ptr< AsgElectronLikelihoodTool > m_LHTool2015
void RegisterHisto(MonGroup &mon, TH1 *histo, bool doSumw2=false)
std::vector< TH1F * > m_Wenu_Eop_05_25
double m_eoverp_tight_min
std::vector< TProfile * > m_Wenu_deta_vs_eta
std::vector< TProfile * > m_Wenu_absdphi_vs_phi
std::string m_VxPrimContainerName
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
double TransMass(const xAOD::CaloCluster *EM, const xAOD::MissingET *met) const
std::string m_electronIDLevel
virtual StatusCode fillHistograms(const EventContext &ctx)
An inheriting class should either override this function or fillHists().
const xAOD::CaloCluster * getLeadingEMcluster(const xAOD::CaloClusterContainer *clusters, const xAOD::CaloCluster *omitCluster=0) const
std::vector< TProfile * > m_Wenu_meanEop_vs_invp
std::vector< TProfile * > m_Wenu_Eopdiff_vs_phi
std::vector< TProfile * > m_Wenu_absdeta_vs_phi
double deltaR(const xAOD::CaloCluster *cluster, const xAOD::TrackParticle *track) const
std::vector< TH1F * > m_Wenu_trackmatched_Eopmatched_eta
void FillHistosPerCluster(const xAOD::CaloCluster *cluster, const xAOD::TrackParticle *track, int region, float dEta, float dPhi)
std::vector< std::string > m_region_strings
std::vector< TH1F * > m_Wenu_trackmatched_phi
std::vector< TH1F * > m_Wenu_trackmatch_eff_vs_phi
virtual StatusCode initialize()
std::vector< TH1F * > m_Wenu_dphi
std::vector< TH1F * > m_Wenu_eta
std::vector< TH1F * > m_Wenu_Eop_lt1_vs_eta
std::string m_emclustersName
std::string m_tracksName
std::vector< TProfile * > m_Wenu_meanEop_vs_E_minus
std::vector< TProfile * > m_Wenu_meanEop_vs_eta
std::vector< TH1F * > m_Wenu_trackmatched_tightEopmatched_phi
std::vector< TProfile * > m_Wenu_meanEop_vs_E_plus
std::vector< TProfile * > m_Wenu_meanEop_vs_p_plus
std::vector< TProfile * > m_Wenu_absdeta_vs_eta
std::vector< TH1F * > m_Wenu_trackmatched_Eopmatched_phi
bool m_rejectSecondCluster
std::vector< TH1F * > m_Wenu_Eop_minus
std::vector< TH1F * > m_Wenu_Eop_lt1_vs_phi
std::vector< TProfile * > m_Wenu_meanEop_vs_eta_minus
std::vector< TH1F * > m_Wenu_Eopmatch_eff_vs_phi
std::vector< TH1F * > m_Wenu_frac_Eop_05_25_15_25
std::vector< TH1F * > m_Wenu_Eop
int isWenu(const xAOD::CaloCluster *em, const xAOD::CaloCluster *em2, double met) const
std::vector< TProfile * > m_Wenu_Eopdiff_vs_eta
std::vector< TH1F * > m_Wenu_Eop_15_25
std::vector< TH1F * > m_Wenu_Eop_lt1_gt1
A container of information describing a monitoring object.
ManagedMonitorToolBase(const std::string &type, const std::string &name, const IInterface *parent)
static const T * getContainer(CONTAINERS eContainer)
virtual double pt() const
The transverse momentum ( ) of the particle (negative for negative-energy clusters).
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
virtual double e() const override final
The total energy of the particle.
Definition MET.py:1
const SG::AuxVectorData * container() const
Return the container holding this element.
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
MissingET_v1 MissingET
Version control by type defintion.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.
MsgStream & msg
Definition testRead.cxx:32