ATLAS Offline Software
Loading...
Searching...
No Matches
IDPerfMonEoverP Class Reference

Create a simple ntuple to perform EoverP studies with. More...

#include <IDPerfMonEoverP.h>

Inheritance diagram for IDPerfMonEoverP:

Public Member Functions

 IDPerfMonEoverP (const std::string &name, ISvcLocator *pSvcLocator)
 Default constructor.
 ~IDPerfMonEoverP ()
 Destructor.
StatusCode initialize ()
 Gaudi algorithm hooks.
StatusCode finalize ()
StatusCode execute ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void addToValidationNtuple (const Trk::Perigee *, const xAOD::CaloCluster *, int isOrginal)
 addToValidationNutple
void clearValidationNtuple ()
void validationAction ()
void deleteAction () const
void fillIsEM (const xAOD::Electron *eg)
void fillGeneral (const xAOD::Electron *eg)
bool passMETCleaningCuts () const
bool fillVertexInformation (std::map< const xAOD::TrackParticle *, VxPos > &trackParticleVertexMap, xAOD::Vertex const *&primaryVertexFirstCandidate)
bool storeMETinformation ()
VxPos findAssociatedVertex (std::map< const xAOD::TrackParticle *, VxPos > &trackParticleVertexMap, const xAOD::Vertex *primaryVertexFirstCandidate, const xAOD::Electron *) const
void extrapolateToTheCalo (const Trk::TrackParameters *trkPar, const xAOD::CaloCluster *cluster, double *eta, double *phi, double *deltaEta, double *delatPhi)
void fillElectronInfo (const xAOD::Electron *p)
void fillTriggerInformation ()
bool fillLastMeasurement (const Trk::Track *track, const int fitter)
double correctIP_PV (int electron_i, bool do_d0)
std::vector< int > FillSimpleTree ()
bool passWenuSelection (std::vector< int > &electrons)
bool passZeeSelection (std::vector< int > &electrons)
double getMassCluster (int el1, int el2)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

std::string m_InputElectronContainerName
 Electron collection input name.
std::string m_metRefFinalName
std::string m_jetContainerName
 JEt collection input name.
std::string m_missingEtObjectName
 MET input name.
std::string m_primaryVertexCollection
 Primary vertex input name.
std::string m_OutputTrackCollectionName_no1
 Name of output of Refitted Inner Detector Tracks.
std::string m_OutputTrackCollectionName_no2
TrackCollectionm_refittedTracks_no1
 Refitted track collection.
TrackCollectionm_refittedTracks_no2
SG::ReadHandleKey< xAOD::EventInfom_evt {this, "EvtInfo", "EventInfo", "EventInfo name"}
 ReadHandle to the Event Info.
ToolHandle< IegammaTrkRefitterToolm_TrackRefitter
 The track refitter.
ToolHandle< IegammaTrkRefitterToolm_TrackRefitter_no2
 The track refitter.
ToolHandle< Trig::TrigDecisionToolm_trigDec
 The trigger decision tool.
ToolHandle< IJetSelectorm_jetCleaningTool {this,"JetCleaningTool","JetCleaningTool/JetCleaningTool",""}
 jet selector tool
bool m_refitEverything
bool m_isDATA
bool m_validationMode
 < boolean to switch to validation mode
bool m_fillDetailedTree
 validation tree name - to be acessed by this from root
std::string m_validationTreeName
 validation tree description - second argument in TTree
std::string m_validationTreeDescription
 stream/folder to for the TTree to be written out
std::string m_validationTreeFolder
 Root Validation Tree.
TTree * m_validationTree
unsigned int m_runNumber
unsigned int m_evtNumber
unsigned int m_lumi_block
int m_nelectrons
int m_electronCounter
 counter for electrons
float m_electronTheta [3][NOS_ELECTRONS] {}
 Track theta at perigee.
float m_electronEta [3][NOS_ELECTRONS] {}
 Track Eta at perigee.
float m_electronPhi [3][NOS_ELECTRONS] {}
 Track Phi on electron.
float m_electronQoverP [3][NOS_ELECTRONS] {}
 Track q over p on electron.
float m_electrond0 [3][NOS_ELECTRONS] {}
 Track Phi on electron.
float m_electronz0 [3][NOS_ELECTRONS] {}
 Track q over p on electron.
float m_electronLMQoverP [3][NOS_ELECTRONS] {}
 Track q over p on electron.
float m_electronErrTheta [3][NOS_ELECTRONS] {}
 Track theta error on electron.
float m_electronErrPhi [3][NOS_ELECTRONS] {}
 Track phi error on electron.
float m_electronErrQoverP [3][NOS_ELECTRONS] {}
float m_electronErrd0 [3][NOS_ELECTRONS] {}
float m_electronErrz0 [3][NOS_ELECTRONS] {}
int m_nTRT [NOS_ELECTRONS] {}
int m_nSCT [NOS_ELECTRONS] {}
int m_nBLayer [NOS_ELECTRONS] {}
int m_nPIX [NOS_ELECTRONS] {}
int m_nTRTout [NOS_ELECTRONS] {}
int m_nSCTout [NOS_ELECTRONS] {}
int m_nPIXout [NOS_ELECTRONS] {}
int m_nTRTHT [NOS_ELECTRONS] {}
int m_nTRTHTout [NOS_ELECTRONS] {}
int m_author [NOS_ELECTRONS] {}
float m_ClusterEnergy [NOS_ELECTRONS] {}
float m_ClusterEta [NOS_ELECTRONS] {}
float m_ClusterPhi [NOS_ELECTRONS] {}
bool m_IsEMLoose [NOS_ELECTRONS] {}
bool m_IsEMMedium [NOS_ELECTRONS] {}
bool m_IsEMTight [NOS_ELECTRONS] {}
bool m_IsEMTightTRT [NOS_ELECTRONS] {}
bool m_isGoodOQ [NOS_ELECTRONS] {}
int m_associatedToVtx [NOS_ELECTRONS] {}
VxPos m_vxpos [NOS_ELECTRONS]
int m_nbpv
int m_pvtype [NO_PV] {}
int m_pvnbtk [NO_PV] {}
float m_pvsumpt [NO_PV] {}
float m_pvx [NO_PV] {}
float m_pvy [NO_PV] {}
float m_pvz [NO_PV] {}
float m_errpvx [NO_PV] {}
float m_errpvy [NO_PV] {}
float m_errpvz [NO_PV] {}
float m_covpvxpvy [NO_PV] {}
float m_covpvypvz [NO_PV] {}
float m_covpvzpvx [NO_PV] {}
bool m_METgoodness
float m_sumet
float m_missingEt
float m_missingEtx
float m_missingEty
float m_ePID_ShowerType [50][NOS_ELECTRONS] {}
float m_ePID_IsolationType [50][NOS_ELECTRONS] {}
float m_ePID_TrackCaloMatchType [50][NOS_ELECTRONS] {}
float m_ePID_SummaryType [50][NOS_ELECTRONS] {}
std::vector< std::pair< xAOD::EgammaParameters::ShowerShapeType, std::string > > m_PID_ShowerType_Names
std::vector< std::pair< xAOD::Iso::IsolationType, std::string > > m_PID_IsolationType_Names
std::vector< std::pair< xAOD::EgammaParameters::TrackCaloMatchType, std::string > > m_PID_TrackCaloMatchType_Names
std::vector< std::pair< xAOD::SummaryType, std::string > > m_PID_SummaryType_Names
bool m_trigger [50] {}
std::vector< std::string > m_triggerNames
TH1F * m_ZeeLooseMassOS_Cluster
TH1F * m_ZeeLooseMassSS_Cluster
TH1F * m_ZeeMediumMassOS_Cluster
TH1F * m_ZeeMediumMassSS_Cluster
TH2F * m_ZeeMediumOS_ClusterPtEta
TH1F * m_WenuLooseElectronET
TH1F * m_WenuTight_Met
TH1F * m_WenuTight_MT
TH1F * m_WenuTightMet_MT
TH1F * m_WenuTightElectronET
TH1F * m_WenuTightW_PT
TH2F * m_WenuTightElectron_PTEtaPos
TH2F * m_WenuTightElectron_PTEtaNeg
 validation tree name - to be acessed by this from root
std::string m_smallValidationTreeName
 validation tree description - second argument in TTree
std::string m_smallValidationTreeDescription
 stream/folder to for the TTree to be written out
std::string m_smallValidationTreeFolder
 Root Validation Tree.
TTree * m_smallValidationTree
double m_small_QoverP
double m_small1_QoverP
double m_small2_QoverP
double m_smallClusterEnergy
double m_smallClusterPhi
double m_smallClusterEta
double m_smallTrackTheta
double m_smallCharge
double m_smalld0
double m_smallz0
std::string m_lhTune
AsgElectronLikelihoodToolm_LHToolLoose2015
AsgElectronLikelihoodToolm_LHToolMedium2015
AsgElectronLikelihoodToolm_LHToolTight2015
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Create a simple ntuple to perform EoverP studies with.

Author
A. Morley

Definition at line 81 of file IDPerfMonEoverP.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ IDPerfMonEoverP()

IDPerfMonEoverP::IDPerfMonEoverP ( const std::string & name,
ISvcLocator * pSvcLocator )

Default constructor.

Definition at line 59 of file IDPerfMonEoverP.cxx.

60 :
61 AthAlgorithm(name, pSvcLocator),
66 m_trigDec("Trig::TrigDecisionTool/TrigDecisionTool"),
68 m_isDATA(true),
69 m_validationMode(true),
70 m_fillDetailedTree(false),
71 m_validationTreeName( "EGrefitter" ),
72 m_validationTreeDescription( "egamma track refitter caches" ),
73 m_validationTreeFolder( "/ZmumuValidationUserSel/EGrefitter"), // use same root file name as Zmumu
80 m_nbpv{},
82 m_sumet{},
91 m_WenuLooseElectronET(nullptr),
92 m_WenuTight_Met(nullptr),
93 m_WenuTight_MT(nullptr),
94 m_WenuTightMet_MT(nullptr),
95 m_WenuTightElectronET(nullptr),
96 m_WenuTightW_PT(nullptr),
99 m_smallValidationTreeName("EGrefitterSmall"),
100 m_smallValidationTreeDescription("Small Tree for E/p fits"),
101 m_smallValidationTreeFolder("/eoverpValidation2/efitterValidation2"),
102 m_smallValidationTree(nullptr),
111 m_smalld0{},
112 m_smallz0{},
116{
117
118// The following properties are specified at run-time
119// (declared in jobOptions file)
120 declareProperty("RefitTracks", m_refitEverything);
121 declareProperty("isDATA", m_isDATA);
122 declareProperty("ReFitterTool", m_TrackRefitter, "ToolHandle for track fitter implementation");
123 declareProperty("ReFitterTool2", m_TrackRefitter_no2, "ToolHandle for track fitter implementation");
124 declareProperty("TrigDecisionTool", m_trigDec, "The TrigDecisionTool instance.");
125 declareProperty("InputElectronContainerName", m_InputElectronContainerName = "Electrons");
126 declareProperty("InputJetContainerName", m_jetContainerName = "AntiKt4LCTopoJets");
127 // declareProperty("MissingEtObjectName", m_missingEtObjectName = "MET_RefFinal");
128 declareProperty("METFinalName", m_metRefFinalName= "FinalClus");
129 declareProperty("MissingEtObjectName", m_missingEtObjectName = "MET_Reference_AntiKt4LCTopo");
130 declareProperty("primaryVertexCollection", m_primaryVertexCollection = "PrimaryVertices");
131 declareProperty("RefittedElectronTrackContainer1", m_OutputTrackCollectionName_no1="GSFTracks");
132 declareProperty("RefittedElectronTrackContainer2", m_OutputTrackCollectionName_no2="DNATracks");
133 declareProperty("ValidationMode", m_validationMode);
134 declareProperty("FillDetailedTree", m_fillDetailedTree);
135 declareProperty("ElectronLikelihoodTune", m_lhTune="mc15_20150712");
136 declareProperty("ValidationTreeFolder", m_validationTreeFolder, "/ZmumuValidationUserSel/EGrefitter"); // use same root file name as Zmumu
137}
AthAlgorithm()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
std::string m_missingEtObjectName
MET input name.
TH1F * m_ZeeMediumMassOS_Cluster
std::string m_OutputTrackCollectionName_no2
TH2F * m_WenuTightElectron_PTEtaNeg
validation tree name - to be acessed by this from root
AsgElectronLikelihoodTool * m_LHToolLoose2015
TTree * m_smallValidationTree
std::string m_smallValidationTreeName
validation tree description - second argument in TTree
TH1F * m_ZeeMediumMassSS_Cluster
ToolHandle< IegammaTrkRefitterTool > m_TrackRefitter
The track refitter.
std::string m_validationTreeName
validation tree description - second argument in TTree
TH2F * m_WenuTightElectron_PTEtaPos
TH1F * m_ZeeLooseMassSS_Cluster
TrackCollection * m_refittedTracks_no2
std::string m_primaryVertexCollection
Primary vertex input name.
unsigned int m_evtNumber
std::string m_smallValidationTreeDescription
stream/folder to for the TTree to be written out
unsigned int m_lumi_block
TrackCollection * m_refittedTracks_no1
Refitted track collection.
std::string m_InputElectronContainerName
Electron collection input name.
std::string m_validationTreeFolder
Root Validation Tree.
bool m_validationMode
< boolean to switch to validation mode
std::string m_OutputTrackCollectionName_no1
Name of output of Refitted Inner Detector Tracks.
int m_electronCounter
counter for electrons
TH2F * m_ZeeMediumOS_ClusterPtEta
std::string m_metRefFinalName
std::string m_lhTune
AsgElectronLikelihoodTool * m_LHToolTight2015
unsigned int m_runNumber
TH1F * m_ZeeLooseMassOS_Cluster
ToolHandle< Trig::TrigDecisionTool > m_trigDec
The trigger decision tool.
bool m_fillDetailedTree
validation tree name - to be acessed by this from root
AsgElectronLikelihoodTool * m_LHToolMedium2015
std::string m_jetContainerName
JEt collection input name.
std::string m_validationTreeDescription
stream/folder to for the TTree to be written out
std::string m_smallValidationTreeFolder
Root Validation Tree.
ToolHandle< IegammaTrkRefitterTool > m_TrackRefitter_no2
The track refitter.

◆ ~IDPerfMonEoverP()

IDPerfMonEoverP::~IDPerfMonEoverP ( )

Destructor.

Definition at line 141 of file IDPerfMonEoverP.cxx.

142{
143
144}

Member Function Documentation

◆ addToValidationNtuple()

void IDPerfMonEoverP::addToValidationNtuple ( const Trk::Perigee * perigee,
const xAOD::CaloCluster * ,
int isOrginal )
private

addToValidationNutple

Definition at line 694 of file IDPerfMonEoverP.cxx.

694 {
695 if (perigee){
696 ATH_MSG_DEBUG( "Adding data to ntuple" );
697 if (isOriginal >= 0 && isOriginal <3){
698 m_electrond0[isOriginal][m_electronCounter] = perigee->parameters()[Trk::d0];
699 m_electronz0[isOriginal][m_electronCounter] = perigee->parameters()[Trk::z0];
700 m_electronPhi[isOriginal][m_electronCounter] = perigee->parameters()[Trk::phi0];
701 m_electronTheta[isOriginal][m_electronCounter] = perigee->parameters()[Trk::theta];
702 m_electronEta[isOriginal][m_electronCounter] = perigee->eta();
703 m_electronQoverP[isOriginal][m_electronCounter]= perigee->parameters()[Trk::qOverP];
704 //
705 const AmgSymMatrix(5)* matrix = perigee->covariance();
706 if (matrix){
707 m_electronErrd0[isOriginal][m_electronCounter] =std::sqrt( (*matrix)(Trk::d0,Trk::d0) );
708 m_electronErrz0[isOriginal][m_electronCounter] = std::sqrt( (*matrix)(Trk::z0,Trk::z0) );
709 m_electronErrPhi[isOriginal][m_electronCounter] = std::sqrt( (*matrix)(Trk::phi0,Trk::phi0) );
710 m_electronErrTheta[isOriginal][m_electronCounter]= std::sqrt( (*matrix)(Trk::theta,Trk::theta) );
711 m_electronErrQoverP[isOriginal][m_electronCounter]= std::sqrt( (*matrix)(Trk::qOverP,Trk::qOverP) );
712 }
713 }
714 } else {
715 ATH_MSG_DEBUG( "No MeasuredPerigee - cannot add data to ntuple" );
716 }
717
718 ATH_MSG_DEBUG( "Finished adding data to ntuple" );
719}
#define ATH_MSG_DEBUG(x)
#define AmgSymMatrix(dim)
float m_electronErrd0[3][NOS_ELECTRONS]
float m_electronEta[3][NOS_ELECTRONS]
Track Eta at perigee.
float m_electrond0[3][NOS_ELECTRONS]
Track Phi on electron.
float m_electronz0[3][NOS_ELECTRONS]
Track q over p on electron.
float m_electronErrz0[3][NOS_ELECTRONS]
float m_electronPhi[3][NOS_ELECTRONS]
Track Phi on electron.
float m_electronErrPhi[3][NOS_ELECTRONS]
Track phi error on electron.
float m_electronErrTheta[3][NOS_ELECTRONS]
Track theta error on electron.
float m_electronQoverP[3][NOS_ELECTRONS]
Track q over p on electron.
float m_electronTheta[3][NOS_ELECTRONS]
Track theta at perigee.
float m_electronErrQoverP[3][NOS_ELECTRONS]
double eta() const
Access method for pseudorapidity - from momentum.
@ phi0
Definition ParamDefs.h:65
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64

◆ clearValidationNtuple()

void IDPerfMonEoverP::clearValidationNtuple ( )
private

Definition at line 765 of file IDPerfMonEoverP.cxx.

766{
767 ATH_MSG_DEBUG( "clear ValidationNtuple variables" );
768 for (int i = 0 ; i < NOS_ELECTRONS ; ++i){
769 for (int j = 0 ; j <3 ; ++j){
770 m_electrond0[j][i] = 0;
771 m_electronz0[j][i] = 0;
772 m_electronPhi[j][i] = 0;
773 m_electronTheta[j][i] = 0;
774 m_electronEta[j][i] = 0;
775 m_electronQoverP[j][i] = 0;
776 m_electronLMQoverP[j][i] = 0;
777
778 m_electronErrd0[j][i] = 0;
779 m_electronErrz0[j][i] = 0;
780 m_electronErrPhi[j][i] = 0;
781 m_electronErrTheta[j][i] = 0;
782 m_electronErrQoverP[j][i] = 0;
783
784 }
785 m_associatedToVtx[i] = 0;
786
787 m_author[i] = 0;
788
789 m_ClusterEnergy[i] = 0;
790
791 m_IsEMLoose[i] = false;
792 m_IsEMMedium[i] = false;
793 m_IsEMTight[i] = false;
794 m_IsEMTightTRT[i] = false;
795
796
797 for (int j = 0 ; j < 50 ; ++j){
798 m_ePID_ShowerType[j][i] =0;
799 m_ePID_IsolationType[j][i] =0;
801 m_ePID_SummaryType[j][i] =0;
802 m_trigger[j] = false;
803 }
804 }
805
806
807 //Vertex information
808 m_nbpv =0;
809 for (int i(0); i< NO_PV; ++i){
810 m_pvtype[i] =0;
811 m_pvnbtk[i]=0;
812 m_pvsumpt[i]=0;
813 m_pvx[i]=0;
814 m_pvy[i]=0;
815 m_pvz[i]=0;
816 m_errpvx[i]=0;
817 m_errpvy[i]=0;
818 m_errpvz[i]=0;
819 m_covpvxpvy[i]=0;
820 m_covpvypvz[i]=0;
821 m_covpvzpvx[i]=0;
822 }
823 //MET
824 m_METgoodness=false;
825 m_sumet=0;
826 m_missingEt=0;
827 m_missingEtx=0;
828 m_missingEty=0;
829
830 return;
831}
#define NO_PV
#define NOS_ELECTRONS
float m_pvy[NO_PV]
float m_ePID_ShowerType[50][NOS_ELECTRONS]
float m_ePID_SummaryType[50][NOS_ELECTRONS]
float m_covpvxpvy[NO_PV]
float m_ePID_TrackCaloMatchType[50][NOS_ELECTRONS]
float m_covpvzpvx[NO_PV]
float m_ePID_IsolationType[50][NOS_ELECTRONS]
bool m_IsEMMedium[NOS_ELECTRONS]
float m_pvsumpt[NO_PV]
float m_errpvy[NO_PV]
int m_author[NOS_ELECTRONS]
int m_associatedToVtx[NOS_ELECTRONS]
bool m_IsEMTight[NOS_ELECTRONS]
bool m_IsEMTightTRT[NOS_ELECTRONS]
float m_ClusterEnergy[NOS_ELECTRONS]
float m_pvx[NO_PV]
float m_electronLMQoverP[3][NOS_ELECTRONS]
Track q over p on electron.
float m_pvz[NO_PV]
float m_covpvypvz[NO_PV]
float m_errpvz[NO_PV]
float m_errpvx[NO_PV]
bool m_IsEMLoose[NOS_ELECTRONS]

◆ correctIP_PV()

double IDPerfMonEoverP::correctIP_PV ( int electron_i,
bool do_d0 )
private

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ deleteAction()

void IDPerfMonEoverP::deleteAction ( ) const
private

Definition at line 834 of file IDPerfMonEoverP.cxx.

835{
836
837}

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode IDPerfMonEoverP::execute ( )

Definition at line 480 of file IDPerfMonEoverP.cxx.

481{
482 ATH_MSG_DEBUG( "Executing IDPerfMonEoverP" );
483 StatusCode sc(StatusCode::SUCCESS);
484 std::map<const xAOD::TrackParticle*, VxPos > trackParticleVertexMap;
485 const xAOD::Vertex* primaryVertexFirstCandidate = nullptr;
486 if (m_validationMode){
488 }else{
489 ATH_MSG_WARNING( " Validation Mode has been turned off ALG will do not fill Ntuples" );
490 return sc;
491 }
492
493 ATH_MSG_DEBUG("Retrieving event info.");
494 SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
495 if(evt.isValid()) {
496 m_runNumber = evt->runNumber();
497 m_evtNumber = evt->eventNumber();
498 m_lumi_block = evt->lumiBlock();
499 ATH_MSG_DEBUG(" --> run: " << m_runNumber << " event: " << m_evtNumber << " lumiblock: " << m_lumi_block );
500 }
501 else {
502 ATH_MSG_ERROR("Could not retrieve event info."); // Keeping ERROR only to preserve old functionality
503 }
504
505 ATH_MSG_DEBUG("Retrieved Trigger info.");
507
508 if ( not fillVertexInformation(trackParticleVertexMap, primaryVertexFirstCandidate) ){
509 ATH_MSG_DEBUG("No Primary Vertex info found");
510 }
511
512 ATH_MSG_DEBUG("MET info.being stored");
513 if( storeMETinformation() ) {
514 ATH_MSG_DEBUG("MET info. stored");
515 }
516 else {
517 ATH_MSG_DEBUG("NO MET info. stored :(");
518 }
519
520 // Get the electron AOD container
521 const xAOD::ElectronContainer* ElectronInput_container;
522 ATH_MSG_DEBUG("Retrieving ElectronInput_container: " << m_InputElectronContainerName);
523 sc = evtStore()->retrieve(ElectronInput_container, m_InputElectronContainerName);
524 if (sc != StatusCode::SUCCESS){
525 ATH_MSG_WARNING("No electron container --> return");
526 deleteAction();
527 return StatusCode::SUCCESS;
528 }
529
530 if (ElectronInput_container->empty() ){
531 ATH_MSG_DEBUG("-- ElectronInput_container is empty -> return");
532 deleteAction();
533 return StatusCode::SUCCESS;
534 }
535
538
539
540 typedef xAOD::ElectronContainer::const_iterator electron_iterator;
541 electron_iterator iter = ElectronInput_container->begin();
542 electron_iterator iterEnd = ElectronInput_container->end();
543
544 // Loop over the Electrons
545 ATH_MSG_DEBUG("Electron info. being stored");
546 for(; iter != iterEnd ; ++iter) {
547 ATH_MSG_DEBUG("Dealing with electron: "<< m_electronCounter+1);
548 if (m_electronCounter >= NOS_ELECTRONS) break;
549 const xAOD::Electron *pThisElectron = (*iter);
551
552 // Cluster Info
553 fillElectronInfo ( pThisElectron );
554 // Fill General info
555 fillGeneral( pThisElectron );
556 // Fill IsEm info
557 fillIsEM( pThisElectron );
558
559 //Get the track particle
560 const xAOD::TrackParticle* mytp = (*iter)->trackParticle();
561 if ( mytp != nullptr ) ATH_MSG_DEBUG("-- electron: "<< m_electronCounter+1 << " pt: " << mytp->p4().Perp() );
562
563
564 if( mytp != nullptr ){
565 uint8_t dummy(0);
566 auto summaryByDetector=[&mytp,&dummy]( const xAOD::SummaryType & t){
567 return mytp->summaryValue(dummy, t) ? (dummy) : (-1);
568 };
569 m_nTRT[m_electronCounter] = summaryByDetector( xAOD::numberOfTRTHits );
570 m_nSCT[m_electronCounter] = summaryByDetector( xAOD::numberOfSCTHits );
571 m_nPIX[m_electronCounter] = summaryByDetector( xAOD::numberOfPixelHits );
577 } else{
578 ATH_MSG_DEBUG("Electron with no track particle?? Possibly Forward");
579 continue;
580 }
581
582 //Find which if any vertex the electron track is associated to
583 VxPos myVxPos = findAssociatedVertex( trackParticleVertexMap,
584 primaryVertexFirstCandidate,
585 pThisElectron );
586 m_associatedToVtx[m_electronCounter] = myVxPos.second;
587 if( mytp->track() ){
588 const Trk::Track* oTrkTrack = mytp->track();
589 if (oTrkTrack){
590 const Trk::Perigee* oMeasPer = oTrkTrack->perigeeParameters() ;
591 if (oMeasPer) addToValidationNtuple( oMeasPer, pThisElectron->caloCluster(), 0 );
592 fillLastMeasurement( oTrkTrack , 0 );
593 }
594 }
595 else {
596 ATH_MSG_DEBUG("mytp->track() == 0");
597 const Trk::Perigee* oMeasPer = &(mytp->perigeeParameters()) ;
598 addToValidationNtuple( oMeasPer, pThisElectron->caloCluster(), 0 );
599 }
600
601
603 // First Refitter................
604 ATH_MSG_DEBUG( "Refitting the track" );
605
606 IegammaTrkRefitterTool::Cache cache1{};
607 StatusCode sc = m_TrackRefitter->refitTrack(Gaudi::Hive::currentContext(),
608 pThisElectron->trackParticle()->track(),
609 cache1 );
610
611 if (sc == StatusCode::SUCCESS){
612 Trk::Track* trkTrack= cache1.refittedTrack.release();
613 m_refittedTracks_no1->push_back(trkTrack);
614 addToValidationNtuple( cache1.refittedTrackPerigee ,pThisElectron->caloCluster(), 1 );
615 fillLastMeasurement(trkTrack, 1 );
616 } else {
617 ATH_MSG_DEBUG( "Track Refit Failed" );
618 }
619 //******************************************************//
620 // Refit tracks using the second refitter if it is present
621 //******************************************************//
622 ATH_MSG_DEBUG( "Refitting the track again" );
623
624 IegammaTrkRefitterTool::Cache cache2{};
625 sc = m_TrackRefitter_no2->refitTrack(Gaudi::Hive::currentContext(),
626 pThisElectron->trackParticle()->track(),
627 cache2 );
628
629 if (sc == StatusCode::SUCCESS){
630 Trk::Track* trkTrack= cache2.refittedTrack.release();
631 //Add the refitted track to the TrackCollection
632 m_refittedTracks_no2->push_back( trkTrack );
633 //Add data to the trkRefitterNtuple
634
635 addToValidationNtuple( cache2.refittedTrackPerigee ,pThisElectron->caloCluster(), 2 );
636 fillLastMeasurement( trkTrack, 2 );
637 } else {
638 ATH_MSG_DEBUG( "Track Refit Failed" );
639 }
640 } else {
641 ATH_MSG_DEBUG( "Not Refitting the track -- DO NOTHING" );
642 }//End if >6 silicon hits;
643 //Increment the electron counter for the validation nutple
645 }
646 // Commit Data to Ntuple;
648 // Fill much smaller tree
649 std::vector<int> goodElectrons = FillSimpleTree();
650 TrackCollection* selectedElectrons = new TrackCollection;
651
652 for( const auto & thisGoodElectron: goodElectrons){
653 IegammaTrkRefitterTool::Cache cache{};
654 StatusCode sc = m_TrackRefitter->refitTrack(Gaudi::Hive::currentContext(),
655 (*ElectronInput_container)[thisGoodElectron]->trackParticle()->track(),
656 cache );
657 if (sc == StatusCode::SUCCESS){
658 Trk::Track* trkTrack= cache.refittedTrack.release();
659 selectedElectrons->push_back(trkTrack);
660 }
661 }
662
663 //******************************************************//
664 //* Add the newly created TrackCollection to StoreGate *//
665 //******************************************************//
666
668 if (sc.isFailure())
669 {
670 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no1 <<" object.");
671 delete selectedElectrons;
672 return (StatusCode::FAILURE);
673 }
674 //
676 if (sc.isFailure())
677 {
678 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no2 <<" object.");
679 delete selectedElectrons;
680 return (StatusCode::FAILURE);
681 }
682 //
683 sc = evtStore()->record( selectedElectrons, m_OutputTrackCollectionName_no1 + "Selected", false );
684 if (sc.isFailure())
685 {
686 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no1+"Selected" <<" object.");
687 delete selectedElectrons;
688 return (StatusCode::FAILURE);
689 }
690 ATH_MSG_DEBUG( "execute completed successfully");
691 return StatusCode::SUCCESS;
692}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
std::pair< const xAOD::Vertex *, int > VxPos
static Double_t sc
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool empty() const noexcept
Returns true if the collection is empty.
SG::ReadHandleKey< xAOD::EventInfo > m_evt
ReadHandle to the Event Info.
void fillGeneral(const xAOD::Electron *eg)
int m_nTRT[NOS_ELECTRONS]
int m_nTRTout[NOS_ELECTRONS]
int m_nBLayer[NOS_ELECTRONS]
void addToValidationNtuple(const Trk::Perigee *, const xAOD::CaloCluster *, int isOrginal)
addToValidationNutple
void fillIsEM(const xAOD::Electron *eg)
VxPos findAssociatedVertex(std::map< const xAOD::TrackParticle *, VxPos > &trackParticleVertexMap, const xAOD::Vertex *primaryVertexFirstCandidate, const xAOD::Electron *) const
int m_nSCT[NOS_ELECTRONS]
int m_nPIX[NOS_ELECTRONS]
int m_nTRTHT[NOS_ELECTRONS]
void fillElectronInfo(const xAOD::Electron *p)
int m_nSCTout[NOS_ELECTRONS]
bool fillLastMeasurement(const Trk::Track *track, const int fitter)
std::vector< int > FillSimpleTree()
int m_nTRTHTout[NOS_ELECTRONS]
bool fillVertexInformation(std::map< const xAOD::TrackParticle *, VxPos > &trackParticleVertexMap, xAOD::Vertex const *&primaryVertexFirstCandidate)
void deleteAction() const
const Perigee * perigeeParameters() const
return Perigee.
uint16_t author(uint16_t bitmask=EgammaParameters::AuthorALL) const
Get author.
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
const xAOD::TrackParticle * trackParticle(size_t index=0) const
Pointer to the xAOD::TrackParticle/s that match the electron candidate.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
::StatusCode StatusCode
StatusCode definition for legacy code.
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
const uint16_t AuthorElectron
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:24
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
SummaryType
Enumerates the different types of information stored in Summary.
@ numberOfTRTHighThresholdOutliers
number of TRT high threshold outliers (only xenon counted) [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
Electron_v1 Electron
Definition of the current "egamma version".
std::unique_ptr< Trk::Track > refittedTrack
Pointer to the refitted track.
const Trk::Perigee * refittedTrackPerigee
Pointer to the refitted MeasuredPerigee.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ extrapolateToTheCalo()

void IDPerfMonEoverP::extrapolateToTheCalo ( const Trk::TrackParameters * trkPar,
const xAOD::CaloCluster * cluster,
double * eta,
double * phi,
double * deltaEta,
double * delatPhi )
private

◆ fillElectronInfo()

void IDPerfMonEoverP::fillElectronInfo ( const xAOD::Electron * p)
private

Definition at line 1016 of file IDPerfMonEoverP.cxx.

1017{
1018 ATH_MSG_VERBOSE( "In fillElectronInfo()" );
1019 for (size_t i = 0; i < m_PID_ShowerType_Names.size(); i++) {
1020 float dummy(-1);
1021 m_ePID_ShowerType[i][m_electronCounter] = static_cast<float> (p->showerShapeValue( dummy, m_PID_ShowerType_Names[i].first ))? dummy :-1;
1022 }
1023 for (size_t i = 0; i < m_PID_TrackCaloMatchType_Names.size(); i++) {
1024 float dummy(-1);
1025 m_ePID_TrackCaloMatchType[i][m_electronCounter] = static_cast<float> (p->trackCaloMatchValue( dummy, m_PID_TrackCaloMatchType_Names[i].first ))? dummy :-1;
1026 }
1027
1028for (size_t i = 0; i < m_PID_SummaryType_Names.size(); i++) {
1029 float dummy(-1);
1030 m_ePID_SummaryType[i][m_electronCounter] = static_cast<float> (p->trackParticleSummaryValue( dummy, m_PID_SummaryType_Names[i].first ))? dummy :-1;
1031 }
1032
1033 return;
1034
1035}
#define ATH_MSG_VERBOSE(x)
std::vector< std::pair< xAOD::EgammaParameters::ShowerShapeType, std::string > > m_PID_ShowerType_Names
std::vector< std::pair< xAOD::SummaryType, std::string > > m_PID_SummaryType_Names
std::vector< std::pair< xAOD::EgammaParameters::TrackCaloMatchType, std::string > > m_PID_TrackCaloMatchType_Names

◆ fillGeneral()

void IDPerfMonEoverP::fillGeneral ( const xAOD::Electron * eg)
private

Definition at line 752 of file IDPerfMonEoverP.cxx.

753{
754 ATH_MSG_DEBUG( "fillGeneral" );
755 const xAOD::CaloCluster* cluster = eg->caloCluster();
756 if(!cluster) return;
757 m_ClusterEnergy[m_electronCounter] = cluster->e();
758 m_ClusterPhi[m_electronCounter] = cluster->phi();
759 m_ClusterEta[m_electronCounter] = cluster->eta();
760}
float m_ClusterPhi[NOS_ELECTRONS]
float m_ClusterEta[NOS_ELECTRONS]
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.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ fillIsEM()

void IDPerfMonEoverP::fillIsEM ( const xAOD::Electron * eg)
private

Definition at line 722 of file IDPerfMonEoverP.cxx.

723{
724 ATH_MSG_DEBUG( "fillIsEM" );
725 int el_goodOQ = (int)eg->isGoodOQ(xAOD::EgammaParameters::BADCLUSELECTRON);
726 m_isGoodOQ[m_electronCounter] = el_goodOQ;
727 // check loose LH
728 bool val_loose = (bool) m_LHToolLoose2015->accept(eg);
729 ATH_MSG_DEBUG( "Loose value : " << val_loose);
730 if(val_loose){
731 m_IsEMLoose[m_electronCounter] = val_loose;
732 }//else{ATH_MSG_DEBUG("Loose electron not defined !");}
733
734 // check medium LH
735 bool val_med = (bool) m_LHToolMedium2015->accept(eg);
736 ATH_MSG_DEBUG( "Medium value : " << val_med );
737 if(val_med){
739 }//else{ATH_MSG_DEBUG("Mediu, electron not defined !");}
740
741 // check tight LH
742 bool val_tight = (bool) m_LHToolTight2015->accept(eg);
743 ATH_MSG_DEBUG( "Tight value : " << val_tight);
744 if(val_tight){
745 m_IsEMTight[m_electronCounter] = val_tight;
746 }//else{ATH_MSG_DEBUG("Tight electron not defined !");}
747 return;
748
749}
bool m_isGoodOQ[NOS_ELECTRONS]
const uint32_t BADCLUSELECTRON
Definition EgammaDefs.h:116
setBGCode setTAP setLVL2ErrorBits bool

◆ fillLastMeasurement()

bool IDPerfMonEoverP::fillLastMeasurement ( const Trk::Track * track,
const int fitter )
private

Definition at line 1037 of file IDPerfMonEoverP.cxx.

1038{
1039 ATH_MSG_VERBOSE("In fillLastMeasurement()");
1040 if(!track) return false;
1041 const Trk::TrackParameters* trkPara =0;
1042
1043 const Trk::TrackStates* oldTrackStates = track->trackStateOnSurfaces();
1044 if (oldTrackStates == 0)
1045 {
1046 return false;
1047 }
1048
1049 for ( Trk::TrackStates::const_reverse_iterator rItTSoS = oldTrackStates->rbegin(); rItTSoS != oldTrackStates->rend(); ++rItTSoS)
1050 {
1051 if (trkPara!=0){
1052 break;
1053 }
1054
1055 if ( (*rItTSoS)->type(Trk::TrackStateOnSurface::Measurement) && (*rItTSoS)->trackParameters()!=0 && (*rItTSoS)->measurementOnTrack()!=0)
1056 {
1057 trkPara = (*rItTSoS)->trackParameters();
1058 }
1059 }
1060
1061 if (trkPara !=0 ){
1062 m_electronLMQoverP[fitter][m_electronCounter] = trkPara->parameters()[Trk::qOverP] ;
1063 return true;
1064 }
1065
1066 return false;
1067
1068}
const_reverse_iterator rend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition DataVector.h:847
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
const ShapeFitter * fitter
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ FillSimpleTree()

std::vector< int > IDPerfMonEoverP::FillSimpleTree ( )
private

Definition at line 1315 of file IDPerfMonEoverP.cxx.

1316{
1317 ATH_MSG_VERBOSE("In fillSimpleTree()");
1318 std::vector<int> electronsZee;
1319 std::vector<int> electronsWenu;
1320
1321 // check if Zee or Wenu event
1322 passZeeSelection(electronsZee);
1323 passWenuSelection(electronsWenu);
1324
1325 std::vector<int> allInterestingElectrons;
1326 for(int i(0); i < (int)electronsZee.size(); ++i){
1327 int ele = electronsZee[i];
1328 if ( std::find(allInterestingElectrons.begin(), allInterestingElectrons.end(), ele)==allInterestingElectrons.end() ){
1329 allInterestingElectrons.push_back(ele);
1330 }
1331 }
1332 for(int i(0); i < (int)electronsWenu.size(); ++i){
1333 int ele = electronsWenu[i];
1334 if ( std::find(allInterestingElectrons.begin(), allInterestingElectrons.end(), ele)==allInterestingElectrons.end() ){
1335 allInterestingElectrons.push_back(ele);
1336 }
1337 }
1338 ATH_MSG_DEBUG(" SimpleTreeElectrons " << allInterestingElectrons.size() );
1339 for(int i(0); i < (int)allInterestingElectrons.size(); ++i){
1340 int ele = allInterestingElectrons[i];
1341 if (m_electronQoverP[0][ele] > 0 )
1342 m_smallCharge = 1.;
1343 else
1344 m_smallCharge =-1.;
1352 m_smallValidationTree->Fill();
1353 }
1354
1355 return allInterestingElectrons;
1356}
bool passWenuSelection(std::vector< int > &electrons)
bool passZeeSelection(std::vector< int > &electrons)

◆ fillTriggerInformation()

void IDPerfMonEoverP::fillTriggerInformation ( )
private

Definition at line 997 of file IDPerfMonEoverP.cxx.

998{
999 ATH_MSG_VERBOSE("In fillTriggerInformation()");
1000 ATH_MSG_DEBUG( "Pass state All = " << m_trigDec->isPassed( ".*" ) );
1001 ATH_MSG_DEBUG( "Pass state L1 = " << m_trigDec->isPassed( "L1_.*" ) );
1002 ATH_MSG_DEBUG( "Pass state L2 = " << m_trigDec->isPassed( "L2_.*" ) );
1003 ATH_MSG_DEBUG( "Pass state EF = " << m_trigDec->isPassed( "EF_.*" ) );
1004 ATH_MSG_DEBUG("HLT_.* is passed: " << m_trigDec->isPassed("HLT_.*"));
1005 for (unsigned int i=0; i < m_triggerNames.size(); ++i){
1006 if(m_triggerNames[i] == "ALL")
1007 m_trigger[i] = m_trigDec->isPassed(".*");
1008 else if(m_triggerNames[i] == "HLT_ALL")
1009 m_trigger[i] = m_trigDec->isPassed("HLT_.*");
1010 else
1011 m_trigger[i] = m_trigDec->isPassed(m_triggerNames[i]);
1012 }
1013 return;
1014}
std::vector< std::string > m_triggerNames

◆ fillVertexInformation()

bool IDPerfMonEoverP::fillVertexInformation ( std::map< const xAOD::TrackParticle *, VxPos > & trackParticleVertexMap,
xAOD::Vertex const *& primaryVertexFirstCandidate )
private

Definition at line 901 of file IDPerfMonEoverP.cxx.

903{
904 ATH_MSG_DEBUG( "fillVertexInformation() -- START --" );
905 const xAOD::VertexContainer* vxContainer(0);
906 int npv = 0;
907 StatusCode sc = evtStore()->retrieve(vxContainer, m_primaryVertexCollection);
908 if (sc.isFailure()) {
909 ATH_MSG_WARNING( "Could not retrieve primary vertex info: " << m_primaryVertexCollection );
910 return false;
911 }
912 else {
913 ATH_MSG_DEBUG( "Found primary vertex info: " << m_primaryVertexCollection );
914 if(vxContainer) {
915 ATH_MSG_DEBUG("Nb of reco primary vertex for coll "
916 << " = " << vxContainer->size() );
917 primaryVertexFirstCandidate = std::begin(*vxContainer)[0];
918 ATH_MSG_DEBUG( "The primary vertex type: " << primaryVertexFirstCandidate->type() );
919 int vtxCount = 0;
920 for(const auto* vxI : *vxContainer ) {
921 int type = (int)(vxI)->vertexType();
922 const xAOD::Vertex* primaryVertex = vxI;
923 vtxCount++;
924 ATH_MSG_DEBUG( " -- dealing with vertex " << vtxCount << " type: " << type );
925 int nbtk = 0;
926 const std::vector< ElementLink< xAOD::TrackParticleContainer > > tpLinks = vxI->trackParticleLinks();
927 float sumpt = 0.;
928 if(not tpLinks.empty()) {
929 nbtk = tpLinks.size();
930 ATH_MSG_DEBUG( " -- vertex " << vtxCount << " has " << nbtk << " track particles" );
931 for(const auto& tp_elem : tpLinks ){
932 const xAOD::TrackParticle* trk = *tp_elem;
933 if (trk != NULL) {
934 VxPos myVxPos = std::make_pair(vxI,npv);
935 trackParticleVertexMap.insert( std::make_pair( trk, myVxPos ) );
936 if(trk) {
937 sumpt += trk->p4().Perp();
938 }
939 }
940 else {
941 ATH_MSG_DEBUG( " -- trk is NULL :(" );
942 } // trk not null
943 } // loop on tracks
944 ATH_MSG_DEBUG( "Reco PV " << npv << ": ("
945 << primaryVertex->position().x() << ","
946 << primaryVertex->position().y() << ","
947 << primaryVertex->position().z() << ")"
948 << " type=" << type
949 << " nbtk=" << nbtk
950 << " sumpt=" << sumpt);
951
952 if(npv >= NO_PV) {
953 ATH_MSG_WARNING( "More than " << NO_PV << " reconstructed primary vertices in event "
954 << "for run= " << m_runNumber << " evt= " << m_evtNumber
955 << ". Truncated event. " );
956 } else {
957 m_pvtype[npv] = type;
958 m_pvnbtk[npv] = nbtk;
959 m_pvsumpt[npv] = sumpt;
960 m_pvx[npv] = primaryVertex->position().x();
961 m_pvy[npv] = primaryVertex->position().y();
962 m_pvz[npv] = primaryVertex->position().z();
963
964 }
965 ++npv;
966 } else {
967 ATH_MSG_DEBUG( "Vertex " << npv << " has no tracks associated to it!" );
968 }
969 }
970 } else {
971 ATH_MSG_DEBUG( "No container in collection?? " << m_primaryVertexCollection );
972 }
973 }
974 m_nbpv = npv;
975
976 ATH_MSG_DEBUG("Done filling Vertex information -- completed -- ");
977
978 if (npv == 0) return false;
979 return true;
980}
const Amg::Vector3D & position() const
Returns the 3-pos.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".

◆ finalize()

StatusCode IDPerfMonEoverP::finalize ( )

Definition at line 473 of file IDPerfMonEoverP.cxx.

474{
475 return StatusCode::SUCCESS;
476}

◆ findAssociatedVertex()

VxPos IDPerfMonEoverP::findAssociatedVertex ( std::map< const xAOD::TrackParticle *, VxPos > & trackParticleVertexMap,
const xAOD::Vertex * primaryVertexFirstCandidate,
const xAOD::Electron * eg ) const
private

Definition at line 982 of file IDPerfMonEoverP.cxx.

985{
986 ATH_MSG_VERBOSE("In findAssociatedVertex()");
987 std::map<const xAOD::TrackParticle*, VxPos>::iterator tpVx =
988 trackParticleVertexMap.find(eg->trackParticle());
989 if (tpVx == trackParticleVertexMap.end() ){
990 return std::make_pair( primaryVertexFirstCandidate,-1 );
991 } else
992 return (*tpVx).second;
993
994}

◆ getMassCluster()

double IDPerfMonEoverP::getMassCluster ( int el1,
int el2 )
private

Definition at line 1299 of file IDPerfMonEoverP.cxx.

1300{
1301 ATH_MSG_VERBOSE("In getMassCluster()");
1302 double ELECTRON_MASS = ParticleConstants::electronMassInMeV; //MeV
1303 TLorentzVector v0,v1;
1304 double pt1 = m_ClusterEnergy[el1]*std::sin(m_electronTheta[0][el1]);
1305 double pt2 = m_ClusterEnergy[el2]*std::sin(m_electronTheta[0][el2]);
1306 double eta1 = -std::log( std::tan(m_electronTheta[0][el1] * 0.5) );
1307 double eta2 = -std::log( std::tan(m_electronTheta[0][el2] * 0.5) );
1308 v0.SetPtEtaPhiM(pt1,eta1,m_electronPhi[0][el1], ELECTRON_MASS);
1309 v1.SetPtEtaPhiM(pt2,eta2,m_electronPhi[0][el2], ELECTRON_MASS);
1310 double mass = (v0+v1).M();
1311 return mass;
1312
1313}
constexpr double electronMassInMeV
the mass of the electron (in MeV)
setEt setPhi setE277 setWeta2 eta1

◆ initialize()

StatusCode IDPerfMonEoverP::initialize ( )

Gaudi algorithm hooks.

Definition at line 150 of file IDPerfMonEoverP.cxx.

151{
152 ATH_MSG_INFO("Initializing IDPerfMonEoverP");
153
154 ATH_CHECK( m_evt.initialize() );
155
156 // Retrieve Jet selector tool
157 CHECK( m_jetCleaningTool.retrieve() );
158
159 // Retrieve fitter
160 if (m_TrackRefitter.retrieve().isFailure()) {
161 ATH_MSG_FATAL("Unable to retrieve " << m_TrackRefitter );
162 return StatusCode::FAILURE;
163 } else
164 ATH_MSG_INFO("Retrieved tool" << m_TrackRefitter );
165
166 // Retrieve the second fitter
167 if (m_TrackRefitter_no2.retrieve().isFailure()) {
168 ATH_MSG_FATAL("Unable to retrieve " << m_TrackRefitter_no2 );
169 return StatusCode::FAILURE;
170 } else {
171 ATH_MSG_INFO("Retrieved tool" << m_TrackRefitter_no2 );
172 }
173
174 if(m_trigDec.retrieve().isFailure()) {
175 ATH_MSG_FATAL("Unable to retrieve " << m_trigDec << " turn it off");
176 return StatusCode::FAILURE;
177 }
178 else
179 ATH_MSG_INFO("Retrieved tool" << m_trigDec );
180
181
182 //
183 // Electron PID Variables
184 //
185 // Following are of ShowerShapeType
186 namespace xEgamma = xAOD::EgammaParameters;
187 namespace xIso = xAOD::Iso;
189 {xEgamma::f1, "f1"},
190 {xEgamma::emins1, "f1core"},
191 {xEgamma::fracs1, "fside"},
192 {xEgamma::e2tsts1, "Emax2"},
193 {xEgamma::weta1, "ws3"},
194 {xEgamma::wtots1, "wstot"},
195 {xEgamma::emaxs1,"emaxs1"},
196 {xEgamma::e233,"E233"},
197 {xEgamma::e237,"E237"},
198 {xEgamma::e277,"E277"},
199 {xEgamma::weta2,"weta2"},
200 {xEgamma::f3,"f3"},
201 {xEgamma::f3core,"f3core"}
202 };
203 // Following are of isolation type
205 {xIso::etcone20,"Etcone20"},
206 {xIso::etcone30,"Etcone30"},
207 {xIso::etcone40,"Etcone40"},
208 {xIso::ptcone30,"ptcone30"}
209 };
210 // Following are of trackcalomatch type
212 {xEgamma::deltaEta1,"deltaeta1"},
213 {xEgamma::deltaEta2,"deltaeta2"},
214 {xEgamma::deltaPhi2,"deltaphi2"}
215 };
216
217
218
219 //
220 // Trigger
221 //
223 "L1_MBTS_1",
224 "L1_EM2",
225 "L1_2EM2",
226 "L1_2EM4",
227 "L1_EM5",
228 "L1_EM10",
229 "L1_EM10I",
230 "L1_EM14",
231 "L1_EM18",
232 "L1_EM18I",
233 "L1_EM23I",
234 "L1_EM100",
235 "EF_2e5_medium",
236 "EF_e10_medium",
237 "EF_e20_loose",
238 "EF_em105_passHLT",
239 "EF_g20_loose",
240 "EF_e20_medium",
241 "EF_e22_medium",
242 //run 2 test
243 "HLT_e24_lhmedium_idperf_L1EM20VH",
244 "HLT_e24_medium_L1EM18VH",
245 "e5_vloose",
246 "ALL",
247 "HLT_ALL"
248 };
249
250 // If the validation nuptle has been requested Setup the ntuple
251 if (m_validationMode){
252 if (m_validationTree == nullptr ){ // validation tree does not exist yet
253 // create the new Tree
254 ATH_MSG_DEBUG ( "Booking validationTree with name: " << m_validationTreeName );
256 std::string FitterNames[3] = {"GX2","Refitted1","Refitted2"};
257 m_validationTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
258 m_validationTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
259 m_validationTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
260 // counter for number of electrons
261 m_validationTree->Branch("nElectrons" , &m_nelectrons, "nElectrons/I");
262 // Track fitter information
263 for(int fitter(0); fitter < 3; ++fitter){
264 m_validationTree->Branch( (FitterNames[fitter]+"_Theta").c_str() , m_electronTheta[fitter], (FitterNames[fitter]+"_Theta0[nElectrons]/F").c_str() );
265 m_validationTree->Branch( (FitterNames[fitter]+"_Eta").c_str() , m_electronEta[fitter], (FitterNames[fitter]+"_Eta[nElectrons]/F").c_str() );
266 m_validationTree->Branch( (FitterNames[fitter]+"_Eta").c_str() , m_electronEta[fitter], (FitterNames[fitter]+"_Eta[nElectrons]/F").c_str() );
267 m_validationTree->Branch( (FitterNames[fitter]+"_Phi0").c_str() , m_electronPhi[fitter], (FitterNames[fitter]+"_Phi0[nElectrons]/F").c_str() );
268 m_validationTree->Branch( (FitterNames[fitter]+"_QoverP").c_str() , m_electronQoverP[fitter], (FitterNames[fitter]+"_QoverP[nElectrons]/F").c_str());
269 m_validationTree->Branch( (FitterNames[fitter]+"_d0").c_str() , m_electrond0[fitter], (FitterNames[fitter]+"_d0[nElectrons]/F").c_str());
270 m_validationTree->Branch( (FitterNames[fitter]+"_z0").c_str() , m_electronz0[fitter], (FitterNames[fitter]+"_z0[nElectrons]/F").c_str());
271 m_validationTree->Branch( (FitterNames[fitter]+"_LMQoverP").c_str() , m_electronLMQoverP[fitter], (FitterNames[fitter]+"_LMQoverP[nElectrons]/F").c_str());
272 m_validationTree->Branch( (FitterNames[fitter]+"_ThetaErr").c_str() , m_electronErrTheta[fitter], (FitterNames[fitter]+"_Theta0Err[nElectrons]/F").c_str());
273 m_validationTree->Branch( (FitterNames[fitter]+"_Phi0Err").c_str() , m_electronErrPhi[fitter], (FitterNames[fitter]+"_Phi0Err[nElectrons]/F").c_str());
274 m_validationTree->Branch( (FitterNames[fitter]+"_QoverPErr").c_str(), m_electronErrQoverP[fitter],(FitterNames[fitter]+"_QoverPErr[nElectrons]/F").c_str());
275 m_validationTree->Branch( (FitterNames[fitter]+"_d0Err").c_str() , m_electronErrd0[fitter], (FitterNames[fitter]+"_d0Err[nElectrons]/F").c_str());
276 m_validationTree->Branch( (FitterNames[fitter]+"_z0Err").c_str() , m_electronErrz0[fitter], (FitterNames[fitter]+"_z0Err[nElectrons]/F").c_str());
277 }
278
279 m_validationTree->Branch("associatedToVtx" , m_associatedToVtx, "associatedToVtx[nElectrons]/I");
280 m_validationTree->Branch("nbpv", &m_nbpv, "nbpv/I");
281 m_validationTree->Branch("pvtype", m_pvtype, "pvtype[nbpv]/I");
282 m_validationTree->Branch("pvnbtk", m_pvnbtk, "pvnbtk[nbpv]/I");
283 m_validationTree->Branch("pvsumpt", m_pvsumpt, "pvsumpt[nbpv]/F");
284 m_validationTree->Branch("pvx", m_pvx, "pvx[nbpv]/F");
285 m_validationTree->Branch("pvy", m_pvy, "pvy[nbpv]/F");
286 m_validationTree->Branch("pvz", m_pvz, "pvz[nbpv]/F");
287 m_validationTree->Branch("errpvx", m_errpvx, "errpvx[nbpv]/F");
288 m_validationTree->Branch("errpvy", m_errpvy, "errpvy[nbpv]/F");
289 m_validationTree->Branch("errpvz", m_errpvz, "errpvz[nbpv]/F");
290 m_validationTree->Branch("covpvxpvy", m_covpvxpvy, "covpvxpvy[nbpv]/F");
291 m_validationTree->Branch("covpvzpvx", m_covpvzpvx, "covpvzpvx[nbpv]/F");
292 m_validationTree->Branch("covpvypvz", m_covpvypvz, "covpvypvz[nbpv]/F");
293
294
295 m_validationTree->Branch("METgoodness", &m_METgoodness, "METgoodness/B");
296 m_validationTree->Branch("sumet", &m_sumet, "sumet/F");
297 m_validationTree->Branch("missingEt", &m_missingEt, "missingEt/F");
298 m_validationTree->Branch("missingEtx", &m_missingEtx, "missingEtx/F");
299 m_validationTree->Branch("missingEty", &m_missingEty, "missingEty/F");
300
301
302 m_validationTree->Branch("ElectronAuthor" , m_author, "ElectronAuthor[nElectrons]/I");
303 m_validationTree->Branch("ClusterEnergy" , m_ClusterEnergy, "ClusterEnergy[nElectrons]/F");
304 m_validationTree->Branch("ClusterEta" , m_ClusterEta, "ClusterEta[nElectrons]/F");
305 m_validationTree->Branch("ClusterPhi" , m_ClusterPhi, "ClusterPhi[nElectrons]/F");
306
307 m_validationTree->Branch("IsEMLoose" , m_IsEMLoose, "m_IsEMLoose[nElectrons]/B");
308 m_validationTree->Branch("IsEMMedium" , m_IsEMMedium, "m_IsEMMedium[nElectrons]/B");
309 m_validationTree->Branch("IsEMTight" , m_IsEMTight, "m_IsEMTight[nElectrons]/B");
310 m_validationTree->Branch("isGoodOQ" , m_isGoodOQ, "isGoodOQ[nElectrons]/B");
311
312 m_validationTree->Branch("nTRT" , m_nTRT , "nTRT[nElectrons]/I");
313 m_validationTree->Branch("nSCT" , m_nSCT, "nSCT[nElectrons]/I");
314 m_validationTree->Branch("nBLayer" , m_nBLayer, "nBLayer[nElectrons]/I");
315 m_validationTree->Branch("nPIX" , m_nPIX, "nPIX[nElectrons]/I");
316 m_validationTree->Branch("nTRTout" , m_nTRTout, "nTRTout[nElectrons]/I");
317 m_validationTree->Branch("nSCTout" , m_nSCTout, "nSCTout[nElectrons]/I");
318 m_validationTree->Branch("nPIXout" , m_nPIXout, "nPIXout[nElectrons]/I");
319 m_validationTree->Branch("nTRTHT" , m_nTRTHT, "nTRTHT[nElectrons]/I");
320 m_validationTree->Branch("nTRTHout" , m_nTRTHTout, "nTRTHTout[nElectrons]/I");
321
322
323 for(unsigned int item(0); item < m_PID_ShowerType_Names.size(); ++item){
324 m_validationTree->Branch( m_PID_ShowerType_Names[item].second.c_str() , m_ePID_ShowerType[item], std::string( m_PID_ShowerType_Names[item].second + "[nElectrons]/F").c_str() );
325 }
326
327 for(unsigned int item(0); item < m_PID_IsolationType_Names.size(); ++item){
328 m_validationTree->Branch( m_PID_IsolationType_Names[item].second.c_str() , m_ePID_IsolationType[item], std::string( m_PID_IsolationType_Names[item].second + "[nElectrons]/F").c_str() );
329 }
330
331 for(unsigned int item(0); item < m_PID_TrackCaloMatchType_Names.size(); ++item){
332 m_validationTree->Branch( m_PID_TrackCaloMatchType_Names[item].second.c_str() , m_ePID_TrackCaloMatchType[item], std::string( m_PID_TrackCaloMatchType_Names[item].second + "[nElectrons]/F").c_str() );
333 }
334
335 for(unsigned int item(0); item < m_PID_SummaryType_Names.size(); ++item){
336 m_validationTree->Branch( m_PID_SummaryType_Names[item].second.c_str() , m_ePID_SummaryType[item], std::string( m_PID_SummaryType_Names[item].second + "[nElectrons]/F").c_str() );
337 }
338
339 for(unsigned int item(0); item < m_triggerNames.size(); ++item){
340 m_validationTree->Branch( m_triggerNames[item].c_str() , &m_trigger[item], std::string( m_triggerNames[item]+ "/B" ).c_str() );
341 }
342
343 }
344
345
346 if(m_smallValidationTree == nullptr){
347
349
350 m_smallValidationTree->Branch("charge",&m_smallCharge,"charge/D");
351 m_smallValidationTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
352 m_smallValidationTree->Branch("Default_QoverP",&m_small_QoverP,"Default_QoverP/D");
353 m_smallValidationTree->Branch("Refitted1_QoverP",&m_small1_QoverP,"Refitted1_QoverP/D");
354 m_smallValidationTree->Branch("Refitted2_QoverP",&m_small2_QoverP,"Refitted2_QoverP/D");
355 m_smallValidationTree->Branch("ClusterEnergy",&m_smallClusterEnergy,"ClusterEnergy/D");
356 m_smallValidationTree->Branch("ClusterEta" ,&m_smallClusterEta,"ClusterEta/D");
357 m_smallValidationTree->Branch("ClusterPhi" ,&m_smallClusterPhi,"ClusterPhi/D");
358 m_smallValidationTree->Branch("TrackTheta" ,&m_smallTrackTheta,"TrackTheta/D");
359 }
360
361 // Access THistSvc
362 ServiceHandle<ITHistSvc> tHistSvc("THistSvc", name());
363 if ( tHistSvc.retrieve().isSuccess()) {
364 ATH_MSG_DEBUG(" initialize() THistSvc successfully retrieved ");
365 }
366 else {
367 ATH_MSG_ERROR("initialize() Could not find Hist Service -> Switching ValidationMode Off !");
370 m_validationMode = false;
371 }
372
373 // now register the Tree
374 if (m_validationTree != nullptr ) {
375 if ( (tHistSvc->regTree(m_validationTreeFolder, m_validationTree)).isSuccess() ) {
376 ATH_MSG_DEBUG( "initialize() validation tree (" << m_validationTree->GetName() <<") successfully registered in folder " << m_validationTreeFolder );
377 }
378 else {
379 ATH_MSG_ERROR( "initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
381 m_validationMode = false;
382 }
383 }
384 else {
385 ATH_MSG_DEBUG( "initialize() no validation tree to register :( ");
386 }
387
388 if ((tHistSvc->regTree(m_smallValidationTreeFolder, m_smallValidationTree)).isFailure() ) {
389 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
391 m_validationMode = false;
392 }
393 else {
394 m_ZeeLooseMassOS_Cluster = new TH1F("ZeeMassLooseOS","ZeeMassLooseOS", 120, 60000 ,120000);
395 m_ZeeLooseMassSS_Cluster = new TH1F("ZeeMassLooseSS","ZeeMassLooseSS", 120, 60000 ,120000);
396 m_ZeeMediumMassOS_Cluster = new TH1F("ZeeMassMediumOS","ZeeMassMediumOS", 120, 60000 ,120000);
397 m_ZeeMediumMassSS_Cluster = new TH1F("ZeeMassMediumSS","ZeeMassMediumSS", 120, 60000 ,120000);
398 m_WenuLooseElectronET= new TH1F("WenuLooseElectronET","WenuLooseElectronET", 80, 20000 ,100000);
399 m_WenuTight_Met = new TH1F("WenuTight_Met","WenuTight_Met", 120, 00000 ,120000);
400 m_WenuTight_MT = new TH1F("WenuTight_MT","WenuTight_MT", 120, 00000 ,120000);
401 m_WenuTightMet_MT = new TH1F("WenuTightMet_MT","WenuTightMet_MT", 120, 00000 ,120000);
402 m_WenuTightElectronET = new TH1F("WenuTightElectronET","WenuTightElectronET", 100, 00000 ,100000);
403 m_WenuTightW_PT = new TH1F("WenuTightW_PT","WenuTightW_PT", 100, 00000 ,100000);
404
405 m_ZeeMediumOS_ClusterPtEta = new TH2F("ZeeMediumOS_ClusterPtEta", "ZeeMediumOS_ClusterPtEta",100,20000,120000,50,-2.5,2.5);
406 m_WenuTightElectron_PTEtaPos = new TH2F("WenuTightElectron_PTEtaPos", "WenuTightElectron_PTEtaPos",100,20000,120000,50,-2.5,2.5);
407 m_WenuTightElectron_PTEtaNeg = new TH2F("WenuTightElectron_PTEtaNeg", "WenuTightElectron_PTEtaNeg",100,20000,120000,50,-2.5,2.5);
408
409 bool somethingFailed{};
410 somethingFailed |= ( (tHistSvc->regHist(m_smallValidationTreeFolder + "/ZeeMassLooseOS",m_ZeeLooseMassOS_Cluster )).isFailure() );
411 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/ZeeMassLooseSS",m_ZeeLooseMassSS_Cluster )).isFailure() );
412 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/ZeeMassMediumOS",m_ZeeMediumMassOS_Cluster )).isFailure() );
413 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/ZeeMassMediumSS",m_ZeeMediumMassSS_Cluster )).isFailure() );
414 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuLooseElectronET",m_WenuLooseElectronET )).isFailure() );
415 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTight_Met",m_WenuTight_Met )).isFailure() );
416 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTight_MT",m_WenuTight_MT )).isFailure() );
417 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTightMet_MT",m_WenuTightMet_MT )).isFailure() );
418 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTightElectronET",m_WenuTightElectronET )).isFailure() );
419 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTightW_PT",m_WenuTightW_PT )).isFailure() );
420 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/ZeeMediumOS_ClusterPtEta",m_ZeeMediumOS_ClusterPtEta )).isFailure() );
421 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTightElectron_PTEtaPos",m_WenuTightElectron_PTEtaPos )).isFailure() );
422 somethingFailed |=( (tHistSvc->regHist(m_smallValidationTreeFolder + "/WenuTightElectron_PTEtaNeg",m_WenuTightElectron_PTEtaNeg )).isFailure() );
423 if (somethingFailed) ATH_MSG_ERROR("initialize() Could not register histogram ");
424
425 ATH_MSG_INFO("Booked Small Tree add histograms");
426 }
427
428 ATH_MSG_INFO("Loaded THistSvc");
429 }
430
431 //---Electron Likelihood tool---
432 ATH_MSG_INFO("IDPerfMonEoverP::Initialize() -- Setting up electron LH tool.");
433 m_LHToolLoose2015 = new AsgElectronLikelihoodTool ("m_LHToolLoose2015");
434 m_LHToolMedium2015 = new AsgElectronLikelihoodTool ("m_LHToolMedium2015");
435 m_LHToolTight2015 = new AsgElectronLikelihoodTool ("m_LHToolTight2015");
436
437 if((m_LHToolLoose2015->setProperty("primaryVertexContainer",m_primaryVertexCollection)).isFailure())
438 ATH_MSG_WARNING("Failure setting primary vertex container " << m_primaryVertexCollection << "in loose electron likelihood tool");
439 if((m_LHToolMedium2015->setProperty("primaryVertexContainer",m_primaryVertexCollection)).isFailure())
440 ATH_MSG_WARNING("Failure setting primary vertex container " << m_primaryVertexCollection << "in medium electron likelihood tool");
441 if((m_LHToolTight2015->setProperty("primaryVertexContainer",m_primaryVertexCollection)).isFailure())
442 ATH_MSG_WARNING("Failure setting primary vertex container " << m_primaryVertexCollection << "in tight electron likelihood tool");
443
444 //Set up electron LH level
445 std::string confDir = "ElectronPhotonSelectorTools/offline/"+m_lhTune+"/";
446 std::string configFileL = confDir+"ElectronLikelihoodLooseOfflineConfig2015.conf";
447 std::string configFileM = confDir+"ElectronLikelihoodMediumOfflineConfig2015.conf";
448 std::string configFileT = confDir+"ElectronLikelihoodTightOfflineConfig2015.conf";
449
450 if((m_LHToolLoose2015->setProperty("ConfigFile",configFileL)).isFailure())
451 ATH_MSG_WARNING("Failure loading ConfigFile in loose electron likelihood tool.");
452 if((m_LHToolMedium2015->setProperty("ConfigFile",configFileM)).isFailure())
453 ATH_MSG_WARNING("Failure loading ConfigFile in medium electron likelihood tool.");
454 if((m_LHToolTight2015->setProperty("ConfigFile",configFileT)).isFailure())
455 ATH_MSG_WARNING("Failure loading ConfigFile in tight electron likelihood tool.");
456
457 StatusCode lhl = m_LHToolLoose2015->initialize();
458 if(lhl.isFailure())
459 ATH_MSG_WARNING("Loose electron likelihood tool initialize() failed!");
460 StatusCode lhm = m_LHToolMedium2015->initialize();
461 if(lhm.isFailure())
462 ATH_MSG_WARNING("Medium electron likelihood tool initialize() failed!");
463 StatusCode lht = m_LHToolTight2015->initialize();
464 if(lht.isFailure())
465 ATH_MSG_WARNING("Tight electron likelihood tool initialize() failed!");
466 ATH_MSG_INFO( "Initialization completed successfully");
467 return StatusCode::SUCCESS;
468
469}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define CHECK(...)
Evaluate an expression and check for errors.
ToolHandle< IJetSelector > m_jetCleaningTool
jet selector tool
std::vector< std::pair< xAOD::Iso::IsolationType, std::string > > m_PID_IsolationType_Names
int m_nPIXout[NOS_ELECTRONS]
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ passMETCleaningCuts()

bool IDPerfMonEoverP::passMETCleaningCuts ( ) const
private

Definition at line 883 of file IDPerfMonEoverP.cxx.

884{
885 const xAOD::JetContainer* jetTDS = nullptr;
886 StatusCode sc= evtStore()->retrieve( jetTDS, m_jetContainerName);
887 if( sc.isFailure() || !jetTDS ) {
888 ATH_MSG_WARNING("No " << m_jetContainerName << " jet container found in TDS");
889 return false;
890 }
891 if (jetTDS->empty()) return true;
892 bool cleanJet = true;
893 for(const auto* jet_elem : *jetTDS ) {
894 if(!m_jetCleaningTool->keep( *jet_elem )) cleanJet=false;
895 if(!cleanJet) break;
896 }
897 return cleanJet;
898}
JetContainer_v1 JetContainer
Definition of the current "jet container version".

◆ passWenuSelection()

bool IDPerfMonEoverP::passWenuSelection ( std::vector< int > & electrons)
private

Definition at line 1179 of file IDPerfMonEoverP.cxx.

1180{
1181 ATH_MSG_VERBOSE("In passWenuSelection() -- START -- ");
1182 if(m_nbpv<1) return false;
1183 bool primaryVertexOk(false);
1184 electrons.clear();
1185
1186 for (int i(0); i<m_nbpv; ++i){
1187 if (m_pvnbtk[i] > 2) primaryVertexOk = true;
1188 }
1189 if(!primaryVertexOk) {
1190 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing on primary vertices");
1191 return false;
1192 }
1193
1194 //MET Goodness
1195 if( m_isDATA && !m_METgoodness) {
1196 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing on m_isDATA && !m_METgoodness");
1197 return false;
1198 }
1199
1200 //Trigger
1201 //no need to pass trigger for perfromance studies
1202
1203
1204 //Loose electron selection
1205 std::vector<int> goodLooseElectrons;
1206 for(int ele(0); ele<m_nelectrons; ++ele){
1207 //Loose electron selection
1208 if (!m_IsEMLoose[ele]) continue;
1209 //Pt
1210 double clusterEt = cosh( m_ClusterEta[ele] ) != 0 ? m_ClusterEnergy[ele] / std::cosh( m_ClusterEta[ele] ) : 0.;
1211 if (clusterEt <= 25000) continue;
1212 //Range
1213 double absEta = std::abs(m_ClusterEta[ele]);
1214 if (absEta >= 2.47 || ( absEta >= 1.37 && absEta <= 1.52 ) ) continue;
1215 //OTx ...
1216 if(!m_isGoodOQ[ele]) continue;
1217 //Author
1218 if(m_author[ele]!=1 && m_author[ele]!=3) continue;
1219 goodLooseElectrons.push_back(ele);
1220 }
1221
1222 //Fill Loose electron ET spectrum;
1223 for(int gele(0); gele < (int) goodLooseElectrons.size(); ++gele){
1224 int ele = goodLooseElectrons[gele];
1225 double trackEt = m_ClusterEnergy[gele]*sin(m_electronTheta[0][ele]);
1226 m_WenuLooseElectronET->Fill(trackEt);
1227 }
1228
1229 int nMediumElectrons(0);
1230 int nTightElectrons(0);
1231 int tightElectron(0);
1232
1233 for(int gele(0); gele < (int) goodLooseElectrons.size(); ++gele){
1234 //
1235 int ele = goodLooseElectrons[gele];
1236 if(m_IsEMMedium[ele]) ++nMediumElectrons;
1237 if (!m_IsEMTight[ele]) continue;
1238 ++nTightElectrons;
1239 tightElectron = ele;
1240 }
1241
1242 //Reject events with more than one good electron
1243 if (nMediumElectrons >2) {
1244 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing number of medium electrons cut " << nMediumElectrons );
1245 return false;
1246 }
1247 //Reject events with no tight electrons;
1248 if (nTightElectrons <1) {
1249 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing number of tight electrons cut " << nTightElectrons );
1250 return false;
1251 }
1252 double metphi = atan2(m_missingEty,m_missingEtx);
1253 double trackEt = m_ClusterEnergy[tightElectron]*std::sin(m_electronTheta[0][tightElectron]);
1254 double clusterEt = std::cosh( m_ClusterEta[tightElectron] ) !=0 ? m_ClusterEnergy[tightElectron] / std::cosh( m_ClusterEta[tightElectron] ) : 0.;
1255
1256 double massT = 2*m_missingEt*trackEt*(1-cos(m_electronPhi[0][tightElectron]-metphi));
1257 if(massT > 0) massT =std::sqrt(massT);
1258 else massT = 0;
1259
1260
1262 m_WenuTight_MT->Fill(massT);
1263
1264 if (m_missingEt <= 25000) {
1265 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing missingEt cut " << m_missingEt );
1266 return false;
1267 }
1268 m_WenuTightMet_MT->Fill(massT);
1269
1270 if (massT <= 50000) {
1271 ATH_MSG_DEBUG (" -- passWenuSelection() -- failing transverse mass cut " << massT );
1272 return false;
1273 }
1274
1275 m_WenuTightElectronET->Fill(clusterEt);
1276
1277 double sumpx = m_ClusterEnergy[tightElectron]*std::sin( m_electronPhi[0][tightElectron] ) * std::sin(m_electronTheta[0][tightElectron]) + m_missingEtx;
1278 double sumpy = m_ClusterEnergy[tightElectron]*std::cos( m_electronPhi[0][tightElectron] ) * std::sin(m_electronTheta[0][tightElectron]) + m_missingEty;
1279
1280 double wpt = sumpx*sumpx +sumpy*sumpy - massT*massT;
1281 if(wpt > 0) wpt =std::sqrt(wpt);
1282 else wpt = 0;
1283
1284 m_WenuTightW_PT->Fill(wpt);
1285
1286
1287 if(m_electronQoverP[0][tightElectron] > 0){
1288 m_WenuTightElectron_PTEtaPos->Fill(trackEt,m_ClusterEta[tightElectron]);
1289 } else {
1290 m_WenuTightElectron_PTEtaNeg->Fill(trackEt,m_ClusterEta[tightElectron]);
1291 }
1292
1293 electrons.push_back(tightElectron);
1294
1295 ATH_MSG_VERBOSE("In passWenuSelection() -- completed -- ");
1296 return true;
1297}
bool absEta(const xAOD::TauJet &tau, float &out)

◆ passZeeSelection()

bool IDPerfMonEoverP::passZeeSelection ( std::vector< int > & electrons)
private

Definition at line 1071 of file IDPerfMonEoverP.cxx.

1072{
1073 ATH_MSG_VERBOSE("In passZeeSelection() -- START -- ");
1074 //ATH_MSG_WARNING("Zee seletion needs to be adjusted for run2");
1075 // Adjusted according to https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/WZCommonAnalysisTopics2015
1076 if(m_nbpv<1) {
1077 ATH_MSG_DEBUG (" -- passZeeSelection() -- failing on primary vertices: m_nbpv= " << m_nbpv);
1078 return false;
1079 }
1080
1081 bool primaryVertexOk(false);
1082 electrons.clear();
1083
1084 for (int i=0; i<m_nbpv; ++i){
1085 if (m_pvnbtk[i] > 2) primaryVertexOk = true;
1086 }
1087 if(!primaryVertexOk) {
1088 ATH_MSG_DEBUG (" -- passZeeSelection() -- failing on primary vertices");
1089 return false;
1090 }
1091 //Trigger
1092 //No need to pass the trigger for tracking performance studies
1093
1094 //Loose electron selection
1095 std::vector<int> goodLooseElectrons;
1096
1097 for(int ele=0; ele<m_nelectrons; ele++){
1098 //Loose electron selection
1099 if (!m_IsEMLoose[ele]) continue;
1100 //Pt
1101 double clusterEt = cosh( m_ClusterEta[ele] ) != 0 ? m_ClusterEnergy[ele] / std::cosh( m_ClusterEta[ele] ) : 0.;
1102 if (clusterEt <= 25000) continue;
1103
1104 //Range
1105 double absEta = std::abs(m_ClusterEta[ele]);
1106 if (absEta >= 2.47 || ( absEta >= 1.37 && absEta <= 1.52 )) continue;
1107
1108 //OTx ...
1109 if(!m_isGoodOQ[ele]) continue;
1110
1111 //Author
1112 if(m_author[ele]!=1 && m_author[ele]!=3) continue;
1113
1114 goodLooseElectrons.push_back(ele);
1115 }
1116
1117 int pairsLooseInMassWindow = 0;
1118
1119 ATH_MSG_DEBUG(" -- passZeeSelection() -- report -- N Loose electrons " << goodLooseElectrons.size());
1120
1121 //Fill Loose electron ET spectrum;
1122 for(int gele1 = 0; gele1 < (int)goodLooseElectrons.size()-1; ++gele1){
1123 for(int gele2 = gele1+1; gele2 < (int)goodLooseElectrons.size(); ++gele2){
1124 int ele1 = goodLooseElectrons[gele1];
1125 int ele2 = goodLooseElectrons[gele2];
1126 double mass = getMassCluster(ele1,ele2);
1127 if (mass > 60000 && mass < 120000){
1128 ++pairsLooseInMassWindow;
1129 if(m_electronQoverP[0][ele1]*m_electronQoverP[0][ele2]<0)
1130 m_ZeeLooseMassOS_Cluster->Fill(mass);
1131 else
1132 m_ZeeLooseMassSS_Cluster->Fill(mass);
1133 }
1134 }
1135 }
1136
1137 if (pairsLooseInMassWindow < 1) {
1138 ATH_MSG_DEBUG (" -- passZeeSelection() -- failing pairsLooseInMassWindow= " << pairsLooseInMassWindow );
1139 return false;
1140 }
1141 std::vector<int> goodMediumElectrons;
1142
1143 for(int gele = 0; gele < (int)goodLooseElectrons.size(); ++gele){
1144 int ele = goodLooseElectrons[gele];
1145 if(m_IsEMMedium[ele]){
1146 goodMediumElectrons.push_back(ele);
1147 }
1148 }
1149
1150 //Reject events with more than two good electrons
1151 if (goodMediumElectrons.size() != 2) {
1152 ATH_MSG_DEBUG (" -- passZeeSelection() -- failing goodMediumElectrons != 2 --> " << goodMediumElectrons.size());
1153 return false;
1154 }
1155
1156 // Make the mass out of the highest pt electrons ....
1157 double mass = getMassCluster(goodMediumElectrons[0],goodMediumElectrons[1]);
1158 if (mass > 66000 && mass < 116000){
1159 if(m_electronQoverP[0][goodMediumElectrons[0]]*m_electronQoverP[0][goodMediumElectrons[1]]<0){
1160 m_ZeeMediumMassOS_Cluster->Fill(mass);
1161 electrons.push_back(goodMediumElectrons[0]);
1162 electrons.push_back(goodMediumElectrons[1]);
1163
1164 double trackEt = m_ClusterEnergy[goodMediumElectrons[0]]*sin(m_electronTheta[0][goodMediumElectrons[0]]);
1165 m_ZeeMediumOS_ClusterPtEta->Fill(trackEt, m_ClusterEta[0] );
1166 trackEt = m_ClusterEnergy[goodMediumElectrons[1]]*sin(m_electronTheta[0][goodMediumElectrons[1]]);
1167 m_ZeeMediumOS_ClusterPtEta->Fill(trackEt, m_ClusterEta[1] );
1168
1169 return true;
1170 } else{
1171 m_ZeeMediumMassSS_Cluster->Fill(mass);
1172 return false;
1173 }
1174 }
1175 return false;
1176}
double getMassCluster(int el1, int el2)

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ storeMETinformation()

bool IDPerfMonEoverP::storeMETinformation ( )
private

Definition at line 857 of file IDPerfMonEoverP.cxx.

858{
859 ATH_MSG_VERBOSE("In storeMETinformation()");
860 const xAOD::MissingETContainer *pMissingCont(0);
861 const xAOD::MissingET *MET;
863 ATH_MSG_WARNING("No collection with name " << m_missingEtObjectName << " found in StoreGate");
864 return false;
865 }
866
868 sc = evtStore()->retrieve(pMissingCont,m_missingEtObjectName);
869 if (sc.isFailure()) {
870 ATH_MSG_ERROR( "Could not retrieve MissingETContainer" );
871 return false;
872 }
873 MET = (*pMissingCont)[m_metRefFinalName];
875 m_sumet = MET->sumet();
876 m_missingEt = MET->met();
877 m_missingEtx = MET->mpx();
878 m_missingEty = MET->mpy();
879 return true;
880}
bool passMETCleaningCuts() const
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
MissingET_v1 MissingET
Version control by type defintion.

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ validationAction()

void IDPerfMonEoverP::validationAction ( )
private

Definition at line 840 of file IDPerfMonEoverP.cxx.

841{
842 ATH_MSG_DEBUG( "validationAction() -- START -- ");
843 // first record the values
844 if (m_validationTree){
847 m_validationTree->Fill();
848 ATH_MSG_DEBUG( "Writing data into ntuple " << m_validationTree->GetName() << ". Entry #" << m_validationTree->GetEntries() );
849 }
850 // then reset
852 }
853 ATH_MSG_DEBUG( "validationAction() -- completed -- current number of entries " << m_validationTree->GetEntries() );
854}

Member Data Documentation

◆ m_associatedToVtx

int IDPerfMonEoverP::m_associatedToVtx[NOS_ELECTRONS] {}
private

Definition at line 244 of file IDPerfMonEoverP.h.

244{};

◆ m_author

int IDPerfMonEoverP::m_author[NOS_ELECTRONS] {}
private

Definition at line 229 of file IDPerfMonEoverP.h.

229{};

◆ m_ClusterEnergy

float IDPerfMonEoverP::m_ClusterEnergy[NOS_ELECTRONS] {}
private

Definition at line 231 of file IDPerfMonEoverP.h.

231{};

◆ m_ClusterEta

float IDPerfMonEoverP::m_ClusterEta[NOS_ELECTRONS] {}
private

Definition at line 232 of file IDPerfMonEoverP.h.

232{};

◆ m_ClusterPhi

float IDPerfMonEoverP::m_ClusterPhi[NOS_ELECTRONS] {}
private

Definition at line 233 of file IDPerfMonEoverP.h.

233{};

◆ m_covpvxpvy

float IDPerfMonEoverP::m_covpvxpvy[NO_PV] {}
private

Definition at line 258 of file IDPerfMonEoverP.h.

258{};

◆ m_covpvypvz

float IDPerfMonEoverP::m_covpvypvz[NO_PV] {}
private

Definition at line 259 of file IDPerfMonEoverP.h.

259{};

◆ m_covpvzpvx

float IDPerfMonEoverP::m_covpvzpvx[NO_PV] {}
private

Definition at line 260 of file IDPerfMonEoverP.h.

260{};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_electronCounter

int IDPerfMonEoverP::m_electronCounter
private

counter for electrons

Definition at line 200 of file IDPerfMonEoverP.h.

◆ m_electrond0

float IDPerfMonEoverP::m_electrond0[3][NOS_ELECTRONS] {}
private

Track Phi on electron.

Definition at line 206 of file IDPerfMonEoverP.h.

206{};

◆ m_electronErrd0

float IDPerfMonEoverP::m_electronErrd0[3][NOS_ELECTRONS] {}
private

Definition at line 214 of file IDPerfMonEoverP.h.

214{};

◆ m_electronErrPhi

float IDPerfMonEoverP::m_electronErrPhi[3][NOS_ELECTRONS] {}
private

Track phi error on electron.

Definition at line 212 of file IDPerfMonEoverP.h.

212{};

◆ m_electronErrQoverP

float IDPerfMonEoverP::m_electronErrQoverP[3][NOS_ELECTRONS] {}
private

Definition at line 213 of file IDPerfMonEoverP.h.

213{};

◆ m_electronErrTheta

float IDPerfMonEoverP::m_electronErrTheta[3][NOS_ELECTRONS] {}
private

Track theta error on electron.

Definition at line 211 of file IDPerfMonEoverP.h.

211{};

◆ m_electronErrz0

float IDPerfMonEoverP::m_electronErrz0[3][NOS_ELECTRONS] {}
private

Definition at line 215 of file IDPerfMonEoverP.h.

215{};

◆ m_electronEta

float IDPerfMonEoverP::m_electronEta[3][NOS_ELECTRONS] {}
private

Track Eta at perigee.

Definition at line 203 of file IDPerfMonEoverP.h.

203{};

◆ m_electronLMQoverP

float IDPerfMonEoverP::m_electronLMQoverP[3][NOS_ELECTRONS] {}
private

Track q over p on electron.

Definition at line 209 of file IDPerfMonEoverP.h.

209{};

◆ m_electronPhi

float IDPerfMonEoverP::m_electronPhi[3][NOS_ELECTRONS] {}
private

Track Phi on electron.

Definition at line 204 of file IDPerfMonEoverP.h.

204{};

◆ m_electronQoverP

float IDPerfMonEoverP::m_electronQoverP[3][NOS_ELECTRONS] {}
private

Track q over p on electron.

Definition at line 205 of file IDPerfMonEoverP.h.

205{};

◆ m_electronTheta

float IDPerfMonEoverP::m_electronTheta[3][NOS_ELECTRONS] {}
private

Track theta at perigee.

Definition at line 202 of file IDPerfMonEoverP.h.

202{};

◆ m_electronz0

float IDPerfMonEoverP::m_electronz0[3][NOS_ELECTRONS] {}
private

Track q over p on electron.

Definition at line 207 of file IDPerfMonEoverP.h.

207{};

◆ m_ePID_IsolationType

float IDPerfMonEoverP::m_ePID_IsolationType[50][NOS_ELECTRONS] {}
private

Definition at line 271 of file IDPerfMonEoverP.h.

271{};

◆ m_ePID_ShowerType

float IDPerfMonEoverP::m_ePID_ShowerType[50][NOS_ELECTRONS] {}
private

Definition at line 270 of file IDPerfMonEoverP.h.

270{};

◆ m_ePID_SummaryType

float IDPerfMonEoverP::m_ePID_SummaryType[50][NOS_ELECTRONS] {}
private

Definition at line 273 of file IDPerfMonEoverP.h.

273{};

◆ m_ePID_TrackCaloMatchType

float IDPerfMonEoverP::m_ePID_TrackCaloMatchType[50][NOS_ELECTRONS] {}
private

Definition at line 272 of file IDPerfMonEoverP.h.

272{};

◆ m_errpvx

float IDPerfMonEoverP::m_errpvx[NO_PV] {}
private

Definition at line 255 of file IDPerfMonEoverP.h.

255{};

◆ m_errpvy

float IDPerfMonEoverP::m_errpvy[NO_PV] {}
private

Definition at line 256 of file IDPerfMonEoverP.h.

256{};

◆ m_errpvz

float IDPerfMonEoverP::m_errpvz[NO_PV] {}
private

Definition at line 257 of file IDPerfMonEoverP.h.

257{};

◆ m_evt

SG::ReadHandleKey<xAOD::EventInfo> IDPerfMonEoverP::m_evt {this, "EvtInfo", "EventInfo", "EventInfo name"}
private

ReadHandle to the Event Info.

Definition at line 155 of file IDPerfMonEoverP.h.

155{this, "EvtInfo", "EventInfo", "EventInfo name"};

◆ m_evtNumber

unsigned int IDPerfMonEoverP::m_evtNumber
private

Definition at line 195 of file IDPerfMonEoverP.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_fillDetailedTree

bool IDPerfMonEoverP::m_fillDetailedTree
private

validation tree name - to be acessed by this from root

Definition at line 181 of file IDPerfMonEoverP.h.

◆ m_InputElectronContainerName

std::string IDPerfMonEoverP::m_InputElectronContainerName
private

Electron collection input name.

Definition at line 135 of file IDPerfMonEoverP.h.

◆ m_isDATA

bool IDPerfMonEoverP::m_isDATA
private

Definition at line 174 of file IDPerfMonEoverP.h.

◆ m_IsEMLoose

bool IDPerfMonEoverP::m_IsEMLoose[NOS_ELECTRONS] {}
private

Definition at line 235 of file IDPerfMonEoverP.h.

235{};

◆ m_IsEMMedium

bool IDPerfMonEoverP::m_IsEMMedium[NOS_ELECTRONS] {}
private

Definition at line 236 of file IDPerfMonEoverP.h.

236{};

◆ m_IsEMTight

bool IDPerfMonEoverP::m_IsEMTight[NOS_ELECTRONS] {}
private

Definition at line 237 of file IDPerfMonEoverP.h.

237{};

◆ m_IsEMTightTRT

bool IDPerfMonEoverP::m_IsEMTightTRT[NOS_ELECTRONS] {}
private

Definition at line 238 of file IDPerfMonEoverP.h.

238{};

◆ m_isGoodOQ

bool IDPerfMonEoverP::m_isGoodOQ[NOS_ELECTRONS] {}
private

Definition at line 239 of file IDPerfMonEoverP.h.

239{};

◆ m_jetCleaningTool

ToolHandle< IJetSelector > IDPerfMonEoverP::m_jetCleaningTool {this,"JetCleaningTool","JetCleaningTool/JetCleaningTool",""}
private

jet selector tool

Definition at line 167 of file IDPerfMonEoverP.h.

168{this,"JetCleaningTool","JetCleaningTool/JetCleaningTool",""};

◆ m_jetContainerName

std::string IDPerfMonEoverP::m_jetContainerName
private

JEt collection input name.

Definition at line 140 of file IDPerfMonEoverP.h.

◆ m_LHToolLoose2015

AsgElectronLikelihoodTool* IDPerfMonEoverP::m_LHToolLoose2015
private

Definition at line 330 of file IDPerfMonEoverP.h.

◆ m_LHToolMedium2015

AsgElectronLikelihoodTool* IDPerfMonEoverP::m_LHToolMedium2015
private

Definition at line 331 of file IDPerfMonEoverP.h.

◆ m_LHToolTight2015

AsgElectronLikelihoodTool* IDPerfMonEoverP::m_LHToolTight2015
private

Definition at line 332 of file IDPerfMonEoverP.h.

◆ m_lhTune

std::string IDPerfMonEoverP::m_lhTune
private

Definition at line 329 of file IDPerfMonEoverP.h.

◆ m_lumi_block

unsigned int IDPerfMonEoverP::m_lumi_block
private

Definition at line 196 of file IDPerfMonEoverP.h.

◆ m_METgoodness

bool IDPerfMonEoverP::m_METgoodness
private

Definition at line 263 of file IDPerfMonEoverP.h.

◆ m_metRefFinalName

std::string IDPerfMonEoverP::m_metRefFinalName
private

Definition at line 137 of file IDPerfMonEoverP.h.

◆ m_missingEt

float IDPerfMonEoverP::m_missingEt
private

Definition at line 265 of file IDPerfMonEoverP.h.

◆ m_missingEtObjectName

std::string IDPerfMonEoverP::m_missingEtObjectName
private

MET input name.

Definition at line 142 of file IDPerfMonEoverP.h.

◆ m_missingEtx

float IDPerfMonEoverP::m_missingEtx
private

Definition at line 266 of file IDPerfMonEoverP.h.

◆ m_missingEty

float IDPerfMonEoverP::m_missingEty
private

Definition at line 267 of file IDPerfMonEoverP.h.

◆ m_nBLayer

int IDPerfMonEoverP::m_nBLayer[NOS_ELECTRONS] {}
private

Definition at line 220 of file IDPerfMonEoverP.h.

220{};

◆ m_nbpv

int IDPerfMonEoverP::m_nbpv
private

Definition at line 248 of file IDPerfMonEoverP.h.

◆ m_nelectrons

int IDPerfMonEoverP::m_nelectrons
private

Definition at line 199 of file IDPerfMonEoverP.h.

◆ m_nPIX

int IDPerfMonEoverP::m_nPIX[NOS_ELECTRONS] {}
private

Definition at line 221 of file IDPerfMonEoverP.h.

221{};

◆ m_nPIXout

int IDPerfMonEoverP::m_nPIXout[NOS_ELECTRONS] {}
private

Definition at line 224 of file IDPerfMonEoverP.h.

224{};

◆ m_nSCT

int IDPerfMonEoverP::m_nSCT[NOS_ELECTRONS] {}
private

Definition at line 219 of file IDPerfMonEoverP.h.

219{};

◆ m_nSCTout

int IDPerfMonEoverP::m_nSCTout[NOS_ELECTRONS] {}
private

Definition at line 223 of file IDPerfMonEoverP.h.

223{};

◆ m_nTRT

int IDPerfMonEoverP::m_nTRT[NOS_ELECTRONS] {}
private

Definition at line 218 of file IDPerfMonEoverP.h.

218{};

◆ m_nTRTHT

int IDPerfMonEoverP::m_nTRTHT[NOS_ELECTRONS] {}
private

Definition at line 225 of file IDPerfMonEoverP.h.

225{};

◆ m_nTRTHTout

int IDPerfMonEoverP::m_nTRTHTout[NOS_ELECTRONS] {}
private

Definition at line 226 of file IDPerfMonEoverP.h.

226{};

◆ m_nTRTout

int IDPerfMonEoverP::m_nTRTout[NOS_ELECTRONS] {}
private

Definition at line 222 of file IDPerfMonEoverP.h.

222{};

◆ m_OutputTrackCollectionName_no1

std::string IDPerfMonEoverP::m_OutputTrackCollectionName_no1
private

Name of output of Refitted Inner Detector Tracks.

Definition at line 147 of file IDPerfMonEoverP.h.

◆ m_OutputTrackCollectionName_no2

std::string IDPerfMonEoverP::m_OutputTrackCollectionName_no2
private

Definition at line 148 of file IDPerfMonEoverP.h.

◆ m_PID_IsolationType_Names

std::vector< std::pair <xAOD::Iso::IsolationType, std::string > > IDPerfMonEoverP::m_PID_IsolationType_Names
private

Definition at line 276 of file IDPerfMonEoverP.h.

◆ m_PID_ShowerType_Names

std::vector< std::pair <xAOD::EgammaParameters::ShowerShapeType, std::string > > IDPerfMonEoverP::m_PID_ShowerType_Names
private

Definition at line 275 of file IDPerfMonEoverP.h.

◆ m_PID_SummaryType_Names

std::vector< std::pair <xAOD::SummaryType, std::string > > IDPerfMonEoverP::m_PID_SummaryType_Names
private

Definition at line 278 of file IDPerfMonEoverP.h.

◆ m_PID_TrackCaloMatchType_Names

std::vector< std::pair <xAOD::EgammaParameters::TrackCaloMatchType, std::string > > IDPerfMonEoverP::m_PID_TrackCaloMatchType_Names
private

Definition at line 277 of file IDPerfMonEoverP.h.

◆ m_primaryVertexCollection

std::string IDPerfMonEoverP::m_primaryVertexCollection
private

Primary vertex input name.

Definition at line 144 of file IDPerfMonEoverP.h.

◆ m_pvnbtk

int IDPerfMonEoverP::m_pvnbtk[NO_PV] {}
private

Definition at line 250 of file IDPerfMonEoverP.h.

250{};

◆ m_pvsumpt

float IDPerfMonEoverP::m_pvsumpt[NO_PV] {}
private

Definition at line 251 of file IDPerfMonEoverP.h.

251{};

◆ m_pvtype

int IDPerfMonEoverP::m_pvtype[NO_PV] {}
private

Definition at line 249 of file IDPerfMonEoverP.h.

249{};

◆ m_pvx

float IDPerfMonEoverP::m_pvx[NO_PV] {}
private

Definition at line 252 of file IDPerfMonEoverP.h.

252{};

◆ m_pvy

float IDPerfMonEoverP::m_pvy[NO_PV] {}
private

Definition at line 253 of file IDPerfMonEoverP.h.

253{};

◆ m_pvz

float IDPerfMonEoverP::m_pvz[NO_PV] {}
private

Definition at line 254 of file IDPerfMonEoverP.h.

254{};

◆ m_refitEverything

bool IDPerfMonEoverP::m_refitEverything
private

Definition at line 171 of file IDPerfMonEoverP.h.

◆ m_refittedTracks_no1

TrackCollection* IDPerfMonEoverP::m_refittedTracks_no1
private

Refitted track collection.

Definition at line 151 of file IDPerfMonEoverP.h.

◆ m_refittedTracks_no2

TrackCollection* IDPerfMonEoverP::m_refittedTracks_no2
private

Definition at line 152 of file IDPerfMonEoverP.h.

◆ m_runNumber

unsigned int IDPerfMonEoverP::m_runNumber
private

Definition at line 194 of file IDPerfMonEoverP.h.

◆ m_small1_QoverP

double IDPerfMonEoverP::m_small1_QoverP
private

Definition at line 313 of file IDPerfMonEoverP.h.

◆ m_small2_QoverP

double IDPerfMonEoverP::m_small2_QoverP
private

Definition at line 314 of file IDPerfMonEoverP.h.

◆ m_small_QoverP

double IDPerfMonEoverP::m_small_QoverP
private

Definition at line 312 of file IDPerfMonEoverP.h.

◆ m_smallCharge

double IDPerfMonEoverP::m_smallCharge
private

Definition at line 319 of file IDPerfMonEoverP.h.

◆ m_smallClusterEnergy

double IDPerfMonEoverP::m_smallClusterEnergy
private

Definition at line 315 of file IDPerfMonEoverP.h.

◆ m_smallClusterEta

double IDPerfMonEoverP::m_smallClusterEta
private

Definition at line 317 of file IDPerfMonEoverP.h.

◆ m_smallClusterPhi

double IDPerfMonEoverP::m_smallClusterPhi
private

Definition at line 316 of file IDPerfMonEoverP.h.

◆ m_smalld0

double IDPerfMonEoverP::m_smalld0
private

Definition at line 320 of file IDPerfMonEoverP.h.

◆ m_smallTrackTheta

double IDPerfMonEoverP::m_smallTrackTheta
private

Definition at line 318 of file IDPerfMonEoverP.h.

◆ m_smallValidationTree

TTree* IDPerfMonEoverP::m_smallValidationTree
private

Definition at line 309 of file IDPerfMonEoverP.h.

◆ m_smallValidationTreeDescription

std::string IDPerfMonEoverP::m_smallValidationTreeDescription
private

stream/folder to for the TTree to be written out

Definition at line 305 of file IDPerfMonEoverP.h.

◆ m_smallValidationTreeFolder

std::string IDPerfMonEoverP::m_smallValidationTreeFolder
private

Root Validation Tree.

Definition at line 307 of file IDPerfMonEoverP.h.

◆ m_smallValidationTreeName

std::string IDPerfMonEoverP::m_smallValidationTreeName
private

validation tree description - second argument in TTree

Definition at line 303 of file IDPerfMonEoverP.h.

◆ m_smallz0

double IDPerfMonEoverP::m_smallz0
private

Definition at line 321 of file IDPerfMonEoverP.h.

◆ m_sumet

float IDPerfMonEoverP::m_sumet
private

Definition at line 264 of file IDPerfMonEoverP.h.

◆ m_TrackRefitter

ToolHandle<IegammaTrkRefitterTool> IDPerfMonEoverP::m_TrackRefitter
private

The track refitter.

Definition at line 158 of file IDPerfMonEoverP.h.

◆ m_TrackRefitter_no2

ToolHandle<IegammaTrkRefitterTool> IDPerfMonEoverP::m_TrackRefitter_no2
private

The track refitter.

Definition at line 161 of file IDPerfMonEoverP.h.

◆ m_trigDec

ToolHandle<Trig::TrigDecisionTool> IDPerfMonEoverP::m_trigDec
private

The trigger decision tool.

Definition at line 164 of file IDPerfMonEoverP.h.

◆ m_trigger

bool IDPerfMonEoverP::m_trigger[50] {}
private

Definition at line 282 of file IDPerfMonEoverP.h.

282{};

◆ m_triggerNames

std::vector<std::string> IDPerfMonEoverP::m_triggerNames
private

Definition at line 283 of file IDPerfMonEoverP.h.

◆ m_validationMode

bool IDPerfMonEoverP::m_validationMode
private

< boolean to switch to validation mode

boolean to switch to on Detailed Tree Filling – large increase in the ntuple size

Definition at line 178 of file IDPerfMonEoverP.h.

◆ m_validationTree

TTree* IDPerfMonEoverP::m_validationTree
private

Definition at line 191 of file IDPerfMonEoverP.h.

◆ m_validationTreeDescription

std::string IDPerfMonEoverP::m_validationTreeDescription
private

stream/folder to for the TTree to be written out

Definition at line 187 of file IDPerfMonEoverP.h.

◆ m_validationTreeFolder

std::string IDPerfMonEoverP::m_validationTreeFolder
private

Root Validation Tree.

Definition at line 189 of file IDPerfMonEoverP.h.

◆ m_validationTreeName

std::string IDPerfMonEoverP::m_validationTreeName
private

validation tree description - second argument in TTree

Definition at line 185 of file IDPerfMonEoverP.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_vxpos

VxPos IDPerfMonEoverP::m_vxpos[NOS_ELECTRONS]
private

Definition at line 245 of file IDPerfMonEoverP.h.

◆ m_WenuLooseElectronET

TH1F* IDPerfMonEoverP::m_WenuLooseElectronET
private

Definition at line 292 of file IDPerfMonEoverP.h.

◆ m_WenuTight_Met

TH1F* IDPerfMonEoverP::m_WenuTight_Met
private

Definition at line 293 of file IDPerfMonEoverP.h.

◆ m_WenuTight_MT

TH1F* IDPerfMonEoverP::m_WenuTight_MT
private

Definition at line 294 of file IDPerfMonEoverP.h.

◆ m_WenuTightElectron_PTEtaNeg

TH2F* IDPerfMonEoverP::m_WenuTightElectron_PTEtaNeg
private

validation tree name - to be acessed by this from root

Definition at line 299 of file IDPerfMonEoverP.h.

◆ m_WenuTightElectron_PTEtaPos

TH2F* IDPerfMonEoverP::m_WenuTightElectron_PTEtaPos
private

Definition at line 298 of file IDPerfMonEoverP.h.

◆ m_WenuTightElectronET

TH1F* IDPerfMonEoverP::m_WenuTightElectronET
private

Definition at line 296 of file IDPerfMonEoverP.h.

◆ m_WenuTightMet_MT

TH1F* IDPerfMonEoverP::m_WenuTightMet_MT
private

Definition at line 295 of file IDPerfMonEoverP.h.

◆ m_WenuTightW_PT

TH1F* IDPerfMonEoverP::m_WenuTightW_PT
private

Definition at line 297 of file IDPerfMonEoverP.h.

◆ m_ZeeLooseMassOS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeLooseMassOS_Cluster
private

Definition at line 286 of file IDPerfMonEoverP.h.

◆ m_ZeeLooseMassSS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeLooseMassSS_Cluster
private

Definition at line 287 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumMassOS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeMediumMassOS_Cluster
private

Definition at line 288 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumMassSS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeMediumMassSS_Cluster
private

Definition at line 289 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumOS_ClusterPtEta

TH2F* IDPerfMonEoverP::m_ZeeMediumOS_ClusterPtEta
private

Definition at line 290 of file IDPerfMonEoverP.h.


The documentation for this class was generated from the following files: