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_fillVertexInfo
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("FillVertexInfo", m_fillVertexInfo = false, "job option to activate the filling of the vertex info");
123 declareProperty("ReFitterTool", m_TrackRefitter, "ToolHandle for track fitter implementation");
124 declareProperty("ReFitterTool2", m_TrackRefitter_no2, "ToolHandle for track fitter implementation");
125 declareProperty("TrigDecisionTool", m_trigDec, "The TrigDecisionTool instance.");
126 declareProperty("InputElectronContainerName", m_InputElectronContainerName = "Electrons");
127 declareProperty("InputJetContainerName", m_jetContainerName = "AntiKt4LCTopoJets");
128 // declareProperty("MissingEtObjectName", m_missingEtObjectName = "MET_RefFinal");
129 declareProperty("METFinalName", m_metRefFinalName= "FinalClus");
130 declareProperty("MissingEtObjectName", m_missingEtObjectName = "MET_Reference_AntiKt4LCTopo");
131 declareProperty("primaryVertexCollection", m_primaryVertexCollection = "PrimaryVertices");
132 declareProperty("RefittedElectronTrackContainer1", m_OutputTrackCollectionName_no1="GSFTracks");
133 declareProperty("RefittedElectronTrackContainer2", m_OutputTrackCollectionName_no2="DNATracks");
134 declareProperty("ValidationMode", m_validationMode);
135 declareProperty("FillDetailedTree", m_fillDetailedTree);
136 declareProperty("ElectronLikelihoodTune", m_lhTune="mc15_20150712");
137 declareProperty("ValidationTreeFolder", m_validationTreeFolder, "/ZmumuValidationUserSel/EGrefitter"); // use same root file name as Zmumu
138}
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 142 of file IDPerfMonEoverP.cxx.

143{
144
145}

Member Function Documentation

◆ addToValidationNtuple()

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

addToValidationNutple

Definition at line 704 of file IDPerfMonEoverP.cxx.

704 {
705 if (perigee){
706 ATH_MSG_DEBUG( "Adding data to ntuple" );
707 if (isOriginal >= 0 && isOriginal <3){
708 m_electrond0[isOriginal][m_electronCounter] = perigee->parameters()[Trk::d0];
709 m_electronz0[isOriginal][m_electronCounter] = perigee->parameters()[Trk::z0];
710 m_electronPhi[isOriginal][m_electronCounter] = perigee->parameters()[Trk::phi0];
711 m_electronTheta[isOriginal][m_electronCounter] = perigee->parameters()[Trk::theta];
712 m_electronEta[isOriginal][m_electronCounter] = perigee->eta();
713 m_electronQoverP[isOriginal][m_electronCounter]= perigee->parameters()[Trk::qOverP];
714 //
715 const AmgSymMatrix(5)* matrix = perigee->covariance();
716 if (matrix){
717 m_electronErrd0[isOriginal][m_electronCounter] =std::sqrt( (*matrix)(Trk::d0,Trk::d0) );
718 m_electronErrz0[isOriginal][m_electronCounter] = std::sqrt( (*matrix)(Trk::z0,Trk::z0) );
719 m_electronErrPhi[isOriginal][m_electronCounter] = std::sqrt( (*matrix)(Trk::phi0,Trk::phi0) );
720 m_electronErrTheta[isOriginal][m_electronCounter]= std::sqrt( (*matrix)(Trk::theta,Trk::theta) );
721 m_electronErrQoverP[isOriginal][m_electronCounter]= std::sqrt( (*matrix)(Trk::qOverP,Trk::qOverP) );
722 }
723 }
724 } else {
725 ATH_MSG_DEBUG( "No MeasuredPerigee - cannot add data to ntuple" );
726 }
727
728 ATH_MSG_DEBUG( "Finished adding data to ntuple" );
729}
#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 775 of file IDPerfMonEoverP.cxx.

776{
777 ATH_MSG_DEBUG( "clear ValidationNtuple variables" );
778 for (int i = 0 ; i < NOS_ELECTRONS ; ++i){
779 for (int j = 0 ; j <3 ; ++j){
780 m_electrond0[j][i] = 0;
781 m_electronz0[j][i] = 0;
782 m_electronPhi[j][i] = 0;
783 m_electronTheta[j][i] = 0;
784 m_electronEta[j][i] = 0;
785 m_electronQoverP[j][i] = 0;
786 m_electronLMQoverP[j][i] = 0;
787
788 m_electronErrd0[j][i] = 0;
789 m_electronErrz0[j][i] = 0;
790 m_electronErrPhi[j][i] = 0;
791 m_electronErrTheta[j][i] = 0;
792 m_electronErrQoverP[j][i] = 0;
793
794 }
795 m_associatedToVtx[i] = 0;
796
797 m_author[i] = 0;
798
799 m_ClusterEnergy[i] = 0;
800
801 m_IsEMLoose[i] = false;
802 m_IsEMMedium[i] = false;
803 m_IsEMTight[i] = false;
804 m_IsEMTightTRT[i] = false;
805
806
807 for (int j = 0 ; j < 50 ; ++j){
808 m_ePID_ShowerType[j][i] =0;
812 m_trigger[j] = false;
813 }
814 }
815
816
817 //Vertex information
818 m_nbpv =0;
819 for (int i(0); i< NO_PV; ++i){
820 m_pvtype[i] =0;
821 m_pvnbtk[i]=0;
822 m_pvsumpt[i]=0;
823 m_pvx[i]=0;
824 m_pvy[i]=0;
825 m_pvz[i]=0;
826 m_errpvx[i]=0;
827 m_errpvy[i]=0;
828 m_errpvz[i]=0;
829 m_covpvxpvy[i]=0;
830 m_covpvypvz[i]=0;
831 m_covpvzpvx[i]=0;
832 }
833 //MET
834 m_METgoodness=false;
835 m_sumet=0;
836 m_missingEt=0;
837 m_missingEtx=0;
838 m_missingEty=0;
839
840 return;
841}
#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]
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ 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 844 of file IDPerfMonEoverP.cxx.

845{
846
847}

◆ 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 481 of file IDPerfMonEoverP.cxx.

482{
483 ATH_MSG_DEBUG( "Executing IDPerfMonEoverP" );
484 StatusCode sc(StatusCode::SUCCESS);
485 std::map<const xAOD::TrackParticle*, VxPos > trackParticleVertexMap;
486 const xAOD::Vertex* primaryVertexFirstCandidate = nullptr;
487 if (m_validationMode){
489 }else{
490 ATH_MSG_WARNING( " Validation Mode has been turned off ALG will do not fill Ntuples" );
491 return sc;
492 }
493
494 ATH_MSG_DEBUG("Retrieving event info.");
495 SG::ReadHandle<xAOD::EventInfo> evt(m_evt);
496 if(evt.isValid()) {
497 m_runNumber = evt->runNumber();
498 m_evtNumber = evt->eventNumber();
499 m_lumi_block = evt->lumiBlock();
500 ATH_MSG_DEBUG(" --> run: " << m_runNumber << " event: " << m_evtNumber << " lumiblock: " << m_lumi_block );
501 }
502 else {
503 ATH_MSG_ERROR("Could not retrieve event info."); // Keeping ERROR only to preserve old functionality
504 }
505
506 ATH_MSG_DEBUG("Retrieved Trigger info.");
508
509 if (m_fillVertexInfo) {
510 if ( not fillVertexInformation(trackParticleVertexMap, primaryVertexFirstCandidate) ){
511 ATH_MSG_DEBUG("No Primary Vertex info found");
512 }
513 } // doVertexInfo
514
515 ATH_MSG_DEBUG("MET info.being stored");
516 if( storeMETinformation() ) {
517 ATH_MSG_DEBUG("MET info. stored");
518 }
519 else {
520 ATH_MSG_DEBUG("NO MET info. stored :(");
521 }
522
523 // Get the electron AOD container
524 const xAOD::ElectronContainer* ElectronInput_container;
525 ATH_MSG_DEBUG("Retrieving ElectronInput_container: " << m_InputElectronContainerName);
526 sc = evtStore()->retrieve(ElectronInput_container, m_InputElectronContainerName);
527 if (sc != StatusCode::SUCCESS){
528 ATH_MSG_WARNING("No electron container --> return");
529 deleteAction();
530 return StatusCode::SUCCESS;
531 }
532
533 if (ElectronInput_container->empty() ){
534 ATH_MSG_DEBUG("-- ElectronInput_container is empty -> return");
535 deleteAction();
536 return StatusCode::SUCCESS;
537 }
538
541
542
543 typedef xAOD::ElectronContainer::const_iterator electron_iterator;
544 electron_iterator iter = ElectronInput_container->begin();
545 electron_iterator iterEnd = ElectronInput_container->end();
546
547 // Loop over the Electrons
548 ATH_MSG_DEBUG("Electron info. being stored");
549 for(; iter != iterEnd ; ++iter) {
550 ATH_MSG_DEBUG("Dealing with electron: "<< m_electronCounter+1);
551 if (m_electronCounter >= NOS_ELECTRONS) break;
552 const xAOD::Electron *pThisElectron = (*iter);
553
554 if (pThisElectron->passSelection("LHTight") ) { // keep only tight electrons
556
557 // Cluster Info
558 fillElectronInfo ( pThisElectron );
559 // Fill General info
560 fillGeneral( pThisElectron );
561 // Fill IsEm info
562 fillIsEM( pThisElectron );
563
564 //Get the track particle
565 const xAOD::TrackParticle* mytp = (*iter)->trackParticle();
566 if ( mytp != nullptr ) ATH_MSG_DEBUG("-- electron: "<< m_electronCounter+1 << " pt: " << mytp->p4().Perp() );
567
568 if( mytp != nullptr ){
569 uint8_t dummy(0);
570 auto summaryByDetector=[&mytp,&dummy]( const xAOD::SummaryType & t){
571 return mytp->summaryValue(dummy, t) ? (dummy) : (-1);
572 };
573 m_nTRT[m_electronCounter] = summaryByDetector( xAOD::numberOfTRTHits );
574 m_nSCT[m_electronCounter] = summaryByDetector( xAOD::numberOfSCTHits );
575 m_nPIX[m_electronCounter] = summaryByDetector( xAOD::numberOfPixelHits );
581 }
582 else{
583 ATH_MSG_DEBUG("Electron with no track particle?? Possibly Forward");
584 continue;
585 }
586
587 //Find which if any vertex the electron track is associated to
588 VxPos myVxPos = findAssociatedVertex( trackParticleVertexMap,
589 primaryVertexFirstCandidate,
590 pThisElectron );
591 m_associatedToVtx[m_electronCounter] = myVxPos.second;
592 if( mytp->track() ){
593 const Trk::Track* oTrkTrack = mytp->track();
594 if (oTrkTrack){
595 const Trk::Perigee* oMeasPer = oTrkTrack->perigeeParameters() ;
596 if (oMeasPer) addToValidationNtuple( oMeasPer, pThisElectron->caloCluster(), 0 );
597 fillLastMeasurement( oTrkTrack , 0 );
598 }
599 }
600 else {
601 ATH_MSG_DEBUG("mytp->track() == 0");
602 const Trk::Perigee* oMeasPer = &(mytp->perigeeParameters()) ;
603 addToValidationNtuple( oMeasPer, pThisElectron->caloCluster(), 0 );
604 }
605
606
608 // First Refitter................
609 ATH_MSG_DEBUG( "Refitting the track" );
610
611 IegammaTrkRefitterTool::Cache cache1{};
612 StatusCode sc = m_TrackRefitter->refitTrack(Gaudi::Hive::currentContext(),
613 pThisElectron->trackParticle()->track(),
614 cache1 );
615
616 if (sc == StatusCode::SUCCESS){
617 Trk::Track* trkTrack= cache1.refittedTrack.release();
618 m_refittedTracks_no1->push_back(trkTrack);
619 addToValidationNtuple( cache1.refittedTrackPerigee ,pThisElectron->caloCluster(), 1 );
620 fillLastMeasurement(trkTrack, 1 );
621 } else {
622 ATH_MSG_DEBUG( "Track Refit Failed" );
623 }
624 //******************************************************//
625 // Refit tracks using the second refitter if it is present
626 //******************************************************//
627 ATH_MSG_DEBUG( "Refitting the track again" );
628
629 IegammaTrkRefitterTool::Cache cache2{};
630 sc = m_TrackRefitter_no2->refitTrack(Gaudi::Hive::currentContext(),
631 pThisElectron->trackParticle()->track(),
632 cache2 );
633
634 if (sc == StatusCode::SUCCESS){
635 Trk::Track* trkTrack= cache2.refittedTrack.release();
636 //Add the refitted track to the TrackCollection
637 m_refittedTracks_no2->push_back( trkTrack );
638 //Add data to the trkRefitterNtuple
639
640 addToValidationNtuple( cache2.refittedTrackPerigee ,pThisElectron->caloCluster(), 2 );
641 fillLastMeasurement( trkTrack, 2 );
642 }
643 else {
644 ATH_MSG_DEBUG( "Track Refit Failed" );
645 }
646 }
647 else {
648 ATH_MSG_DEBUG( "Not Refitting the track -- DO NOTHING" );
649 }//End if >6 silicon hits;
650
651 //Increment the electron counter for the validation nutple
653 } // isTightElec
654 } // loop on electrons
655
656 // Commit Data to Ntuple;
658 // Fill much smaller tree
659 std::vector<int> goodElectrons = FillSimpleTree();
660 TrackCollection* selectedElectrons = new TrackCollection;
661
662 for( const auto & thisGoodElectron: goodElectrons){
663 IegammaTrkRefitterTool::Cache cache{};
664 StatusCode sc = m_TrackRefitter->refitTrack(Gaudi::Hive::currentContext(),
665 (*ElectronInput_container)[thisGoodElectron]->trackParticle()->track(),
666 cache );
667 if (sc == StatusCode::SUCCESS){
668 Trk::Track* trkTrack= cache.refittedTrack.release();
669 selectedElectrons->push_back(trkTrack);
670 }
671 }
672
673 //******************************************************//
674 //* Add the newly created TrackCollection to StoreGate *//
675 //******************************************************//
676
678 if (sc.isFailure())
679 {
680 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no1 <<" object.");
681 delete selectedElectrons;
682 return (StatusCode::FAILURE);
683 }
684 //
686 if (sc.isFailure())
687 {
688 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no2 <<" object.");
689 delete selectedElectrons;
690 return (StatusCode::FAILURE);
691 }
692 //
693 sc = evtStore()->record( selectedElectrons, m_OutputTrackCollectionName_no1 + "Selected", false );
694 if (sc.isFailure())
695 {
696 ATH_MSG_ERROR("Could not record "<< m_OutputTrackCollectionName_no1+"Selected" <<" object.");
697 delete selectedElectrons;
698 return (StatusCode::FAILURE);
699 }
700 ATH_MSG_DEBUG( "execute completed successfully");
701 return StatusCode::SUCCESS;
702}
#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.
bool passSelection(bool &value, const std::string &menu) const
Check if the egamma object pass a selection menu (using the name) If the menu decision is stored in t...
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 1026 of file IDPerfMonEoverP.cxx.

1027{
1028 ATH_MSG_VERBOSE( "In fillElectronInfo()" );
1029 for (size_t i = 0; i < m_PID_ShowerType_Names.size(); i++) {
1030 float dummy(-1);
1031 m_ePID_ShowerType[i][m_electronCounter] = static_cast<float> (p->showerShapeValue( dummy, m_PID_ShowerType_Names[i].first ))? dummy :-1;
1032 }
1033 for (size_t i = 0; i < m_PID_TrackCaloMatchType_Names.size(); i++) {
1034 float dummy(-1);
1035 m_ePID_TrackCaloMatchType[i][m_electronCounter] = static_cast<float> (p->trackCaloMatchValue( dummy, m_PID_TrackCaloMatchType_Names[i].first ))? dummy :-1;
1036 }
1037
1038for (size_t i = 0; i < m_PID_SummaryType_Names.size(); i++) {
1039 float dummy(-1);
1040 m_ePID_SummaryType[i][m_electronCounter] = static_cast<float> (p->trackParticleSummaryValue( dummy, m_PID_SummaryType_Names[i].first ))? dummy :-1;
1041 }
1042
1043 return;
1044
1045}
#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 762 of file IDPerfMonEoverP.cxx.

763{
764 ATH_MSG_DEBUG( "fillGeneral" );
765 const xAOD::CaloCluster* cluster = eg->caloCluster();
766 if(!cluster) return;
767 m_ClusterEnergy[m_electronCounter] = cluster->e();
768 m_ClusterPhi[m_electronCounter] = cluster->phi();
769 m_ClusterEta[m_electronCounter] = cluster->eta();
770}
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 732 of file IDPerfMonEoverP.cxx.

733{
734 ATH_MSG_DEBUG( "fillIsEM" );
736 m_isGoodOQ[m_electronCounter] = el_goodOQ;
737 // check loose LH
738 bool val_loose = (bool) m_LHToolLoose2015->accept(eg);
739 ATH_MSG_DEBUG( "Loose value : " << val_loose);
740 if(val_loose){
741 m_IsEMLoose[m_electronCounter] = val_loose;
742 }//else{ATH_MSG_DEBUG("Loose electron not defined !");}
743
744 // check medium LH
745 bool val_med = (bool) m_LHToolMedium2015->accept(eg);
746 ATH_MSG_DEBUG( "Medium value : " << val_med );
747 if(val_med){
749 }//else{ATH_MSG_DEBUG("Mediu, electron not defined !");}
750
751 // check tight LH
752 bool val_tight = (bool) m_LHToolTight2015->accept(eg);
753 ATH_MSG_DEBUG( "Tight value : " << val_tight);
754 if(val_tight){
755 m_IsEMTight[m_electronCounter] = val_tight;
756 }//else{ATH_MSG_DEBUG("Tight electron not defined !");}
757 return;
758
759}
bool m_isGoodOQ[NOS_ELECTRONS]
bool isGoodOQ(uint32_t mask) const
Check object quality. Return True is it is Good Object Quality.
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 1047 of file IDPerfMonEoverP.cxx.

1048{
1049 ATH_MSG_VERBOSE("In fillLastMeasurement()");
1050 if(!track) return false;
1051 const Trk::TrackParameters* trkPara =0;
1052
1053 const Trk::TrackStates* oldTrackStates = track->trackStateOnSurfaces();
1054 if (oldTrackStates == 0)
1055 {
1056 return false;
1057 }
1058
1059 for ( Trk::TrackStates::const_reverse_iterator rItTSoS = oldTrackStates->rbegin(); rItTSoS != oldTrackStates->rend(); ++rItTSoS)
1060 {
1061 if (trkPara!=0){
1062 break;
1063 }
1064
1065 if ( (*rItTSoS)->type(Trk::TrackStateOnSurface::Measurement) && (*rItTSoS)->trackParameters()!=0 && (*rItTSoS)->measurementOnTrack()!=0)
1066 {
1067 trkPara = (*rItTSoS)->trackParameters();
1068 }
1069 }
1070
1071 if (trkPara !=0 ){
1072 m_electronLMQoverP[fitter][m_electronCounter] = trkPara->parameters()[Trk::qOverP] ;
1073 return true;
1074 }
1075
1076 return false;
1077
1078}
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 1325 of file IDPerfMonEoverP.cxx.

1326{
1327 ATH_MSG_VERBOSE("In fillSimpleTree()");
1328 std::vector<int> electronsZee;
1329 std::vector<int> electronsWenu;
1330
1331 // check if Zee or Wenu event
1332 passZeeSelection(electronsZee);
1333 passWenuSelection(electronsWenu);
1334
1335 std::vector<int> allInterestingElectrons;
1336 for(int i(0); i < (int)electronsZee.size(); ++i){
1337 int ele = electronsZee[i];
1338 if ( std::find(allInterestingElectrons.begin(), allInterestingElectrons.end(), ele)==allInterestingElectrons.end() ){
1339 allInterestingElectrons.push_back(ele);
1340 }
1341 }
1342 for(int i(0); i < (int)electronsWenu.size(); ++i){
1343 int ele = electronsWenu[i];
1344 if ( std::find(allInterestingElectrons.begin(), allInterestingElectrons.end(), ele)==allInterestingElectrons.end() ){
1345 allInterestingElectrons.push_back(ele);
1346 }
1347 }
1348 ATH_MSG_DEBUG(" SimpleTreeElectrons " << allInterestingElectrons.size() );
1349 for(int i(0); i < (int)allInterestingElectrons.size(); ++i){
1350 int ele = allInterestingElectrons[i];
1351 if (m_electronQoverP[0][ele] > 0 )
1352 m_smallCharge = 1.;
1353 else
1354 m_smallCharge =-1.;
1362 m_smallValidationTree->Fill();
1363 }
1364
1365 return allInterestingElectrons;
1366}
bool passWenuSelection(std::vector< int > &electrons)
bool passZeeSelection(std::vector< int > &electrons)

◆ fillTriggerInformation()

void IDPerfMonEoverP::fillTriggerInformation ( )
private

Definition at line 1007 of file IDPerfMonEoverP.cxx.

1008{
1009 ATH_MSG_VERBOSE("In fillTriggerInformation()");
1010 ATH_MSG_DEBUG( "Pass state All = " << m_trigDec->isPassed( ".*" ) );
1011 ATH_MSG_DEBUG( "Pass state L1 = " << m_trigDec->isPassed( "L1_.*" ) );
1012 ATH_MSG_DEBUG( "Pass state L2 = " << m_trigDec->isPassed( "L2_.*" ) );
1013 ATH_MSG_DEBUG( "Pass state EF = " << m_trigDec->isPassed( "EF_.*" ) );
1014 ATH_MSG_DEBUG("HLT_.* is passed: " << m_trigDec->isPassed("HLT_.*"));
1015 for (unsigned int i=0; i < m_triggerNames.size(); ++i){
1016 if(m_triggerNames[i] == "ALL")
1017 m_trigger[i] = m_trigDec->isPassed(".*");
1018 else if(m_triggerNames[i] == "HLT_ALL")
1019 m_trigger[i] = m_trigDec->isPassed("HLT_.*");
1020 else
1021 m_trigger[i] = m_trigDec->isPassed(m_triggerNames[i]);
1022 }
1023 return;
1024}
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 911 of file IDPerfMonEoverP.cxx.

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

475{
476 return StatusCode::SUCCESS;
477}

◆ findAssociatedVertex()

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

Definition at line 992 of file IDPerfMonEoverP.cxx.

995{
996 ATH_MSG_VERBOSE("In findAssociatedVertex()");
997 std::map<const xAOD::TrackParticle*, VxPos>::iterator tpVx =
998 trackParticleVertexMap.find(eg->trackParticle());
999 if (tpVx == trackParticleVertexMap.end() ){
1000 return std::make_pair( primaryVertexFirstCandidate,-1 );
1001 } else
1002 return (*tpVx).second;
1003
1004}

◆ getMassCluster()

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

Definition at line 1309 of file IDPerfMonEoverP.cxx.

1310{
1311 ATH_MSG_VERBOSE("In getMassCluster()");
1312 double ELECTRON_MASS = ParticleConstants::electronMassInMeV; //MeV
1313 TLorentzVector v0,v1;
1314 double pt1 = m_ClusterEnergy[el1]*std::sin(m_electronTheta[0][el1]);
1315 double pt2 = m_ClusterEnergy[el2]*std::sin(m_electronTheta[0][el2]);
1316 double eta1 = -std::log( std::tan(m_electronTheta[0][el1] * 0.5) );
1317 double eta2 = -std::log( std::tan(m_electronTheta[0][el2] * 0.5) );
1318 v0.SetPtEtaPhiM(pt1,eta1,m_electronPhi[0][el1], ELECTRON_MASS);
1319 v1.SetPtEtaPhiM(pt2,eta2,m_electronPhi[0][el2], ELECTRON_MASS);
1320 double mass = (v0+v1).M();
1321 return mass;
1322
1323}
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 151 of file IDPerfMonEoverP.cxx.

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

894{
895 const xAOD::JetContainer* jetTDS = nullptr;
896 StatusCode sc= evtStore()->retrieve( jetTDS, m_jetContainerName);
897 if( sc.isFailure() || !jetTDS ) {
898 ATH_MSG_WARNING("No " << m_jetContainerName << " jet container found in TDS");
899 return false;
900 }
901 if (jetTDS->empty()) return true;
902 bool cleanJet = true;
903 for(const auto* jet_elem : *jetTDS ) {
904 if(!m_jetCleaningTool->keep( *jet_elem )) cleanJet=false;
905 if(!cleanJet) break;
906 }
907 return cleanJet;
908}
JetContainer_v1 JetContainer
Definition of the current "jet container version".

◆ passWenuSelection()

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

Definition at line 1189 of file IDPerfMonEoverP.cxx.

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

◆ passZeeSelection()

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

Definition at line 1081 of file IDPerfMonEoverP.cxx.

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

868{
869 ATH_MSG_VERBOSE("In storeMETinformation()");
870 const xAOD::MissingETContainer *pMissingCont(0);
871 const xAOD::MissingET *MET;
873 ATH_MSG_WARNING("No collection with name " << m_missingEtObjectName << " found in StoreGate");
874 return false;
875 }
876
878 sc = evtStore()->retrieve(pMissingCont,m_missingEtObjectName);
879 if (sc.isFailure()) {
880 ATH_MSG_ERROR( "Could not retrieve MissingETContainer" );
881 return false;
882 }
883 MET = (*pMissingCont)[m_metRefFinalName];
885 m_sumet = MET->sumet();
886 m_missingEt = MET->met();
887 m_missingEtx = MET->mpx();
888 m_missingEty = MET->mpy();
889 return true;
890}
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 850 of file IDPerfMonEoverP.cxx.

851{
852 ATH_MSG_DEBUG( "validationAction() -- START -- ");
853 // first record the values
854 if (m_validationTree){
857 m_validationTree->Fill();
858 ATH_MSG_DEBUG( "Writing data into ntuple " << m_validationTree->GetName() << ". Entry #" << m_validationTree->GetEntries() );
859 }
860 // then reset
862 }
863 ATH_MSG_DEBUG( "validationAction() -- completed -- current number of entries " << m_validationTree->GetEntries() );
864}

Member Data Documentation

◆ m_associatedToVtx

int IDPerfMonEoverP::m_associatedToVtx[NOS_ELECTRONS] {}
private

Definition at line 247 of file IDPerfMonEoverP.h.

247{};

◆ m_author

int IDPerfMonEoverP::m_author[NOS_ELECTRONS] {}
private

Definition at line 232 of file IDPerfMonEoverP.h.

232{};

◆ m_ClusterEnergy

float IDPerfMonEoverP::m_ClusterEnergy[NOS_ELECTRONS] {}
private

Definition at line 234 of file IDPerfMonEoverP.h.

234{};

◆ m_ClusterEta

float IDPerfMonEoverP::m_ClusterEta[NOS_ELECTRONS] {}
private

Definition at line 235 of file IDPerfMonEoverP.h.

235{};

◆ m_ClusterPhi

float IDPerfMonEoverP::m_ClusterPhi[NOS_ELECTRONS] {}
private

Definition at line 236 of file IDPerfMonEoverP.h.

236{};

◆ m_covpvxpvy

float IDPerfMonEoverP::m_covpvxpvy[NO_PV] {}
private

Definition at line 261 of file IDPerfMonEoverP.h.

261{};

◆ m_covpvypvz

float IDPerfMonEoverP::m_covpvypvz[NO_PV] {}
private

Definition at line 262 of file IDPerfMonEoverP.h.

262{};

◆ m_covpvzpvx

float IDPerfMonEoverP::m_covpvzpvx[NO_PV] {}
private

Definition at line 263 of file IDPerfMonEoverP.h.

263{};

◆ 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 203 of file IDPerfMonEoverP.h.

◆ m_electrond0

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

Track Phi on electron.

Definition at line 209 of file IDPerfMonEoverP.h.

209{};

◆ m_electronErrd0

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

Definition at line 217 of file IDPerfMonEoverP.h.

217{};

◆ m_electronErrPhi

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

Track phi error on electron.

Definition at line 215 of file IDPerfMonEoverP.h.

215{};

◆ m_electronErrQoverP

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

Definition at line 216 of file IDPerfMonEoverP.h.

216{};

◆ m_electronErrTheta

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

Track theta error on electron.

Definition at line 214 of file IDPerfMonEoverP.h.

214{};

◆ m_electronErrz0

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

Definition at line 218 of file IDPerfMonEoverP.h.

218{};

◆ m_electronEta

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

Track Eta at perigee.

Definition at line 206 of file IDPerfMonEoverP.h.

206{};

◆ m_electronLMQoverP

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

Track q over p on electron.

Definition at line 212 of file IDPerfMonEoverP.h.

212{};

◆ m_electronPhi

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

Track Phi on electron.

Definition at line 207 of file IDPerfMonEoverP.h.

207{};

◆ m_electronQoverP

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

Track q over p on electron.

Definition at line 208 of file IDPerfMonEoverP.h.

208{};

◆ m_electronTheta

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

Track theta at perigee.

Definition at line 205 of file IDPerfMonEoverP.h.

205{};

◆ m_electronz0

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

Track q over p on electron.

Definition at line 210 of file IDPerfMonEoverP.h.

210{};

◆ m_ePID_IsolationType

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

Definition at line 274 of file IDPerfMonEoverP.h.

274{};

◆ m_ePID_ShowerType

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

Definition at line 273 of file IDPerfMonEoverP.h.

273{};

◆ m_ePID_SummaryType

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

Definition at line 276 of file IDPerfMonEoverP.h.

276{};

◆ m_ePID_TrackCaloMatchType

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

Definition at line 275 of file IDPerfMonEoverP.h.

275{};

◆ m_errpvx

float IDPerfMonEoverP::m_errpvx[NO_PV] {}
private

Definition at line 258 of file IDPerfMonEoverP.h.

258{};

◆ m_errpvy

float IDPerfMonEoverP::m_errpvy[NO_PV] {}
private

Definition at line 259 of file IDPerfMonEoverP.h.

259{};

◆ m_errpvz

float IDPerfMonEoverP::m_errpvz[NO_PV] {}
private

Definition at line 260 of file IDPerfMonEoverP.h.

260{};

◆ 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 198 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 184 of file IDPerfMonEoverP.h.

◆ m_fillVertexInfo

bool IDPerfMonEoverP::m_fillVertexInfo
private

Definition at line 177 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 238 of file IDPerfMonEoverP.h.

238{};

◆ m_IsEMMedium

bool IDPerfMonEoverP::m_IsEMMedium[NOS_ELECTRONS] {}
private

Definition at line 239 of file IDPerfMonEoverP.h.

239{};

◆ m_IsEMTight

bool IDPerfMonEoverP::m_IsEMTight[NOS_ELECTRONS] {}
private

Definition at line 240 of file IDPerfMonEoverP.h.

240{};

◆ m_IsEMTightTRT

bool IDPerfMonEoverP::m_IsEMTightTRT[NOS_ELECTRONS] {}
private

Definition at line 241 of file IDPerfMonEoverP.h.

241{};

◆ m_isGoodOQ

bool IDPerfMonEoverP::m_isGoodOQ[NOS_ELECTRONS] {}
private

Definition at line 242 of file IDPerfMonEoverP.h.

242{};

◆ 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 333 of file IDPerfMonEoverP.h.

◆ m_LHToolMedium2015

AsgElectronLikelihoodTool* IDPerfMonEoverP::m_LHToolMedium2015
private

Definition at line 334 of file IDPerfMonEoverP.h.

◆ m_LHToolTight2015

AsgElectronLikelihoodTool* IDPerfMonEoverP::m_LHToolTight2015
private

Definition at line 335 of file IDPerfMonEoverP.h.

◆ m_lhTune

std::string IDPerfMonEoverP::m_lhTune
private

Definition at line 332 of file IDPerfMonEoverP.h.

◆ m_lumi_block

unsigned int IDPerfMonEoverP::m_lumi_block
private

Definition at line 199 of file IDPerfMonEoverP.h.

◆ m_METgoodness

bool IDPerfMonEoverP::m_METgoodness
private

Definition at line 266 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 268 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 269 of file IDPerfMonEoverP.h.

◆ m_missingEty

float IDPerfMonEoverP::m_missingEty
private

Definition at line 270 of file IDPerfMonEoverP.h.

◆ m_nBLayer

int IDPerfMonEoverP::m_nBLayer[NOS_ELECTRONS] {}
private

Definition at line 223 of file IDPerfMonEoverP.h.

223{};

◆ m_nbpv

int IDPerfMonEoverP::m_nbpv
private

Definition at line 251 of file IDPerfMonEoverP.h.

◆ m_nelectrons

int IDPerfMonEoverP::m_nelectrons
private

Definition at line 202 of file IDPerfMonEoverP.h.

◆ m_nPIX

int IDPerfMonEoverP::m_nPIX[NOS_ELECTRONS] {}
private

Definition at line 224 of file IDPerfMonEoverP.h.

224{};

◆ m_nPIXout

int IDPerfMonEoverP::m_nPIXout[NOS_ELECTRONS] {}
private

Definition at line 227 of file IDPerfMonEoverP.h.

227{};

◆ m_nSCT

int IDPerfMonEoverP::m_nSCT[NOS_ELECTRONS] {}
private

Definition at line 222 of file IDPerfMonEoverP.h.

222{};

◆ m_nSCTout

int IDPerfMonEoverP::m_nSCTout[NOS_ELECTRONS] {}
private

Definition at line 226 of file IDPerfMonEoverP.h.

226{};

◆ m_nTRT

int IDPerfMonEoverP::m_nTRT[NOS_ELECTRONS] {}
private

Definition at line 221 of file IDPerfMonEoverP.h.

221{};

◆ m_nTRTHT

int IDPerfMonEoverP::m_nTRTHT[NOS_ELECTRONS] {}
private

Definition at line 228 of file IDPerfMonEoverP.h.

228{};

◆ m_nTRTHTout

int IDPerfMonEoverP::m_nTRTHTout[NOS_ELECTRONS] {}
private

Definition at line 229 of file IDPerfMonEoverP.h.

229{};

◆ m_nTRTout

int IDPerfMonEoverP::m_nTRTout[NOS_ELECTRONS] {}
private

Definition at line 225 of file IDPerfMonEoverP.h.

225{};

◆ 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 279 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 278 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 281 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 280 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 253 of file IDPerfMonEoverP.h.

253{};

◆ m_pvsumpt

float IDPerfMonEoverP::m_pvsumpt[NO_PV] {}
private

Definition at line 254 of file IDPerfMonEoverP.h.

254{};

◆ m_pvtype

int IDPerfMonEoverP::m_pvtype[NO_PV] {}
private

Definition at line 252 of file IDPerfMonEoverP.h.

252{};

◆ m_pvx

float IDPerfMonEoverP::m_pvx[NO_PV] {}
private

Definition at line 255 of file IDPerfMonEoverP.h.

255{};

◆ m_pvy

float IDPerfMonEoverP::m_pvy[NO_PV] {}
private

Definition at line 256 of file IDPerfMonEoverP.h.

256{};

◆ m_pvz

float IDPerfMonEoverP::m_pvz[NO_PV] {}
private

Definition at line 257 of file IDPerfMonEoverP.h.

257{};

◆ 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 197 of file IDPerfMonEoverP.h.

◆ m_small1_QoverP

double IDPerfMonEoverP::m_small1_QoverP
private

Definition at line 316 of file IDPerfMonEoverP.h.

◆ m_small2_QoverP

double IDPerfMonEoverP::m_small2_QoverP
private

Definition at line 317 of file IDPerfMonEoverP.h.

◆ m_small_QoverP

double IDPerfMonEoverP::m_small_QoverP
private

Definition at line 315 of file IDPerfMonEoverP.h.

◆ m_smallCharge

double IDPerfMonEoverP::m_smallCharge
private

Definition at line 322 of file IDPerfMonEoverP.h.

◆ m_smallClusterEnergy

double IDPerfMonEoverP::m_smallClusterEnergy
private

Definition at line 318 of file IDPerfMonEoverP.h.

◆ m_smallClusterEta

double IDPerfMonEoverP::m_smallClusterEta
private

Definition at line 320 of file IDPerfMonEoverP.h.

◆ m_smallClusterPhi

double IDPerfMonEoverP::m_smallClusterPhi
private

Definition at line 319 of file IDPerfMonEoverP.h.

◆ m_smalld0

double IDPerfMonEoverP::m_smalld0
private

Definition at line 323 of file IDPerfMonEoverP.h.

◆ m_smallTrackTheta

double IDPerfMonEoverP::m_smallTrackTheta
private

Definition at line 321 of file IDPerfMonEoverP.h.

◆ m_smallValidationTree

TTree* IDPerfMonEoverP::m_smallValidationTree
private

Definition at line 312 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 308 of file IDPerfMonEoverP.h.

◆ m_smallValidationTreeFolder

std::string IDPerfMonEoverP::m_smallValidationTreeFolder
private

Root Validation Tree.

Definition at line 310 of file IDPerfMonEoverP.h.

◆ m_smallValidationTreeName

std::string IDPerfMonEoverP::m_smallValidationTreeName
private

validation tree description - second argument in TTree

Definition at line 306 of file IDPerfMonEoverP.h.

◆ m_smallz0

double IDPerfMonEoverP::m_smallz0
private

Definition at line 324 of file IDPerfMonEoverP.h.

◆ m_sumet

float IDPerfMonEoverP::m_sumet
private

Definition at line 267 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 285 of file IDPerfMonEoverP.h.

285{};

◆ m_triggerNames

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

Definition at line 286 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 181 of file IDPerfMonEoverP.h.

◆ m_validationTree

TTree* IDPerfMonEoverP::m_validationTree
private

Definition at line 194 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 190 of file IDPerfMonEoverP.h.

◆ m_validationTreeFolder

std::string IDPerfMonEoverP::m_validationTreeFolder
private

Root Validation Tree.

Definition at line 192 of file IDPerfMonEoverP.h.

◆ m_validationTreeName

std::string IDPerfMonEoverP::m_validationTreeName
private

validation tree description - second argument in TTree

Definition at line 188 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 248 of file IDPerfMonEoverP.h.

◆ m_WenuLooseElectronET

TH1F* IDPerfMonEoverP::m_WenuLooseElectronET
private

Definition at line 295 of file IDPerfMonEoverP.h.

◆ m_WenuTight_Met

TH1F* IDPerfMonEoverP::m_WenuTight_Met
private

Definition at line 296 of file IDPerfMonEoverP.h.

◆ m_WenuTight_MT

TH1F* IDPerfMonEoverP::m_WenuTight_MT
private

Definition at line 297 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 302 of file IDPerfMonEoverP.h.

◆ m_WenuTightElectron_PTEtaPos

TH2F* IDPerfMonEoverP::m_WenuTightElectron_PTEtaPos
private

Definition at line 301 of file IDPerfMonEoverP.h.

◆ m_WenuTightElectronET

TH1F* IDPerfMonEoverP::m_WenuTightElectronET
private

Definition at line 299 of file IDPerfMonEoverP.h.

◆ m_WenuTightMet_MT

TH1F* IDPerfMonEoverP::m_WenuTightMet_MT
private

Definition at line 298 of file IDPerfMonEoverP.h.

◆ m_WenuTightW_PT

TH1F* IDPerfMonEoverP::m_WenuTightW_PT
private

Definition at line 300 of file IDPerfMonEoverP.h.

◆ m_ZeeLooseMassOS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeLooseMassOS_Cluster
private

Definition at line 289 of file IDPerfMonEoverP.h.

◆ m_ZeeLooseMassSS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeLooseMassSS_Cluster
private

Definition at line 290 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumMassOS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeMediumMassOS_Cluster
private

Definition at line 291 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumMassSS_Cluster

TH1F* IDPerfMonEoverP::m_ZeeMediumMassSS_Cluster
private

Definition at line 292 of file IDPerfMonEoverP.h.

◆ m_ZeeMediumOS_ClusterPtEta

TH2F* IDPerfMonEoverP::m_ZeeMediumOS_ClusterPtEta
private

Definition at line 293 of file IDPerfMonEoverP.h.


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