17#include "TLorentzVector.h"
48#include "GaudiKernel/SystemOfUnits.h"
49#include "GaudiKernel/PhysicalConstants.h"
62 if (evtStore->contains<T>(contName)){
64 if(evtStore->retrieve(
container,contName).isFailure())
return nullptr;
104 ATH_MSG_DEBUG(
"IDPerfMonWenu::Initialize() -- Setting up electron LH tool.");
105 m_LHTool2015=std::make_unique<AsgElectronLikelihoodTool> (
"m_LHTool2015");
111 std::string confDir =
"ElectronPhotonSelectorTools/offline/mc15_20150712/";
113 ATH_MSG_WARNING(
"electronIDLevel is set to empty! No electron ID cuts will be applied.");
117 ATH_MSG_WARNING(
"Unknown electronIDLevel!! (Accepted values: Loose, Medium, Tight)");
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.");
129 ATH_MSG_WARNING(
"Electron likelihood tool initialize() failed! Turning off electron LH cuts!");
132 return StatusCode::SUCCESS;
147 m_Nevents =
new TH1F(
"Nevents",
"Number of events processed", 1, -.5, 0.5);
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.);
226 for (
int region=0; region!=
Nregions; ++region) {
232 m_Wenu_Eop.push_back(
new TH1F(name.c_str(),title.c_str(), 60, 0., 10.));
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.));
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.));
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.));
250 if (region !=
incl)
continue;
252 m_Wenu_eta.push_back(
new TH1F(
"Wenu_eta",
"Eta of Wenu EM-clusters", 15, -3., 3.));
254 m_Wenu_phi.push_back(
new TH1F(
"Wenu_phi",
"Phi of Wenu EM-clusters", 15, -3.15, 3.15));
257 m_Wenu_deta.push_back(
new TH1F(
"Wenu_deta",
"deltaEta(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
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.));
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));
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.));
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));
267 m_Wenu_dphi.push_back(
new TH1F(
"Wenu_dphi",
"deltaPhi(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
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.));
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));
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.));
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));
278 m_Wenu_trackmatched_eta.push_back(
new TH1F(
"Wenu_trackmatched_eta",
"Eta of track-matched Wenu EM-clusters", 15, -3., 3.));
280 m_Wenu_trackmatched_phi.push_back(
new TH1F(
"Wenu_trackmatched_phi",
"Phi of track-matched Wenu EM-clusters", 15, -3.15, 3.15));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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.));
378 return StatusCode::SUCCESS;
382 if (doSumw2) histo->Sumw2();
383 StatusCode
sc = mon.regHist(histo);
384 if (
sc.isFailure() ) {
390 if (mon.regHist(histo).isFailure() ) {
396 if (doSumw2) histo->Sumw2();
397 if (mon.regHist(histo).isFailure() ) {
404 int nevents = (int)
m_Nevents->GetEntries();
405 const bool firstEvent{nevents == 1};
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"));
416 return StatusCode::RECOVERABLE;
421 const std::string & errMsg = formErrorMessage(
m_photonsName);
424 return StatusCode::RECOVERABLE;
432 return StatusCode::RECOVERABLE;
437 const std::string & errMsg = formErrorMessage(
m_tracksName);
440 return StatusCode::RECOVERABLE;
445 const std::string & errMsg = formErrorMessage(
m_metName);
448 return StatusCode::RECOVERABLE;
463 if (LeadingEMcluster) {
464 int leading_eta_region =
etaRegion(LeadingEMcluster->
eta());
468 int selected =
isWenu(LeadingEMcluster, SecondLeadingEMcluster,
met);
475 double cluster_met_transmass =
TransMass(LeadingEMcluster,
MET);
477 double track_met_transmass = 0.;
478 if (track_leading_emcluster ) {
479 track_met_transmass =
TransMass(track_leading_emcluster,
MET);
485 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, leading_eta_region, leading_dEta, leading_dPhi);
489 return StatusCode::SUCCESS;
493 h_eff->Divide(h_num,h_denom,1.,1.,
"B");
500 for (
int region=0; region!=1; ++region) {
520 return StatusCode::SUCCESS;
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;
537 return leading_emcluster;
544 for (
const auto em: *electrons) {
553 if (cl == omitCluster)
continue;
554 if (cl->pt()/Gaudi::Units::GeV < 10.)
continue;
555 if (cl->pt() > max_pt) {
556 leading_emcluster = cl;
560 return leading_emcluster;
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) {
573 matched_track = track;
576 return matched_track;
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) {
586 matched_track = track;
589 double dPhi = 1.0e+20;
596 double min_dPhi = 1.0e+20;
597 for (
const auto track : *tracks) {
599 if (dphi < min_dPhi && dphi < dPhi) {
601 matched_track = track;
604 double dEta = 1.0e+20;
605 if (matched_track !=
nullptr) dEta = cluster->
eta()-matched_track->
eta();
612 if(em->
pt()/Gaudi::Units::GeV > 25.) --selected;
613 if(
met/Gaudi::Units::GeV > 20.) --selected;
617 if(em2->
pt()/Gaudi::Units::GeV > 25.){
618 ATH_MSG_DEBUG(
"Event rejected due to second EM cluster w/ pT > 25 GeV");
626 if (EM1 ==
nullptr || EM2 ==
nullptr)
return -99.;
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();
639 if (trk1 ==
nullptr || trk2 ==
nullptr)
return -99.;
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();
652 if (EM ==
nullptr ||
met ==
nullptr)
return -99.;
653 double transmass = 0.;
655 transmass = std::sqrt(2.*EM->et()*
met->met()*(1.-std::cos(dphi)));
656 return transmass/Gaudi::Units::GeV;
661 if (track ==
nullptr ||
met ==
nullptr)
return -99.;
662 double transmass = 0.;
664 transmass = std::sqrt(2.*(track->p4().Et()/Gaudi::Units::GeV)*(
met->met()/Gaudi::Units::GeV)*(1.-std::cos(dphi)));
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);
681 if(phi1>Gaudi::Units::pi) phia=phi1-2.*Gaudi::Units::pi;
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;
692 if (std::abs(
eta) <= 1.) region =
barrel;
693 else if (
eta > 1.) region =
eca;
694 else if (
eta < -1.) region =
ecc;
700 if (not cluster)
return;
702 throw std::out_of_range(
"Region is negative in IDPerfMonWenu::FillHistosPerCluster");
705 if (region ==
incl) {
709 if (dEta < 1.0e+20) {
711 if (std::abs(dEta) < 0.05) {
718 if (dPhi < 1.0e+20) {
720 if (std::abs(dPhi) < 0.1) {
730 if (track ==
nullptr)
return;
733 float track_p = track->pt()*std::cosh(track->eta());
734 if (track_p != 0.) eoverp = cluster->
e()/track_p;
736 if (track->charge() == 1.) {
739 else if (track->charge() == -1.) {
742 if (region ==
incl) {
754 if (track->charge() == 1.) {
763 else if (track->charge() == -1.) {
Scalar eta() const
pseudorapidity method
#define ATH_MSG_WARNING(x)
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 ...
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
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::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.
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.