|
ATLAS Offline Software
|
Go to the documentation of this file.
16 #include "TLorentzVector.h"
33 #include "GaudiKernel/SystemOfUnits.h"
34 #include "GaudiKernel/PhysicalConstants.h"
52 const T * container{};
53 if (evtStore->contains<
T>(contName)){
55 if(evtStore->retrieve(container,contName).isFailure())
return nullptr;
67 m_triggerChainName(
"NoTriggerSelection")
100 if (
sc.isFailure())
ATH_MSG_WARNING(
"Could not initialize ManagedMonitorToolBase" );
103 ATH_MSG_INFO(
"IDPerfMonWenu::Initialize() -- Setting up electron LH tool.");
109 std::string confDir =
"ElectronPhotonSelectorTools/offline/mc15_20150712/";
111 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)");
127 ATH_MSG_WARNING(
"Electron likelihood tool initialize() failed! Turning off electron LH cuts!");
130 return StatusCode::SUCCESS;
143 m_Nevents =
new TH1F(
"Nevents",
"Number of events processed", 1, -.5, 0.5);
147 m_Zee_invmass =
new TH1F(
"Zee_invmass",
"Invariant mass of the two leading em clusters", 90, 0.,180.);
149 m_Zee_invmass_sel =
new TH1F(
"Zee_invmass_sel",
"Invariant mass of the two leading em clusters after Zee selection", 80, 50.,130.);
155 m_Zee_trk_invmass_sel =
new TH1F(
"Zee_trk_invmass_sel",
"Invariant mass of the two tracks after Zee selection", 90, 0.,180.);
157 m_Zee_Eopasym_perevent =
new TH1F(
"Zee_Eopasym_perevent",
"E/p difference (pos-neg)/(pos+neg) per Z event for Zee EM-clusters", 60, -1.5, 1.5);
159 m_Zee_Eopasym_perevent_central =
new TH1F(
"Zee_Eopasym_perevent_central",
"E/p difference (pos-neg)/(pos+neg) per Z event for Zee EM-clusters with E/p between 0.7 and 1.3", 60, -1.5, 1.5);
232 for (
int region=0; region!=
Nregions; ++region) {
251 if (region !=
incl)
continue;
252 m_Zee_eta.push_back(
new TH1F(
"Zee_eta",
"Eta of Zee EM-clusters", 15, -3., 3.));
254 m_Zee_phi.push_back(
new TH1F(
"Zee_phi",
"Phi of Zee EM-clusters", 15, -3.15, 3.15));
256 m_Zee_deta.push_back(
new TH1F(
"Zee_deta",
"deltaEta(EM-cluster,track) in Zee events", 50, -0.5, 0.5));
258 m_Zee_deta_vs_eta.push_back(
new TProfile(
"Zee_deta_vs_eta",
"deltaEta(EM-cluster,track) vs. eta in Zee events", 15, -3., 3.));
260 m_Zee_deta_vs_phi.push_back(
new TProfile(
"Zee_deta_vs_phi",
"deltaEta(EM-cluster,track) vs. phi in Zee events", 15, -3.15, 3.15));
262 m_Zee_absdeta_vs_eta.push_back(
new TProfile(
"Zee_absdeta_vs_eta",
"Abs(deltaEta(EM-cluster,track)) vs. eta in Zee events", 15, -3., 3.));
264 m_Zee_absdeta_vs_phi.push_back(
new TProfile(
"Zee_absdeta_vs_phi",
"Abs(deltaEta(EM-cluster,track)) vs. phi in Zee events", 15, -3.15, 3.15));
266 m_Zee_dphi.push_back(
new TH1F(
"Zee_dphi",
"deltaPhi(EM-cluster,track) in Zee events", 50, -0.5, 0.5));
268 m_Zee_dphi_vs_eta.push_back(
new TProfile(
"Zee_dphi_vs_eta",
"deltaPhi(EM-cluster,track) vs. eta in Zee events", 15, -3., 3.));
270 m_Zee_dphi_vs_phi.push_back(
new TProfile(
"Zee_dphi_vs_phi",
"deltaPhi(EM-cluster,track) vs. phi in Zee events", 15, -3.15, 3.15));
272 m_Zee_absdphi_vs_eta.push_back(
new TProfile(
"Zee_absdphi_vs_eta",
"Abs(deltaPhi(EM-cluster,track)) vs. eta in Zee events", 15, -3., 3.));
274 m_Zee_absdphi_vs_phi.push_back(
new TProfile(
"Zee_absdphi_vs_phi",
"Abs(deltaPhi(EM-cluster,track)) vs. phi in Zee events", 15, -3.15, 3.15));
277 m_Zee_dphi_vs_phi_2d.push_back(
new TH2F(
"Zee_dphi_vs_phi_2d",
"deltaPhi(EM-cluster,track) vs. phi in Zee events", 15, -3.15, 3.15 , 64, -0.1, 0.1));
279 m_Zee_deta_vs_phi_2d.push_back(
new TH2F(
"Zee_deta_vs_phi_2d",
"deltaPhi(EM-cluster,track) vs. phi in Zee events", 15, -3.15, 3.15 , 64, -0.1, 0.1));
281 m_Zee_dphi_vs_eta_2d.push_back(
new TH2F(
"Zee_dphi_vs_eta_2d",
"deltaPhi(EM-cluster,track) vs. eta in Zee events", 15, -3., 3. , 64, -0.1, 0.1));
283 m_Zee_deta_vs_eta_2d.push_back(
new TH2F(
"Zee_deta_vs_eta_2d",
"deltaPhi(EM-cluster,track) vs. eta in Zee events", 15, -3., 3. , 64, -0.1, 0.1));
305 m_Zee_Eopmatch_eff_vs_phi.push_back(
new TH1F(
"Zee_Eopmatch_eff_vs_phi",
"E/p-match efficiency for Zee EM-clusters vs. phi", 15, -3.15, 3.15));
349 m_Zee_Eop_lt1_gt1.push_back(
new TH1F(
"Zee_Eop_lt1_gt1",
"E/p below/above 1 for Zee EM-clusters", 2, 0.5, 1.5));
352 m_Zee_Eopdiff_vs_p.push_back(
new TProfile(
"Zee_Eopdiff_vs_p",
"E/p difference (pos-neg) vs p for Zee EM-clusters", 15, 0., 300.));
356 m_Zee_Eopdiff_vs_E.push_back(
new TProfile(
"Zee_Eopdiff_vs_E",
"E/p difference (pos-neg) vs E for Zee EM-clusters", 15, 0., 300.));
358 m_Zee_Eopdiff_vs_phi.push_back(
new TProfile(
"Zee_Eopdiff_vs_phi",
"E/p difference (pos-neg) vs phi for Zee EM-clusters", 15, -3.15, 3.15));
363 m_Zee_Eop_lt1_vs_eta.push_back(
new TH1F(
"Zee_Eop_lt1_vs_eta",
"Eta of Zee EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3., 3.));
365 m_Zee_Eop_lt1_vs_phi.push_back(
new TH1F(
"Zee_Eop_lt1_vs_phi",
"Phi of Zee EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3.15, 3.15));
367 m_Zee_Eop_gt1_vs_eta.push_back(
new TH1F(
"Zee_Eop_gt1_vs_eta",
"Eta of Zee EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3., 3.));
369 m_Zee_Eop_gt1_vs_phi.push_back(
new TH1F(
"Zee_Eop_gt1_vs_phi",
"Phi of Zee EM-clusters with E/p < 1 (not incl. small E/p)", 15, -3.15, 3.15));
371 m_Zee_frac_Eop_lt1_vs_eta.push_back(
new TH1F(
"Zee_frac_Eop_lt1_vs_eta",
"Fraction of Zee EM-clusters with E/p < 1 (not incl. small E/p) vs Eta", 15, -3., 3.));
373 m_Zee_frac_Eop_lt1_vs_phi.push_back(
new TH1F(
"Zee_frac_Eop_lt1_vs_phi",
"Fraction of Zee EM-clusters with E/p < 1 (not incl. small E/p) vs Phi", 15, -3.15, 3.15));
376 m_Zee_Eop_05_25.push_back(
new TH1F(
"Zee_Eop_05_25",
"Number of Zee events with 0.5 < E/p 2.5", 1, 0., 1.));
378 m_Zee_Eop_15_25.push_back(
new TH1F(
"Zee_Eop_15_25",
"Number of Zee events with 1.5 < E/p 2.5", 1, 0., 1.));
380 m_Zee_frac_Eop_05_25_15_25.push_back(
new TH1F(
"Zee_frac_Eop_05_25_15_25",
"Fraction of Zee EM-clusters with 1.5 < E/p < 2.5 and 0.5 < E/p < 2.5", 1, 0., 1.));
386 return StatusCode::SUCCESS;
390 if (doSumw2)
histo->Sumw2();
391 if (
mon.regHist(
histo).isFailure() ) {
397 if (
mon.regHist(
histo).isFailure() ) {
403 if (doSumw2)
histo->Sumw2();
404 if (
mon.regHist(
histo).isFailure() ) {
413 const bool firstEvent{
nevents == 1};
415 auto formErrorMessage = [] (
const std::string & contName)->std::string {
416 return std::string(std::string(
"No Collection with name ") + contName + std::string(
" found in StoreGate"));
425 return StatusCode::RECOVERABLE;
432 const std::string & errMsg = formErrorMessage(
m_photonsName);
435 return StatusCode::RECOVERABLE;
444 return StatusCode::RECOVERABLE;
450 const std::string & errMsg = formErrorMessage(
m_tracksName);
453 return StatusCode::RECOVERABLE;
459 const std::string & errMsg = formErrorMessage(
m_metName);
462 return StatusCode::RECOVERABLE;
478 if((LeadingEMcluster) and (SecondLeadingEMcluster))
479 ATH_MSG_DEBUG(
"Event has a leading and second leading EM cluster!");
481 if (LeadingEMcluster and SecondLeadingEMcluster) {
483 int second_leading_eta_region =
etaRegion(SecondLeadingEMcluster->etaBE(2));
491 if( track_leading_emcluster and track_second_leading_emcluster)
ATH_MSG_DEBUG(
"Event has a tracks matched to both clusters!");
497 double cluster_invmass =
InvMass(LeadingEMcluster,SecondLeadingEMcluster);
498 ATH_MSG_DEBUG(
"Cluster invariant mass: " << cluster_invmass);
499 if (cluster_invmass > 0.)
m_Zee_invmass->Fill(cluster_invmass);
500 double track_invmass = 0.;
501 if (track_leading_emcluster and track_second_leading_emcluster) {
502 track_invmass =
InvMass(track_leading_emcluster,track_second_leading_emcluster);
507 int selected =
isZee(LeadingEMcluster,SecondLeadingEMcluster,tracks);
508 ATH_MSG_DEBUG(
"Event passed " << 3-selected <<
"/3 Zee cuts");
512 ATH_MSG_DEBUG(
"Event passed selection -- filling histograms");
516 if (track_leading_emcluster && track_second_leading_emcluster) {
517 double eoverp_pos = -99.;
518 double eoverp_neg = -99.;
519 double track_leading_emcluster_p = track_leading_emcluster->
pt()*cosh(track_leading_emcluster->
eta());
520 double track_second_leading_emcluster_p = track_second_leading_emcluster->pt()*std::cosh(track_second_leading_emcluster->eta());
522 if (track_leading_emcluster->
charge() == 1. && track_second_leading_emcluster->charge() == -1.) {
523 eoverp_pos = LeadingEMcluster->
e()/track_leading_emcluster_p;
524 eoverp_neg = SecondLeadingEMcluster->e()/track_second_leading_emcluster_p;
525 }
else if (track_leading_emcluster->
charge() == -1. && track_second_leading_emcluster->charge() == 1.) {
526 eoverp_neg = LeadingEMcluster->
e()/track_leading_emcluster_p;
527 eoverp_pos = SecondLeadingEMcluster->e()/track_second_leading_emcluster_p;
529 double eoverpasym = -99.;
530 if (eoverp_pos+eoverp_neg != 0.) {
531 eoverpasym = (eoverp_pos-eoverp_neg) / (eoverp_pos+eoverp_neg);
546 FillHistosPerCluster(LeadingEMcluster, track_leading_emcluster, leading_eta_region, leading_dEta, leading_dPhi);
551 FillHistosPerCluster(SecondLeadingEMcluster, track_second_leading_emcluster, second_leading_eta_region, second_leading_dEta, second_leading_dPhi);
552 FillHistosPerCluster(SecondLeadingEMcluster, track_second_leading_emcluster,
incl, second_leading_dEta, second_leading_dPhi);
555 return StatusCode::SUCCESS;
559 h_eff->Divide(h_num,h_denom,1.,1.,
"B");
566 for (
int region=0; region!=1; ++region) {
587 return StatusCode::SUCCESS;
595 if (
cl == omitCluster)
continue;
597 if(
deltaR < 0.005)
continue;
599 if (
cl->pt() > max_pt) {
600 leading_emcluster =
cl;
604 return leading_emcluster;
621 if (
cl == omitCluster)
continue;
622 double deltaR = !omitCluster ? 1.0 : std::sqrt(
std::pow(std::abs(
cl->phi() - omitCluster->
phi()),2) +
std::pow(std::abs(
cl->eta() - omitCluster->
eta()),2));
623 if(
deltaR < 0.005)
continue;
625 if (
cl->pt() > max_pt) {
626 leading_emcluster =
cl;
631 return leading_emcluster;
637 double min_dR = 1.0
e+20;
638 for (
const auto track: *tracks){
640 double dphi = cluster->
phi()-
track->phi();
641 double dr = std::sqrt(deta*deta + dphi*dphi);
642 if (
dr < min_dR && std::abs(deta) <
dEta && std::abs(dphi) <
dPhi) {
644 matched_track =
track;
647 return matched_track;
652 double min_dEta = 1.0
e+20;
653 for (
const auto track : *tracks){
654 double deta = std::abs(cluster->
etaBE(2)-
track->eta());
655 if (deta < min_dEta && deta <
dEta) {
657 matched_track =
track;
660 double dPhi = 1.0e+20;
667 double min_dPhi = 1.0
e+20;
668 for (
const auto track : *tracks){
670 if (dphi < min_dPhi && dphi <
dPhi) {
672 matched_track =
track;
675 double dEta = 1.0e+20;
676 if (matched_track )
dEta = cluster->
etaBE(2)-matched_track->eta();
681 if (
EM1 ==
nullptr ||
EM2 ==
nullptr)
return -99.;
683 if (
EM1->pt() != 0 &&
EM2->pt() != 0.) {
684 TLorentzVector particle1;
685 TLorentzVector particle2;
688 invmass = (particle1+particle2).Mag();
694 if (trk1 ==
nullptr || trk2 ==
nullptr)
return -99.;
696 if (trk1->
pt() != 0 && trk2->
pt() != 0.) {
697 TLorentzVector particle1;
698 TLorentzVector particle2;
701 invmass = (particle1+particle2).Mag();
707 if (
EM ==
nullptr ||
met ==
nullptr)
return -99.;
708 double transmass = 0.;
710 transmass = std::sqrt(2.*
EM->et()*
met->met()*(1.-
std::cos(dphi)));
716 if (cluster ==
nullptr ||
track ==
nullptr)
return dr;
718 double dphi = cluster->
phi()-
track->phi();
719 dr = std::sqrt(deta*deta + dphi*dphi);
728 if(!track_leading_emcluster || !track_second_leading_emcluster){
729 ATH_MSG_DEBUG(
"Don't have 2 matched tracks! Skipping charge check...");
732 else if(track_leading_emcluster->
charge() != track_second_leading_emcluster->
charge())
734 double invmass =
InvMass(em1,em2);
738 invmass < 110.) --selected;
747 double dphi=phia-phib;
755 if (std::abs(
eta) <= 1.) region =
barrel;
756 else if (
eta > 1.) region =
eca;
757 else if (
eta < -1.) region =
ecc;
763 if (cluster ==
nullptr)
return;
765 throw(std::out_of_range(
"Region index has negative value in IDPerfMonZee::FillHistosPerCluster"));
768 if (region ==
incl) {
772 if (
dEta < 1.0
e+20) {
774 if (std::abs(
dEta) < 0.05) {
783 if (
dPhi < 1.0
e+20) {
785 if (std::abs(
dPhi) < 0.1) {
796 if (not
track)
return;
799 float track_p =
track->pt()*std::cosh(
track->eta());
800 if (track_p != 0.) eoverp = cluster->
e()/track_p;
802 if (
track->charge() == 1.) {
805 else if (
track->charge() == -1.) {
808 if (region ==
incl) {
820 if (
track->charge() == 1.) {
828 }
else if (
track->charge() == -1.) {
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
virtual double phi() const
The azimuthal angle ( ) of the particle.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
double m_eoverp_tight_min
std::vector< TH1F * > m_Zee_trackmatched_phi
double m_eoverp_standard_min
std::vector< TH1F * > m_Zee_frac_Eop_lt1_vs_phi
std::vector< TH1F * > m_Zee_Eop
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
std::string m_emclustersName
TH1F * m_Zee_trk_invmass_scaled
std::vector< TH1F * > m_Zee_trackmatched_eta
std::vector< TProfile * > m_Zee_Eopdiff_vs_p
std::string m_electronsName
std::vector< TProfile * > m_Zee_meanEop_vs_p_minus
std::vector< TProfile * > m_Zee_absdeta_vs_eta
double deltaR(const xAOD::CaloCluster *cluster, const xAOD::TrackParticle *track) const
std::vector< TProfile * > m_Zee_meanEop_vs_invp_plus
float charge() const
Returns the charge.
std::vector< TProfile * > m_Zee_meanEop_vs_eta_plus
Scalar eta() const
pseudorapidity method
std::vector< TProfile * > m_Zee_meanEop_vs_E_plus
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::vector< TProfile * > m_Zee_absdphi_vs_phi
std::vector< TH1F * > m_Zee_Eop_lt1_vs_eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
std::vector< TH1F * > m_Zee_Eop_15_25
std::vector< TH1F * > m_Zee_dphi
double m_eoverp_tight_max
std::vector< TProfile * > m_Zee_Eopdiff_vs_phi
const xAOD::TrackParticle * electronTrackMatch(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dEta=0.05, double dPhi=0.1) const
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
std::vector< TH1F * > m_Zee_frac_Eop_lt1_vs_eta
std::vector< TH1F * > m_Zee_Eop_lt1_vs_phi
std::vector< TProfile * > m_Zee_dphi_vs_phi
std::vector< TH2F * > m_Zee_deta_vs_phi_2d
double electronTrackMatchEta(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dEta=0.05) const
std::vector< TProfile * > m_Zee_meanEop_vs_eta_minus
void FillHistosPerCluster(const xAOD::CaloCluster *cluster, const xAOD::TrackParticle *track, int region, float dEta, float dPhi)
#define ATH_MSG_VERBOSE(x)
std::vector< TH1F * > m_Zee_trackmatch_eff_vs_eta
std::vector< TProfile * > m_Zee_Eopdiff_vs_eta
def TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
std::vector< TProfile * > m_Zee_meanEop_vs_E
static Environment_t environment()
Returns the running environment of the monitoring application to help ManagedMonitorToolBase objects ...
TH1F * m_Zee_Eopasym_perevent
std::vector< TProfile * > m_Zee_dphi_vs_eta
std::vector< TH1F * > m_Zee_Eop_gt1_vs_phi
std::vector< TH1F * > m_Zee_Eop_gt1_vs_eta
IDPerfMonZee(const std::string &type, const std::string &name, const IInterface *parent)
std::vector< TProfile * > m_Zee_meanEop_vs_invp
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode bookHistograms()
An inheriting class should either override this function or bookHists().
std::vector< TProfile * > m_Zee_Eopdiff_vs_invp
std::vector< TProfile * > m_Zee_meanEop_vs_phi_minus
Description of a calorimeter cluster.
std::vector< TH1F * > m_Zee_phi
std::vector< TH1F * > m_Zee_frac_Eop_05_25_15_25
virtual StatusCode fillHistograms()
An inheriting class should either override this function or fillHists().
std::string m_electronIDLevel
AsgElectronLikelihoodTool * m_LHTool2015
std::vector< TH2F * > m_Zee_dphi_vs_phi_2d
virtual double eta() const
The pseudorapidity ( ) of the particle.
def TProfile(*args, **kwargs)
std::vector< TProfile * > m_Zee_meanEop_vs_eta
std::vector< TH2F * > m_Zee_dphi_vs_eta_2d
::StatusCode StatusCode
StatusCode definition for legacy code.
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
std::vector< TH1F * > m_Zee_Eopdiff
const xAOD::CaloCluster * getLeadingEMcluster(const xAOD::CaloClusterContainer *clusters, const xAOD::CaloCluster *omitCluster=0) const
void makeEffHisto(TH1F *h_num, TH1F *h_denom, TH1F *h_eff)
TH1F * m_Zee_Eopasym_perevent_central
std::vector< TH1F * > m_Zee_Eop_lt1_gt1
std::vector< TH1F * > m_Zee_Eop_plus
std::vector< TH1F * > m_Zee_eta
double signedDeltaPhi(double phi1, double phi2) const
Principal data object for Missing ET.
int etaRegion(double eta)
std::vector< TH1F * > m_Zee_trackmatched_Eopmatched_phi
std::vector< TH1F * > m_Zee_tightEopmatch_eff_vs_eta
std::vector< TProfile * > m_Zee_absdeta_vs_phi
std::vector< TH1F * > m_Zee_deta
std::vector< TProfile * > m_Zee_absdphi_vs_eta
double TransMass(const xAOD::CaloCluster *EM, const xAOD::MissingET *met) const
std::string m_triggerChainName
virtual double pt() const
The transverse momentum ( ) of the particle (negative for negative-energy clusters)
std::vector< TProfile * > m_Zee_meanEop_vs_phi_plus
std::vector< TProfile * > m_Zee_deta_vs_phi
Container for xAOD::MissingET_v1 objects.
std::vector< TH1F * > m_Zee_Eop_minus
std::vector< TH1F * > m_Zee_Eop_05_25
std::vector< TH1F * > m_Zee_trackmatched_tightEopmatched_eta
std::vector< TH1F * > m_Zee_Eopmatch_eff_vs_phi
std::vector< TProfile * > m_Zee_meanEop_vs_E_minus
std::vector< TH1F * > m_Zee_tightEopmatch_eff_vs_phi
std::vector< TProfile * > m_Zee_Eopdiff_vs_E
std::vector< TH1F * > m_Zee_trackmatched_Eopmatched_eta
std::vector< TProfile * > m_Zee_meanEop_vs_p_plus
virtual StatusCode procHistograms()
An inheriting class should either override this function or finalHists().
virtual double e() const override final
The total energy of the particle.
void RegisterHisto(MonGroup &mon, TH1 *histo, bool doSumw2=false)
double m_eoverp_standard_max
std::vector< TH1F * > m_Zee_trackmatched_tightEopmatched_phi
std::vector< TProfile * > m_Zee_meanEop_vs_phi
std::vector< TH1F * > m_Zee_Eopmatch_eff_vs_eta
double InvMass(const xAOD::CaloCluster *EM1, const xAOD::CaloCluster *EM2) const
#define ATH_MSG_WARNING(x)
TH1F * m_Zee_trk_invmass_sel
double electronTrackMatchPhi(const xAOD::TrackParticleContainer *tracks, const xAOD::CaloCluster *cluster, double dPhi=0.1) const
std::vector< TProfile * > m_Zee_meanEop_vs_chargedp
std::vector< TProfile * > m_Zee_deta_vs_eta
std::vector< TH1F * > m_Zee_trackmatch_eff_vs_phi
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
Class describing a TrackParticle.
std::vector< TProfile * > m_Zee_meanEop_vs_p
std::vector< std::string > m_region_strings
std::vector< TH2F * > m_Zee_deta_vs_eta_2d
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
constexpr int pow(int base, int exp) noexcept
setBGCode setTAP setLVL2ErrorBits bool
std::string m_metRefFinalName
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
virtual StatusCode initialize()
std::vector< TProfile * > m_Zee_meanEop_vs_chargedE
std::string m_photonsName
virtual double e() const
The total energy of the particle.
int isZee(const xAOD::CaloCluster *em1, const xAOD::CaloCluster *em2, const xAOD::TrackParticleContainer *tracks=0) const
std::vector< TProfile * > m_Zee_meanEop_vs_invp_minus
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
std::string m_VxPrimContainerName