16#include "TLorentzVector.h"
47#include "GaudiKernel/SystemOfUnits.h"
48#include "GaudiKernel/PhysicalConstants.h"
61 if (evtStore->contains<T>(contName)){
63 if(evtStore->retrieve(container,contName).isFailure())
return nullptr;
103 ATH_MSG_DEBUG(
"IDPerfMonWenu::Initialize() -- Setting up electron LH tool.");
104 m_LHTool2015=std::make_unique<AsgElectronLikelihoodTool> (
"m_LHTool2015");
110 std::string confDir =
"ElectronPhotonSelectorTools/offline/mc15_20150712/";
112 ATH_MSG_WARNING(
"electronIDLevel is set to empty! No electron ID cuts will be applied.");
116 ATH_MSG_WARNING(
"Unknown electronIDLevel!! (Accepted values: Loose, Medium, Tight)");
122 ATH_MSG_WARNING(
"Failure loading ConfigFile in electron likelihood tool.");
128 ATH_MSG_WARNING(
"Electron likelihood tool initialize() failed! Turning off electron LH cuts!");
131 return StatusCode::SUCCESS;
146 m_Nevents =
new TH1F(
"Nevents",
"Number of events processed", 1, -.5, 0.5);
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.);
225 for (
int region=0; region!=
Nregions; ++region) {
231 m_Wenu_Eop.push_back(
new TH1F(name.c_str(),title.c_str(), 60, 0., 10.));
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.));
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.));
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.));
249 if (region !=
incl)
continue;
251 m_Wenu_eta.push_back(
new TH1F(
"Wenu_eta",
"Eta of Wenu EM-clusters", 15, -3., 3.));
253 m_Wenu_phi.push_back(
new TH1F(
"Wenu_phi",
"Phi of Wenu EM-clusters", 15, -3.15, 3.15));
256 m_Wenu_deta.push_back(
new TH1F(
"Wenu_deta",
"deltaEta(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
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.));
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));
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.));
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));
266 m_Wenu_dphi.push_back(
new TH1F(
"Wenu_dphi",
"deltaPhi(EM-cluster,track) in Wenu events", 50, -0.5, 0.5));
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.));
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));
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.));
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));
277 m_Wenu_trackmatched_eta.push_back(
new TH1F(
"Wenu_trackmatched_eta",
"Eta of track-matched Wenu EM-clusters", 15, -3., 3.));
279 m_Wenu_trackmatched_phi.push_back(
new TH1F(
"Wenu_trackmatched_phi",
"Phi of track-matched Wenu EM-clusters", 15, -3.15, 3.15));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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));
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.));
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));
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.));
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));
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.));
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.));
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.));
377 return StatusCode::SUCCESS;
381 if (doSumw2) histo->Sumw2();
382 StatusCode
sc = mon.regHist(histo);
383 if (
sc.isFailure() ) {
389 if (mon.regHist(histo).isFailure() ) {
395 if (doSumw2) histo->Sumw2();
396 if (mon.regHist(histo).isFailure() ) {
403 int nevents = (int)
m_Nevents->GetEntries();
404 const bool firstEvent{nevents == 1};
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"));
415 return StatusCode::RECOVERABLE;
420 const std::string & errMsg = formErrorMessage(
m_photonsName);
423 return StatusCode::RECOVERABLE;
431 return StatusCode::RECOVERABLE;
436 const std::string & errMsg = formErrorMessage(
m_tracksName);
439 return StatusCode::RECOVERABLE;
444 const std::string & errMsg = formErrorMessage(
m_metName);
447 return StatusCode::RECOVERABLE;
462 if (LeadingEMcluster) {
463 int leading_eta_region =
etaRegion(LeadingEMcluster->
eta());
467 int selected =
isWenu(LeadingEMcluster, SecondLeadingEMcluster,
met);
474 double cluster_met_transmass =
TransMass(LeadingEMcluster,
MET);
476 double track_met_transmass = 0.;
477 if (track_leading_emcluster ) {
478 track_met_transmass =
TransMass(track_leading_emcluster,
MET);
484 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, leading_eta_region, leading_dEta, leading_dPhi);
488 return StatusCode::SUCCESS;
492 h_eff->Divide(h_num,h_denom,1.,1.,
"B");
499 for (
int region=0; region!=1; ++region) {
519 return StatusCode::SUCCESS;
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;
536 return leading_emcluster;
543 for (
const auto em: *electrons) {
552 if (cl == omitCluster)
continue;
553 if (cl->pt()/Gaudi::Units::GeV < 10.)
continue;
554 if (cl->pt() > max_pt) {
555 leading_emcluster = cl;
559 return leading_emcluster;
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) {
572 matched_track = track;
575 return matched_track;
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) {
585 matched_track = track;
588 double dPhi = 1.0e+20;
595 double min_dPhi = 1.0e+20;
596 for (
const auto track : *tracks) {
598 if (dphi < min_dPhi && dphi < dPhi) {
600 matched_track = track;
603 double dEta = 1.0e+20;
604 if (matched_track !=
nullptr) dEta = cluster->
eta()-matched_track->
eta();
611 if(em->
pt()/Gaudi::Units::GeV > 25.) --selected;
612 if(
met/Gaudi::Units::GeV > 20.) --selected;
616 if(em2->
pt()/Gaudi::Units::GeV > 25.){
617 ATH_MSG_DEBUG(
"Event rejected due to second EM cluster w/ pT > 25 GeV");
625 if (EM1 ==
nullptr || EM2 ==
nullptr)
return -99.;
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();
638 if (trk1 ==
nullptr || trk2 ==
nullptr)
return -99.;
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();
651 if (EM ==
nullptr ||
met ==
nullptr)
return -99.;
652 double transmass = 0.;
654 transmass = std::sqrt(2.*EM->et()*
met->met()*(1.-std::cos(dphi)));
655 return transmass/Gaudi::Units::GeV;
660 if (track ==
nullptr ||
met ==
nullptr)
return -99.;
661 double transmass = 0.;
663 transmass = std::sqrt(2.*(track->p4().Et()/Gaudi::Units::GeV)*(
met->met()/Gaudi::Units::GeV)*(1.-std::cos(dphi)));
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);
680 if(phi1>Gaudi::Units::pi) phia=phi1-2.*Gaudi::Units::pi;
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;
691 if (std::abs(
eta) <= 1.) region =
barrel;
692 else if (
eta > 1.) region =
eca;
693 else if (
eta < -1.) region =
ecc;
699 if (not cluster)
return;
701 throw std::out_of_range(
"Region is negative in IDPerfMonWenu::FillHistosPerCluster");
704 if (region ==
incl) {
708 if (dEta < 1.0e+20) {
710 if (std::abs(dEta) < 0.05) {
717 if (dPhi < 1.0e+20) {
719 if (std::abs(dPhi) < 0.1) {
729 if (track ==
nullptr)
return;
732 float track_p = track->pt()*std::cosh(track->eta());
733 if (track_p != 0.) eoverp = cluster->
e()/track_p;
735 if (track->charge() == 1.) {
738 else if (track->charge() == -1.) {
741 if (region ==
incl) {
742 auto safeInverseMom = [](
float p){
743 if (p == 0.)
return 10e10;
744 return 1./(p/Gaudi::Units::GeV);
757 if (track->charge() == 1.) {
766 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
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.