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