16#include "TLorentzVector.h"
34#include "GaudiKernel/SystemOfUnits.h"
35#include "GaudiKernel/PhysicalConstants.h"
48 if (evtStore->contains<T>(contName)){
50 if(evtStore->retrieve(container,contName).isFailure())
return nullptr;
90 ATH_MSG_DEBUG(
"IDPerfMonWenu::Initialize() -- Setting up electron LH tool.");
91 m_LHTool2015=std::make_unique<AsgElectronLikelihoodTool> (
"m_LHTool2015");
97 std::string confDir =
"ElectronPhotonSelectorTools/offline/mc15_20150712/";
99 ATH_MSG_WARNING(
"electronIDLevel is set to empty! No electron ID cuts will be applied.");
103 ATH_MSG_WARNING(
"Unknown electronIDLevel!! (Accepted values: Loose, Medium, Tight)");
109 ATH_MSG_WARNING(
"Failure loading ConfigFile in electron likelihood tool.");
115 ATH_MSG_WARNING(
"Electron likelihood tool initialize() failed! Turning off electron LH cuts!");
118 return StatusCode::SUCCESS;
133 m_Nevents =
new TH1F(
"Nevents",
"Number of events processed", 1, -.5, 0.5);
137 m_Wenu_transmass_sel =
new TH1F(
"Wenu_transmass_sel",
"Transverse mass of the leading em cluster and the met", 90, 0., 180.);
139 m_Wenu_trk_transmass_sel =
new TH1F(
"Wenu_trk_transmass_sel",
"Transverse mass of the track and the met", 90, 0., 180.);
141 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.);
143 m_Wenu_clus_pt =
new TH1F(
"Wenu_cluster_pt",
"Transverse momentum of the leading em cluster",50,0.,100.);
212 for (
int region=0; region!=
Nregions; ++region) {
218 m_Wenu_Eop.push_back(
new TH1F(name.c_str(),title.c_str(), 60, 0., 10.));
222 title =
"E/p difference (pos-neg) for Wenu EM-clusters in " +
m_region_strings[region];
223 m_Wenu_Eopdiff.push_back(
new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
227 title =
"E/p for pos. charged Wenu EM-clusters in " +
m_region_strings[region];
228 m_Wenu_Eop_plus.push_back(
new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
232 title =
"E/p for neg. charged Wenu EM-clusters in " +
m_region_strings[region];
233 m_Wenu_Eop_minus.push_back(
new TH1F(name.c_str(),title.c_str(), 10, 0., 2.));
236 if (region !=
incl)
continue;
238 m_Wenu_eta.push_back(
new TH1F(
"Wenu_eta",
"Eta of Wenu EM-clusters", 15, -3., 3.));
240 m_Wenu_phi.push_back(
new TH1F(
"Wenu_phi",
"Phi of Wenu EM-clusters", 15, -3.15, 3.15));
243 m_Wenu_deta.push_back(
new TH1F(
"Wenu_deta",
"deltaEta(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
245 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.));
247 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));
249 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.));
251 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));
253 m_Wenu_dphi.push_back(
new TH1F(
"Wenu_dphi",
"deltaPhi(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
255 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.));
257 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));
259 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.));
261 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));
264 m_Wenu_trackmatched_eta.push_back(
new TH1F(
"Wenu_trackmatched_eta",
"Eta of track-matched Wenu EM-clusters", 15, -3., 3.));
266 m_Wenu_trackmatched_phi.push_back(
new TH1F(
"Wenu_trackmatched_phi",
"Phi of track-matched Wenu EM-clusters", 15, -3.15, 3.15));
277 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.));
279 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));
281 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.));
283 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));
285 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.));
287 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));
290 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.));
292 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));
294 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.));
296 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.));
298 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.));
300 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));
302 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.));
305 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.));
307 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));
309 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.));
311 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));
313 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.));
316 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.));
318 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));
320 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.));
322 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));
324 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.));
327 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));
330 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.));
332 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));
334 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.));
336 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));
338 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.));
341 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.));
343 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));
345 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.));
347 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));
349 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.));
351 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));
354 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.));
356 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.));
358 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.));
364 return StatusCode::SUCCESS;
368 if (doSumw2) histo->Sumw2();
369 StatusCode
sc = mon.regHist(histo);
370 if (
sc.isFailure() ) {
376 if (mon.regHist(histo).isFailure() ) {
382 if (doSumw2) histo->Sumw2();
383 if (mon.regHist(histo).isFailure() ) {
390 int nevents = (int)
m_Nevents->GetEntries();
391 const bool firstEvent{nevents == 1};
393 auto formErrorMessage = [] (
const std::string & contName)->std::string {
394 return std::string(std::string(
"No Collection with name ") + contName + std::string(
" found in StoreGate"));
402 return StatusCode::RECOVERABLE;
407 const std::string & errMsg = formErrorMessage(
m_photonsName);
410 return StatusCode::RECOVERABLE;
418 return StatusCode::RECOVERABLE;
423 const std::string & errMsg = formErrorMessage(
m_tracksName);
426 return StatusCode::RECOVERABLE;
431 const std::string & errMsg = formErrorMessage(
m_metName);
434 return StatusCode::RECOVERABLE;
449 if (LeadingEMcluster) {
450 int leading_eta_region =
etaRegion(LeadingEMcluster->
eta());
454 int selected =
isWenu(LeadingEMcluster, SecondLeadingEMcluster,
met);
461 double cluster_met_transmass =
TransMass(LeadingEMcluster,
MET);
463 double track_met_transmass = 0.;
464 if (track_leading_emcluster ) {
465 track_met_transmass =
TransMass(track_leading_emcluster,
MET);
471 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, leading_eta_region, leading_dEta, leading_dPhi);
475 return StatusCode::SUCCESS;
479 h_eff->Divide(h_num,h_denom,1.,1.,
"B");
486 for (
int region=0; region!=1; ++region) {
506 return StatusCode::SUCCESS;
513 for (
const auto cl: *clusters) {
514 if (cl == omitCluster)
continue;
515 double deltaR = std::sqrt(std::pow(std::abs(cl->phi() - omitCluster->
phi()),2) + std::pow(std::abs(cl->eta() - omitCluster->
eta()),2));
516 if(
deltaR < 0.005)
continue;
517 if (cl->pt()/Gaudi::Units::GeV < 10.)
continue;
518 if (cl->pt() > max_pt) {
519 leading_emcluster = cl;
523 return leading_emcluster;
530 for (
const auto em: *electrons) {
539 if (cl == omitCluster)
continue;
540 if (cl->pt()/Gaudi::Units::GeV < 10.)
continue;
541 if (cl->pt() > max_pt) {
542 leading_emcluster = cl;
546 return leading_emcluster;
552 double min_dR = 1.0e+20;
553 for (
const auto track: *tracks) {
554 double deta = cluster->
eta()-track->eta();
555 double dphi = cluster->
phi()-track->phi();
556 double dr = std::sqrt(deta*deta + dphi*dphi);
557 if (dr < min_dR && std::abs(deta) < dEta && std::abs(dphi) < dPhi) {
559 matched_track = track;
562 return matched_track;
567 double min_dEta = 1.0e+20;
568 for (
const auto track: *tracks) {
569 double deta = std::abs(cluster->
eta()-track->eta());
570 if (deta < min_dEta && deta < dEta) {
572 matched_track = track;
575 double dPhi = 1.0e+20;
582 double min_dPhi = 1.0e+20;
583 for (
const auto track : *tracks) {
585 if (dphi < min_dPhi && dphi < dPhi) {
587 matched_track = track;
590 double dEta = 1.0e+20;
591 if (matched_track !=
nullptr) dEta = cluster->
eta()-matched_track->
eta();
598 if(em->
pt()/Gaudi::Units::GeV > 25.) --selected;
599 if(
met/Gaudi::Units::GeV > 20.) --selected;
603 if(em2->
pt()/Gaudi::Units::GeV > 25.){
604 ATH_MSG_DEBUG(
"Event rejected due to second EM cluster w/ pT > 25 GeV");
612 if (EM1 ==
nullptr || EM2 ==
nullptr)
return -99.;
614 if (EM1->pt() != 0 && EM2->pt() != 0.) {
615 TLorentzVector particle1;
616 TLorentzVector particle2;
617 particle1.SetPtEtaPhiE(EM1->pt()/Gaudi::Units::GeV,EM1->eta(),EM1->phi(),EM1->e()/Gaudi::Units::GeV);
618 particle2.SetPtEtaPhiE(EM2->pt()/Gaudi::Units::GeV,EM2->eta(),EM2->phi(),EM2->e()/Gaudi::Units::GeV);
619 invmass = (particle1+particle2).Mag();
625 if (trk1 ==
nullptr || trk2 ==
nullptr)
return -99.;
627 if (trk1->
pt() != 0 && trk2->
pt() != 0.) {
628 TLorentzVector particle1;
629 TLorentzVector particle2;
630 particle1.SetPtEtaPhiE(trk1->
pt()/Gaudi::Units::GeV,trk1->
eta(),trk1->
phi(),trk1->
e()/Gaudi::Units::GeV);
631 particle2.SetPtEtaPhiE(trk2->
pt()/Gaudi::Units::GeV,trk2->
eta(),trk2->
phi(),trk2->
e()/Gaudi::Units::GeV);
632 invmass = (particle1+particle2).Mag();
638 if (EM ==
nullptr ||
met ==
nullptr)
return -99.;
639 double transmass = 0.;
641 transmass = std::sqrt(2.*EM->et()*
met->met()*(1.-std::cos(dphi)));
642 return transmass/Gaudi::Units::GeV;
647 if (track ==
nullptr ||
met ==
nullptr)
return -99.;
648 double transmass = 0.;
650 transmass = std::sqrt(2.*(track->p4().Et()/Gaudi::Units::GeV)*(
met->met()/Gaudi::Units::GeV)*(1.-std::cos(dphi)));
656 if (cluster ==
nullptr || track ==
nullptr)
return dr;
657 double deta = cluster->
eta()-track->eta();
658 double dphi = cluster->
phi()-track->phi();
659 if(std::abs(dphi) >
M_PI) dphi = 2.*
M_PI-std::abs(dphi);
660 dr = std::sqrt(deta*deta + dphi*dphi);
667 if(phi1>Gaudi::Units::pi) phia=phi1-2.*Gaudi::Units::pi;
669 if(phi2>Gaudi::Units::pi) phib=phi2-2.*Gaudi::Units::pi;
670 double dphi=phia-phib;
671 if(dphi>Gaudi::Units::pi) dphi-=2.*Gaudi::Units::pi;
672 if(dphi<-Gaudi::Units::pi) dphi+=2.*Gaudi::Units::pi;
678 if (std::abs(
eta) <= 1.) region =
barrel;
679 else if (
eta > 1.) region =
eca;
680 else if (
eta < -1.) region =
ecc;
686 if (not cluster)
return;
688 throw std::out_of_range(
"Region is negative in IDPerfMonWenu::FillHistosPerCluster");
691 if (region ==
incl) {
695 if (dEta < 1.0e+20) {
697 if (std::abs(dEta) < 0.05) {
704 if (dPhi < 1.0e+20) {
706 if (std::abs(dPhi) < 0.1) {
716 if (track ==
nullptr)
return;
719 float track_p = track->pt()*std::cosh(track->eta());
720 if (track_p != 0.) eoverp = cluster->
e()/track_p;
722 if (track->charge() == 1.) {
725 else if (track->charge() == -1.) {
728 if (region ==
incl) {
729 auto safeInverseMom = [](
float p){
730 if (p == 0.)
return 10e10;
731 return 1./(p/Gaudi::Units::GeV);
744 if (track->charge() == 1.) {
753 else if (track->charge() == -1.) {
Scalar eta() const
pseudorapidity method
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_INFO(x,...)
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 ...
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
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
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
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::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
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.
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:
MissingETContainer_v1 MissingETContainer
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.