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

#include <IDPerfMonZmumu.h>

Inheritance diagram for IDPerfMonZmumu:

Public Member Functions

 IDPerfMonZmumu (const std::string &name, ISvcLocator *pSvcLocator)
 needed for IP resolution studies
 ~IDPerfMonZmumu ()
virtual StatusCode initialize ()
virtual StatusCode execute ()
 Execute method without EventContext (deprecated).
virtual StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual StatusCode execute (const EventContext &)
 Execute method with EventContext.
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
const EventContext & getContext () const
 Deprecated methods (use the ones with EventContext).
bool filterPassed () const
void setFilterPassed (bool state) const

Protected Member Functions

virtual bool isReEntrant () const override final
 Legacy algorithms are not thread-safe.
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

StatusCode bookTrees ()
StatusCode CheckTriggerStatusAndPrescale ()
void Clear4MuNtupleVariables ()
void ExtractIDHitsInformation (const xAOD::Muon *muon_pos, const xAOD::Muon *muon_neg)
int GetMuonQualityValue (std::string qualityname)
void RegisterHistograms ()
void ResetCommonNtupleVectors ()
const xAOD::VertexGetDiMuonVertex (const xAOD::TrackParticle *, const xAOD::TrackParticle *)
StatusCode FillRecParameters (const Trk::Track *track, const xAOD::TrackParticle *trackp_for_unbias, double charge, const xAOD::Vertex *vertex, const EventContext &ctx)
StatusCode FillRecParametersSimple (const Trk::Track *track, float charge, const xAOD::Vertex *vertex)
StatusCode FillRecParametersTP (const xAOD::TrackParticle *trackp, const xAOD::TrackParticle *trackp_for_unbias, double charge, const xAOD::Vertex *vertex=nullptr)
StatusCode FillTruthParameters (const xAOD::TrackParticle *track)
const xAOD::TruthParticlegetTruthParticle (const xAOD::IParticle &p)
StatusCode RunFourLeptonAnalysis ()
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ZmumuEvent m_xZmm
FourMuonEvent m_4mu
bool m_UseTrigger {true}
bool m_doIsoSelection {true}
bool m_doIPSelection {true}
bool m_doMCPSelection {true}
double m_MassWindowLow {60.}
double m_MassWindowHigh {120.}
double m_LeadingMuonPtCut {20.}
double m_SecondMuonPtCut {15.}
double m_OpeningAngleCut {0.2}
double m_Z0GapCut {5.}
bool m_isMC {}
bool m_doRefit {}
bool m_useTrackSelectionTool {}
bool m_doIP {}
bool m_doFourMuAnalysis {}
bool m_storeZmumuNtuple {true}
bool m_skipMS {}
bool m_useCustomMuonSelector {}
int m_minGoodLumiBlock {}
int m_maxGoodLumiBlock {}
ToolHandle< IegammaTrkRefitterToolm_TrackRefitter1
 The track refitter.
ToolHandle< IegammaTrkRefitterToolm_TrackRefitter2
 The track refitter.
ToolHandle< Reco::ITrackToVertexm_trackToVertexTool
 tool to extrapolate tracks to BL
ToolHandle< Trig::TrigDecisionToolm_triggerDecision
ToolHandle< Trig::IMatchingToolm_triggerMatching
ToolHandle< InDet::IInDetTrackSelectionToolm_selTool
 The track selection Tool.
ToolHandle< Trk::ITrackToVertexIPEstimatorm_trackToVertexIPEstimator
 Needed for IP resolution studies.
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
 used for truth parameters
ToolHandle< Trk::IExtrapolatorm_extrapolator
ToolHandle< CP::IMuonSelectionToolm_muonSelector
 used to pass a custom muon selector
bool m_validationMode
 < boolean to switch to validation mode
std::string m_commonTreeName
std::string m_defaultTreeName
std::string m_IDTreeName
std::string m_refit1TreeName
std::string m_refit2TreeName
std::string m_truthTreeName
std::string m_combTreeName
std::string m_MSTreeName
std::string m_FourMuTreeName
std::string m_ValidationTreeDescription
 < validation tree description - second argument in TTree
std::string m_commonTreeFolder
std::string m_defaultTreeFolder
std::string m_IDTreeFolder
std::string m_refit1TreeFolder
std::string m_refit2TreeFolder
std::string m_truthTreeFolder
std::string m_combTreeFolder
std::string m_MSTreeFolder
std::string m_FourMuTreeFolder
 Root Validation Tree.
TTree * m_commonTree
TTree * m_defaultTree
TTree * m_IDTree
TTree * m_refit1Tree
TTree * m_refit2Tree
TTree * m_truthTree
TTree * m_combTree
TTree * m_MSTree
TTree * m_FourMuTree
bool m_doRemoval {}
bool m_doDebug {}
ToolHandle< CP::ITrackVertexAssociationToolm_Trk2VtxAssociationTool
SG::ReadHandleKey< xAOD::VertexContainerm_vertexKey { this, "VertexContainer", "PrimaryVertices", "primary vertex container" }
SG::ReadHandleKey< xAOD::TrackParticleContainerm_trackContainerName {this, "trackContainerName", "InDetTrackParticles"}
 IDTtacks.
std::string m_truthName
std::string m_trackParticleName
 Track(Particle)TruthCollection input name.
std::string m_truthLinkVecName
 TrackParticle input name.
TH1F * m_h_cutflow {}
 link vector to map HepMC onto xAOD truth
unsigned int m_runNumber {}
unsigned int m_evtNumber {}
unsigned int m_lumi_block {}
unsigned int m_event_mu {}
float m_event_weight {}
int m_triggerPrescale {}
std::string m_triggerName
unsigned int m_nVertex {}
float m_beamposX {}
float m_beamposY {}
double m_positive_px {}
double m_positive_py {}
double m_positive_pt {}
double m_positive_pz {}
double m_positive_phi {}
double m_positive_eta {}
double m_positive_z0 {}
double m_positive_d0 {}
double m_positive_z0_err {}
double m_positive_d0_err {}
double m_positive_sigma_pt {}
double m_positive_z0_PV {}
double m_positive_d0_PV {}
double m_positive_z0_PVerr {}
double m_positive_d0_PVerr {}
double m_positive_qoverp {}
double m_positive_sigma_qoverp {}
int m_positive_1_vtx {}
int m_positive_parent {}
double m_positive_2_px {}
double m_positive_2_py {}
double m_positive_2_pz {}
double m_positive_2_z0 {}
double m_positive_2_d0 {}
double m_positive_2_z0_err {}
double m_positive_2_d0_err {}
double m_positive_2_z0_PV {}
double m_positive_2_d0_PV {}
double m_positive_2_z0_PVerr {}
double m_positive_2_d0_PVerr {}
int m_positive_2_vtx {}
double m_negative_px {}
double m_negative_py {}
double m_negative_pt {}
double m_negative_pz {}
double m_negative_phi {}
double m_negative_eta {}
double m_negative_z0 {}
double m_negative_d0 {}
double m_negative_z0_err {}
double m_negative_d0_err {}
double m_negative_sigma_pt {}
double m_negative_z0_PV {}
double m_negative_d0_PV {}
double m_negative_z0_PVerr {}
double m_negative_d0_PVerr {}
double m_negative_qoverp {}
double m_negative_sigma_qoverp {}
int m_negative_1_vtx {}
int m_negative_parent {}
double m_negative_2_px {}
double m_negative_2_py {}
double m_negative_2_pz {}
double m_negative_2_z0 {}
double m_negative_2_d0 {}
double m_negative_2_z0_err {}
double m_negative_2_d0_err {}
double m_negative_2_z0_PV {}
double m_negative_2_d0_PV {}
double m_negative_2_z0_PVerr {}
double m_negative_2_d0_PVerr {}
int m_negative_2_vtx {}
double m_el_negative1_px {}
double m_el_negative1_py {}
double m_el_negative1_pz {}
double m_el_negative1_z0 {}
double m_el_negative1_d0 {}
double m_el_negative1_z0_err {}
double m_el_negative1_d0_err {}
double m_el_negative1_z0_PV {}
double m_el_negative1_d0_PV {}
double m_el_negative1_z0_PVerr {}
double m_el_negative1_d0_PVerr {}
int m_el_negative1_vtx {}
double m_el_negative2_px {}
double m_el_negative2_py {}
double m_el_negative2_pz {}
double m_el_negative2_z0 {}
double m_el_negative2_d0 {}
double m_el_negative2_z0_err {}
double m_el_negative2_d0_err {}
double m_el_negative2_z0_PV {}
double m_el_negative2_d0_PV {}
double m_el_negative2_z0_PVerr {}
double m_el_negative2_d0_PVerr {}
int m_el_negative2_vtx {}
double m_el_positive1_px {}
double m_el_positive1_py {}
double m_el_positive1_pz {}
double m_el_positive1_z0 {}
double m_el_positive1_d0 {}
double m_el_positive1_z0_err {}
double m_el_positive1_d0_err {}
double m_el_positive1_z0_PV {}
double m_el_positive1_d0_PV {}
double m_el_positive1_z0_PVerr {}
double m_el_psoitive1_d0_PVerr {}
int m_el_positive1_vtx {}
double m_el_positive2_px {}
double m_el_positive2_py {}
double m_el_positive2_pz {}
double m_el_positive2_z0 {}
double m_el_positive2_d0 {}
double m_el_positive2_z0_err {}
double m_el_positive2_d0_err {}
double m_el_positive2_z0_PV {}
double m_el_positive2_d0_PV {}
double m_el_positive2_z0_PVerr {}
double m_el_psoitive2_d0_PVerr {}
int m_el_positive2_vtx {}
double m_4mu_minv {}
double m_pv_x {}
double m_pv_y {}
double m_pv_z {}
unsigned int m_nTrkInVtx {}
double m_met {}
double m_metphi {}
std::vector< float > m_IDTrack_pt
std::vector< float > m_CBTrack_pt
std::vector< float > m_Refit1_pt
std::vector< float > m_Refit2_pt
std::vector< float > m_Truth_pt
std::vector< float > m_IDTrack_eta
std::vector< float > m_CBTrack_eta
std::vector< float > m_Refit1_eta
std::vector< float > m_Refit2_eta
std::vector< float > m_Truth_eta
std::vector< float > m_IDTrack_phi
std::vector< float > m_CBTrack_phi
std::vector< float > m_Refit1_phi
std::vector< float > m_Refit2_phi
std::vector< float > m_Truth_phi
std::vector< float > m_IDTrack_d0
std::vector< float > m_CBTrack_d0
std::vector< float > m_Refit1_d0
std::vector< float > m_Refit2_d0
std::vector< float > m_Truth_d0
std::vector< float > m_IDTrack_z0
std::vector< float > m_CBTrack_z0
std::vector< float > m_Refit1_z0
std::vector< float > m_Refit2_z0
std::vector< float > m_Truth_z0
std::vector< float > m_IDTrack_qoverp
std::vector< float > m_CBTrack_qoverp
std::vector< float > m_Refit1_qoverp
std::vector< float > m_Refit2_qoverp
std::vector< float > m_Truth_qoverp
std::vector< int > m_Truth_parent
std::vector< float > m_IDTrack_sigma_pt
std::vector< float > m_CBTrack_sigma_pt
std::vector< float > m_Refit1_sigma_pt
std::vector< float > m_Refit2_sigma_pt
std::vector< float > m_IDTrack_sigma_d0
std::vector< float > m_CBTrack_sigma_d0
std::vector< float > m_Refit1_sigma_d0
std::vector< float > m_Refit2_sigma_d0
std::vector< float > m_IDTrack_sigma_z0
std::vector< float > m_CBTrack_sigma_z0
std::vector< float > m_Refit1_sigma_z0
std::vector< float > m_Refit2_sigma_z0
std::vector< float > m_IDTrack_sigma_qoverp
std::vector< float > m_CBTrack_sigma_qoverp
std::vector< float > m_Refit1_sigma_qoverp
std::vector< float > m_Refit2_sigma_qoverp
std::vector< int > m_nBLhits
std::vector< int > m_nPIXhits
std::vector< int > m_nSCThits
std::vector< int > m_nTRThits
std::string m_sTriggerChainName
std::string m_outputTracksName
std::string m_MuonQualityName
SG::ReadHandleKey< xAOD::EventInfom_EventInfoKey {this, "EventInfoKey", "EventInfo"}
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

Definition at line 73 of file IDPerfMonZmumu.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ IDPerfMonZmumu()

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

needed for IP resolution studies

missing ET

Definition at line 47 of file IDPerfMonZmumu.cxx.

48 :
49 AthAlgorithm(name, pSvcLocator),
50 m_isMC(false),
51 m_doRefit(false),
54 m_trackToVertexTool("Reco::TrackToVertex"),
55 m_triggerDecision("Trig::TrigDecisionTool/TrigDecisionTool"),
56 m_triggerMatching("Trig::MatchingTool/MatchingTool"),
57 m_selTool( "InDet::InDetTrackSelectionTool/TrackSelectionTool"),
58 m_trackToVertexIPEstimator("Trk::TrackToVertexIPEstimator"),
59 m_extrapolator("Trk::Extrapolator/AtlasExtrapolator"),
60 m_muonSelector("CP::MuonSelectionTool/MuonSelectionTool"),
61 m_validationMode(true),
62
63 m_commonTreeName ("commonTree"),
64 m_defaultTreeName("Default_Particle"),
65 m_IDTreeName ("ID_InDetTrackParticle"),
66 m_refit1TreeName ("Refit1_SiAndTRT"),
67 m_refit2TreeName ("Refit2_SiOnly"),
68 m_truthTreeName ("TruthParams"),
69 m_combTreeName ("CombinedTrackParticle"),
70 m_MSTreeName ("MS_TrackParticle"),
71 m_FourMuTreeName ("FourMu"),
72
73 m_ValidationTreeDescription("Small Tree for Zmumu fits"),
74
75 m_commonTreeFolder ("/ZmumuValidation/common"),
76 m_defaultTreeFolder("/ZmumuValidation/default"),
77 m_IDTreeFolder ("/ZmumuValidation/ID"),
78 m_refit1TreeFolder ("/ZmumuValidation/refit1"),
79 m_refit2TreeFolder ("/ZmumuValidation/refit2"),
80 m_truthTreeFolder ("/ZmumuValidation/truth"),
81 m_combTreeFolder ("/ZmumuValidation/comb"),
82 m_MSTreeFolder ("/ZmumuValidation/ms"),
83 m_FourMuTreeFolder ("/ZmumuValidation/fourmu"),
84
85 m_commonTree (nullptr),
86 m_defaultTree(nullptr),
87 m_IDTree(nullptr),
88 m_refit1Tree(nullptr),
89 m_refit2Tree(nullptr),
90 m_truthTree(nullptr),
91 m_combTree(nullptr),
92 m_MSTree(nullptr),
93 m_FourMuTree(nullptr),
94 m_doRemoval(true),
95 m_doDebug(false),
96 m_Trk2VtxAssociationTool("CP::TrackVertexAssociationTool", this)
97{
98 // Properties that are set from the python scripts.
99
100 declareProperty("UseTrigger" , m_UseTrigger = true);
101 declareProperty("doIsoSelection", m_doIsoSelection = true );
102 declareProperty("doIPSelection", m_doIPSelection = true );
103 declareProperty("doMCPSelection", m_doMCPSelection = true );
104 declareProperty("isMC", m_isMC = false);
105 declareProperty("doRefit", m_doRefit = false);
106 declareProperty("doIPextrToPV", m_doIP = false);
107 declareProperty("Extrapolator", m_extrapolator );
108 declareProperty("MassWindowLow", m_MassWindowLow = 60.0, "Lower cut in mu+mu- invariant mass" );
109 declareProperty("MassWindowHigh", m_MassWindowHigh = 120.0, "Upper cut in mu+mu- invariant mass" );
110 declareProperty("OpeningAngle", m_OpeningAngleCut = 0.2, "Opening angle between the two muons (in radians)");
111 declareProperty("OutputTracksName", m_outputTracksName = "ZmumuTracks");
112 declareProperty("PtLeadingMuon", m_LeadingMuonPtCut = 20., "Pt cut on the leading muon");
113 declareProperty("PtSecondMuon", m_SecondMuonPtCut = 15., "Pt cut on the second muon");
114 declareProperty("ReFitterTool1", m_TrackRefitter1, "ToolHandle for track fitter implementation");
115 declareProperty("ReFitterTool2", m_TrackRefitter2, "ToolHandle for track fitter implementation");
116 declareProperty("TrackToVertexTool", m_trackToVertexTool);
117 declareProperty("TrackTruthName", m_truthName="TrackTruthCollection");
118 declareProperty("TrackParticleName", m_trackParticleName="CombinedTrackParticle");
119 declareProperty("triggerChainName", m_sTriggerChainName);
120 declareProperty("ValidationMode", m_validationMode);
121 declareProperty("xAODTruthLinkVector", m_truthLinkVecName="xAODTruthLinks");
122 declareProperty("Z0Gap", m_Z0GapCut = 5.0, "maximum gap between the z0 of both muons (in mm)");
123 declareProperty("TrackSelectionTool", m_selTool );
124 declareProperty("UseTrackSelectionTool", m_useTrackSelectionTool = false);
125 declareProperty("TrackToVertexIPEstimator", m_trackToVertexIPEstimator);
126
127
128 declareProperty("commonTreeFolder", m_commonTreeFolder, "/ZmumuValidationUserSel/common" );
129 declareProperty("defaultTreeFolder", m_defaultTreeFolder );
130 declareProperty("IDTreeFolder", m_IDTreeFolder );
131 declareProperty("refit1TreeFolder", m_refit1TreeFolder );
132 declareProperty("refit2TreeFolder", m_refit2TreeFolder );
133 declareProperty("truthTreeFolder", m_truthTreeFolder );
134 declareProperty("combTreeFolder", m_combTreeFolder );
135 declareProperty("MSTreeFolder", m_MSTreeFolder, "/ZmumuValidationUserSel/ms" );
136
137 declareProperty("UnbiasVertex", m_doRemoval);
138
139 declareProperty("commonTree", m_commonTreeName, "CommonTree" );
140 declareProperty("DefaultTree", m_defaultTreeName );
141 declareProperty("IDTree", m_IDTreeName );
143 declareProperty("Refit1Tree", m_refit1TreeName );
144 declareProperty("Refit2Tree", m_refit2TreeName );
145 declareProperty("MSTree", m_MSTreeName );
146
147 declareProperty("doFourMuAnalysis", m_doFourMuAnalysis = false);
148 declareProperty("FourMuTreeFolder", m_FourMuTreeFolder);
149
150 declareProperty("StoreZmumuNtuple", m_storeZmumuNtuple = true);
151 declareProperty("doZmumuEventDebug", m_doDebug);
152 declareProperty("MuonQuality", m_MuonQualityName = "Medium");
153 declareProperty("skipMS", m_skipMS = false);
154 declareProperty("useCustomMuonSelector", m_useCustomMuonSelector = false );
155 declareProperty("MuonSelector", m_muonSelector );
156
157 declareProperty( "MinLumiBlock", m_minGoodLumiBlock = 0, "minimum lumiblock number to be accepted");
158 declareProperty( "MaxLumiBlock", m_maxGoodLumiBlock = 0, "maximum lumiblock number to be accepted");
159
160 return;
161}
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ToolHandle< Trig::TrigDecisionTool > m_triggerDecision
std::string m_truthTreeFolder
ToolHandle< Reco::ITrackToVertex > m_trackToVertexTool
tool to extrapolate tracks to BL
std::string m_refit1TreeFolder
std::string m_ValidationTreeDescription
< validation tree description - second argument in TTree
std::string m_outputTracksName
ToolHandle< Trig::IMatchingTool > m_triggerMatching
std::string m_truthName
std::string m_MSTreeFolder
std::string m_trackParticleName
Track(Particle)TruthCollection input name.
std::string m_combTreeFolder
ToolHandle< IegammaTrkRefitterTool > m_TrackRefitter1
The track refitter.
ToolHandle< Trk::ITrackToVertexIPEstimator > m_trackToVertexIPEstimator
Needed for IP resolution studies.
std::string m_MuonQualityName
ToolHandle< Trk::IExtrapolator > m_extrapolator
bool m_validationMode
< boolean to switch to validation mode
std::string m_FourMuTreeFolder
Root Validation Tree.
ToolHandle< IegammaTrkRefitterTool > m_TrackRefitter2
The track refitter.
std::string m_truthTreeName
std::string m_refit1TreeName
std::string m_FourMuTreeName
std::string m_refit2TreeName
ToolHandle< CP::ITrackVertexAssociationTool > m_Trk2VtxAssociationTool
std::string m_defaultTreeName
std::string m_truthLinkVecName
TrackParticle input name.
double m_LeadingMuonPtCut
std::string m_defaultTreeFolder
std::string m_IDTreeFolder
std::string m_sTriggerChainName
std::string m_MSTreeName
std::string m_commonTreeFolder
std::string m_combTreeName
ToolHandle< CP::IMuonSelectionTool > m_muonSelector
used to pass a custom muon selector
std::string m_commonTreeName
std::string m_refit2TreeFolder
std::string m_IDTreeName
ToolHandle< InDet::IInDetTrackSelectionTool > m_selTool
The track selection Tool.

◆ ~IDPerfMonZmumu()

IDPerfMonZmumu::~IDPerfMonZmumu ( )

Definition at line 165 of file IDPerfMonZmumu.cxx.

166{}

Member Function Documentation

◆ bookTrees()

StatusCode IDPerfMonZmumu::bookTrees ( )
private

Definition at line 301 of file IDPerfMonZmumu.cxx.

302{
303 m_h_cutflow = new TH1F("h_cutflow","cut flow histogram",11, -0.5, 9.5);
304
305 ATH_MSG_DEBUG("initialize() ** bookTrees() ** m_commonTree name: " << m_commonTreeName.c_str());
306 ATH_MSG_DEBUG(" m_defaultTree name: " << m_defaultTreeName.c_str());
307 ATH_MSG_DEBUG(" m_IDTree name: " << m_IDTreeName.c_str());
308
309 if (!m_commonTree) {
310 ATH_MSG_INFO("initialize() ** defining m_commonTree with name: " << m_commonTreeName.c_str());
311 m_commonTree = new TTree((m_commonTreeName).c_str(), m_ValidationTreeDescription.c_str());
312
313 m_commonTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
314 m_commonTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
315 m_commonTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
316 m_commonTree->Branch("beamposX" , &m_beamposX, "beamposX/F");
317 m_commonTree->Branch("beamposY" , &m_beamposY, "beamposY/F");
318 m_commonTree->Branch("mu" , &m_event_mu, "mu/I");
319 m_commonTree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
320 m_commonTree->Branch("mcEventWeight" , &m_event_weight, "mcEventWeight/F");
321 m_commonTree->Branch("IDTrack_pt" , &m_IDTrack_pt);
322 m_commonTree->Branch("IDTrack_eta" , &m_IDTrack_eta);
323 m_commonTree->Branch("IDTrack_phi" , &m_IDTrack_phi);
324 m_commonTree->Branch("IDTrack_d0" , &m_IDTrack_d0);
325 m_commonTree->Branch("IDTrack_z0" , &m_IDTrack_z0);
326 m_commonTree->Branch("IDTrack_qoverp" , &m_IDTrack_qoverp);
327 m_commonTree->Branch("IDTrack_sigma_pt" , &m_IDTrack_sigma_pt);
328 m_commonTree->Branch("IDTrack_sigma_d0" , &m_IDTrack_sigma_d0);
329 m_commonTree->Branch("IDTrack_sigma_z0" , &m_IDTrack_sigma_z0);
330 m_commonTree->Branch("IDTrack_sigma_qoverp", &m_IDTrack_sigma_qoverp);
331 m_commonTree->Branch("CBTrack_pt" , &m_CBTrack_pt);
332 m_commonTree->Branch("CBTrack_eta" , &m_CBTrack_eta);
333 m_commonTree->Branch("CBTrack_phi" , &m_CBTrack_phi);
334 m_commonTree->Branch("CBTrack_d0" , &m_CBTrack_d0);
335 m_commonTree->Branch("CBTrack_z0" , &m_CBTrack_z0);
336 m_commonTree->Branch("CBTrack_qoverp" , &m_CBTrack_qoverp);
337 m_commonTree->Branch("CBTrack_sigma_pt" , &m_CBTrack_sigma_pt);
338 m_commonTree->Branch("CBTrack_sigma_d0" , &m_CBTrack_sigma_d0);
339 m_commonTree->Branch("CBTrack_sigma_z0" , &m_CBTrack_sigma_z0);
340 m_commonTree->Branch("CBTrack_sigma_qoverp", &m_CBTrack_sigma_qoverp);
341 m_commonTree->Branch("Refit1_pt" , &m_Refit1_pt);
342 m_commonTree->Branch("Refit1_eta" , &m_Refit1_eta);
343 m_commonTree->Branch("Refit1_phi" , &m_Refit1_phi);
344 m_commonTree->Branch("Refit1_d0" , &m_Refit1_d0);
345 m_commonTree->Branch("Refit1_z0" , &m_Refit1_z0);
346 m_commonTree->Branch("Refit1_qoverp" , &m_Refit1_qoverp);
347 m_commonTree->Branch("Refit1_sigma_pt" , &m_Refit1_sigma_pt);
348 m_commonTree->Branch("Refit1_sigma_d0" , &m_Refit1_sigma_d0);
349 m_commonTree->Branch("Refit1_sigma_z0" , &m_Refit1_sigma_z0);
350 m_commonTree->Branch("Refit1_sigma_qoverp" , &m_Refit1_sigma_qoverp);
351 m_commonTree->Branch("Refit2_pt" , &m_Refit2_pt);
352 m_commonTree->Branch("Refit2_eta" , &m_Refit2_eta);
353 m_commonTree->Branch("Refit2_phi" , &m_Refit2_phi);
354 m_commonTree->Branch("Refit2_d0" , &m_Refit2_d0);
355 m_commonTree->Branch("Refit2_z0" , &m_Refit2_z0);
356 m_commonTree->Branch("Refit2_qoverp" , &m_Refit2_qoverp);
357 m_commonTree->Branch("Refit2_sigma_pt" , &m_Refit2_sigma_pt);
358 m_commonTree->Branch("Refit2_sigma_d0" , &m_Refit2_sigma_d0);
359 m_commonTree->Branch("Refit2_sigma_z0" , &m_Refit2_sigma_z0);
360 m_commonTree->Branch("Refit2_sigma_qoverp" , &m_Refit2_sigma_qoverp);
361 m_commonTree->Branch("Truth_pt" , &m_Truth_pt);
362 m_commonTree->Branch("Truth_eta" , &m_Truth_eta);
363 m_commonTree->Branch("Truth_phi" , &m_Truth_phi);
364 m_commonTree->Branch("Truth_d0" , &m_Truth_d0);
365 m_commonTree->Branch("Truth_z0" , &m_Truth_z0);
366 m_commonTree->Branch("Truth_qoverp" , &m_Truth_qoverp);
367 m_commonTree->Branch("Truth_parent" , &m_Truth_parent);
368 m_commonTree->Branch("numberOfBLayerHits" , &m_nBLhits);
369 m_commonTree->Branch("numberOfPixelHits" , &m_nPIXhits);
370 m_commonTree->Branch("numberOfSCTHits" , &m_nSCThits);
371 m_commonTree->Branch("numberOfTRTHits" , &m_nTRThits);
372 }
373
374 if ( !m_defaultTree){
375 ATH_MSG_INFO("initialize() ** defining m_defaultTree with name: " << m_defaultTreeName.c_str());
376 m_defaultTree = new TTree((m_defaultTreeName).c_str(), m_ValidationTreeDescription.c_str());
377
378 m_defaultTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
379 m_defaultTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
380 m_defaultTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
381 m_defaultTree->Branch("mu" , &m_event_mu, "mu/I");
382
383 m_defaultTree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
384 m_defaultTree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
385 m_defaultTree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
386 m_defaultTree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
387 m_defaultTree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
388 m_defaultTree->Branch("Negative_eta", &m_negative_eta, "Negative_Eta/D");
389 m_defaultTree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
390 m_defaultTree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
391 m_defaultTree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
392 m_defaultTree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
393 m_defaultTree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
394
395 m_defaultTree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
396 m_defaultTree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
397 m_defaultTree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
398 m_defaultTree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
399 m_defaultTree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
400 m_defaultTree->Branch("Positive_eta", &m_positive_eta, "Positive_Eta/D");
401 m_defaultTree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
402 m_defaultTree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
403 m_defaultTree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
404 m_defaultTree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
405 m_defaultTree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
406
407 if (m_doIP) {
408 m_defaultTree->Branch("Negative_d0_PV", &m_negative_d0_PV , "Negative_d0_PV/D");
409 m_defaultTree->Branch("Negative_z0_PV", &m_negative_z0_PV , "Negative_z0_PV/D");
410 m_defaultTree->Branch("Positive_z0_PV", &m_positive_z0_PV, "Positive_z0_PV/D");
411 m_defaultTree->Branch("Positive_d0_PV", &m_positive_d0_PV, "Positive_d0_PV/D");
412
413 m_defaultTree->Branch("Negative_d0_PVerr", &m_negative_d0_PVerr, "Negative_d0_PVerr/D");
414 m_defaultTree->Branch("Negative_z0_PVerr", &m_negative_z0_PVerr, "Negative_z0_PVerr/D");
415 m_defaultTree->Branch("Positive_z0_PVerr", &m_positive_z0_PVerr, "Positive_z0_PVerr/D");
416 m_defaultTree->Branch("Positive_d0_PVerr", &m_positive_d0_PVerr, "Positive_d0_PVerr/D");
417
418 m_defaultTree->Branch("pv_x", &m_pv_x , "pv_x/D");
419 m_defaultTree->Branch("pv_y", &m_pv_y , "pv_y/D");
420 m_defaultTree->Branch("pv_z", &m_pv_z , "pv_z/D");
421 m_defaultTree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
422 }
423 }
424
425 bool isTreeNone = false;
426 if (m_IDTreeName.find("none") != std::string::npos) isTreeNone = true;
427 if ( !m_IDTree and !isTreeNone ){
428 ATH_MSG_INFO("initialize() ** defining IDPerfMonZmumu m_IDTree with name: " << m_IDTreeName.c_str());
429 m_IDTree = new TTree((m_IDTreeName).c_str(), m_ValidationTreeDescription.c_str());
430
431 m_IDTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
432 m_IDTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
433 m_IDTree->Branch("lumi_bLock" , &m_lumi_block, "lumi_block/I");
434 m_IDTree->Branch("mu" , &m_event_mu, "mu/I");
435
436 m_IDTree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
437 m_IDTree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
438 m_IDTree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
439 m_IDTree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
440 m_IDTree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
441 m_IDTree->Branch("Negative_Eta", &m_negative_eta, "Negative_Eta/D");
442 m_IDTree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
443 m_IDTree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
444 m_IDTree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
445 m_IDTree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
446 m_IDTree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
447
448 m_IDTree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
449 m_IDTree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
450 m_IDTree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
451 m_IDTree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
452 m_IDTree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
453 m_IDTree->Branch("Positive_Eta", &m_positive_eta, "Positive_Eta/D");
454 m_IDTree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
455 m_IDTree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
456 m_IDTree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
457 m_IDTree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
458 m_IDTree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
459
460 if(m_doIP){
461 m_IDTree->Branch("Negative_d0_PV", &m_negative_d0_PV , "Negative_d0_PV/D");
462 m_IDTree->Branch("Negative_z0_PV", &m_negative_z0_PV , "Negative_z0_PV/D");
463 m_IDTree->Branch("Positive_z0_PV", &m_positive_z0_PV, "Positive_z0_PV/D");
464 m_IDTree->Branch("Positive_d0_PV", &m_positive_d0_PV, "Positive_d0_PV/D");
465
466 m_IDTree->Branch("Negative_d0_PVerr", &m_negative_d0_PVerr, "Negative_d0_PVerr/D");
467 m_IDTree->Branch("Negative_z0_PVerr", &m_negative_z0_PVerr, "Negative_z0_PVerr/D");
468 m_IDTree->Branch("Positive_z0_PVerr", &m_positive_z0_PVerr, "Positive_z0_PVerr/D");
469 m_IDTree->Branch("Positive_d0_PVerr", &m_positive_d0_PVerr, "Positive_d0_PVerr/D");
470
471 m_IDTree->Branch("pv_x", &m_pv_x , "pv_x/D");
472 m_IDTree->Branch("pv_y", &m_pv_y , "pv_y/D");
473 m_IDTree->Branch("pv_z", &m_pv_z , "pv_z/D");
474 m_IDTree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
475 }
476 }
477
478 // dealing with tree for Refit1 tracks
479 isTreeNone = false;
480 if (m_refit1TreeName.find("none") != std::string::npos) isTreeNone = true;
481 if ( m_doRefit && !m_refit1Tree && !isTreeNone ){
482 ATH_MSG_INFO("initialize() ** defining IDPerfMonZmumu m_refit1Tree with name: " << m_refit1TreeName.c_str());
483 m_refit1Tree = new TTree((m_refit1TreeName).c_str(), m_ValidationTreeDescription.c_str());
484
485 m_refit1Tree->Branch("runNumber" , &m_runNumber, "runNumber/I");
486 m_refit1Tree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
487 m_refit1Tree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
488 m_refit1Tree->Branch("mu" , &m_event_mu, "mu/I");
489 m_refit1Tree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
490
491 m_refit1Tree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
492 m_refit1Tree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
493 m_refit1Tree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
494 m_refit1Tree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
495 m_refit1Tree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
496 m_refit1Tree->Branch("Negative_Eta", &m_negative_eta, "Negative_Eta/D");
497 m_refit1Tree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
498 m_refit1Tree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
499 m_refit1Tree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
500 m_refit1Tree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
501 m_refit1Tree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
502
503 m_refit1Tree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
504 m_refit1Tree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
505 m_refit1Tree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
506 m_refit1Tree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
507 m_refit1Tree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
508 m_refit1Tree->Branch("Positive_eta", &m_positive_eta, "Positive_Eta/D");
509 m_refit1Tree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
510 m_refit1Tree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
511 m_refit1Tree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
512 m_refit1Tree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
513 m_refit1Tree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
514
515 if(m_doIP){
516 m_refit1Tree->Branch("Negative_d0_PV", &m_negative_d0_PV , "Negative_d0_PV/D");
517 m_refit1Tree->Branch("Negative_z0_PV", &m_negative_z0_PV , "Negative_z0_PV/D");
518 m_refit1Tree->Branch("Positive_z0_PV", &m_positive_z0_PV, "Positive_z0_PV/D");
519 m_refit1Tree->Branch("Positive_d0_PV", &m_positive_d0_PV, "Positive_d0_PV/D");
520
521 m_refit1Tree->Branch("Negative_d0_PVerr", &m_negative_d0_PVerr , "Negative_d0_PVerr/D");
522 m_refit1Tree->Branch("Negative_z0_PVerr", &m_negative_z0_PVerr , "Negative_z0_PVerr/D");
523 m_refit1Tree->Branch("Positive_z0_PVerr", &m_positive_z0_PVerr, "Positive_z0_PVerr/D");
524 m_refit1Tree->Branch("Positive_d0_PVerr", &m_positive_d0_PVerr, "Positive_d0_PVerr/D");
525
526 m_refit1Tree->Branch("pv_x", &m_pv_x , "pv_x/D");
527 m_refit1Tree->Branch("pv_y", &m_pv_y , "pv_y/D");
528 m_refit1Tree->Branch("pv_z", &m_pv_z , "pv_z/D");
529 m_refit1Tree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
530 }
531 }
532
533 // dealing with tree for Refit2 tracks
534 isTreeNone = false;
535 if (m_refit2TreeName.find("none") != std::string::npos) isTreeNone = true;
536 if ( m_doRefit && !m_refit2Tree && !isTreeNone){
537 ATH_MSG_INFO("initialize() ** defining m_refit2Tree with name: " << m_refit2TreeName.c_str());
538 m_refit2Tree = new TTree((m_refit2TreeName).c_str(), m_ValidationTreeDescription.c_str());
539
540 m_refit2Tree->Branch("runNumber" , &m_runNumber, "runNumber/I");
541 m_refit2Tree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
542 m_refit2Tree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
543 m_refit2Tree->Branch("mu" , &m_event_mu, "mu/I");
544 m_refit2Tree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
545
546 m_refit2Tree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
547 m_refit2Tree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
548 m_refit2Tree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
549 m_refit2Tree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
550 m_refit2Tree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
551 m_refit2Tree->Branch("Negative_Eta", &m_negative_eta, "Negative_Eta/D");
552 m_refit2Tree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
553 m_refit2Tree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
554 m_refit2Tree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
555 m_refit2Tree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
556 m_refit2Tree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
557
558 m_refit2Tree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
559 m_refit2Tree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
560 m_refit2Tree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
561 m_refit2Tree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
562 m_refit2Tree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
563 m_refit2Tree->Branch("Positive_Eta", &m_positive_eta, "Positive_Eta/D");
564 m_refit2Tree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
565 m_refit2Tree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
566 m_refit2Tree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
567 m_refit2Tree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
568 m_refit2Tree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
569
570
571 if(m_doIP){
572 m_refit2Tree->Branch("Negative_d0_PV", &m_negative_d0_PV , "Negative_d0_PV/D");
573 m_refit2Tree->Branch("Negative_z0_PV", &m_negative_z0_PV , "Negative_z0_PV/D");
574 m_refit2Tree->Branch("Positive_d0_PV", &m_positive_d0_PV , "Positive_d0_PV/D");
575 m_refit2Tree->Branch("Positive_z0_PV", &m_positive_z0_PV , "Positive_z0_PV/D");
576
577
578 m_refit2Tree->Branch("Negative_z0_PVerr", &m_negative_z0_PVerr, "Negative_z0_PVerr/D");
579 m_refit2Tree->Branch("Negative_d0_PVerr", &m_negative_d0_PVerr, "Negative_d0_PVerr/D");
580 m_refit2Tree->Branch("Positive_z0_PVerr", &m_positive_z0_PVerr, "Positive_z0_PVerr/D");
581 m_refit2Tree->Branch("Positive_d0_PVerr", &m_positive_d0_PVerr, "Positive_d0_PVerr/D");
582
583 m_refit2Tree->Branch("pv_x", &m_pv_x , "pv_x/D");
584 m_refit2Tree->Branch("pv_y", &m_pv_y , "pv_y/D");
585 m_refit2Tree->Branch("pv_z", &m_pv_z , "pv_z/D");
586
587 m_refit2Tree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
588 }
589 }
590
591 isTreeNone = false;
592 if (m_combTreeName.find("none") != std::string::npos) isTreeNone = true;
593 if( !m_combTree && !m_skipMS && !isTreeNone){
594 ATH_MSG_INFO("initialize() ** defining IDPerfMonZmumu m_combTree with name: " << m_combTreeName.c_str());
595 m_combTree = new TTree((m_combTreeName).c_str(), m_ValidationTreeDescription.c_str());
596
597 m_combTree->Branch("runNumber", &m_runNumber, "runNumber/I");
598 m_combTree->Branch("eventNumber", &m_evtNumber, "eventNumber/I");
599 m_combTree->Branch("lumi_block", &m_lumi_block, "lumi_block/I");
600 m_combTree->Branch("mu", &m_event_mu, "mu/I");
601 m_combTree->Branch("preScale", &m_triggerPrescale, "preScale/I");
602
603 m_combTree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
604 m_combTree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
605 m_combTree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
606 m_combTree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
607 m_combTree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
608 m_combTree->Branch("Negative_eta", &m_negative_eta, "Negative_eta/D");
609 m_combTree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
610 m_combTree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
611 m_combTree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
612 m_combTree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
613 m_combTree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
614
615 m_combTree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
616 m_combTree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
617 m_combTree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
618 m_combTree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
619 m_combTree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
620 m_combTree->Branch("Positive_eta", &m_positive_eta, "Positive_Eta/D");
621 m_combTree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
622 m_combTree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
623 m_combTree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
624 m_combTree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
625 m_combTree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
626
627 if(m_doIP){
628 m_combTree->Branch("Negative_z0_PV", &m_negative_z0_PV, "Negative_z0_PV/D");
629 m_combTree->Branch("Negative_d0_PV", &m_negative_d0_PV, "Negative_d0_PV/D");
630 m_combTree->Branch("Positive_z0_PV", &m_positive_z0_PV, "Positive_z0_PV/D");
631 m_combTree->Branch("Positive_d0_PV", &m_positive_d0_PV, "Positive_d0_PV/D");
632
633 m_combTree->Branch("Negative_z0_PVerr", &m_negative_z0_PVerr, "Negative_z0_PVerr/D");
634 m_combTree->Branch("Negative_d0_PVerr", &m_negative_d0_PVerr, "Negative_d0_PVerr/D");
635 m_combTree->Branch("Positive_z0_PVerr", &m_positive_z0_PVerr, "Positive_z0_PVerr/D");
636 m_combTree->Branch("Positive_d0_PVerr", &m_positive_d0_PVerr, "Positive_d0_PVerr/D");
637
638 m_combTree->Branch("pv_x", &m_pv_x , "pv_x/D");
639 m_combTree->Branch("pv_y", &m_pv_y , "pv_y/D");
640 m_combTree->Branch("pv_z", &m_pv_z , "pv_z/D");
641
642 m_combTree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
643 }
644 }
645
646
647 isTreeNone = false;
648 if (m_MSTreeName.find("none") != std::string::npos) isTreeNone = true;
649 if( !m_MSTree && !m_skipMS && !isTreeNone){
650 ATH_MSG_INFO("initialize() ** defining IDPerfMon MSTree ");
651
652 m_MSTree = new TTree(m_MSTreeName.c_str(), m_ValidationTreeDescription.c_str());
653
654 m_MSTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
655 m_MSTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
656 m_MSTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
657 m_MSTree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
658
659 m_MSTree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
660 m_MSTree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
661 m_MSTree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
662 m_MSTree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
663 m_MSTree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
664 m_MSTree->Branch("Negative_Eta", &m_negative_eta, "Negative_Eta/D");
665 m_MSTree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
666 m_MSTree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
667 m_MSTree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
668 m_MSTree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
669 m_MSTree->Branch("Negative_sigma_pt", &m_negative_sigma_pt, "Negative_sigma_pt/D");
670
671 m_MSTree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
672 m_MSTree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
673 m_MSTree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
674 m_MSTree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
675 m_MSTree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
676 m_MSTree->Branch("Positive_Eta", &m_positive_eta, "Positive_Eta/D");
677 m_MSTree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
678 m_MSTree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
679 m_MSTree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
680 m_MSTree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
681 m_MSTree->Branch("Positive_sigma_pt", &m_positive_sigma_pt, "Positive_sigma_pt/D");
682 }
683
684 if( m_isMC && !m_truthTree ){
685 m_truthTree = new TTree(m_truthTreeName.c_str(), m_ValidationTreeDescription.c_str());
686
687 m_truthTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
688 m_truthTree->Branch("eventNumber" , &m_evtNumber, "eventNumber/I");
689 m_truthTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
690 m_truthTree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
691
692 m_truthTree->Branch("Negative_Px", &m_negative_px, "Negative_Px/D");
693 m_truthTree->Branch("Negative_Py", &m_negative_py, "Negative_Py/D");
694 m_truthTree->Branch("Negative_Pt", &m_negative_pt, "Negative_Pt/D");
695 m_truthTree->Branch("Negative_Pz", &m_negative_pz, "Negative_Pz/D");
696 m_truthTree->Branch("Negative_Phi", &m_negative_phi, "Negative_Phi/D");
697 m_truthTree->Branch("Negative_Eta", &m_negative_eta, "Negative_Eta/D");
698 m_truthTree->Branch("Negative_z0", &m_negative_z0, "Negative_z0/D");
699 m_truthTree->Branch("Negative_d0", &m_negative_d0, "Negative_d0/D");
700 m_truthTree->Branch("Negative_z0_err", &m_negative_z0_err, "Negative_z0_err/D");
701 m_truthTree->Branch("Negative_d0_err", &m_negative_d0_err, "Negative_d0_err/D");
702 m_truthTree->Branch("Negative_parent", &m_negative_parent, "Negative_parent/I");
703
704 m_truthTree->Branch("Positive_Px", &m_positive_px, "Positive_Px/D");
705 m_truthTree->Branch("Positive_Py", &m_positive_py, "Positive_Py/D");
706 m_truthTree->Branch("Positive_Pt", &m_positive_pt, "Positive_Pt/D");
707 m_truthTree->Branch("Positive_Pz", &m_positive_pz, "Positive_Pz/D");
708 m_truthTree->Branch("Positive_Phi", &m_positive_phi, "Positive_Phi/D");
709 m_truthTree->Branch("Positive_Eta", &m_positive_eta, "Positive_Eta/D");
710 m_truthTree->Branch("Positive_z0", &m_positive_z0, "Positive_z0/D");
711 m_truthTree->Branch("Positive_d0", &m_positive_d0, "Positive_d0/D");
712 m_truthTree->Branch("Positive_z0_err", &m_positive_z0_err, "Positive_z0_err/D");
713 m_truthTree->Branch("Positive_d0_err", &m_positive_d0_err, "Positive_d0_err/D");
714 m_truthTree->Branch("Positive_parent", &m_positive_parent, "Positive_parent/I");
715 }
716
718 ATH_MSG_INFO("initialize() ** defining m_FourMuTree ");
719 m_FourMuTree = new TTree((m_FourMuTreeName).c_str(), "Four Muon monitoring");
720
721 m_FourMuTree->Branch("runNumber" , &m_runNumber, "runNumber/I");
722 m_FourMuTree->Branch("eventNumber", &m_evtNumber, "eventNumber/I");
723 m_FourMuTree->Branch("lumi_block" , &m_lumi_block, "lumi_block/I");
724 m_FourMuTree->Branch("mu" , &m_event_mu, "mu/I");
725 m_FourMuTree->Branch("preScale" , &m_triggerPrescale, "preScale/I");
726 m_FourMuTree->Branch("nVertex" , &m_nVertex, "nVertex/I");
727
728 m_FourMuTree->Branch("Negative_1_Px", &m_negative_px, "Negative_1_Px/D");
729 m_FourMuTree->Branch("Negative_1_Py", &m_negative_py, "Negative_1_Py/D");
730 m_FourMuTree->Branch("Negative_1_Pz", &m_negative_pz, "Negative_1_Pz/D");
731 m_FourMuTree->Branch("Negative_1_z0", &m_negative_z0, "Negative_1_z0/D");
732 m_FourMuTree->Branch("Negative_1_d0", &m_negative_d0, "Negative_1_d0/D");
733 m_FourMuTree->Branch("Negative_1_z0_err", &m_negative_z0_err, "Negative_1_z0_err/D");
734 m_FourMuTree->Branch("Negative_1_d0_err", &m_negative_d0_err, "Negative_1_d0_err/D");
735 m_FourMuTree->Branch("Negative_1_vtx", &m_negative_1_vtx, "Negative_1_vtx/I"); // vertex identifier
736
737 m_FourMuTree->Branch("Negative_2_Px", &m_negative_2_px, "Negative_2_Px/D");
738 m_FourMuTree->Branch("Negative_2_Py", &m_negative_2_py, "Negative_2_Py/D");
739 m_FourMuTree->Branch("Negative_2_Pz", &m_negative_2_pz, "Negative_2_Pz/D");
740 m_FourMuTree->Branch("Negative_2_z0", &m_negative_2_z0, "Negative_2_z0/D");
741 m_FourMuTree->Branch("Negative_2_d0", &m_negative_2_d0, "Negative_2_d0/D");
742 m_FourMuTree->Branch("Negative_2_z0_err", &m_negative_2_z0_err, "Negative_2_z0_err/D");
743 m_FourMuTree->Branch("Negative_2_d0_err", &m_negative_2_d0_err, "Negative_2_d0_err/D");
744 m_FourMuTree->Branch("Negative_2_vtx", &m_negative_2_vtx, "Negative_2_vtx/I");
745
746 m_FourMuTree->Branch("Positive_1_Px", &m_positive_px, "Positive_1_Px/D");
747 m_FourMuTree->Branch("Positive_1_Py", &m_positive_py, "Positive_1_Py/D");
748 m_FourMuTree->Branch("Positive_1_Pz", &m_positive_pz, "Positive_1_Pz/D");
749 m_FourMuTree->Branch("Positive_1_z0", &m_positive_z0, "Positive_1_z0/D");
750 m_FourMuTree->Branch("Positive_1_d0", &m_positive_d0, "Positive_1_d0/D");
751 m_FourMuTree->Branch("Positive_1_z0_err", &m_positive_z0_err, "Positive_1_z0_err/D");
752 m_FourMuTree->Branch("Positive_1_d0_err", &m_positive_d0_err, "Positive_1_d0_err/D");
753 m_FourMuTree->Branch("Positive_1_vtx", &m_positive_1_vtx, "Positive_1_vtx/I");
754
755 m_FourMuTree->Branch("Positive_2_Px", &m_positive_2_px, "Positive_1_Px/D");
756 m_FourMuTree->Branch("Positive_2_Py", &m_positive_2_py, "Positive_1_Py/D");
757 m_FourMuTree->Branch("Positive_2_Pz", &m_positive_2_pz, "Positive_1_Pz/D");
758 m_FourMuTree->Branch("Positive_2_z0", &m_positive_2_z0, "Positive_1_z0/D");
759 m_FourMuTree->Branch("Positive_2_d0", &m_positive_2_d0, "Positive_1_d0/D");
760 m_FourMuTree->Branch("Positive_2_z0_err", &m_positive_2_z0_err,"Positive_1_z0_err/D");
761 m_FourMuTree->Branch("Positive_2_d0_err", &m_positive_2_d0_err,"Positive_1_d0_err/D");
762 m_FourMuTree->Branch("Positive_2_vtx", &m_positive_2_vtx, "Positive_2_vtx/I");
763
764 // electrons
765 m_FourMuTree->Branch("ElNegative_1_Px", &m_el_negative1_px, "ElNegative_1_Px/D");
766 m_FourMuTree->Branch("ElNegative_1_Py", &m_el_negative1_py, "ElNegative_1_Py/D");
767 m_FourMuTree->Branch("ElNegative_1_Pz", &m_el_negative1_pz, "ElNegative_1_Pz/D");
768 m_FourMuTree->Branch("ElNegative_1_z0", &m_el_negative1_z0, "ElNegative_1_z0/D");
769 m_FourMuTree->Branch("ElNegative_1_d0", &m_el_negative1_d0, "ElNegative_1_d0/D");
770 m_FourMuTree->Branch("ElNegative_1_z0_err", &m_el_negative1_z0_err, "ElNegative_1_z0_err/D");
771 m_FourMuTree->Branch("ElNegative_1_d0_err", &m_el_negative1_d0_err, "ElNegative_1_d0_err/D");
772 m_FourMuTree->Branch("ElNegative_1_vtx", &m_el_negative1_vtx, "ElNegative_1_vtx/I"); // vertex identifier
773
774 m_FourMuTree->Branch("ElNegative_2_Px", &m_el_negative2_px, "ElNegative_2_Px/D");
775 m_FourMuTree->Branch("ElNegative_2_Py", &m_el_negative2_py, "ElNegative_2_Py/D");
776 m_FourMuTree->Branch("ElNegative_2_Pz", &m_el_negative2_pz, "ElNegative_2_Pz/D");
777 m_FourMuTree->Branch("ElNegative_2_z0", &m_el_negative2_z0, "ElNegative_2_z0/D");
778 m_FourMuTree->Branch("ElNegative_2_d0", &m_el_negative2_d0, "ElNegative_2_d0/D");
779 m_FourMuTree->Branch("ElNegative_2_z0_err", &m_el_negative2_z0_err, "ElNegative_2_z0_err/D");
780 m_FourMuTree->Branch("ElNegative_2_d0_err", &m_el_negative2_d0_err, "ElNegative_2_d0_err/D");
781 m_FourMuTree->Branch("ElNegative_2_vtx", &m_el_negative2_vtx, "ElNegative_2_vtx/I"); // vertex identifier
782
783 m_FourMuTree->Branch("ElPositive_1_Px", &m_el_positive1_px, "ElPositive_1_Px/D");
784 m_FourMuTree->Branch("ElPositive_1_Py", &m_el_positive1_py, "ElPositive_1_Py/D");
785 m_FourMuTree->Branch("ElPositive_1_Pz", &m_el_positive1_pz, "ElPositive_1_Pz/D");
786 m_FourMuTree->Branch("ElPositive_1_z0", &m_el_positive1_z0, "ElPositive_1_z0/D");
787 m_FourMuTree->Branch("ElPositive_1_d0", &m_el_positive1_d0, "ElPositive_1_d0/D");
788 m_FourMuTree->Branch("ElPositive_1_z0_err", &m_el_positive1_z0_err, "ElPositive_1_z0_err/D");
789 m_FourMuTree->Branch("ElPositive_1_d0_err", &m_el_positive1_d0_err, "ElPositive_1_d0_err/D");
790 m_FourMuTree->Branch("ElPositive_1_vtx", &m_el_positive1_vtx, "ElPositive_1_vtx/I"); // vertex identifier
791
792 m_FourMuTree->Branch("ElPositive_2_Px", &m_el_positive2_px, "ElPositive_2_Px/D");
793 m_FourMuTree->Branch("ElPositive_2_Py", &m_el_positive2_py, "ElPositive_2_Py/D");
794 m_FourMuTree->Branch("ElPositive_2_Pz", &m_el_positive2_pz, "ElPositive_2_Pz/D");
795 m_FourMuTree->Branch("ElPositive_2_z0", &m_el_positive2_z0, "ElPositive_2_z0/D");
796 m_FourMuTree->Branch("ElPositive_2_d0", &m_el_positive2_d0, "ElPositive_2_d0/D");
797 m_FourMuTree->Branch("ElPositive_2_z0_err", &m_el_positive2_z0_err, "ElPositive_2_z0_err/D");
798 m_FourMuTree->Branch("ElPositive_2_d0_err", &m_el_positive2_d0_err, "ElPositive_2_d0_err/D");
799 m_FourMuTree->Branch("ElPositive_2_vtx", &m_el_positive2_vtx, "ElPositive_2_vtx/I"); // vertex identifier
800
801 // other quantities
802 m_FourMuTree->Branch("minv4mu", &m_4mu_minv, "minv4mu/D");
803 m_FourMuTree->Branch("pv_x", &m_pv_x , "pv_x/D");
804 m_FourMuTree->Branch("pv_y", &m_pv_y , "pv_y/D");
805 m_FourMuTree->Branch("pv_z", &m_pv_z , "pv_z/D");
806 m_FourMuTree->Branch("nTrkInVtx", &m_nTrkInVtx, "nTrkInVtx/I");
807
808 m_FourMuTree->Branch("met", &m_met, "met/D");
809 m_FourMuTree->Branch("metphi", &m_metphi, "metphi/D");
810 }
811
812 // now register the Trees
813 ATH_MSG_INFO("initialize() Going to register the mu+mu- trees");
814 ServiceHandle<ITHistSvc> tHistSvc("THistSvc", name());
815 if (tHistSvc.retrieve().isFailure()){
816 ATH_MSG_ERROR("initialize() Could not find Hist Service -> Switching ValidationMode Off !");
817 m_validationMode = false;
818 }
819
820 if (m_commonTree) {
821 if ((tHistSvc->regTree(m_commonTreeFolder, m_commonTree)).isSuccess() ) {
822 ATH_MSG_INFO("initialize() commonTree succesfully registered!");
823 }
824 else {
825 ATH_MSG_ERROR("initialize() Could not register the validation commonTree -> Switching ValidationMode Off !");
826 delete m_commonTree; m_commonTree = nullptr;
827 m_validationMode = false;
828 }
829 }
830
831 if (m_IDTree) {
832 if ((tHistSvc->regTree(m_IDTreeFolder, m_IDTree)).isSuccess() ) {
833 ATH_MSG_INFO("initialize() IDTree succesfully registered!");
834 }
835 else {
836 ATH_MSG_ERROR("initialize() Could not register the validation IDTree -> Switching ValidationMode Off !");
837 delete m_IDTree; m_IDTree = nullptr;
838 m_validationMode = false;
839 }
840 }
841
842 if ( m_skipMS ) {
843 ATH_MSG_INFO("CBtree has to be skipped: flag ON");
844 delete m_combTree; m_combTree = nullptr;
845 }
846 else {
847 if (m_combTree) {
848 if ((tHistSvc->regTree(m_combTreeFolder, m_combTree)).isSuccess() ) {
849 ATH_MSG_INFO("initialize() CBTree succesfully registered!");
850 }
851 else {
852 ATH_MSG_ERROR("initialize() Could not register the validation CBTree -> Switching ValidationMode Off !");
853 delete m_combTree; m_combTree = nullptr;
854 m_validationMode = false;
855 }
856 }
857 }
858
859 if ( m_skipMS ) {
860 ATH_MSG_INFO("MStree has to be skipped: flag ON");
861 delete m_MSTree; m_MSTree = nullptr;
862 }
863 else {
864 if (m_MSTree) {
865 if ( (tHistSvc->regTree(m_MSTreeFolder, m_MSTree)).isSuccess() ){
866 ATH_MSG_INFO("initialize() MSTree succesfully registered!");
867 }
868 else {
869 ATH_MSG_ERROR("initialize() Could not register the validation MSTree -> Switching ValidationMode Off !");
870 delete m_MSTree; m_MSTree = nullptr;
871 m_validationMode = false;
872 }
873 }
874 }
875
876 if( m_doRefit ){
877 if (m_refit1Tree) {
878 if ((tHistSvc->regTree(m_refit1TreeFolder, m_refit1Tree)).isSuccess() ) {
879 ATH_MSG_INFO("initialize() Refit1 Tree succesfully registered!");
880 }
881 else{
882 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
883 delete m_refit1Tree; m_refit1Tree = nullptr;
884 m_validationMode = false;
885 }
886 }
887
888 if (m_refit2Tree) {
889 if ((tHistSvc->regTree(m_refit2TreeFolder, m_refit2Tree)).isSuccess() ) {
890 ATH_MSG_INFO("initialize() Refit2 Tree succesfully registered!");
891 }
892 else {
893 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
894 delete m_refit2Tree; m_refit2Tree = nullptr;
895 m_validationMode = false;
896 }
897 }
898 }
899
900 if (m_isMC) {
901 if ((tHistSvc->regTree(m_truthTreeFolder, m_truthTree)).isSuccess() ) {
902 ATH_MSG_INFO("initialize() truthTree Tree succesfully registered!");
903 }
904 else {
905 ATH_MSG_ERROR("initialize() Could not register the validation truth Tree -> Switching ValidationMode Off !");
906 delete m_truthTree; m_truthTree = nullptr;
907 m_validationMode = false;
908 }
909 }
910
911 if (m_doFourMuAnalysis) {
912 if ((tHistSvc->regTree(m_FourMuTreeFolder, m_FourMuTree)).isSuccess() ) {
913 ATH_MSG_INFO("initialize() FourMu Tree succesfully registered!");
914 }
915 else {
916 ATH_MSG_ERROR("initialize() Could not register the validation FourMu Tree -> Switching ValidationMode Off !");
917 delete m_FourMuTree; m_FourMuTree = nullptr;
918 m_validationMode = false;
919 }
920 }
921
922 return StatusCode::SUCCESS;
923}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
double m_el_negative1_z0_err
std::vector< float > m_Refit1_qoverp
unsigned int m_event_mu
std::vector< float > m_Refit1_sigma_qoverp
double m_el_positive1_d0_err
double m_el_positive2_z0_err
double m_positive_d0_PVerr
double m_negative_2_z0_err
unsigned int m_nVertex
double m_positive_2_d0_err
std::vector< float > m_Refit2_sigma_d0
std::vector< float > m_CBTrack_sigma_z0
TH1F * m_h_cutflow
link vector to map HepMC onto xAOD truth
std::vector< float > m_Refit1_sigma_d0
std::vector< float > m_CBTrack_d0
std::vector< float > m_Refit2_qoverp
std::vector< float > m_Refit1_eta
std::vector< float > m_CBTrack_sigma_d0
unsigned int m_lumi_block
std::vector< float > m_IDTrack_d0
double m_negative_2_d0_err
double m_positive_z0_PVerr
std::vector< float > m_Truth_phi
std::vector< float > m_Truth_pt
std::vector< float > m_Refit2_d0
double m_el_positive1_z0_err
std::vector< float > m_Refit1_phi
std::vector< float > m_Refit2_eta
std::vector< float > m_IDTrack_pt
std::vector< float > m_CBTrack_sigma_pt
std::vector< float > m_Truth_z0
double m_negative_z0_PVerr
std::vector< float > m_IDTrack_sigma_d0
std::vector< float > m_Refit2_pt
unsigned int m_evtNumber
double m_positive_sigma_pt
unsigned int m_runNumber
double m_el_negative2_z0_err
std::vector< float > m_CBTrack_z0
std::vector< float > m_CBTrack_pt
std::vector< float > m_Refit1_sigma_pt
std::vector< float > m_Refit1_d0
std::vector< float > m_Truth_eta
double m_negative_d0_PVerr
double m_positive_2_z0_err
std::vector< float > m_CBTrack_sigma_qoverp
std::vector< int > m_nSCThits
std::vector< int > m_nTRThits
std::vector< float > m_IDTrack_qoverp
std::vector< float > m_Refit2_z0
std::vector< float > m_Truth_d0
std::vector< int > m_nBLhits
std::vector< float > m_Refit1_pt
double m_el_positive2_d0_err
std::vector< float > m_IDTrack_phi
std::vector< float > m_Refit2_sigma_pt
std::vector< float > m_IDTrack_sigma_z0
double m_negative_sigma_pt
std::vector< float > m_Refit2_sigma_qoverp
std::vector< float > m_Refit1_z0
std::vector< float > m_Truth_qoverp
std::vector< float > m_IDTrack_z0
std::vector< float > m_Refit2_phi
double m_el_negative2_d0_err
std::vector< int > m_nPIXhits
std::vector< float > m_IDTrack_sigma_pt
unsigned int m_nTrkInVtx
std::vector< float > m_CBTrack_eta
std::vector< int > m_Truth_parent
std::vector< float > m_IDTrack_sigma_qoverp
std::vector< float > m_Refit1_sigma_z0
std::vector< float > m_CBTrack_qoverp
double m_el_negative1_d0_err
std::vector< float > m_Refit2_sigma_z0
std::vector< float > m_IDTrack_eta
std::vector< float > m_CBTrack_phi
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)

◆ CheckTriggerStatusAndPrescale()

StatusCode IDPerfMonZmumu::CheckTriggerStatusAndPrescale ( )
private

Definition at line 2316 of file IDPerfMonZmumu.cxx.

2317{
2318 m_triggerPrescale = 1; // default value
2319
2320 // check trigger status
2321 if(m_triggerDecision.retrieve().isFailure()) {
2322 ATH_MSG_FATAL("CheckTriggerStatusAndPrescale -- Unable to retrieve " << m_triggerDecision << " turn it off");
2323 return StatusCode::FAILURE;
2324 }
2325 else {
2326 ATH_MSG_DEBUG("CheckTriggerStatusAndPrescale -- retrieved tool: " << m_triggerDecision );
2327 }
2328
2329 float thisEventTriggerPrescale = 999999.9;
2330 float thisHLTTriggerPrescale = 999999.9;
2331 bool thisHLTIsPassed = false;
2332 std::string thisHLTTriggerName;
2333 std::string thisEventTriggerName;
2334
2335 // HLT triggers
2336 const std::vector<std::string> myHLTtriglist = m_triggerDecision->getChainGroup("HLT_mu.*, HLT_2mu.*")->getListOfTriggers();
2337 for (int i=0; i < (int) myHLTtriglist.size(); i++) {
2338 if ( m_triggerDecision->isPassed(myHLTtriglist.at(i)) ) {
2339 ATH_MSG_DEBUG("HLT trigger = " << i << " out of " << myHLTtriglist.size() << " --> " << myHLTtriglist.at(i) << " isPassed? " << m_triggerDecision->isPassed(myHLTtriglist.at(i)) << " prescale: " << m_triggerDecision->getChainGroup(myHLTtriglist.at(i))->getPrescale() );
2340 }
2341 if ( m_triggerDecision->isPassed(myHLTtriglist.at(i)) ) { // trigger is passed
2342 thisHLTIsPassed = true;
2343 float thisprescale = m_triggerDecision->getChainGroup(myHLTtriglist.at(i))->getPrescale();
2344 if (thisprescale < thisHLTTriggerPrescale) {
2345 thisHLTTriggerPrescale = thisprescale;
2346 thisHLTTriggerName = myHLTtriglist.at(i);
2347 }
2348 }
2349 }
2350 if (thisHLTTriggerPrescale < 1) thisHLTTriggerPrescale = 1;
2351 ATH_MSG_DEBUG("Event HLT trigger prescale = " << thisHLTTriggerPrescale);
2352
2353 //if (thisL1IsPassed && thisHLTIsPassed) {
2354 if (thisHLTIsPassed) {
2355 ATH_MSG_DEBUG("Trigger passed -> accept event");
2356 }
2357 else{
2358 ATH_MSG_DEBUG("Trigger Failed -> reject event");
2359 return StatusCode::FAILURE;
2360 }
2361
2362 // event prescale
2363 thisEventTriggerPrescale = thisHLTTriggerPrescale;
2364 thisEventTriggerName = thisHLTTriggerName;
2365 ATH_MSG_DEBUG("CheckTriggerStatusAndPrescale -- Event trigger prescale = " << thisEventTriggerPrescale);
2366 ATH_MSG_DEBUG("CheckTriggerStatusAndPrescale -- Event trigger name = " << thisEventTriggerName);
2367
2368 m_triggerPrescale = thisEventTriggerPrescale;
2369 m_triggerName = thisEventTriggerName;
2370
2371
2372 return StatusCode::SUCCESS;
2373}
#define ATH_MSG_FATAL(x)
std::string m_triggerName

◆ Clear4MuNtupleVariables()

void IDPerfMonZmumu::Clear4MuNtupleVariables ( )
private

Definition at line 2466 of file IDPerfMonZmumu.cxx.

2467{
2468 m_positive_px = 0.;
2469 m_positive_py = 0.;
2470 m_positive_pz = 0.;
2471 m_positive_d0 = 0.;
2472 m_positive_z0 = 0.;
2473 m_positive_d0_err = 0.;
2474 m_positive_z0_err = 0.;
2476 m_positive_1_vtx = 0;
2478
2479 m_negative_px = 0.;
2480 m_negative_py = 0.;
2481 m_negative_pz = 0.;
2482 m_negative_d0 = 0.;
2483 m_negative_z0 = 0.;
2484 m_negative_d0_err = 0.;
2485 m_negative_z0_err = 0.;
2487 m_negative_1_vtx = 0;
2489
2490 m_positive_2_px = 0.;
2491 m_positive_2_py = 0.;
2492 m_positive_2_pz = 0.;
2493 m_positive_2_d0 = 0.;
2494 m_positive_2_z0 = 0.;
2497 m_positive_2_vtx = 0;
2498
2499 m_negative_2_px = 0.;
2500 m_negative_2_py = 0.;
2501 m_negative_2_pz = 0.;
2502 m_negative_2_d0 = 0.;
2503 m_negative_2_z0 = 0.;
2506 m_negative_2_vtx = 0;
2507
2508 // electrons
2509 m_el_negative1_px = 0.;
2510 m_el_negative1_py = 0.;
2511 m_el_negative1_pz = 0.;
2512 m_el_negative1_d0 = 0.;
2513 m_el_negative1_z0 = 0.;
2517
2518 m_el_negative2_px = 0.;
2519 m_el_negative2_py = 0.;
2520 m_el_negative2_pz = 0.;
2521 m_el_negative2_d0 = 0.;
2522 m_el_negative2_z0 = 0.;
2526
2527 m_el_positive1_px = 0.;
2528 m_el_positive1_py = 0.;
2529 m_el_positive1_pz = 0.;
2530 m_el_positive1_d0 = 0.;
2531 m_el_positive1_z0 = 0.;
2535
2536 m_el_positive2_px = 0.;
2537 m_el_positive2_py = 0.;
2538 m_el_positive2_pz = 0.;
2539 m_el_positive2_d0 = 0.;
2540 m_el_positive2_z0 = 0.;
2544
2545 // other quantities
2546 m_nVertex = 0;
2547 m_pv_x = 0; m_pv_y = 0; m_pv_z = 0;
2548 m_4mu_minv = 0.;
2549
2550 return;
2551}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::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< Gaudi::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>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::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< Gaudi::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() [1/2]

virtual StatusCode AthAlgorithm::execute ( const EventContext & )
inlinevirtualinherited

Execute method with EventContext.

Override this method if acccess to the EventContext is needed.

Reimplemented in ActsTrk::ActsMuonTrackingGeometryTest, ActsTrk::MaterialTrackReader, ActsTrk::MaterialTrackWriter, ActsTrk::ReadoutGeoDumpAlg, ActsWriteTrackingGeometryTransforms, AddFlowByShifting, AFPHitAnalysis, ALFAHitAnalysis, AlgB, AlgT, AODReader, AsgExampleAlgorithm, Athena::RootAsciiDumperAlg, Athena::RootNtupleOutputStream, AthenaMon, AthenaPoolTestDataReader, AthenaPoolTestDataWriter, AthEx::Hist, AthEx::Ntup, AthExAlgWithFPE, AthExThinning::CreateData, AthExThinning::ReadThinnedData, AthExThinning::WriteThinnedData, AthPoolEx::PassNoneFilter, AthPoolEx::ReadCond, AtlasCLHEP_RandomGenerators::AtlasCLHEP_RandomGenerators_test, BCM_RDOAnalysis, BoostEvent, BunchCrossingAverageCondTest, BunchCrossingCondTest, BunchCrossingIntensityCondTest, CalibHitIDCheck, CalibHitToCaloCell, CalibHitValidate, CaloAddCellPedShift, CaloCellCalcEnergyCorr, CaloCellDumper, CaloCellEnergyCorr2Ntuple, CaloCellNoiseAlg, CaloCellPosition2Ntuple, CaloClusterNavTest, CaloFillCellPositionShift, CaloHitAnalysis, CaloNoise2Ntuple, CaloReadLCClassificationFile, CaloReadLCJetEnergyScaleFile, CaloReadLCOutOfClusterFile, CaloReadLCWeightsFile, CaloRescaleNoise, CaloTowerStoreTestAlg, CBNT_TBRecBase, CheckCloningFactor, CheckFlow, CheckFlow_New, CheckFlow_New_Minbias, CheckLArFebHeader, ClusterCreator, ClusterDumper, ComTimeRec, CopyEventWeight, CountHepMC, CreateLumiBlockCollectionFromFile, CSC_RDOAnalysis, CSCConditionsTestAlgMT, CscDigitBuilder, CscDigitToCscRDO, CSCHitAnalysis, CscThresholdClusterBuilder, D3PD::MakerAlg, DigitizationAlg, DMTest::CondWriterAlg, DMTest::CondWriterExtAlg, DMTest::DMTestRead, DMTest::HLTResultReader, DMTest::HLTResultWriter, DMTest::MetaWriterAlg, DMTest::xAODTestClearDecor, DMTest::xAODTestTypelessRead, DumpCaloBadChannels, DumpLArDigits, DumpLArRawChannels, DumpMC, EFTrackingSmearingAlg, EFTrackingSmearMonAlg, EventInfoRDOAnalysis, EventInfoWriter, EventReaderAlg, EventReaderBaseAlg, EvtInclusiveDecay, FakeLArOFCs, FakeLArTimeOffset, FastCaloSimParamAlg, FCAL_HV_Energy_Rescale, FillFilterValues, FilteredAlgorithm, FindDuplicatedLArDigits, FixHepMC, FixLArElecCalib, FixLArElecSCCalib, FixLArIdMap, ForceLoadCondObj, FortranAlgorithm, FPGATrackSimConstGenAlgo, FPGATrackSimDumpDetStatusAlgo, FPGATrackSimDumpOutputStatAlg, FPGATrackSimLayerStudyAlg, FPGATrackSimLogicalHitsProcessAlg, FPGATrackSimMapMakerAlg, FPGATrackSimMatrixGenAlgo, FPGATrackSimMatrixMergeAlgo, FPGATrackSimMergeOutputsAlg, FPGATrackSimRawHitsWrapperAlg, FPGATrackSimSecondStageAlg, G4AtlasAlg, G4InputLoader, G4RunAlg, G4TestAlg, GenBase, GenFilter, GenModule, GetLCClassification, GetLCDeadMaterial, GetLCDeadMaterialTree, GetLCOutOfCluster, GetLCSinglePionsPerf, GetLCWeights, HelloAlg, HepMCReadFromFile, HGTD_Digitization, HGTD_RDOAnalysis, InDetRawDataFakeReader, InDetRawDataFakeWriter, ISF::SimHitTreeCreator, ISF::SimKernel, ISF::SimKernelMT, ISF_HitAnalysis, ITk::PixelRDOAnalysis, ITk::StripRDOAnalysis, JiveXML::AlgoJiveXML, LArAccumulatedCalibDigitContSplitter, LArAccumulatedDigits2Ntuple, LArAlignDbAlg, LArAutoCorrExtrapolate, LArAutoCorrMaker, LArAverages2Ntuple, LArBadChannel2Ascii, LArBadChannelDBAlg, LArBadEventCatcher, LArBadFeb2Ascii, LArCablingChecker, LArCablingTest, LArCalibDigitMaker, LArCalibDigitsAccumulator, LArCalibDigitsAccumulatorFreeGain, LArCalibShortCorrector, LArCaliWaveBuilder, LArCaliWaveBuilderXtalk, LArCellContFakeReader, LArCellContFakeWriter, LArCond2NtupleBase, LArCond2NtupleBaseEB, LArCondDataTest, LArConditionsMergerAlg< T, T1 >, LArConditionsMergerAlg< LArAutoCorrComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArCaliPulseParamsComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArCaliWaveContainer >, LArConditionsMergerAlg< LArDAC2uAComplete, LArDetCellParamsComplete >, LArConditionsMergerAlg< LArDAC2uAComplete, LArPhysWaveContainer >, LArConditionsMergerAlg< LArMphysOverMcalComplete >, LArConditionsMergerAlg< LArOFCComplete >, LArConditionsMergerAlg< LArPedestalComplete >, LArConditionsMergerAlg< LArRampComplete >, LArConditionsMergerAlg< LArShapeComplete >, LArConditionsTestAlg, LArDigits2Ntuple, LArDigits2NtupleEB, LArDigitsAccumulator, LArDumpShapes, LarEMSamplingFraction, LArFCalSamplingFraction, LArFCalTowerBuilderToolTestAlg, LArFebRodMapConvert, LArFebTimeOffset2Ntuple, LArG4::CalibrationHitMerger, LArG4GenShowerLib, LArG4ShowerLibSvcTest, LArHECNoise, LArHitEMapMaker, LArHitMerger, LArHV2Ntuple, LArHVCorrMaker, LArHVPathologyDbAlg, LArIdCablingTest, LArIdMapConvert, LArMinBiasAlg, LArNoiseBursts, LArOFCBinAlg, LArOFPhasePicker, LArParams2Ntuple, LArPedestalAutoCorrBuilder, LArPedestalMaker, LArPhysCaliTDiffAlg, LArPulseShape, LArRampBuilder, LArRampCorr, LArRampFCalCorr, LArRDOAnalysis, LArReadCells, LArReadHadDMCoeffFile2, LArReadHadDMCoeffFile, LArReadSC, LArSC2Ntuple, LArSC2NtupleEB, LArShapeCompleteMaker, LArShapeCompleteMakerAlg, LArShapeCorrector, LArShapeDumper, LArShapeToSCShape, LArSimpleShapeDumper, LArStripsCrossTalkCorrector, LArTTL1Calib, LArTTL1Maker, LArWFParams2Ntuple, LucidHitAnalysis, MagField::SolenoidTest, MdtAsBuiltJsonDumpAlg, MdtCablingJsonDumpAlg, MdtCablingTestAlg, MdtConditionsTestAlg, MdtCondJsonDumpAlg, MDTHitAnalysis, MdtToyCablingJsonDumpAlg, MdtToyTwinCablingDumpAlg, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MMCablingTestAlg, MMHitAnalysis, MonitoredAlg, MSVtxValidationAlg, Muon::MdtCalibJsonDumpAlg, Muon::RpcCablingTestAlg, Muon::RpcToyCablingJsonDumpAlg, MuonABLineJsonDumpAlg, MuonAlign::AlignmentErrorTestAlg, MuonCalib::CoolInserter, MuonCalib::CscCalcPed, MuonCalib::CscCalcSlope, MuonCalib::MuonSegmentReader, MuonChamberIDSelector, MuonDigitizer, MuonFeatureCnvTestAlg, MuonGM::GeoModelCscTest, MuonGM::GeoModelMdtTest, MuonGM::GeoModelMmTest, MuonGM::GeoModelRpcTest, MuonGM::GeoModelsTgcTest, MuonGM::GeoModelTgcTest, MuonGM::NSWGeoPlottingAlg, MuonGMR4::GeoModelMdtTest, MuonGMR4::GeoModelMmTest, MuonGMR4::GeoModelRpcTest, MuonGMR4::GeoModelsTgcTest, MuonGMR4::GeoModelTgcTest, MuonGMR4::NswGeoPlottingAlg, MuonHoughDataNtuple, MuonPatternCombinationDetailedTrackTruthMaker, MuonPrdSelectorAlg, MuonR4::BucketDumperAlg, MuonR4::CaloCellsDumperAlg, MuonR4::MlHitDumperAlg, MuonR4::SegmentDumperAlg, MuonR4::SpacePointCsvDumperAlg, MuonR4::SPIdDumperAlg, MuonR4::TruthMuonVertexDumperAlg, MuonR4::TruthSegmentCsvDumperAlg, MuonVal::HitValAlg, MuonVal::MdtRDOAnalysis, MuonVal::MetaDataAlg, MuonVal::MuonSDOAnalysis, MuonVal::MuonTester::TreeTestAlg, MuonVal::RpcRDOAnalysis, MuonVal::TgcRDOAnalysis, MuonValR4::MdtCalibDbAlgTest, MuonValR4::MsTrackTester, MuonValR4::MuonFastRecoTester, MuonValR4::MuonHitTesterAlg, MuonValR4::MuonHoughTransformTester, MuonValR4::MuonRecoChainTester, MuonValR4::MuonSPCalibrationTest, MuonValR4::SegmentRefitTest, MuonValR4::xMuonHitAnalysis, NswOccupancyAlg, OutputConditionsAlg, PerfMonTest::CpuCruncherAlg, PerfMonTest::ErroneousAlg, PerfMonTest::LeakyAlg, PerfMonTest::MallocAlg, PerfMonTest::ManyLeaksAlg, PerfMonTest::PolyVectorAlg, PerfMonTest::PolyVectorAlgWithArenas, PerfMonTest::VectorAlg, Photospp_i, PileUpMTAlg, PileUpToolsAlg, PileupTruthParticleSlimmer, PixelClusterAnalysis, PixelFastRDOAnalysis, PixelRDOAnalysis, PrintHijingPars, PrintMC, RDOReaderDoubleSelector, ReadData, ReadHepEvtFromAscii, ReadLArDigits, ReadLArRaw, ReadTBLArCalibDigits, ReadTBLArDigits, Rivet_i, RPCHitAnalysis, SCT_ClusterAnalysis, SCT_FastRDOAnalysis, SCT_RDOAnalysis, SgStressConsumer, SgStressProducer, SiHitAnalysis, SimTimeEstimate, SingleTrackValidation, SourceCompAlg, SpacePointAnalysis, sTGCHitAnalysis, SuperCellVsCaloCellTestAlg, TauolaPP, TBBeamQuality, TBBeamQualityMC, TBCheckBCIDs, TBDetDescrLoader, TBDMContainerSplitter, TBECLArRawChannelBuilder, TBEventStreamer, TBLArRawChannelBuilder, TBNoiseWrite, TBPartIDCherenkovMuTag, TBPhaseRec, TBPlaneTrackingAlgo, TBTrackToCaloAlg, TBTree_CaloClusterH6, TBXCryYTableRead, TBXMLWriter, TestHepMC, TgcCondDbTestAlg, TgcDigtJitterTestAlg, TgcDigtThresholdTestAlg, TGCHitAnalysis, TileAANtuple, TileBeamElemToCell, TileCellIDCToCell, TileCellIDCToNtuple, TileCellSelector, TileCellToNtuple, TileCellToTTL1, TileCellVerify, TileCosmicsTrigger, TileDigiNoiseCalibAlg, TileDigitsFromPulse, TileDigitsThresholdFilter, TileDigitsToNtuple, TileDigitsToTTL1, TileExpertDump, TileFCSmStepToTileHitVec, TileHitToCell, TileHitToNtuple, TileHitToRawChannel, TileHitVecToCnt, TileHitVecToNtuple, TileInfoDump, TileLaserCalibAlg, TileMuId2DBAlg, TileMuonFitter, TileMuonReceiverDecisionToNtuple, TileMuonReceiverReadCnt, TileMuRODToNtuple, TileMuToNtuple, TileOFC2DBAlg, TilePulseForTileMuonReceiver, TileRawChannelMaker, TileRawChannelToHit, TileRawChannelToNtuple, TileRawChannelToTTL1, TileRawChannelVerify, TileRawChNoiseCalibAlg, TileRawCorrelatedNoise, TileRDOAnalysis, TileTBAANtuple, TileTBDump, TileTBHitToBeamElem, TileTBHitToNtuple, TileTBStat, TileTopCalibAlg, TileTTL1ToNtuple, TrackRecordAnalysis, TrackTruthSelector, TrackTruthSimilaritySelector, TrigFPGATrackSimRawHitsWrapperAlg, TrigMuonEFInfoCnvTestAlg, Trk::AdaptiveMultiVertexFitterTestAlg, Trk::AlignAlg, Trk::AlignTrackCollSplitter, Trk::CETmaterial, Trk::CombinedExtrapolatorTest, Trk::EnergyLossExtrapolationValidation, Trk::EventDataModelMonitor, Trk::ExtrapolationValidation, Trk::ExtrapolatorTest, Trk::GaussianDensityTestAlg, Trk::MaterialManipulation, Trk::MaterialMapping, Trk::MaterialOnTrackValidation, Trk::MaterialValidation, Trk::RecMomentumQualityValidation, Trk::ReFitTrack, Trk::ReFitTrackWithTruth, Trk::RiddersAlgorithm, Trk::SelectEventNumber, Trk::SingleTrackDiffAlg, Trk::TrackValidationNtupleWriter, Trk::TrkDetDescrUnitTestBase, Trk::TrkExUnitTestBase, Trk::VertexSeedFinderTestAlg, TrkTrackFakeReader, TrkTrackFakeWriter, TRT_FastRDOAnalysis, TRT_RDOAnalysis, TRTHitAnalysis, TruthHitAnalysis, VP1Alg, VP1BatchOnLatestEvent, VP1EventProd, VP1TrkInitializer, WriteData, WriteHepMC, xAODMaker::AuxStoreWrapper, xAODMaker::BTaggingCnvAlg, xAODMaker::BunchConfCnvAlg, xAODMaker::CMMCPHitsCnvAlg, xAODMaker::CMMEtSumsCnvAlg, xAODMaker::CMMJetHitsCnvAlg, xAODMaker::CMMRoICnvAlg, xAODMaker::CombinedMuonFeatureCnvAlg, xAODMaker::CPMHitsCnvAlg, xAODMaker::CPMRoICnvAlg, xAODMaker::CPMTowerCnvAlg, xAODMaker::DynVarFixerAlg, xAODMaker::ElectronCnvAlg, xAODMaker::ElementLinkResetAlg, xAODMaker::EmTauRoICnvAlg, xAODMaker::EnergySumRoICnvAlg, xAODMaker::GSFTrackParticleMapCnvAlg, xAODMaker::IsoMuonFeatureCnvAlg, xAODMaker::JEMEtSumsCnvAlg, xAODMaker::JEMHitsCnvAlg, xAODMaker::JEMRoICnvAlg, xAODMaker::JetCnvAlg, xAODMaker::JetElementCnvAlg, xAODMaker::JetEtRoICnvAlg, xAODMaker::JetRoICnvAlg, xAODMaker::MissingETCnvAlg, xAODMaker::MuonFeatureCnvAlg, xAODMaker::MuonRoICnvAlg, xAODMaker::PhotonCnvAlg, xAODMaker::RODHeaderCnvAlg, xAODMaker::TauJetCnvAlg, xAODMaker::TauJetReaderAlg, xAODMaker::TrigBjetCnvAlg, xAODMaker::TrigCaloClusterCnvAlg, xAODMaker::TrigEFBphysCnvAlg, xAODMaker::TrigEMClusterCnvAlg, xAODMaker::TriggerTowerCnvAlg, xAODMaker::TrigL2BphysCnvAlg, xAODMaker::TrigMissingETCnvAlg, xAODMaker::TrigMuonEFInfoToMuonCnvAlg, xAODMaker::TrigSpacePointCountsCnvAlg, xAODMaker::TrigT2MbtsBitsCnvAlg, xAODMaker::TrigT2ZdcSignalsCnvAlg, xAODMaker::TrigTrackCountsCnvAlg, xAODMaker::TrigVertexCountsCnvAlg, xAODMaker::TrigxAODBphysReaderAlg, xAODMaker::VertexCnvAlg, xAODReader::BTaggingReader, xAODReader::EventDuplicateFinderAlg, xAODReader::EventInfoReaderAlg, xAODTruthParticleSlimmerElectron, xAODTruthParticleSlimmerGen, xAODTruthParticleSlimmerMET, xAODTruthParticleSlimmerMuon, xAODTruthParticleSlimmerPhoton, xAODTruthParticleSlimmerTau, and ZDCHitAnalysis.

Definition at line 85 of file AthAlgorithm.h.

85 {
86 return execute();
87 }
virtual StatusCode execute()
Execute method without EventContext (deprecated).

◆ execute() [2/2]

StatusCode IDPerfMonZmumu::execute ( void )
virtual

Execute method without EventContext (deprecated).

Override this method if the EventContext is not needed.

– START 4 lepton analysis

– END 4 lepton analysis

Reimplemented from AthAlgorithm.

Definition at line 934 of file IDPerfMonZmumu.cxx.

935{
936 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** START **");
937
938 SG::ReadHandle<xAOD::EventInfo> eventInfo (m_EventInfoKey, getContext());
939 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandleRec { m_beamSpotKey, getContext() };
940
941 if(eventInfo.isValid()) {
942 m_runNumber = eventInfo->runNumber();
943 m_evtNumber = eventInfo->eventNumber();
944 m_lumi_block = eventInfo->lumiBlock();
945 m_event_mu = eventInfo->actualInteractionsPerCrossing();
946 m_beamposX = beamSpotHandleRec->beamPos().x();
947 m_beamposY = beamSpotHandleRec->beamPos().y();
948
949 if (eventInfo->mcEventWeights().size()>0) {
950 m_event_weight = eventInfo->mcEventWeights()[0];
951 }
952 else {
953 m_event_weight = 1.; // default
954 }
955 ATH_MSG_DEBUG(" Execute() starting on --> Run: " << m_runNumber << " event: " << m_evtNumber << " Lumiblock: " << m_lumi_block << " weight:" << m_event_weight);
956 }
957 else {
958 ATH_MSG_DEBUG(" IDPerfMonZmumu::execute evtStore->retrieve (eventInfo) failed .. trying another strategy.. ");
959 SG::ReadHandle<xAOD::EventInfo> eventInfo2(m_EventInfoKey);
960 if (eventInfo2.isValid()) {
961 m_runNumber = eventInfo2->runNumber();
962 m_evtNumber = eventInfo2->eventNumber();
963 m_lumi_block = eventInfo2->lumiBlock();
964 m_event_mu = eventInfo2->actualInteractionsPerCrossing();
965 if (eventInfo->mcEventWeights().size()>0) {
966 m_event_weight = eventInfo->mcEventWeights()[0];
967 }
968 else {
969 m_event_weight = 1.; // default
970 }
971 ATH_MSG_DEBUG(" Execute() starting on --> Run: " << m_runNumber << " event: " << m_evtNumber << " Lumiblock: " << m_lumi_block << " weight:" << m_event_weight);
972 }
973 else{
974 ATH_MSG_ERROR("** IDPerfMonZmumu::execute ** Could not retrieve event info.");
975 }
976 }
977
979 if (m_doFourMuAnalysis) {
980 ATH_MSG_DEBUG(" ** IDPerfMonZmumu::execute ** calling FourLeptonAnalysis()...");
981 StatusCode fourLeptAnaStatus = this->RunFourLeptonAnalysis();
982 if (fourLeptAnaStatus.isSuccess()) ATH_MSG_INFO (" ** IDPerfMonZmumu::execute ** RunFourLeptonAnalysis() SUCCESS -> found a new event");
983 }
985
986
987 // check if the muon-pair passed the resonance selection cuts:
988 ATH_MSG_DEBUG(" ** IDPerfMonZmumu::execute ** calling dimuon analysis m_xZmm.Reco()...");
989 if( m_xZmm.Reco( m_lumi_block ) ){
990 ATH_MSG_INFO( " Run: " << m_runNumber
991 << " event: " << m_evtNumber
992 << " Lumiblock: " << m_lumi_block
993 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV "
994 << " weight: " << m_event_weight
995 << " ** SUCCESS **");
996 }
997 else {
998 ATH_MSG_DEBUG( " Run: " << m_runNumber
999 << " event: " << m_evtNumber
1000 << " Lumiblock: " << m_lumi_block
1001 << " Failed dimuon reconstruction. m_xZmm.Reco() returned FALSE ");
1002 return StatusCode::SUCCESS;
1003 }
1004
1005 //
1006 // If this point is reached -> there is a good mu+mu- pair that stisfies all selection cuts
1007 //
1008
1009 if (m_UseTrigger) {
1010 StatusCode isTriggerPassed = CheckTriggerStatusAndPrescale ();
1011 if (isTriggerPassed == StatusCode::SUCCESS) {
1012 ATH_MSG_DEBUG("Trigger passed -> accept event");
1013 }
1014 else{
1015 ATH_MSG_DEBUG("Trigger Failed -> reject event --> leave event");
1016 return StatusCode::SUCCESS;
1017 }
1018 }
1019
1020 // std::cout << " ** IDPerfMonZmumu ** extracting muon_pos and muon_neg... " << std::endl;
1021 const xAOD::Muon* muon_pos = m_xZmm.getCombMuon(m_xZmm.getPosMuon(ZmumuEvent::CB));
1022 const xAOD::Muon* muon_neg = m_xZmm.getCombMuon(m_xZmm.getNegMuon(ZmumuEvent::CB));
1023
1024 const xAOD::TrackParticle* ppos_comb = nullptr; const xAOD::Vertex* ppos_comb_v = nullptr;
1025 const xAOD::TrackParticle* pneg_comb = nullptr; const xAOD::Vertex* pneg_comb_v = nullptr;
1026
1027 //To protect against failures of the estimation
1028 StatusCode success_pos = StatusCode::FAILURE;
1029 StatusCode success_neg = StatusCode::FAILURE;
1030
1031 if (muon_pos && muon_neg) { // if both combined muons exist and were sucessfully retrieved
1032 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** combined muons exist ** retrieving their m_trackparticleName: " << m_trackParticleName.c_str());
1033 using enum xAOD::Muon::TrackParticleType;
1034 if (m_trackParticleName.find("InnerDetectorTrackParticles") != std::string::npos) {
1035 ATH_MSG_INFO("** IDPerfMonZmumu::execute ** Retrieving InnerDetectorTrackParticles of the accepted muons");
1036 ppos_comb = muon_pos->trackParticle(InnerDetectorTrackParticle);
1037 pneg_comb = muon_neg->trackParticle(InnerDetectorTrackParticle);
1038
1039 if (!ppos_comb || !pneg_comb) {
1040 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** InnerDetectorTrackParticles are requested but they are not present. Exiting event.");
1041 return StatusCode::SUCCESS;
1042 }
1043 } // InnerDetectorTrackParticles
1044 if (m_trackParticleName.find("CombinedTrackParticle") != std::string::npos) {
1045 //
1046 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Retrieving CombinedTrackParticles of the accepted muons");
1047 ppos_comb = muon_pos->trackParticle(CombinedTrackParticle);
1048 pneg_comb = muon_neg->trackParticle(CombinedTrackParticle);
1049
1050 if (!ppos_comb || !pneg_comb){
1051 ATH_MSG_WARNING( "** IDPerfMonZmumu::execute ** CombinedTrackParticles are requested but they are not present. Exiting event.");
1052 return StatusCode::SUCCESS;
1053 }
1054 } // combined tracks
1055
1056
1057 // double check
1058 if (ppos_comb && pneg_comb) {
1059 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** successfull retrieval of muons as " << m_trackParticleName << ". ppos_comb & pneg_comb both exist");
1060 }
1061 else {
1062 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** problems retrieving muons as " << m_trackParticleName <<". ppos_comb or pneg_comb are not available");
1063 }
1064
1065
1066 // vertex
1067 const EventContext& ctx = Gaudi::Hive::currentContext();
1068 SG::ReadHandle<xAOD::VertexContainer> vertices { m_vertexKey, ctx };
1069 for (const auto V : *vertices) {
1070 if (V->vertexType() == xAOD::VxType::VertexType::PriVtx) {
1071 // primaryVertex =V;
1072 ppos_comb_v = V;
1073 pneg_comb_v = V;
1074 break;
1075 }
1076 } // vertex
1077
1078 // before continuing check both particles have vertex
1079 if (!ppos_comb_v || !pneg_comb_v){
1080 ATH_MSG_WARNING( "Some or all of the requested particles have no vertex. Exiting event");
1081 return StatusCode::SUCCESS;
1082 }
1083 } // if (muon_pos && muon_neg)
1084 else { // this is the else of --> if (muon_pos && muon_neg)
1085 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Could not find CombinedMuon pos/neg in event"
1086 << " Run: " << m_runNumber
1087 << " event: " << m_evtNumber
1088 << " Lumiblock: " << m_lumi_block );
1089 return StatusCode::SUCCESS;
1090 }
1091
1092 //
1093 // If this point is reached -> there is a good mu+mu- pair and the muons have been associated to a vertex
1094 // So, ntuple can be filled
1095 //
1096 if ( m_xZmm.AcceptEvent() ) {
1097 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to fill ntuples for Run: " << m_runNumber
1098 << " event: " << m_evtNumber
1099 << " Lumiblock: " << m_lumi_block
1100 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ** some preliminaries are due though...");
1101
1103 // The track selection is applied to the InnerDetectorTrackParticle of the muons
1104 if ( !m_selTool->accept(muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) ) {
1105 ATH_MSG_DEBUG("Exiting because the ID segment of muon_pos do not pass the TrackSelection");
1106 return StatusCode::SUCCESS;
1107 }
1108 if ( !m_selTool->accept(muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) ) {
1109 ATH_MSG_DEBUG("Exiting because the ID segment of muon_neg do not pass the TrackSelection");
1110 return StatusCode::SUCCESS;
1111 }
1112 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Good news ** pos and neg muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle) pass the trackSelection :)");
1113 }
1114 else {
1115 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track selection is not in use ");
1116 }
1117
1118 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** >> before fill rec with default: " << m_trackParticleName << " tracks << ");
1119
1120 if (m_storeZmumuNtuple) {
1121 // reset vectors
1123
1124 // Fill Inner Detector Tree
1125 ATH_MSG_DEBUG("-- >> going to fill ID muons params << --");
1126 success_pos = FillRecParametersTP (muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1127 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1128 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->charge(),
1129 ppos_comb_v);
1130 success_neg = FillRecParametersTP (muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1131 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1132 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->charge(),
1133 pneg_comb_v);
1134
1135 if (success_pos && success_neg) {
1136 // before filling the ntuple, extract the hits information. This is filled once and it is used for all track collections
1137 this->ExtractIDHitsInformation(muon_pos, muon_neg);
1138
1139 // Fill ntuple
1140 if (m_IDTree != nullptr) {
1141 ATH_MSG_DEBUG("-- Filling m_IDTree ntuple " << m_IDTree->GetName() << " entry " << m_IDTree->GetEntries()
1142 << " for run: " << m_runNumber
1143 << " event: " << m_evtNumber
1144 << " Lumiblock: " << m_lumi_block
1145 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1146 }
1147 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1148 << ", " << m_positive_py
1149 << ", " << m_positive_pz
1150 << " pt: " << muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->pt()
1151 << " d0: " << m_positive_d0
1152 << " z0: " << m_positive_z0
1153 << " d0unc: " << m_positive_d0_err
1154 << " sigma_pt: " << m_positive_sigma_pt);
1155 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1156 << ", " << m_negative_py
1157 << ", " << m_negative_pz
1158 << " pt: " << muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->pt()
1159 << " d0: " << m_negative_d0
1160 << " z0: " << m_negative_z0
1161 << " d0unc: " << m_negative_d0_err
1162 << " sigma_pt: " << m_negative_sigma_pt);
1163 // ntuple variables have been filled in FillRecParametersTP
1164 if (m_IDTree) m_IDTree->Fill();
1165
1166 // Fill vectors for common ntuple
1167 m_IDTrack_pt.push_back(m_positive_pt);
1168 m_IDTrack_pt.push_back(m_negative_pt);
1169 m_IDTrack_eta.push_back(m_positive_eta);
1170 m_IDTrack_eta.push_back(m_negative_eta);
1171 m_IDTrack_phi.push_back(m_positive_phi);
1172 m_IDTrack_phi.push_back(m_negative_phi);
1173 m_IDTrack_d0.push_back(m_positive_d0);
1174 m_IDTrack_d0.push_back(m_negative_d0);
1175 m_IDTrack_z0.push_back(m_positive_z0);
1176 m_IDTrack_z0.push_back(m_negative_z0);
1179
1188 }
1189 else {
1190 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** not filling IDTracks in combTree due to problems with muon_xxx->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)");
1191 }
1192 // End of fill ID Tree
1193
1194 //
1195 // combined muons ntuple
1196 if ((!m_skipMS && m_combTree) || m_commonTree ) { // if skipMS -> no combined muons
1197 success_pos = FillRecParametersTP(muon_pos->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle),
1198 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1199 ppos_comb->charge(),
1200 ppos_comb_v);
1201 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** success_pos TP pt: " << m_positive_pt << " GeV");
1202 success_neg = FillRecParametersTP(muon_neg->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle),
1203 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1204 pneg_comb->charge(),
1205 pneg_comb_v);
1206 ATH_MSG_DEBUG("** IDPerfMonZmumu::excute ** success_neg TP pt: " << m_negative_pt << " GeV");
1207
1208 if (success_pos && success_neg) {
1209 if (m_combTree != nullptr) {
1210 ATH_MSG_DEBUG("-- Filling m_combTree ntuple " << m_combTree->GetName() << " entry " << m_combTree->GetEntries()
1211 << " run: " << m_runNumber
1212 << " event: " << m_evtNumber
1213 << " Lumiblock: " << m_lumi_block
1214 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1215 }
1216 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1217 << ", " << m_positive_py
1218 << ", " << m_positive_pz
1219 << " pt: " << m_positive_pt
1220 << " d0: " << m_positive_d0
1221 << " z0: " << m_positive_z0
1222 << " d0unc: " << m_positive_d0_err);
1223 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1224 << ", " << m_negative_py
1225 << ", " << m_negative_pz
1226 << " pt: " << m_negative_pt
1227 << " d0: " << m_negative_d0
1228 << " z0: " << m_negative_z0
1229 << " d0unc: " << m_negative_d0_err);
1230 // ntuple variables have been filled in FillRecParameters
1231 if (m_combTree) m_combTree->Fill();
1232 }
1233 // Fill vectors for common ntuple
1234 m_CBTrack_pt.push_back(m_positive_pt);
1235 m_CBTrack_pt.push_back(m_negative_pt);
1236 m_CBTrack_eta.push_back(m_positive_eta);
1237 m_CBTrack_eta.push_back(m_negative_eta);
1238 m_CBTrack_phi.push_back(m_positive_phi);
1239 m_CBTrack_phi.push_back(m_negative_phi);
1240 m_CBTrack_d0.push_back(m_positive_d0);
1241 m_CBTrack_d0.push_back(m_negative_d0);
1242 m_CBTrack_z0.push_back(m_positive_z0);
1243 m_CBTrack_z0.push_back(m_negative_z0);
1246
1255 } // if skipMS -> no combined muons
1256
1257
1258
1259 // MS ntuple
1260 if (!m_skipMS && m_MSTree) { // if skipMS -> no MS tracks
1261 ATH_MSG_DEBUG("-- >> going to fill MS muons params << --");
1262 success_pos = FillRecParametersTP(m_xZmm.getMSTrack(m_xZmm.getPosMuon(ZmumuEvent::CB)),
1263 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1264 ppos_comb->charge(),
1265 ppos_comb_v);
1266
1267 success_neg = FillRecParametersTP(m_xZmm.getMSTrack(m_xZmm.getNegMuon(ZmumuEvent::CB)),
1268 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1269 pneg_comb->charge(),
1270 pneg_comb_v);
1271 if (success_pos && success_neg) {
1272 if (m_MSTree != nullptr) ATH_MSG_DEBUG("-- Filling m_MSTree " << m_MSTree->GetName() << " entry " << m_MSTree->GetEntries()
1273 << " run: " << m_runNumber
1274 << " event: " << m_evtNumber
1275 << " Lumiblock: " << m_lumi_block
1276 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1277 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1278 << ", " << m_positive_py
1279 << " pt: " << m_xZmm.getMSTrack(m_xZmm.getPosMuon(ZmumuEvent::CB))->pt()
1280 << " d0: " << m_positive_d0
1281 << " z0: " << m_positive_z0
1282 << " d0unc: " << m_positive_d0_err);
1283 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1284 << ", " << m_negative_py
1285 << " pt: " << m_xZmm.getMSTrack(m_xZmm.getNegMuon(ZmumuEvent::CB))->pt()
1286 << " d0: " << m_negative_d0
1287 << " z0: " << m_negative_z0
1288 << " d0unc: " << m_negative_d0_err);
1289 // ntuple variables have been filled in FillRecParametersTP
1290 if (m_MSTree) m_MSTree->Fill();
1291 }
1292 else {
1293 ATH_MSG_INFO("FAILED filling m_MSTree "
1294 << " for run: " << m_runNumber
1295 << " event: " << m_evtNumber
1296 << " Lumiblock: " << m_lumi_block);
1297 }
1298 // MS ntuple
1299 }
1300 } // if store Zmumu ntuple
1301
1302 // changed refitting to combined particles since run II DESDM_ZMUMU did not store InDetTrackParticles
1303 if( m_doRefit ) {
1304 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to build TrackCollections: muonTrks, muonTrksRefit1 and muonTrksRefit2");
1306 TrackCollection* muonTrksRefit1 = new TrackCollection(SG::OWN_ELEMENTS);
1307 TrackCollection* muonTrksRefit2 = new TrackCollection(SG::OWN_ELEMENTS);
1308
1309 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to refit and store the track parameters ");
1310 Trk::Track* defaultMuonTrk1{};
1311 Trk::Track* defaultMuonTrk2{};
1312 Trk::Track* refit1MuonTrk1{};
1313 Trk::Track* refit2MuonTrk1{};
1314 Trk::Track* refit1MuonTrk2{};
1315 Trk::Track* refit2MuonTrk2{};
1316
1317 StatusCode fitStatus;
1318 //save default and refit track parameters
1319 const EventContext& ctx = Gaudi::Hive::currentContext();
1320 if( ppos_comb->track() ) {
1321 defaultMuonTrk1 = new Trk::Track(*ppos_comb->track());
1322
1323 IegammaTrkRefitterTool::Cache fitResult{};
1324 fitStatus = m_TrackRefitter1->refitTrack( ctx, ppos_comb->track(), fitResult );
1325 if (fitStatus.isFailure()) {
1326 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed for ppos_comb->track(). Skipping Event");
1327 return StatusCode::SUCCESS;
1328 } else {
1329 refit1MuonTrk1 = fitResult.refittedTrack.release();
1330 muonTrksRefit1->push_back(refit1MuonTrk1);
1331 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of ppos_comb->track()."
1332 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1333 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1334 }
1335
1336
1337 fitStatus = m_TrackRefitter2->refitTrack( ctx, ppos_comb->track(), fitResult );
1338 if (fitStatus.isFailure()) {
1339 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Failed for ppos_comb->track(). Skipping Event");
1340 return StatusCode::SUCCESS;
1341 } else {
1342 refit2MuonTrk1 = fitResult.refittedTrack.release();
1343 muonTrksRefit2->push_back(refit2MuonTrk1);
1344 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of ppos_comb->track()."
1345 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1346 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1347 }
1348 }
1349
1350 if( pneg_comb->track() ) {
1351 defaultMuonTrk2 = new Trk::Track(*pneg_comb->track());
1352
1353 IegammaTrkRefitterTool::Cache fitResult {};
1354 fitStatus = m_TrackRefitter1->refitTrack( ctx, pneg_comb->track(), fitResult);
1355 if (fitStatus.isFailure()) {
1356 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed. Skipping Event");
1357 return StatusCode::SUCCESS;
1358 } else {
1359 refit1MuonTrk2 = fitResult.refittedTrack.release();
1360 muonTrksRefit1->push_back(refit1MuonTrk2);
1361 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of pneg_comb->track()."
1362 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1363 << " track refit pt: " << refit1MuonTrk2->perigeeParameters()->pT() );
1364 }
1365
1366
1367 fitStatus = m_TrackRefitter2->refitTrack( ctx, pneg_comb->track(), fitResult );
1368 if (fitStatus.isFailure()) {
1369 ATH_MSG_DEBUG("Track Refit2 Failed. Skipping Event");
1370 return StatusCode::SUCCESS;
1371 } else {
1372 refit2MuonTrk2 = fitResult.refittedTrack.release();
1373 muonTrksRefit2->push_back(refit2MuonTrk2);
1374 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of pneg_comb->track()."
1375 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1376 << " track refit pt: " << refit2MuonTrk2->perigeeParameters()->pT() );
1377 }
1378
1379 if (muonTrksRefit1->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit1: " << muonTrksRefit1->size());
1380 if (muonTrksRefit2->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit2: " << muonTrksRefit2->size());
1381 }
1382
1383 //save tracks to storegrate, they can be used by InDetAlignmentMonitoring
1384 muonTrks->push_back(defaultMuonTrk1);
1385 muonTrks->push_back(defaultMuonTrk2);
1386
1387 StatusCode sc = evtStore()->record(muonTrks, m_outputTracksName);
1388 if (sc.isSuccess()) {
1389 ATH_MSG_DEBUG ("Stored "<< muonTrks->size() << " " << m_outputTracksName <<" into StoreGate");
1390 }
1391 else{
1392 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName);
1393 }
1394
1395 if (muonTrksRefit1->size() > 1) { // keep track collection if at least 2 muons were found
1396 sc = evtStore()->record(muonTrksRefit1, m_outputTracksName + "Refit1");
1397 if (sc.isSuccess()) {
1398 ATH_MSG_DEBUG ("Stored "<< muonTrksRefit1->size() << " " << m_outputTracksName + "Refit1" << " into StoreGate");
1399 } else {
1400 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit1");
1401 }
1402 }
1403
1404 if (muonTrksRefit2->size() > 1) { // keep track collection if at least 2 muons were found
1405 sc = evtStore()->record(muonTrksRefit2, m_outputTracksName + "Refit2");
1406 if (sc.isSuccess()) {
1407 ATH_MSG_DEBUG ("Stored "<< muonTrksRefit2->size() << " " << m_outputTracksName + "Refit2" << " into StoreGate");
1408 } else {
1409 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit2");
1410 }
1411 }
1412
1413
1414 //fill refit1 ID parameters
1415 if (muonTrksRefit1->size()<2) {
1416 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit1 muon tracks are missing!");
1417 }
1418 else {
1419 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** going to fill refit1tree ");
1420 success_pos = FillRecParametersSimple (refit1MuonTrk1, ppos_comb->charge(), ppos_comb_v);
1421 success_neg = FillRecParametersSimple (refit1MuonTrk2, pneg_comb->charge(), pneg_comb_v);
1422
1423 if (m_storeZmumuNtuple) {
1424 if (success_pos && success_neg) {
1425 if (m_refit1Tree) {
1426 ATH_MSG_DEBUG("-- Filling ntuple " << m_refit1Tree->GetName() << " entry " << m_refit1Tree->GetEntries()
1427 << " for run: " << m_runNumber
1428 << " event: " << m_evtNumber
1429 << " Lumiblock: " << m_lumi_block
1430 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1431 }
1432 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1433 << m_negative_py << ", "
1434 << m_negative_pz << ") "
1435 << " d0: " << m_negative_d0
1436 << " z0: " << m_negative_z0
1437 << " sigma_pt: " << m_positive_sigma_pt);
1438 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1439 << m_positive_py << ","
1440 << m_positive_pz << ") "
1441 << " d0: " << m_positive_d0
1442 << " z0: " << m_positive_z0
1443 << " sigma_pt: " << m_negative_sigma_pt);
1444 if (m_refit1Tree) {
1445 m_refit1Tree->Fill();
1446 }
1447 // Fill vectors for common ntuple
1448 m_Refit1_pt.push_back(m_positive_pt);
1449 m_Refit1_pt.push_back(m_negative_pt);
1450 m_Refit1_eta.push_back(m_positive_eta);
1451 m_Refit1_eta.push_back(m_negative_eta);
1452 m_Refit1_phi.push_back(m_positive_phi);
1453 m_Refit1_phi.push_back(m_negative_phi);
1454 m_Refit1_d0.push_back(m_positive_d0);
1455 m_Refit1_d0.push_back(m_negative_d0);
1456 m_Refit1_z0.push_back(m_positive_z0);
1457 m_Refit1_z0.push_back(m_negative_z0);
1458
1465 } // if (success_pos && success_neg)
1466 } // if (m_storeZmumuNtuple)
1467 } // enough refit1 tracks
1468
1469 //fill refit2 ID parameters
1470 if (muonTrksRefit2->size()<2) {
1471 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit2 muon tracks are missing!");
1472 }
1473 else{
1474 ATH_MSG_DEBUG("-- >> going to fill refit2params << --");
1475 success_pos = FillRecParametersSimple (refit2MuonTrk1, ppos_comb->charge(), ppos_comb_v);
1476 success_neg = FillRecParametersSimple (refit2MuonTrk2, pneg_comb->charge(), pneg_comb_v);
1477
1478 if (m_storeZmumuNtuple) {
1479 if (success_pos && success_neg) {
1480 if (m_refit2Tree) {
1481 ATH_MSG_DEBUG("-- Filling " << m_refit2Tree->GetName() << " entry " << m_refit2Tree->GetEntries()
1482 << " run: " << m_runNumber
1483 << " event: " << m_evtNumber
1484 << " Lumiblock: " << m_lumi_block
1485 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1486 }
1487 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1488 << m_negative_py << ", "
1489 << m_negative_pz << ") "
1490 << " d0: " << m_negative_d0
1491 << " z0: " << m_negative_z0
1492 << " sigma_pt: " << m_positive_sigma_pt);
1493 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1494 << m_positive_py << ","
1495 << m_positive_pz << ") "
1496 << " d0: " << m_positive_d0
1497 << " z0: " << m_positive_z0
1498 << " sigma_pt: " << m_negative_sigma_pt);
1499 if (m_refit2Tree) {
1500 m_refit2Tree->Fill();
1501 }
1502 // Fill vectors for common ntuple
1503 m_Refit2_pt.push_back(m_positive_pt);
1504 m_Refit2_pt.push_back(m_negative_pt);
1505 m_Refit2_eta.push_back(m_positive_eta);
1506 m_Refit2_eta.push_back(m_negative_eta);
1507 m_Refit2_phi.push_back(m_positive_phi);
1508 m_Refit2_phi.push_back(m_negative_phi);
1509 m_Refit2_d0.push_back(m_positive_d0);
1510 m_Refit2_d0.push_back(m_negative_d0);
1511 m_Refit2_z0.push_back(m_positive_z0);
1512 m_Refit2_z0.push_back(m_negative_z0);
1513
1520 } // if (success_pos && success_neg)
1521 } // if (m_storeZmumuNtuple)
1522 } // enough refit2 tracks
1523
1524 ATH_MSG_DEBUG("Execute() All NTUPLES filled Run: " << m_runNumber << " event: " << m_evtNumber << " mass: " << m_xZmm.GetInvMass() << " GeV ");
1525 }
1526 } // closing -> if ( m_xZmm.AcceptEvent() )
1527
1528 if ( !m_xZmm.AcceptEvent() ) {
1529 // no good muon pair found
1530 //failed cuts, continue to next event
1531 ATH_MSG_DEBUG ("** IDPerfMonZmumu::execute ** No good muon pair found. Leaving Execute(). Run: " << m_runNumber << " event: " << m_evtNumber);
1532 return StatusCode::SUCCESS;
1533 }
1534
1535 //
1536 // fill truth event iformation even when the reco event has not passed
1537 //
1538 if (m_isMC) {
1539 bool truthStatusIsGood = true;
1540 if (FillTruthParameters(ppos_comb).isFailure()){
1541 truthStatusIsGood = false;
1542 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1543 }
1544 if (FillTruthParameters(pneg_comb).isFailure()){
1545 truthStatusIsGood = false;
1546 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1547 }
1548 if (truthStatusIsGood) {
1549 ATH_MSG_DEBUG ("-- Filling " << m_truthTree->GetName() << " entry " << m_truthTree->GetEntries()
1550 << " run: " << m_runNumber
1551 << " event: " << m_evtNumber
1552 << " Lumiblock: " << m_lumi_block
1553 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1554 ATH_MSG_DEBUG ("Negative p: (" << m_negative_px << ", "
1555 << m_negative_py << ", "
1556 << m_negative_pz << ") "
1557 << " d0: " << m_negative_d0
1558 << " z0: " << m_negative_z0
1559 << " parent: " << m_negative_parent);
1560 ATH_MSG_DEBUG ("Positive p: (" << m_positive_px << ","
1561 << m_positive_py << ","
1562 << m_positive_pz << ") "
1563 << " d0: " << m_positive_d0
1564 << " z0: " << m_positive_z0
1565 << " parent: " << m_positive_parent);
1566
1568 m_Truth_pt.push_back(m_positive_pt);
1569 m_Truth_pt.push_back(m_negative_pt);
1570 m_Truth_eta.push_back(m_positive_eta);
1571 m_Truth_eta.push_back(m_negative_eta);
1572 m_Truth_phi.push_back(m_positive_phi);
1573 m_Truth_phi.push_back(m_negative_phi);
1574 m_Truth_d0.push_back(m_positive_d0);
1575 m_Truth_d0.push_back(m_negative_d0);
1576 m_Truth_z0.push_back(m_positive_z0);
1577 m_Truth_z0.push_back(m_negative_z0);
1582
1583 } // truth info properly filled
1584 else {
1585 ATH_MSG_DEBUG("FAILED filling m_truthTree "
1586 << " for run: " << m_runNumber
1587 << " event: " << m_evtNumber
1588 << " Lumiblock: " << m_lumi_block);
1589 }
1590 } // if (m_isMC)
1591
1592 // fill common tree
1593 if (m_commonTree ) {
1594 // fill ntuple if some of the collections is filled
1595 bool dofill = false;
1596 if (m_IDTrack_pt.size() >= 2) dofill = true;
1597 if (m_CBTrack_pt.size() >= 2) dofill = true;
1598 if (m_Refit1_pt.size() >= 2) dofill = true;
1599 if (m_Refit2_pt.size() >= 2) dofill = true;
1600 if (m_Truth_pt.size() >= 2) dofill = true;
1601
1602 if (dofill) {
1603 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " entry " << m_commonTree->GetEntries()
1604 << " run: " << m_runNumber
1605 << " event: " << m_evtNumber
1606 << " Lumiblock: " << m_lumi_block
1607 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1608 m_commonTree->Fill();
1609 }
1610 else {
1611 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " FAILED for "
1612 << " run: " << m_runNumber
1613 << " event: " << m_evtNumber
1614 << " Lumiblock: " << m_lumi_block);
1615 }
1616 }
1617
1618 ATH_MSG_DEBUG(" --IDPerfMonZmumu::execute-- event completed -- Run: " << m_runNumber << " event: " << m_evtNumber);
1619
1620 /* ***********************************************************
1621 * after all, let's make the collection for ALL MUON ID Tracks
1622 * ***********************************************************/
1623
1624 ATH_MSG_DEBUG("IDTracks monitoring..");
1625 int nTracks = 0;
1627
1628 // DIFFERENT RETRIEVAL
1630 if(muons){
1631 for (auto muon : *muons) {
1632 const xAOD::TrackParticle* tp = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
1633 if(!tp) {
1634 ATH_MSG_DEBUG(" - tpb = "<< tp << " -> is null? " << (!tp));
1635 continue;
1636 }
1637 const Trk::Track* t = tp->track();
1638 if ( !t ) {
1639 ATH_MSG_DEBUG(" - tpb does not have track ");
1640 continue;
1641 }
1642 const Trk::Perigee* tPerigee = t->perigeeParameters() ;
1643 if ( !tPerigee ) {
1644 ATH_MSG_DEBUG(" - t does not have perigree ");
1645 continue;
1646 }
1647 IDTracks->push_back ( new Trk::Track (*t));
1648 nTracks++;
1649 }
1650 }
1651 else ATH_MSG_WARNING ("Could not retrieve Muon container");
1652
1653 ATH_MSG_DEBUG(" --> nTracks = " << nTracks);
1654
1655 StatusCode scid = evtStore()->record(IDTracks, "IDTracks");
1656 if (scid.isSuccess()) {
1657 ATH_MSG_DEBUG ("Stored "<< IDTracks->size() << " IDTracks into StoreGate");
1658 }
1659 else{
1660 ATH_MSG_WARNING ("Failed storing IDTracks");
1661 }
1662
1663 /*********************************************************
1664 * ..finish
1665 ********************************************************/
1666
1667 return StatusCode::SUCCESS;
1668}
#define ATH_MSG_WARNING(x)
static Double_t sc
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
const EventContext & getContext() const
Deprecated methods (use the ones with EventContext).
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
StatusCode CheckTriggerStatusAndPrescale()
StatusCode FillTruthParameters(const xAOD::TrackParticle *track)
StatusCode RunFourLeptonAnalysis()
double m_positive_sigma_qoverp
double m_negative_sigma_qoverp
void ResetCommonNtupleVectors()
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
used for truth parameters
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
StatusCode FillRecParametersSimple(const Trk::Track *track, float charge, const xAOD::Vertex *vertex)
void ExtractIDHitsInformation(const xAOD::Muon *muon_pos, const xAOD::Muon *muon_neg)
StatusCode FillRecParametersTP(const xAOD::TrackParticle *trackp, const xAOD::TrackParticle *trackp_for_unbias, double charge, const xAOD::Vertex *vertex=nullptr)
ZmumuEvent m_xZmm
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
static const T * getContainer(CONTAINERS eContainer)
double pT() const
Access method for transverse momentum.
const Perigee * perigeeParameters() const
return Perigee.
const TrackParticle * trackParticle(TrackParticleType type) const
Returns a pointer (which can be NULL) to the TrackParticle used in identification of this muon.
Definition Muon_v1.cxx:482
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
float charge() const
Returns the charge.
::StatusCode StatusCode
StatusCode definition for legacy code.
@ OWN_ELEMENTS
this data object owns its elements
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
@ PriVtx
Primary vertex.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
std::unique_ptr< Trk::Track > refittedTrack
Pointer to the refitted track.

◆ ExtractIDHitsInformation()

void IDPerfMonZmumu::ExtractIDHitsInformation ( const xAOD::Muon * muon_pos,
const xAOD::Muon * muon_neg )
private

Definition at line 2794 of file IDPerfMonZmumu.cxx.

2795{
2796 // hits info
2797 // positive Muon
2798 const xAOD::TrackParticle* IDTrkMuPos = muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
2799 const xAOD::TrackParticle* IDTrkMuNeg = muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
2800
2801 int nBLhits, nhitsPIX, nhitsSCT, nhitsTRT, nContribPixLayers;
2802 int nPIXholes, nSCTholes;
2803 if (IDTrkMuPos && IDTrkMuNeg) { // make sure both summaries are available
2804 uint8_t dummy(-1);
2805 nBLhits = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfBLayerHits ) ? dummy :-1;
2806 nhitsPIX = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfPixelHits ) ? dummy :-1;
2807 nhitsSCT = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfSCTHits ) ? dummy :-1;
2808 nhitsTRT = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfTRTHits ) ? dummy :-1;
2809 nContribPixLayers = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfContribPixelLayers )? dummy :-1;
2810
2811 nPIXholes = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfPixelHoles )? dummy :-1;
2812 nSCTholes = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfSCTHoles )? dummy :-1;
2813
2814
2815 m_nBLhits.push_back(nBLhits);
2816 m_nPIXhits.push_back(nhitsPIX);
2817 m_nSCThits.push_back(nhitsSCT);
2818 m_nTRThits.push_back(nhitsTRT);
2819
2820 ATH_MSG_DEBUG (" -- mu_pos -- HITS --"
2821 << " nBLhits: " << nBLhits
2822 << " nhitsPIX: " << nhitsPIX
2823 << " nPIXLayers: " << nContribPixLayers
2824 << " nhitsSCT: " << nhitsSCT
2825 << " Silicon holes: " << nPIXholes + nSCTholes
2826 << " nhitsTRT: " << nhitsTRT);
2827
2828 nBLhits = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfBLayerHits ) ? dummy :-1;
2829 nhitsPIX = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfPixelHits ) ? dummy :-1;
2830 nhitsSCT = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfSCTHits ) ? dummy :-1;
2831 nhitsTRT = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfTRTHits ) ? dummy :-1;
2832 nContribPixLayers = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfContribPixelLayers )? dummy :-1;
2833 nPIXholes = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfPixelHoles )? dummy :-1;
2834 nSCTholes = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfSCTHoles )? dummy :-1;
2835
2836 m_nBLhits.push_back(nBLhits);
2837 m_nPIXhits.push_back(nhitsPIX);
2838 m_nSCThits.push_back(nhitsSCT);
2839 m_nTRThits.push_back(nhitsTRT);
2840
2841 ATH_MSG_DEBUG (" -- mu_neg -- HITS --"
2842 << " nBLhits: " << nBLhits
2843 << " nhitsPIX: " << nhitsPIX
2844 << " nPIXLayers: " << nContribPixLayers
2845 << " nhitsSCT: " << nhitsSCT
2846 << " Silicon holes: " << nPIXholes + nSCTholes
2847 << " nhitsTRT: " << nhitsTRT);
2848
2849 }
2850 return;
2851}
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfBLayerHits
these are the hits in the first pixel layer, i.e.
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::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

◆ FillRecParameters()

StatusCode IDPerfMonZmumu::FillRecParameters ( const Trk::Track * track,
const xAOD::TrackParticle * trackp_for_unbias,
double charge,
const xAOD::Vertex * vertex,
const EventContext & ctx )
private

Definition at line 1813 of file IDPerfMonZmumu.cxx.

1814{
1815 if (!track){
1816 ATH_MSG_DEBUG("* FillRecParameters * Empty Track: track. Skipping.");
1817 return StatusCode::FAILURE;
1818 }
1819
1820 if (m_doRemoval && !trackp_for_unbias && !m_skipMS) {
1821 ATH_MSG_DEBUG("* FillRecParameters * Empty Track: trackp_for_unbias. Skipping.");
1822 return StatusCode::FAILURE;
1823 }
1824
1825 const Trk::Perigee* trkPerigee = track->perigeeParameters();
1826 const Trk::Perigee* trk_for_unbiasPerigee = nullptr;
1827 if (!m_skipMS) trk_for_unbiasPerigee = &(trackp_for_unbias->perigeeParameters());
1828
1829 double px = 0;
1830 double py = 0;
1831 double pt = 0;
1832 double pz = 0;
1833 double phi= 0;
1834 double eta= 0;
1835 double d0 = 0;
1836 double z0 = 0;
1837
1838 double d0_err = 999.;
1839 double z0_err = 999.;
1840
1841 double PVd0 = 0;
1842 double PVz0 = 0;
1843 double PVd0res = 0;
1844 double PVz0res = 0;
1845
1846
1847 if (trkPerigee != nullptr){
1848 double qOverP = trkPerigee->parameters()[Trk::qOverP];
1849 if (qOverP) {
1850 px = trkPerigee->momentum().x();
1851 py = trkPerigee->momentum().y();
1852 pt = std::abs(trkPerigee->pT());
1853 pz = trkPerigee->momentum().z();
1854 phi= trkPerigee->parameters()[Trk::phi];
1855 eta= trkPerigee->eta();
1856 d0 = trkPerigee->parameters()[Trk::d0];
1857 z0 = trkPerigee->parameters()[Trk::z0];
1858 d0_err = Amg::error(*trkPerigee->covariance(),Trk::d0);
1859 z0_err = Amg::error(*trkPerigee->covariance(),Trk::z0);
1860 }
1861 }
1862
1863 // access beam spot and extrapolate track till there
1864 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandleRec { m_beamSpotKey, ctx };
1865 auto beamline = m_trackToVertexTool->GetBeamLine(beamSpotHandleRec.cptr());
1866
1867 auto trackBLtemp = m_trackToVertexTool->trackAtBeamline(ctx, *track , beamline.get() );
1868 const Trk::AtaStraightLine* atBL = dynamic_cast<const Trk::AtaStraightLine*>(trackBLtemp.get());
1869
1870 if (atBL){
1871 double qOverP = atBL->parameters()[Trk::qOverP];
1872 if(qOverP){
1873 px = atBL->momentum().x();
1874 py = atBL->momentum().y();
1875 pt = std::abs(atBL->pT());
1876 pz = atBL->momentum().z();
1877 eta= trkPerigee->eta();
1878 phi= trkPerigee->parameters()[Trk::phi];
1879 d0 = atBL->parameters()[Trk::d0];
1880 z0 = atBL->parameters()[Trk::z0];
1881 }
1882 delete atBL;
1883 }
1884 else {
1885 ATH_MSG_WARNING("FillRecParameters::Failed extrapolation to the BeamLine");
1886 }
1887
1888
1889 // Amg::Vector3D position = beamSpotHandleRec->beamPos();
1890 TLorentzVector vtrack = TLorentzVector (trkPerigee->momentum().x(),
1891 trkPerigee->momentum().y(),
1892 trkPerigee->momentum().z(),
1893 trkPerigee->momentum().mag());
1894
1895 if(m_doIP && vertex){ //I assume that the vertex is the same of the original track
1896 std::unique_ptr<Trk::ImpactParametersAndSigma> iPandSigma(nullptr);
1897 if (!m_skipMS) iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trk_for_unbiasPerigee,trkPerigee,vertex,m_doRemoval);
1898 else iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trkPerigee,vertex);
1899 if( iPandSigma==0 ){
1900 ATH_MSG_WARNING ("FillRecParameters::trackToVertexIPEstimator failed !");
1901 return StatusCode::FAILURE;
1902 }
1903 else{
1904 ATH_MSG_DEBUG("FillRecParameters::trackToVertexIPEstimator success !");
1905 PVd0 = iPandSigma->IPd0;
1906 PVd0res = iPandSigma->PVsigmad0;
1907 //d0res = iPandSigma->sigmad0; //-> ?
1908 PVz0 = iPandSigma->IPz0;
1909 PVz0res = iPandSigma->PVsigmaz0;
1910 //z0res = iPandSigma->sigmaz0; //-> ?
1911
1912 if (vertex) {
1913 ATH_MSG_INFO(" FillRecParameters::trackToVertexIPEstimator vertex does exist ");
1914 m_pv_x = vertex->x();
1915 m_pv_y = vertex->y();
1916 m_pv_z = vertex->z();
1917 m_nTrkInVtx = vertex->nTrackParticles();
1918 }
1919
1920 }
1921 }
1922
1923 if (charge == 1) {
1924 m_positive_px = px;
1925 m_positive_py = py;
1926 m_positive_pt = pt;
1927 m_positive_pz = pz;
1930 m_positive_z0 = z0;
1931 m_positive_d0 = d0;
1932 m_positive_d0_err = d0_err;
1933 m_positive_z0_err = z0_err;
1934 if(m_doIP){
1935 m_positive_z0_PV = PVz0;
1936 m_positive_d0_PV = PVd0;
1937 m_positive_z0_PVerr = PVz0res;
1938 m_positive_d0_PVerr = PVd0res;
1939 }
1940 ATH_MSG_DEBUG("(Filled charge == 1 ) (reco)-> px : "<< px <<" py: "<<py <<" pz: "<<pz <<" d0: "<<d0<<" z0: "<< z0);
1941 }
1942 if (charge == -1) {
1943 m_negative_px = px;
1944 m_negative_py = py;
1945 m_negative_pt = pt;
1946 m_negative_pz = pz;
1949 m_negative_z0 = z0;
1950 m_negative_d0 = d0;
1951 m_negative_d0_err = d0_err;
1952 m_negative_z0_err = z0_err;
1953 if(m_doIP){
1954 m_negative_z0_PV = PVz0;
1955 m_negative_d0_PV = PVd0;
1956 m_negative_z0_PVerr = PVz0res;
1957 m_negative_d0_PVerr = PVd0res;
1958 }
1959 ATH_MSG_DEBUG("(Filled charge == -1 ) (reco)-> px : "<< px <<" py: "<<py <<" pz: "<<pz <<" d0: "<<d0<<" z0: "<<z0 );
1960 }
1961
1962 return StatusCode::SUCCESS;
1963}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
double charge(const T &p)
Definition AtlasPID.h:997
const_pointer_type cptr()
double eta() const
Access method for pseudorapidity - from momentum.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
@ qOverP
perigee
ParametersT< TrackParametersDim, Charged, StraightLineSurface > AtaStraightLine
@ qOverP
perigee
Definition ParamDefs.h:67
@ phi
Definition ParamDefs.h:75
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64

◆ FillRecParametersSimple()

StatusCode IDPerfMonZmumu::FillRecParametersSimple ( const Trk::Track * track,
float charge,
const xAOD::Vertex * vertex )
private

Definition at line 1965 of file IDPerfMonZmumu.cxx.

1966{
1967 if (!track){
1968 ATH_MSG_DEBUG("* FillRecParametersSimple * Empty Track: track. Skipping.");
1969 return StatusCode::FAILURE;
1970 }
1971
1972 const Trk::Perigee* trkPerigee = track->perigeeParameters();
1973 if (not trkPerigee) {
1974 ATH_MSG_ERROR("trkPerigee pointer is null in IDPerfMonZmumu::FillRecParametersSimple");
1975 return StatusCode::FAILURE;
1976 }
1977 double px = 0;
1978 double py = 0;
1979 double pt = 0;
1980 double pz = 0;
1981 double phi= 0;
1982 double eta= 0;
1983
1984 double d0 = 0;
1985 double z0 = 0;
1986 double d0_err = 999.;
1987 double z0_err = 999.;
1988
1989 //
1990 double qOverP = trkPerigee->parameters()[Trk::qOverP];
1991 if (qOverP) {
1992 px = trkPerigee->momentum().x();
1993 py = trkPerigee->momentum().y();
1994 pt = std::abs(trkPerigee->pT());
1995 pz = trkPerigee->momentum().z();
1996 phi= trkPerigee->parameters()[Trk::phi];
1997 eta= trkPerigee->eta();
1998 d0 = trkPerigee->parameters()[Trk::d0];
1999 z0 = trkPerigee->parameters()[Trk::z0];
2000 d0_err = Amg::error(*trkPerigee->covariance(),Trk::d0);
2001 z0_err = Amg::error(*trkPerigee->covariance(),Trk::z0);
2002 }
2003
2004
2005 SG::ReadHandle<xAOD::EventInfo> eventInfo (m_EventInfoKey, getContext());
2006 Amg::Vector3D position (eventInfo->beamPosX(), eventInfo->beamPosY(), eventInfo->beamPosZ());
2007 TLorentzVector vtrack = TLorentzVector (trkPerigee->momentum().x(),
2008 trkPerigee->momentum().y(),
2009 trkPerigee->momentum().z(),
2010 trkPerigee->momentum().mag());
2011
2012 const EventContext& ctx = Gaudi::Hive::currentContext();
2013 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandleRec { m_beamSpotKey, ctx }; // This method loads the proper beam spot conditions
2014
2015
2016 // access beam spot and extrapolate track till there
2017 auto beamline = m_trackToVertexTool->GetBeamLine(beamSpotHandleRec.cptr());
2018
2019 auto trackBLtemp = m_trackToVertexTool->trackAtBeamline(ctx, *track , beamline.get() );
2020 const Trk::AtaStraightLine* atBL = dynamic_cast<const Trk::AtaStraightLine*>(trackBLtemp.get());
2021
2022 if (atBL){
2023 double qOverP = atBL->parameters()[Trk::qOverP];
2024 if(qOverP){
2025 px = atBL->momentum().x();
2026 py = atBL->momentum().y();
2027 pt = std::abs(atBL->pT());
2028 pz = atBL->momentum().z();
2029 eta= trkPerigee->eta();
2030 phi= trkPerigee->parameters()[Trk::phi];
2031 d0 = atBL->parameters()[Trk::d0];
2032 z0 = atBL->parameters()[Trk::z0] - vertex->z(); // correct also for the vertex position along the beam line
2033 }
2034 ATH_MSG_DEBUG("* FillRecParametersSimple *"
2035 << " charge " << charge
2036 << " ** trackToVertexTool->trackAtBeamline ** "
2037 << "( " << beamSpotHandleRec->beamPos().x()
2038 << ", " << beamSpotHandleRec->beamPos().y()
2039 << ", " << beamSpotHandleRec->beamPos().z()
2040 << ") pt: " << pt
2041 << " d0: " << d0
2042 << " z0: " << z0);
2043 }
2044 else {
2045 ATH_MSG_WARNING("FillRecParametersSimple::Failed extrapolation to the BeamLine --> extrapolate using line approximation");
2046 float trkd0 = trkPerigee->parameters()[Trk::d0];
2047 float trkz0 = trkPerigee->parameters()[Trk::z0];
2048 float bsX = beamSpotHandleRec->beamPos().x();
2049 float bsY = beamSpotHandleRec->beamPos().y();
2050 float bsZ = beamSpotHandleRec->beamPos().z();
2051 float btiltX = beamSpotHandleRec->beamTilt(0);
2052 float btiltY = beamSpotHandleRec->beamTilt(1);
2053 // compute the corrections for the track parameters considering the beamspot position
2054 float beamX = bsX + std::tan(btiltX) * (trkz0-bsZ);
2055 float beamY = bsY + std::tan(btiltY) * (trkz0-bsZ);
2056 float beamD0 = ( -std::sin(vtrack.Phi())*beamX + std::cos(vtrack.Phi())*beamY );
2057
2058 // correct d0 and z0
2059 d0 = trkd0 - beamD0;
2060 z0 = trkz0 - bsZ - vertex->z(); // correct also for the vertex position along the beam line
2061
2062 ATH_MSG_DEBUG("* FillRecParametersSimple *"
2063 << " charge " << charge
2064 << " ** beamSpotHandleRec " << m_beamSpotKey
2065 << "( " << beamSpotHandleRec->beamPos().x()
2066 << ", " << beamSpotHandleRec->beamPos().y()
2067 << ", " << beamSpotHandleRec->beamPos().z()
2068 << ") pt: " << pt
2069 << " d0: " << d0
2070 << " z0: " << z0);
2071 }
2072
2073 // store the values
2074 if (charge == 1) { // positive particle
2075 m_positive_px = px;
2076 m_positive_py = py;
2077 m_positive_pt = pt;
2078 m_positive_pz = pz;
2081 m_positive_z0 = z0;
2082 m_positive_d0 = d0;
2083 m_positive_d0_err = d0_err;
2084 m_positive_z0_err = z0_err;
2085 }
2086 if (charge == -1) { // negative particle
2087 m_negative_px = px;
2088 m_negative_py = py;
2089 m_negative_pt = pt;
2090 m_negative_pz = pz;
2093 m_negative_z0 = z0;
2094 m_negative_d0 = d0;
2095 m_negative_d0_err = d0_err;
2096 m_negative_z0_err = z0_err;
2097 }
2098
2099 ATH_MSG_DEBUG("* FillRecParametersSimple * completed * charge " << charge << " pt: " << pt << " d0: " << d0 << " z0: " << z0);
2100 return StatusCode::SUCCESS;
2101}
Eigen::Matrix< double, 3, 1 > Vector3D
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.

◆ FillRecParametersTP()

StatusCode IDPerfMonZmumu::FillRecParametersTP ( const xAOD::TrackParticle * trackp,
const xAOD::TrackParticle * trackp_for_unbias,
double charge,
const xAOD::Vertex * vertex = nullptr )
private

Definition at line 1671 of file IDPerfMonZmumu.cxx.

1675{
1676 if (!trackp){
1677 //ATH_MSG_WARNING("Empty Trackparticle. Skipping.");
1678 return StatusCode::FAILURE;
1679 }
1680
1681 if (m_doRemoval && !trackp_for_unbias && !m_skipMS){
1682 return StatusCode::FAILURE;
1683 }
1684
1685 double px = 0;
1686 double py = 0;
1687 double pt = 0;
1688 double pz = 0;
1689 double phi= 0;
1690 double eta= 0;
1691 double d0 = 0;
1692 double z0 = 0;
1693 double d0res = 0;
1694 double z0res = 0;
1695 double PVd0res = 0;
1696 double PVz0res = 0;
1697 double PVd0 = 0;
1698 double PVz0 = 0;
1699 double sigma_pt = 0;
1700 double qoverp = 0;
1701 double sigma_qOverP = 1.; // use a large value by default as 0 is meaningless
1702
1703
1704 px = trackp->p4().Px();
1705 py = trackp->p4().Py();
1706 pt = trackp->p4().Pt();
1707 pz = trackp->p4().Pz();
1708 phi= trackp->p4().Phi();
1709 eta= trackp->p4().Eta();
1710 d0 = trackp->d0();
1711 z0 = trackp->z0();
1712 qoverp = trackp->qOverP();
1713
1714 d0res = std::sqrt(trackp->definingParametersCovMatrix()(Trk::d0,Trk::d0));
1715 z0res = std::sqrt(trackp->definingParametersCovMatrix()(Trk::z0,Trk::z0));
1716 sigma_qOverP = std::sqrt(trackp->definingParametersCovMatrix()(Trk::qOverP,Trk::qOverP));
1717 double sigma_theta = std::sqrt(trackp->definingParametersCovMatrix()(Trk::theta,Trk::theta));
1718
1719 // computing sigma_pt
1720 // pt = sin(theta) / qOverP --> sigma(pt) = (sin(theta)/ qOverP^2) x sigma(qOverP) // neglecting sigma(sin(theta))
1721 double sigma_pt_term1 = (sin(trackp->theta()) / pow(qoverp,2)) * sigma_qOverP;
1722 double sigma_pt_term2 = (1./qoverp) * cos(trackp->theta()) * sigma_theta;
1723 double sigma_pt_term3 = (cos(trackp->theta()) / pow(qoverp,2)) * sigma_theta * sigma_qOverP;
1724 sigma_pt = sqrt( pow(sigma_pt_term1,2) + pow(sigma_pt_term2,2) + 2 * sigma_pt_term3 * trackp->definingParametersCovMatrix()(Trk::qOverP,Trk::theta));
1725
1726 //
1727 if (vertex == nullptr) {
1728 ATH_MSG_WARNING("in FillRecParametersTP. WARNING: Vertex is NULL");
1729 return StatusCode::FAILURE;
1730 }
1732 ATH_MSG_WARNING("in FillRecParametersTP. WARNING: m_trackToVertexIPEstimator is NULL");
1733 return StatusCode::FAILURE;
1734 }
1735
1736 if (m_doIP && vertex != nullptr && m_trackToVertexIPEstimator){
1737 std::unique_ptr<Trk::ImpactParametersAndSigma> iPandSigma(nullptr);
1738 ATH_MSG_DEBUG("-- using the trackToVertexIPEstimator --");
1739 const EventContext &ctx = Gaudi::Hive::currentContext();
1740 //Calling the estimate(trackp,newtrackp,vertex,doRemoval)
1741 //The first track is used to unbias the vertex, the second to get the extrapolation
1742 if (!m_skipMS) iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trackp_for_unbias, trackp, vertex, m_doRemoval);
1743 else iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trackp, vertex);
1744 ATH_MSG_DEBUG("return from the trackToVertexIPEstimator->estimate()");
1745
1746 if( !iPandSigma ){
1747 ATH_MSG_WARNING ("FillRecParametersTP::trackToVertexIPEstimator failed !");
1748 return StatusCode::FAILURE;
1749 }
1750 else{
1751 ATH_MSG_DEBUG("FillRecParametersTP::trackToVertexIPEstimator success !");
1752 PVd0 = iPandSigma->IPd0;
1753 PVd0res = iPandSigma->PVsigmad0;
1754 d0res = iPandSigma->sigmad0;
1755 PVz0 = iPandSigma->IPz0;
1756 PVz0res = iPandSigma->PVsigmaz0;
1757 z0res = iPandSigma->sigmaz0;
1758 }
1759 }
1760
1761 if (charge == 1) {
1762 m_positive_px = px;
1763 m_positive_py = py;
1764 m_positive_pt = pt;
1765 m_positive_pz = pz;
1768 m_positive_z0 = z0;
1769 m_positive_z0_err = z0res;
1770 m_positive_d0 = d0;
1771 m_positive_d0_err = d0res;
1772 m_positive_sigma_pt = sigma_pt;
1773 m_positive_qoverp = qoverp;
1774 m_positive_sigma_qoverp = sigma_qOverP;
1775 if(m_doIP){
1776 m_positive_z0_PV = PVz0;
1777 m_positive_d0_PV = PVd0;
1778 m_positive_z0_PVerr = PVz0res;
1779 m_positive_d0_PVerr = PVd0res;
1780 }
1781 ATH_MSG_DEBUG("(Filled charge == 1 ) (reco)-> px : "<< px <<" py: "<<py <<" pt: "<<pt <<" pz: "<<pz
1782 <<" d0: "<<m_positive_d0 << " d0res : "<< d0res << " PVd0res : "<< PVd0res <<" z0: "<< m_positive_z0 << " z0res : " << z0res << " PVz0res : "<< PVz0res );
1783
1784 } else if (charge == -1) {
1785 m_negative_px = px;
1786 m_negative_py = py;
1787 m_negative_pt = pt;
1788 m_negative_pz = pz;
1791 m_negative_z0 = z0;
1792 m_negative_z0_err = z0res;
1793 m_negative_d0 = d0;
1794 m_negative_d0_err = d0res;
1795 m_negative_sigma_pt = sigma_pt;
1796 m_negative_qoverp = qoverp;
1797 m_negative_sigma_qoverp = sigma_qOverP;
1798 if(m_doIP){
1799 m_negative_z0_PV = PVz0;
1800 m_negative_d0_PV = PVd0;
1801 m_negative_z0_PVerr = PVz0res;
1802 m_negative_d0_PVerr = PVd0res;
1803 }
1804 ATH_MSG_DEBUG("(Filled charge == -1 ) (reco)-> px : "<< px <<" py: "<< py <<" pt: " << pt <<" pz: "<<pz
1805 <<" d0: "<<m_negative_d0 << " d0res : "<< d0res << " PVd0res : "<< PVd0res <<" z0: "<< m_negative_z0 << " z0res : " << z0res << " PVz0res : "<< PVz0res );
1806 }
1807
1808 return StatusCode::SUCCESS;
1809}
float z0() const
Returns the parameter.
float theta() const
Returns the parameter, which has range 0 to .
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
float d0() const
Returns the parameter.
float qOverP() const
Returns the parameter.
@ theta
Definition ParamDefs.h:66
constexpr int pow(int x)
Definition conifer.h:27

◆ FillTruthParameters()

StatusCode IDPerfMonZmumu::FillTruthParameters ( const xAOD::TrackParticle * track)
private

Definition at line 2104 of file IDPerfMonZmumu.cxx.

2105{
2106
2107 if (!trackParticle ){//|| !trackParticle->vertex()){
2108 ATH_MSG_WARNING("-- FillTruthParameters -- Empty Trackparticle. Skipping.");
2109 return StatusCode::FAILURE;
2110 }
2111
2112 const xAOD::TruthParticle* particle = getTruthParticle( *trackParticle );
2113 double charge = 0;
2114 if (!particle) {
2115 ATH_MSG_DEBUG(" -- FillTruthParameters -- Failure while retrieving the truth particle. Returning FAILURE.");
2116 return StatusCode::FAILURE;
2117 }
2118
2119 if ( particle->pdgId() == 13) charge = -1.; // muon-
2120 if ( particle->pdgId() == -13) charge = 1.; // muon+
2121 if ( particle->isNeutral() ) {
2122 ATH_MSG_DEBUG(" -- FillTruthParameters -- reco muon associated to a truth neutral!! Returning FAILURE.");
2123 return StatusCode::FAILURE;
2124 }
2125 if ( charge == 0 ) {
2126 ATH_MSG_DEBUG(" -- FillTruthParameters -- reco muon associated to a non true muon!! Returning FAILURE.");
2127 return StatusCode::FAILURE;
2128 }
2129
2130 const Amg::Vector3D momentum(particle->px(), particle->py(), particle->pz());
2131 const xAOD::TruthVertex * ptruthVertex(0);
2132 ptruthVertex=particle->prodVtx();
2133 if (!ptruthVertex){
2134 ATH_MSG_DEBUG("A production vertex pointer was retrieved, but it is NULL");
2135 return StatusCode::FAILURE;
2136 }
2137
2138
2139 if (particle->parent(0) != nullptr) {
2140 static const SG::ConstAccessor<int> truthTypeAcc("truthType");
2141 static const SG::ConstAccessor<int> truthOriginAcc("truthOrigin");
2142 if (truthTypeAcc.isAvailable(*particle)) {
2143 ATH_MSG_DEBUG(" -- FillTruthParameters -- truth particle is good. pdg: " << particle->pdgId()
2144 << " type: " << particle->type()
2145 << " nparents " << particle->nParents()
2146 << " parent->pdg: " << particle->parent(0)->pdgId()
2147 << " truthType: " << truthTypeAcc(*particle)
2148 << " truthOrigin: " << truthOriginAcc(*particle)
2149 );
2150
2151 }
2152 else {
2153 ATH_MSG_DEBUG(" -- FillTruthParameters -- truth particle is good. pdg: " << particle->pdgId()
2154 << " type: " << particle->type()
2155 << " nparents " << particle->nParents()
2156 << " parent->pdg: " << particle->parent(0)->pdgId()
2157 << " truthType & truthOrigin: " << " NOT AVAILABLE "
2158 );
2159 }
2160 }
2161
2162 const auto xPos=ptruthVertex->x();
2163 const auto yPos=ptruthVertex->y();
2164 const auto z_truth=ptruthVertex->z();
2165
2166 const Amg::Vector3D position(xPos, yPos, z_truth);
2167 const Trk::CurvilinearParameters cParameters(position, momentum, charge);
2168
2169 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandleTruth { m_beamSpotKey };
2170 Trk::PerigeeSurface persf( beamSpotHandleTruth->beamPos() );
2171
2172 const EventContext& ctx = Gaudi::Hive::currentContext();
2173 std::unique_ptr<const Trk::TrackParameters> tP = m_extrapolator->extrapolate(ctx, cParameters,persf, Trk::anyDirection, false);
2174
2175 double px = 0;
2176 double py = 0;
2177 double pt = 0;
2178 double pz = 0;
2179 double phi= 0;
2180 double eta= 0;
2181 double d0 = 0;
2182 double d0res = 0;
2183 double PVd0res = 0;
2184 double z0 = 0;
2185 double z0res = 0;
2186 double PVz0res = 0;
2187
2188 double d0recoPos = m_positive_d0;
2189 double z0recoPos = m_positive_z0;
2190 double d0recoNeg = m_negative_d0;
2191 double z0recoNeg = m_negative_z0;
2192
2193 ATH_MSG_DEBUG("reco IPs (pos): > d0 : "<<d0recoPos << " z0: " << z0recoPos << " trackp z0 : " << trackParticle->z0() << " trackp d0 : " << trackParticle->d0());
2194 ATH_MSG_DEBUG("reco IPs (neg): > d0 : "<<d0recoNeg << " z0: " << z0recoNeg << " trackp z0 : " << trackParticle->z0() <<" trackp d0 : " << trackParticle->d0() );
2195
2196 double qOverP_truth = 0.;
2197 if (tP){
2198 qOverP_truth = tP->parameters()[Trk::qOverP];
2199 if( qOverP_truth ){
2200
2201 px = tP->momentum().x();
2202 py = tP->momentum().y();
2203 pt = tP->pT();
2204 pz = tP->momentum().z();
2205 phi= tP->parameters()[Trk::phi];
2206 eta= tP->eta();
2207 d0 = tP->parameters()[Trk::d0];
2208 z0 = tP->parameters()[Trk::z0];
2209
2210 ATH_MSG_DEBUG("cand perig HEP particle (truth) px : "<< tP->momentum().x());
2211 ATH_MSG_DEBUG("cand perig HEP particle (truth) py : "<< tP->momentum().y());
2212 ATH_MSG_DEBUG("cand perig HEP particle (truth) pz : "<< tP->momentum().z());
2213 ATH_MSG_DEBUG("cand perig HEP particle (truth) d0 : "<< tP->parameters()[Trk::d0]);
2214 ATH_MSG_DEBUG("cand perig HEP particle (truth) z0 : "<< tP->parameters()[Trk::z0]);
2215
2216 }
2217 }
2218
2219
2220 if (charge == 1) {
2221 m_positive_px = px;
2222 m_positive_py = py;
2223 m_positive_pt = pt;
2224 m_positive_pz = pz;
2227 m_positive_z0 = z0recoPos -z0;
2228 m_positive_z0_err = z0res;
2229 m_positive_z0_PVerr = PVz0res;
2230 m_positive_d0 = d0recoPos -d0;
2231 m_positive_d0_err = d0res;
2232 m_positive_d0_PVerr = PVd0res;
2233 m_positive_qoverp = qOverP_truth;
2234
2235 bool parentfound = false;
2236 if (particle->nParents()>0) {
2237 if (particle->parent(0) != nullptr) {
2238 m_positive_parent = particle->parent(0)->pdgId();
2239 parentfound = true;
2240 }
2241 }
2242 if (!parentfound) m_positive_parent = 0;
2243
2244 ATH_MSG_DEBUG(" -- FillTruthParameters -- charge = 1 (truth)-> px : "<< m_positive_px
2245 <<" py: "<<m_positive_py
2246 <<" pz: "<<m_positive_pz
2247 <<" d0: "<<m_positive_d0
2248 <<" z0: "<< m_positive_z0
2249 <<" qoverp: " << m_positive_qoverp
2250 << " parent: " << m_positive_parent);
2251
2252 } else if (charge == -1) {
2253 m_negative_px = px;
2254 m_negative_py = py;
2255 m_negative_pt = pt;
2256 m_negative_pz = pz;
2259 m_negative_z0 = z0recoNeg-z0;
2260 m_negative_z0_err = z0res;
2261 m_negative_z0_PVerr = PVz0res;
2262 m_negative_d0 = d0recoNeg-d0;
2263 m_negative_d0_err = d0res;
2264 m_negative_d0_PVerr = PVd0res;
2265 m_negative_qoverp = qOverP_truth;
2266
2267 bool parentfound = false;
2268 if (particle->nParents()>0) {
2269 if (particle->parent(0) != nullptr) {
2270 m_negative_parent = particle->parent(0)->pdgId();
2271 parentfound = true;
2272 }
2273 }
2274 if (!parentfound) m_negative_parent = 0;
2275
2276 ATH_MSG_DEBUG(" -- FillTruthParameters-- charge = -1 (truth)-> px : "<< m_negative_px
2277 << " py: "<<m_negative_py
2278 << " pz: "<<m_negative_pz
2279 << " d0: "<<m_negative_d0
2280 << " z0: "<< m_negative_z0
2281 <<" qoverp: " << m_negative_qoverp
2282 << " parent:" << m_negative_parent);
2283 }
2284 return StatusCode::SUCCESS;
2285}
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
@ anyDirection
CurvilinearParametersT< TrackParametersDim, Charged, PlaneSurface > CurvilinearParameters
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15
TruthParticle_v1 TruthParticle
Typedef to implementation.

◆ filterPassed()

bool AthAlgorithm::filterPassed ( ) const
inherited

Definition at line 94 of file AthAlgorithm.cxx.

94 {
95 return execState( Gaudi::Hive::currentContext() ).filterPassed();
96}

◆ finalize()

StatusCode IDPerfMonZmumu::finalize ( )
virtual

Definition at line 2309 of file IDPerfMonZmumu.cxx.

2310{
2311 m_xZmm.finalize();
2312 return StatusCode::SUCCESS;
2313}

◆ getContext()

const EventContext & AthAlgorithm::getContext ( ) const
inherited

Deprecated methods (use the ones with EventContext).

Definition at line 90 of file AthAlgorithm.cxx.

90 {
91 return Gaudi::Hive::currentContext();
92}

◆ GetDiMuonVertex()

const xAOD::Vertex * IDPerfMonZmumu::GetDiMuonVertex ( const xAOD::TrackParticle * muon1,
const xAOD::TrackParticle * muon2 )
private

Definition at line 2377 of file IDPerfMonZmumu.cxx.

2377 {
2378
2379 const xAOD::VertexContainer* vxContainer(0);
2380 const xAOD::Vertex* myVtx(0);
2382 if (!vxContainer) {
2383 return myVtx;
2384 }
2385
2386 for (int ivtx=0; ivtx< (int) vxContainer->size();ivtx++) {
2387 myVtx = (*vxContainer)[ivtx];
2388 if ((myVtx->vertexType() == xAOD::VxType::PriVtx)) {
2389 if (m_Trk2VtxAssociationTool->isCompatible(*muon1,*myVtx) && (m_Trk2VtxAssociationTool->isCompatible(*muon2,*myVtx)))
2390 return myVtx;
2391 }
2392 }
2393 return myVtx;
2394}
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".

◆ GetMuonQualityValue()

int IDPerfMonZmumu::GetMuonQualityValue ( std::string qualityname)
private

◆ getTruthParticle()

const xAOD::TruthParticle * IDPerfMonZmumu::getTruthParticle ( const xAOD::IParticle & p)
private

A convenience type declaration

A static accessor for the information

Definition at line 2289 of file IDPerfMonZmumu.cxx.

2289 {
2291 typedef ElementLink< xAOD::TruthParticleContainer > Link_t;
2293 static const SG::ConstAccessor< Link_t > acc( "truthParticleLink" );
2294 // Check if such a link exists on the object:
2295 if( ! acc.isAvailable( p ) ) {
2296 return nullptr;
2297 }
2298 // Get the link:
2299 const Link_t& link = acc( p );
2300 // Check if the link is valid:
2301 if( ! link.isValid() ) {
2302 return nullptr;
2303 }
2304 // Everything has passed, let's return the pointer:
2305 return *link;
2306}
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:570
pointer & link(pointer p) const
Return a reference to the link for an element.

◆ initialize()

StatusCode IDPerfMonZmumu::initialize ( )
virtual

Definition at line 170 of file IDPerfMonZmumu.cxx.

171{
172 ATH_MSG_DEBUG ("** IDPerfMonZmumu::Initialize ** START **");
173 // Setup the services
174
175 // Retrieve Track fitter and track to vertex
176 if (m_doRefit) { // only if track refit is requested
177 if (m_TrackRefitter1.retrieve().isSuccess()) {
178 ATH_MSG_INFO("Retrieved tool m_TrackRefitter1: " << m_TrackRefitter1 << " SUCCESS ");
179 }
180 else {
181 ATH_MSG_FATAL("Unable to retrieve m_TrackRefitter1 " << m_TrackRefitter1 << " FAILURE ");
182 return StatusCode::FAILURE;
183 }
184
185 // Retrieve the second fitter
186 if (m_TrackRefitter2.retrieve().isSuccess()) {
187 ATH_MSG_INFO("Retrieved tool m_TrackRefitter2: " << m_TrackRefitter2 << " SUCCESS ");
188 }
189 else {
190 ATH_MSG_FATAL("Unable to retrieve m_TrackRefitter2 " << m_TrackRefitter2 << " FAILURE ");
191 return StatusCode::FAILURE;
192 }
193
194 if (m_trackToVertexTool.retrieve().isSuccess()) {
195 ATH_MSG_INFO("Retrieved tool m_trackToVertexTool " << m_trackToVertexTool << " SUCCESS ");
196 }
197 else {
198 ATH_MSG_FATAL("Unable to retrieve m_trackToVertexTool " << m_trackToVertexTool << " FAILURE ");
199 return StatusCode::FAILURE;
200 }
201 }
202
204 // ATH_CHECK( m_selTool.retrieve() );
205 if (m_selTool.retrieve().isSuccess()){
206 ATH_MSG_INFO("Retrieved tool (track selection tool) m_selTool " << m_selTool << " SUCCESS ");
207 }
208 else {
209 ATH_MSG_FATAL("Unable to retrieve (track selection tool) m_selTool " << m_selTool << " FAILURE ");
210 return StatusCode::FAILURE;
211 }
212 }
213
214 // initializing the eventInfo "accessor"
215 ATH_CHECK( m_EventInfoKey.initialize() );
216
217 if (m_doIP) {
218 ATH_MSG_DEBUG("Retrieving tool (trackToVertexIPEstimator)");
220 }
221
222
223 ATH_CHECK (m_EventInfoKey.initialize()); // initializing the eventInfo "accessor"
224
225 if (m_isMC) ATH_CHECK (m_extrapolator.retrieve()); // this is only used for the truth particles
226
227 ATH_CHECK (m_vertexKey.initialize());
228
229 ATH_CHECK (m_trackContainerName.initialize());
230
231 ATH_MSG_INFO(" -- IDPerfMonZmumu::initialize() -- m_vertexKey: " << m_vertexKey);
232
233 ATH_MSG_INFO(" -- IDPerfMonZmumu::initialize() -- init m_beamSpotKey ");
234 ATH_CHECK(m_beamSpotKey.initialize());
235
236 // START new place for initilization of params
238 m_xZmm.doIsoSelection (m_doIsoSelection);
239 m_xZmm.doIPSelection (m_doIPSelection);
240 m_xZmm.doMCPSelection (m_doMCPSelection);
241 m_xZmm.SetMassWindowLow (m_MassWindowLow);
242 m_xZmm.SetMassWindowHigh (m_MassWindowHigh);
243 m_xZmm.SetLeadingMuonPtCut(m_LeadingMuonPtCut);
244 m_xZmm.SetSecondMuonPtCut (m_SecondMuonPtCut);
245 m_xZmm.SetOpeningAngleCut (m_OpeningAngleCut);
246 m_xZmm.SetZ0GapCut (m_Z0GapCut);
247 m_xZmm.setDebugMode (m_doDebug);
248 m_xZmm.SetMuonQuality (m_MuonQualityName);
249 m_xZmm.SetSkipMSCheck (m_skipMS);
250 m_xZmm.SetMinLumiBlock (m_minGoodLumiBlock);
251 m_xZmm.SetMaxLumiBlock (m_maxGoodLumiBlock);
252
254 m_xZmm.SetMuonSelectionTool (m_muonSelector);
255 }
256 // END new place for initialization of params
257
258 if (m_doFourMuAnalysis) {
259 m_4mu.Init();
260 m_4mu.setDebugMode(true);
261 if (m_useCustomMuonSelector) m_4mu.SetMuonSelectionTool (m_muonSelector);
262 ATH_MSG_DEBUG(" IDPerfMonZmumu FourMuonAnalysis initialization completed " << m_Trk2VtxAssociationTool);
263 }
264
265 // m_Trk2VtxAssociationTool = std::make_unique<CP::TrackVertexAssociationTool>("Loose");
266 if ( m_Trk2VtxAssociationTool.retrieve().isSuccess() ) {
267 ATH_MSG_DEBUG(" IDPerfMonZmumu Success retrieving tool " << m_Trk2VtxAssociationTool);
268 }
269 else { // is Failure
270 ATH_MSG_FATAL("IDPerfMonZmumu Failed to retrieve tool m_Trk2VtxAssociationTool " << m_Trk2VtxAssociationTool);
271 return StatusCode::FAILURE;
272 }
273
274 ATH_CHECK ( this->bookTrees() );
275
276 if (m_UseTrigger) { // load trigger decission and matching under user request
277 if (m_triggerDecision.retrieve().isFailure()) {
278 ATH_MSG_FATAL("Unable to retrieve " << m_triggerDecision << " turn it off");
279 return StatusCode::FAILURE;
280 }
281 else {
282 ATH_MSG_DEBUG("retrieved tool: " << m_triggerDecision );
283 }
284
285 if(m_triggerMatching.retrieve().isFailure()) {
286 ATH_MSG_FATAL("Unable to retrieve " << m_triggerMatching << " turn it off");
287 return StatusCode::FAILURE;
288 }
289 else {
290 ATH_MSG_INFO("retrieved tool: " << m_triggerDecision );
291 }
292 }
293
294 ATH_MSG_DEBUG("** IDPerfMonZmumu::Initialize ** Completed **");
295 return StatusCode::SUCCESS;
296}
#define ATH_CHECK
Evaluate an expression and check for errors.
FourMuonEvent m_4mu
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackContainerName
IDTtacks.
StatusCode bookTrees()

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::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.

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 118 of file AthAlgorithm.h.

118{ return false; }

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Gaudi::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< Gaudi::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.

◆ RegisterHistograms()

void IDPerfMonZmumu::RegisterHistograms ( )
private

Definition at line 927 of file IDPerfMonZmumu.cxx.

928{
929 return;
930}

◆ 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< Gaudi::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< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ ResetCommonNtupleVectors()

void IDPerfMonZmumu::ResetCommonNtupleVectors ( )
private

Definition at line 2397 of file IDPerfMonZmumu.cxx.

2398{
2399 m_IDTrack_pt.clear();
2400 m_CBTrack_pt.clear();
2401 m_Refit1_pt.clear();
2402 m_Refit2_pt.clear();
2403 m_Truth_pt.clear();
2404
2405 m_IDTrack_eta.clear();
2406 m_CBTrack_eta.clear();
2407 m_Refit1_eta.clear();
2408 m_Refit2_eta.clear();
2409 m_Truth_eta.clear();
2410
2411 m_IDTrack_phi.clear();
2412 m_CBTrack_phi.clear();
2413 m_Refit1_phi.clear();
2414 m_Refit2_phi.clear();
2415 m_Truth_phi.clear();
2416
2417 m_IDTrack_d0.clear();
2418 m_CBTrack_d0.clear();
2419 m_Refit1_d0.clear();
2420 m_Refit2_d0.clear();
2421 m_Truth_d0.clear();
2422
2423 m_IDTrack_z0.clear();
2424 m_CBTrack_z0.clear();
2425 m_Refit1_z0.clear();
2426 m_Refit2_z0.clear();
2427 m_Truth_z0.clear();
2428
2429 m_IDTrack_qoverp.clear();
2430 m_CBTrack_qoverp.clear();
2431 m_Refit1_qoverp.clear();
2432 m_Refit2_qoverp.clear();
2433 m_Truth_qoverp.clear();
2434
2435 m_Truth_parent.clear();
2436
2437 m_IDTrack_sigma_pt.clear();
2438 m_CBTrack_sigma_pt.clear();
2439 m_Refit1_sigma_pt.clear();
2440 m_Refit2_sigma_pt.clear();
2441
2442 m_IDTrack_sigma_d0.clear();
2443 m_CBTrack_sigma_d0.clear();
2444 m_Refit1_sigma_d0.clear();
2445 m_Refit2_sigma_d0.clear();
2446
2447 m_IDTrack_sigma_z0.clear();
2448 m_CBTrack_sigma_z0.clear();
2449 m_Refit1_sigma_z0.clear();
2450 m_Refit2_sigma_z0.clear();
2451
2452 m_IDTrack_sigma_qoverp.clear();
2453 m_CBTrack_sigma_qoverp.clear();
2454 m_Refit1_sigma_qoverp.clear();
2455 m_Refit2_sigma_qoverp.clear();
2456
2457 m_nBLhits.clear();
2458 m_nPIXhits.clear();
2459 m_nSCThits.clear();
2460 m_nTRThits.clear();
2461
2462 return;
2463}

◆ RunFourLeptonAnalysis()

StatusCode IDPerfMonZmumu::RunFourLeptonAnalysis ( )
private

Definition at line 2553 of file IDPerfMonZmumu.cxx.

2554{
2555 StatusCode thisStatus = StatusCode::SUCCESS;
2556
2557 if (m_doFourMuAnalysis) {
2558 ATH_MSG_DEBUG ("** RunFourLeptonAnalysis ** START ** run: " << m_runNumber << " event: " << m_evtNumber << " lumiblock:" << m_lumi_block);
2559
2560 // Four lepton event
2562 m_4mu.doIsoSelection (m_doIsoSelection);
2563 m_4mu.doIPSelection (m_doIPSelection);
2564 m_4mu.doMCPSelection (m_doMCPSelection);
2565 m_4mu.SetMassWindowLow (m_MassWindowLow);
2566 m_4mu.SetMassWindowHigh (m_MassWindowHigh);
2567 m_4mu.SetLeadingMuonPtCut(m_LeadingMuonPtCut);
2568 m_4mu.SetSecondMuonPtCut (m_SecondMuonPtCut);
2569 m_4mu.SetOpeningAngleCut (m_OpeningAngleCut);
2570 m_4mu.SetZ0GapCut (m_Z0GapCut);
2571 m_4mu.setDebugMode (m_doDebug);
2572
2573 // This is a report of the number of true electrons in the event
2574 if (false) {
2575 const xAOD::TruthParticleContainer* electronTruth = evtStore()->retrieve< const xAOD::TruthParticleContainer >( "egammaTruthParticles" );
2576 if( electronTruth) {
2577 ATH_MSG_DEBUG ( "retrieving electron Truth container with key: \"egammaTruthParticles\" SUCCESS ");
2578 // Check that the auxiliary store association was made successfully:
2579 if( electronTruth->hasStore() ) {
2580 ATH_MSG_DEBUG ( "Size of Truth gamma-electrons: " << electronTruth->size() );
2581 auto tr_itr = electronTruth->begin();
2582 auto tr_end = electronTruth->end();
2583 int electronCount = 0;
2584 for( int i = 0; tr_itr != tr_end; ++tr_itr, ++i ) {
2585 ATH_MSG_DEBUG( "Truth : Investigating truth electron #" << i << " pdgID= " << ( *tr_itr )->pdgId());
2586 if (fabs(( *tr_itr )->pdgId()) == 11) {
2587 if (( *tr_itr )->pt() > 10000 && fabs(( *tr_itr )->eta()) < 2.47) {
2588 ATH_MSG_INFO( " central electron found --> pt: " << ( *tr_itr )->charge()*( *tr_itr )->pt() << " eta " <<( *tr_itr )->eta() );
2589 electronCount++;
2590 }
2591 }
2592 }
2593 ATH_MSG_INFO( "#central electrons: " << electronCount );
2594 }
2595 else {
2596 ATH_MSG_WARNING ( "electronTruth container has no Store !!! FAILURE");
2597 }
2598 }
2599 else {
2600 ATH_MSG_WARNING ( "retrieve electron Truth container with key: \"egammaTruthParticles\" FAILURE");
2601 }
2602 }
2603
2604 if (m_doDebug) std::cout << " ** RunFourLeptonAnalysis ** calling m_4mu.Reco() .... " << std::endl;
2605 bool statusOf4LeptReco = m_4mu.Reco();
2606
2607 // print message
2608 if(statusOf4LeptReco) {
2609 thisStatus = StatusCode::SUCCESS;
2610 ATH_MSG_INFO ("4-lepton reconstruction SUCCESS. # accepted events " << m_4mu.getAcceptedEvents() << " Invariant mass = " << m_4mu.GetInvMass() << " GeV ");
2611 if (m_doDebug) std::cout << " ** RunFourLeptonAnalysis ** 4-lepton reconstruction SUCCESS. # accepted events " << m_4mu.getAcceptedEvents() << " Invariant mass = " << m_4mu.GetInvMass() << " GeV " << std::endl;
2612 }
2613 else {
2614 thisStatus = StatusCode::FAILURE;
2615 ATH_MSG_DEBUG ("4-lepton reconstruction FAILURE. m_4mu.Reco() returned FALSE --> event failed selection");
2616 if (m_doDebug) std::cout << " ** RunFourLeptonAnalysis ** 4-lepton reconstruction FAILURE. m_4mu.Reco() returned FALSE --> event failed selection" << std::endl;
2617 }
2618
2619 if(statusOf4LeptReco) {
2620 if ( m_4mu.EventPassed() ) {
2621
2622 this->Clear4MuNtupleVariables();
2623
2624 const xAOD::TrackParticle* muon1_pos = m_4mu.getIDTrack(m_4mu.getPosMuon(1));
2625 const xAOD::TrackParticle* muon2_pos = m_4mu.getIDTrack(m_4mu.getPosMuon(2));
2626 const xAOD::TrackParticle* muon1_neg = m_4mu.getIDTrack(m_4mu.getNegMuon(1));
2627 const xAOD::TrackParticle* muon2_neg = m_4mu.getIDTrack(m_4mu.getNegMuon(2));
2628
2629 // muons
2630 if (muon1_pos) {
2631 m_positive_px = muon1_pos->p4().Px();
2632 m_positive_py = muon1_pos->p4().Py();
2633 m_positive_pz = muon1_pos->p4().Pz();
2634 m_positive_d0 = muon1_pos->d0();
2635 m_positive_z0 = muon1_pos->z0();
2636 // m_positive_d0_err = muon1_pos->definingParametersCovMatrix()(0,0);
2639 }
2640 if (muon1_neg) {
2641 m_negative_px = muon1_neg->p4().Px();
2642 m_negative_py = muon1_neg->p4().Py();
2643 m_negative_pz = muon1_neg->p4().Pz();
2644 m_negative_d0 = muon1_neg->d0();
2645 m_negative_z0 = muon1_neg->z0();
2648 }
2649 if (muon2_pos) {
2650 m_positive_2_px = muon2_pos->p4().Px();
2651 m_positive_2_py = muon2_pos->p4().Py();
2652 m_positive_2_pz = muon2_pos->p4().Pz();
2653 m_positive_2_d0 = muon2_pos->d0();
2654 m_positive_2_z0 = muon2_pos->z0();
2657 }
2658 if (muon2_neg) {
2659 m_negative_2_px = muon2_neg->p4().Px();
2660 m_negative_2_py = muon2_neg->p4().Py();
2661 m_negative_2_pz = muon2_neg->p4().Pz();
2662 m_negative_2_d0 = muon2_neg->d0();
2663 m_negative_2_z0 = muon2_neg->z0();
2666 }
2667
2668 // electrons
2669 const xAOD::TrackParticle* elec1_neg = m_4mu.getELTrack(0);
2670 const xAOD::TrackParticle* elec2_neg = m_4mu.getELTrack(1);
2671 const xAOD::TrackParticle* elec1_pos = m_4mu.getELTrack(2);
2672 const xAOD::TrackParticle* elec2_pos = m_4mu.getELTrack(3);
2673 if (elec1_neg) {
2674 m_el_negative1_px = elec1_neg->p4().Px();
2675 m_el_negative1_py = elec1_neg->p4().Py();
2676 m_el_negative1_pz = elec1_neg->p4().Pz();
2677 m_el_negative1_d0 = elec1_neg->d0();
2678 m_el_negative1_z0 = elec1_neg->z0();
2681 }
2682 if (elec2_neg) {
2683 m_el_negative2_px = elec2_neg->p4().Px();
2684 m_el_negative2_py = elec2_neg->p4().Py();
2685 m_el_negative2_pz = elec2_neg->p4().Pz();
2686 m_el_negative2_d0 = elec2_neg->d0();
2687 m_el_negative2_z0 = elec2_neg->z0();
2690 }
2691 if (elec1_pos) {
2692 m_el_positive1_px = elec1_pos->p4().Px();
2693 m_el_positive1_py = elec1_pos->p4().Py();
2694 m_el_positive1_pz = elec1_pos->p4().Pz();
2695 m_el_positive1_d0 = elec1_pos->d0();
2696 m_el_positive1_z0 = elec1_pos->z0();
2699 }
2700 if (elec2_pos) {
2701 m_el_positive2_px = elec2_pos->p4().Px();
2702 m_el_positive2_py = elec2_pos->p4().Py();
2703 m_el_positive2_pz = elec2_pos->p4().Pz();
2704 m_el_positive2_d0 = elec2_pos->d0();
2705 m_el_positive2_z0 = elec2_pos->z0();
2708 }
2709
2710 // other quantities
2711 m_nVertex = m_4mu.GetNVertex ();
2712 m_negative_1_vtx = m_4mu.GetVertexMuNeg1();
2713 m_negative_2_vtx = m_4mu.GetVertexMuNeg2();
2714 m_positive_1_vtx = m_4mu.GetVertexMuPos1();
2715 m_positive_2_vtx = m_4mu.GetVertexMuPos2();
2716
2717 m_el_negative1_vtx = m_4mu.GetVertexElec(0);
2718 m_el_negative2_vtx = m_4mu.GetVertexElec(1);
2719 m_el_positive1_vtx = m_4mu.GetVertexElec(2);
2720 m_el_positive2_vtx = m_4mu.GetVertexElec(3);
2721
2722 m_pv_x = 0; m_pv_y = 0; m_pv_z = 0;
2723
2724 m_4mu_minv = m_4mu.GetInvMass();
2725
2726 // Obtain MET
2727 std::string metName = "MET_Reference_AntiKt4LCTopo";
2728 std::string metRefFinalName = "FinalClus";
2729 const xAOD::MissingETContainer* final_met = nullptr;
2730
2731 m_met = -1; // default value
2732 m_metphi = -1;
2733
2735 ATH_MSG_WARNING ( "No Collection with name " << metName << " found in StoreGate");
2736 // return StatusCode::SUCCESS;
2737 }
2738 else {
2739 StatusCode sc = evtStore()->retrieve(final_met, metName);
2740 if (sc.isFailure()) {
2741 ATH_MSG_DEBUG ( "Could not retrieve Collection " << metName << " from StoreGate");
2742 // return StatusCode::SUCCESS;
2743 }
2744 }
2745 const xAOD::MissingET *met = nullptr;
2746 if (final_met) met = (*final_met)[metRefFinalName];
2747 if (met) { // load MET values
2748 m_met = met->met();
2749 m_metphi = met->phi();
2750 }
2751 ATH_MSG_DEBUG (" Zmumu event with MET = " << m_met);
2752
2753 ATH_MSG_INFO (" -- IDPerfMonZmumu::execute -- Accepted event " << m_4mu.getAcceptedEvents() << " with m_4mu.GetInvMass= " << m_4mu_minv);
2754 ATH_MSG_DEBUG ("**** Filling m_FourMuTree ntuple " << m_FourMuTree->GetName() << " entry " << m_FourMuTree->GetEntries()
2755 << " for run: " << m_runNumber
2756 << " event: " << m_evtNumber
2757 << " Lumiblock: " << m_lumi_block
2758 << " Invariant mass = " << m_4mu_minv << " GeV ");
2759 if (muon1_pos != nullptr) ATH_MSG_DEBUG("mu1+ --> pxyz " << muon1_pos->p4().Px()
2760 << ", " << muon1_pos->p4().Py()
2761 << ", " << muon1_pos->p4().Pz()
2762 << " pt: " << muon1_pos->pt()
2763 << " d0: " << muon1_pos->d0()
2764 << " z0: " << muon1_pos->z0()
2765 << " d0unc: " << muon1_pos->definingParametersCovMatrixVec()[0]
2766 );
2767 if (muon1_neg != nullptr) ATH_MSG_DEBUG("mu1- --> pxyz " << muon1_neg->p4().Px()
2768 << ", " << muon1_neg->p4().Py()
2769 << ", " << muon1_neg->p4().Pz()
2770 << " pt: " << muon1_neg->pt()
2771 << " d0: " << muon1_neg->d0()
2772 << " z0: " << muon1_neg->z0()
2773 << " d0unc: " << muon1_neg->definingParametersCovMatrixVec()[0]
2774 );
2775 if (elec1_pos != nullptr) ATH_MSG_DEBUG("el1+ --> pxyz " << elec1_pos->p4().Px()
2776 << ", " << elec1_pos->p4().Py()
2777 << ", " << elec1_pos->p4().Pz()
2778 << " pt: " << elec1_pos->pt()
2779 << " d0: " << elec1_pos->d0()
2780 << " z0: " << elec1_pos->z0()
2781 << " d0unc: " << elec1_pos->definingParametersCovMatrixVec()[0]
2782 );
2783 // ntuple variables have been filled in FillRecParametersTP
2784 m_FourMuTree->Fill();
2785 }
2786 } // succesful 4mu reco
2787
2788 } // end of fourMuon Analysis
2789
2790 return thisStatus;
2791}
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.
float met() const
Returns .
float phi() const
Returns .
std::vector< float > definingParametersCovMatrixVec() const
Returns the length 6 vector containing the elements of defining parameters covariance matrix.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:116
MissingET_v1 MissingET
Version control by type defintion.
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.

◆ setFilterPassed()

void AthAlgorithm::setFilterPassed ( bool state) const
inherited

Definition at line 98 of file AthAlgorithm.cxx.

98 {
99 execState( Gaudi::Hive::currentContext() ).setFilterPassed(state);
100}

◆ 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< Gaudi::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< Gaudi::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< Gaudi::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 }

Member Data Documentation

◆ m_4mu

FourMuonEvent IDPerfMonZmumu::m_4mu
private

Definition at line 108 of file IDPerfMonZmumu.h.

◆ m_4mu_minv

double IDPerfMonZmumu::m_4mu_minv {}
private

Definition at line 356 of file IDPerfMonZmumu.h.

356{};

◆ m_beamposX

float IDPerfMonZmumu::m_beamposX {}
private

Definition at line 233 of file IDPerfMonZmumu.h.

233{};

◆ m_beamposY

float IDPerfMonZmumu::m_beamposY {}
private

Definition at line 234 of file IDPerfMonZmumu.h.

234{};

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> IDPerfMonZmumu::m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
private

used for truth parameters

Definition at line 155 of file IDPerfMonZmumu.h.

155{ this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };

◆ m_CBTrack_d0

std::vector<float> IDPerfMonZmumu::m_CBTrack_d0
private

Definition at line 386 of file IDPerfMonZmumu.h.

◆ m_CBTrack_eta

std::vector<float> IDPerfMonZmumu::m_CBTrack_eta
private

Definition at line 374 of file IDPerfMonZmumu.h.

◆ m_CBTrack_phi

std::vector<float> IDPerfMonZmumu::m_CBTrack_phi
private

Definition at line 380 of file IDPerfMonZmumu.h.

◆ m_CBTrack_pt

std::vector<float> IDPerfMonZmumu::m_CBTrack_pt
private

Definition at line 368 of file IDPerfMonZmumu.h.

◆ m_CBTrack_qoverp

std::vector<float> IDPerfMonZmumu::m_CBTrack_qoverp
private

Definition at line 398 of file IDPerfMonZmumu.h.

◆ m_CBTrack_sigma_d0

std::vector<float> IDPerfMonZmumu::m_CBTrack_sigma_d0
private

Definition at line 411 of file IDPerfMonZmumu.h.

◆ m_CBTrack_sigma_pt

std::vector<float> IDPerfMonZmumu::m_CBTrack_sigma_pt
private

Definition at line 406 of file IDPerfMonZmumu.h.

◆ m_CBTrack_sigma_qoverp

std::vector<float> IDPerfMonZmumu::m_CBTrack_sigma_qoverp
private

Definition at line 421 of file IDPerfMonZmumu.h.

◆ m_CBTrack_sigma_z0

std::vector<float> IDPerfMonZmumu::m_CBTrack_sigma_z0
private

Definition at line 416 of file IDPerfMonZmumu.h.

◆ m_CBTrack_z0

std::vector<float> IDPerfMonZmumu::m_CBTrack_z0
private

Definition at line 392 of file IDPerfMonZmumu.h.

◆ m_combTree

TTree* IDPerfMonZmumu::m_combTree
private

Definition at line 199 of file IDPerfMonZmumu.h.

◆ m_combTreeFolder

std::string IDPerfMonZmumu::m_combTreeFolder
private

Definition at line 188 of file IDPerfMonZmumu.h.

◆ m_combTreeName

std::string IDPerfMonZmumu::m_combTreeName
private

Definition at line 172 of file IDPerfMonZmumu.h.

◆ m_commonTree

TTree* IDPerfMonZmumu::m_commonTree
private

Definition at line 193 of file IDPerfMonZmumu.h.

◆ m_commonTreeFolder

std::string IDPerfMonZmumu::m_commonTreeFolder
private

Definition at line 182 of file IDPerfMonZmumu.h.

◆ m_commonTreeName

std::string IDPerfMonZmumu::m_commonTreeName
private

Definition at line 166 of file IDPerfMonZmumu.h.

◆ m_defaultTree

TTree* IDPerfMonZmumu::m_defaultTree
private

Definition at line 194 of file IDPerfMonZmumu.h.

◆ m_defaultTreeFolder

std::string IDPerfMonZmumu::m_defaultTreeFolder
private

Definition at line 183 of file IDPerfMonZmumu.h.

◆ m_defaultTreeName

std::string IDPerfMonZmumu::m_defaultTreeName
private

Definition at line 167 of file IDPerfMonZmumu.h.

◆ m_detStore

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

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doDebug

bool IDPerfMonZmumu::m_doDebug {}
private

Definition at line 207 of file IDPerfMonZmumu.h.

207{};

◆ m_doFourMuAnalysis

bool IDPerfMonZmumu::m_doFourMuAnalysis {}
private

Definition at line 123 of file IDPerfMonZmumu.h.

123{};

◆ m_doIP

bool IDPerfMonZmumu::m_doIP {}
private

Definition at line 122 of file IDPerfMonZmumu.h.

122{};

◆ m_doIPSelection

bool IDPerfMonZmumu::m_doIPSelection {true}
private

Definition at line 111 of file IDPerfMonZmumu.h.

111{true};

◆ m_doIsoSelection

bool IDPerfMonZmumu::m_doIsoSelection {true}
private

Definition at line 110 of file IDPerfMonZmumu.h.

110{true};

◆ m_doMCPSelection

bool IDPerfMonZmumu::m_doMCPSelection {true}
private

Definition at line 112 of file IDPerfMonZmumu.h.

112{true};

◆ m_doRefit

bool IDPerfMonZmumu::m_doRefit {}
private

Definition at line 120 of file IDPerfMonZmumu.h.

120{};

◆ m_doRemoval

bool IDPerfMonZmumu::m_doRemoval {}
private

Definition at line 206 of file IDPerfMonZmumu.h.

206{};

◆ m_el_negative1_d0

double IDPerfMonZmumu::m_el_negative1_d0 {}
private

Definition at line 307 of file IDPerfMonZmumu.h.

307{};

◆ m_el_negative1_d0_err

double IDPerfMonZmumu::m_el_negative1_d0_err {}
private

Definition at line 309 of file IDPerfMonZmumu.h.

309{};

◆ m_el_negative1_d0_PV

double IDPerfMonZmumu::m_el_negative1_d0_PV {}
private

Definition at line 311 of file IDPerfMonZmumu.h.

311{};

◆ m_el_negative1_d0_PVerr

double IDPerfMonZmumu::m_el_negative1_d0_PVerr {}
private

Definition at line 313 of file IDPerfMonZmumu.h.

313{};

◆ m_el_negative1_px

double IDPerfMonZmumu::m_el_negative1_px {}
private

Definition at line 303 of file IDPerfMonZmumu.h.

303{};

◆ m_el_negative1_py

double IDPerfMonZmumu::m_el_negative1_py {}
private

Definition at line 304 of file IDPerfMonZmumu.h.

304{};

◆ m_el_negative1_pz

double IDPerfMonZmumu::m_el_negative1_pz {}
private

Definition at line 305 of file IDPerfMonZmumu.h.

305{};

◆ m_el_negative1_vtx

int IDPerfMonZmumu::m_el_negative1_vtx {}
private

Definition at line 314 of file IDPerfMonZmumu.h.

314{};

◆ m_el_negative1_z0

double IDPerfMonZmumu::m_el_negative1_z0 {}
private

Definition at line 306 of file IDPerfMonZmumu.h.

306{};

◆ m_el_negative1_z0_err

double IDPerfMonZmumu::m_el_negative1_z0_err {}
private

Definition at line 308 of file IDPerfMonZmumu.h.

308{};

◆ m_el_negative1_z0_PV

double IDPerfMonZmumu::m_el_negative1_z0_PV {}
private

Definition at line 310 of file IDPerfMonZmumu.h.

310{};

◆ m_el_negative1_z0_PVerr

double IDPerfMonZmumu::m_el_negative1_z0_PVerr {}
private

Definition at line 312 of file IDPerfMonZmumu.h.

312{};

◆ m_el_negative2_d0

double IDPerfMonZmumu::m_el_negative2_d0 {}
private

Definition at line 320 of file IDPerfMonZmumu.h.

320{};

◆ m_el_negative2_d0_err

double IDPerfMonZmumu::m_el_negative2_d0_err {}
private

Definition at line 322 of file IDPerfMonZmumu.h.

322{};

◆ m_el_negative2_d0_PV

double IDPerfMonZmumu::m_el_negative2_d0_PV {}
private

Definition at line 324 of file IDPerfMonZmumu.h.

324{};

◆ m_el_negative2_d0_PVerr

double IDPerfMonZmumu::m_el_negative2_d0_PVerr {}
private

Definition at line 326 of file IDPerfMonZmumu.h.

326{};

◆ m_el_negative2_px

double IDPerfMonZmumu::m_el_negative2_px {}
private

Definition at line 316 of file IDPerfMonZmumu.h.

316{};

◆ m_el_negative2_py

double IDPerfMonZmumu::m_el_negative2_py {}
private

Definition at line 317 of file IDPerfMonZmumu.h.

317{};

◆ m_el_negative2_pz

double IDPerfMonZmumu::m_el_negative2_pz {}
private

Definition at line 318 of file IDPerfMonZmumu.h.

318{};

◆ m_el_negative2_vtx

int IDPerfMonZmumu::m_el_negative2_vtx {}
private

Definition at line 327 of file IDPerfMonZmumu.h.

327{};

◆ m_el_negative2_z0

double IDPerfMonZmumu::m_el_negative2_z0 {}
private

Definition at line 319 of file IDPerfMonZmumu.h.

319{};

◆ m_el_negative2_z0_err

double IDPerfMonZmumu::m_el_negative2_z0_err {}
private

Definition at line 321 of file IDPerfMonZmumu.h.

321{};

◆ m_el_negative2_z0_PV

double IDPerfMonZmumu::m_el_negative2_z0_PV {}
private

Definition at line 323 of file IDPerfMonZmumu.h.

323{};

◆ m_el_negative2_z0_PVerr

double IDPerfMonZmumu::m_el_negative2_z0_PVerr {}
private

Definition at line 325 of file IDPerfMonZmumu.h.

325{};

◆ m_el_positive1_d0

double IDPerfMonZmumu::m_el_positive1_d0 {}
private

Definition at line 333 of file IDPerfMonZmumu.h.

333{};

◆ m_el_positive1_d0_err

double IDPerfMonZmumu::m_el_positive1_d0_err {}
private

Definition at line 335 of file IDPerfMonZmumu.h.

335{};

◆ m_el_positive1_d0_PV

double IDPerfMonZmumu::m_el_positive1_d0_PV {}
private

Definition at line 337 of file IDPerfMonZmumu.h.

337{};

◆ m_el_positive1_px

double IDPerfMonZmumu::m_el_positive1_px {}
private

Definition at line 329 of file IDPerfMonZmumu.h.

329{};

◆ m_el_positive1_py

double IDPerfMonZmumu::m_el_positive1_py {}
private

Definition at line 330 of file IDPerfMonZmumu.h.

330{};

◆ m_el_positive1_pz

double IDPerfMonZmumu::m_el_positive1_pz {}
private

Definition at line 331 of file IDPerfMonZmumu.h.

331{};

◆ m_el_positive1_vtx

int IDPerfMonZmumu::m_el_positive1_vtx {}
private

Definition at line 340 of file IDPerfMonZmumu.h.

340{};

◆ m_el_positive1_z0

double IDPerfMonZmumu::m_el_positive1_z0 {}
private

Definition at line 332 of file IDPerfMonZmumu.h.

332{};

◆ m_el_positive1_z0_err

double IDPerfMonZmumu::m_el_positive1_z0_err {}
private

Definition at line 334 of file IDPerfMonZmumu.h.

334{};

◆ m_el_positive1_z0_PV

double IDPerfMonZmumu::m_el_positive1_z0_PV {}
private

Definition at line 336 of file IDPerfMonZmumu.h.

336{};

◆ m_el_positive1_z0_PVerr

double IDPerfMonZmumu::m_el_positive1_z0_PVerr {}
private

Definition at line 338 of file IDPerfMonZmumu.h.

338{};

◆ m_el_positive2_d0

double IDPerfMonZmumu::m_el_positive2_d0 {}
private

Definition at line 346 of file IDPerfMonZmumu.h.

346{};

◆ m_el_positive2_d0_err

double IDPerfMonZmumu::m_el_positive2_d0_err {}
private

Definition at line 348 of file IDPerfMonZmumu.h.

348{};

◆ m_el_positive2_d0_PV

double IDPerfMonZmumu::m_el_positive2_d0_PV {}
private

Definition at line 350 of file IDPerfMonZmumu.h.

350{};

◆ m_el_positive2_px

double IDPerfMonZmumu::m_el_positive2_px {}
private

Definition at line 342 of file IDPerfMonZmumu.h.

342{};

◆ m_el_positive2_py

double IDPerfMonZmumu::m_el_positive2_py {}
private

Definition at line 343 of file IDPerfMonZmumu.h.

343{};

◆ m_el_positive2_pz

double IDPerfMonZmumu::m_el_positive2_pz {}
private

Definition at line 344 of file IDPerfMonZmumu.h.

344{};

◆ m_el_positive2_vtx

int IDPerfMonZmumu::m_el_positive2_vtx {}
private

Definition at line 353 of file IDPerfMonZmumu.h.

353{};

◆ m_el_positive2_z0

double IDPerfMonZmumu::m_el_positive2_z0 {}
private

Definition at line 345 of file IDPerfMonZmumu.h.

345{};

◆ m_el_positive2_z0_err

double IDPerfMonZmumu::m_el_positive2_z0_err {}
private

Definition at line 347 of file IDPerfMonZmumu.h.

347{};

◆ m_el_positive2_z0_PV

double IDPerfMonZmumu::m_el_positive2_z0_PV {}
private

Definition at line 349 of file IDPerfMonZmumu.h.

349{};

◆ m_el_positive2_z0_PVerr

double IDPerfMonZmumu::m_el_positive2_z0_PVerr {}
private

Definition at line 351 of file IDPerfMonZmumu.h.

351{};

◆ m_el_psoitive1_d0_PVerr

double IDPerfMonZmumu::m_el_psoitive1_d0_PVerr {}
private

Definition at line 339 of file IDPerfMonZmumu.h.

339{};

◆ m_el_psoitive2_d0_PVerr

double IDPerfMonZmumu::m_el_psoitive2_d0_PVerr {}
private

Definition at line 352 of file IDPerfMonZmumu.h.

352{};

◆ m_event_mu

unsigned int IDPerfMonZmumu::m_event_mu {}
private

Definition at line 228 of file IDPerfMonZmumu.h.

228{};

◆ m_event_weight

float IDPerfMonZmumu::m_event_weight {}
private

Definition at line 229 of file IDPerfMonZmumu.h.

229{};

◆ m_EventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> IDPerfMonZmumu::m_EventInfoKey {this, "EventInfoKey", "EventInfo"}
private

Definition at line 436 of file IDPerfMonZmumu.h.

436{this, "EventInfoKey", "EventInfo"};

◆ m_evtNumber

unsigned int IDPerfMonZmumu::m_evtNumber {}
private

Definition at line 226 of file IDPerfMonZmumu.h.

226{};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::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 121 of file AthAlgorithm.h.

◆ m_extrapolator

ToolHandle<Trk::IExtrapolator> IDPerfMonZmumu::m_extrapolator
private

Definition at line 156 of file IDPerfMonZmumu.h.

◆ m_FourMuTree

TTree* IDPerfMonZmumu::m_FourMuTree
private

Definition at line 201 of file IDPerfMonZmumu.h.

◆ m_FourMuTreeFolder

std::string IDPerfMonZmumu::m_FourMuTreeFolder
private

Root Validation Tree.

Definition at line 190 of file IDPerfMonZmumu.h.

◆ m_FourMuTreeName

std::string IDPerfMonZmumu::m_FourMuTreeName
private

Definition at line 174 of file IDPerfMonZmumu.h.

◆ m_h_cutflow

TH1F* IDPerfMonZmumu::m_h_cutflow {}
private

link vector to map HepMC onto xAOD truth

Definition at line 223 of file IDPerfMonZmumu.h.

223{};

◆ m_IDTrack_d0

std::vector<float> IDPerfMonZmumu::m_IDTrack_d0
private

Definition at line 385 of file IDPerfMonZmumu.h.

◆ m_IDTrack_eta

std::vector<float> IDPerfMonZmumu::m_IDTrack_eta
private

Definition at line 373 of file IDPerfMonZmumu.h.

◆ m_IDTrack_phi

std::vector<float> IDPerfMonZmumu::m_IDTrack_phi
private

Definition at line 379 of file IDPerfMonZmumu.h.

◆ m_IDTrack_pt

std::vector<float> IDPerfMonZmumu::m_IDTrack_pt
private

Definition at line 367 of file IDPerfMonZmumu.h.

◆ m_IDTrack_qoverp

std::vector<float> IDPerfMonZmumu::m_IDTrack_qoverp
private

Definition at line 397 of file IDPerfMonZmumu.h.

◆ m_IDTrack_sigma_d0

std::vector<float> IDPerfMonZmumu::m_IDTrack_sigma_d0
private

Definition at line 410 of file IDPerfMonZmumu.h.

◆ m_IDTrack_sigma_pt

std::vector<float> IDPerfMonZmumu::m_IDTrack_sigma_pt
private

Definition at line 405 of file IDPerfMonZmumu.h.

◆ m_IDTrack_sigma_qoverp

std::vector<float> IDPerfMonZmumu::m_IDTrack_sigma_qoverp
private

Definition at line 420 of file IDPerfMonZmumu.h.

◆ m_IDTrack_sigma_z0

std::vector<float> IDPerfMonZmumu::m_IDTrack_sigma_z0
private

Definition at line 415 of file IDPerfMonZmumu.h.

◆ m_IDTrack_z0

std::vector<float> IDPerfMonZmumu::m_IDTrack_z0
private

Definition at line 391 of file IDPerfMonZmumu.h.

◆ m_IDTree

TTree* IDPerfMonZmumu::m_IDTree
private

Definition at line 195 of file IDPerfMonZmumu.h.

◆ m_IDTreeFolder

std::string IDPerfMonZmumu::m_IDTreeFolder
private

Definition at line 184 of file IDPerfMonZmumu.h.

◆ m_IDTreeName

std::string IDPerfMonZmumu::m_IDTreeName
private

Definition at line 168 of file IDPerfMonZmumu.h.

◆ m_isMC

bool IDPerfMonZmumu::m_isMC {}
private

Definition at line 119 of file IDPerfMonZmumu.h.

119{};

◆ m_LeadingMuonPtCut

double IDPerfMonZmumu::m_LeadingMuonPtCut {20.}
private

Definition at line 115 of file IDPerfMonZmumu.h.

115{20.};

◆ m_lumi_block

unsigned int IDPerfMonZmumu::m_lumi_block {}
private

Definition at line 227 of file IDPerfMonZmumu.h.

227{};

◆ m_MassWindowHigh

double IDPerfMonZmumu::m_MassWindowHigh {120.}
private

Definition at line 114 of file IDPerfMonZmumu.h.

114{120.};

◆ m_MassWindowLow

double IDPerfMonZmumu::m_MassWindowLow {60.}
private

Definition at line 113 of file IDPerfMonZmumu.h.

113{60.};

◆ m_maxGoodLumiBlock

int IDPerfMonZmumu::m_maxGoodLumiBlock {}
private

Definition at line 128 of file IDPerfMonZmumu.h.

128{};

◆ m_met

double IDPerfMonZmumu::m_met {}
private

Definition at line 363 of file IDPerfMonZmumu.h.

363{};

◆ m_metphi

double IDPerfMonZmumu::m_metphi {}
private

Definition at line 364 of file IDPerfMonZmumu.h.

364{};

◆ m_minGoodLumiBlock

int IDPerfMonZmumu::m_minGoodLumiBlock {}
private

Definition at line 127 of file IDPerfMonZmumu.h.

127{};

◆ m_MSTree

TTree* IDPerfMonZmumu::m_MSTree
private

Definition at line 200 of file IDPerfMonZmumu.h.

◆ m_MSTreeFolder

std::string IDPerfMonZmumu::m_MSTreeFolder
private

Definition at line 189 of file IDPerfMonZmumu.h.

◆ m_MSTreeName

std::string IDPerfMonZmumu::m_MSTreeName
private

Definition at line 173 of file IDPerfMonZmumu.h.

◆ m_MuonQualityName

std::string IDPerfMonZmumu::m_MuonQualityName
private

Definition at line 433 of file IDPerfMonZmumu.h.

◆ m_muonSelector

ToolHandle<CP::IMuonSelectionTool> IDPerfMonZmumu::m_muonSelector
private

used to pass a custom muon selector

Definition at line 159 of file IDPerfMonZmumu.h.

◆ m_nBLhits

std::vector<int> IDPerfMonZmumu::m_nBLhits
private

Definition at line 425 of file IDPerfMonZmumu.h.

◆ m_negative_1_vtx

int IDPerfMonZmumu::m_negative_1_vtx {}
private

Definition at line 286 of file IDPerfMonZmumu.h.

286{};

◆ m_negative_2_d0

double IDPerfMonZmumu::m_negative_2_d0 {}
private

Definition at line 293 of file IDPerfMonZmumu.h.

293{};

◆ m_negative_2_d0_err

double IDPerfMonZmumu::m_negative_2_d0_err {}
private

Definition at line 295 of file IDPerfMonZmumu.h.

295{};

◆ m_negative_2_d0_PV

double IDPerfMonZmumu::m_negative_2_d0_PV {}
private

Definition at line 297 of file IDPerfMonZmumu.h.

297{};

◆ m_negative_2_d0_PVerr

double IDPerfMonZmumu::m_negative_2_d0_PVerr {}
private

Definition at line 299 of file IDPerfMonZmumu.h.

299{};

◆ m_negative_2_px

double IDPerfMonZmumu::m_negative_2_px {}
private

Definition at line 289 of file IDPerfMonZmumu.h.

289{};

◆ m_negative_2_py

double IDPerfMonZmumu::m_negative_2_py {}
private

Definition at line 290 of file IDPerfMonZmumu.h.

290{};

◆ m_negative_2_pz

double IDPerfMonZmumu::m_negative_2_pz {}
private

Definition at line 291 of file IDPerfMonZmumu.h.

291{};

◆ m_negative_2_vtx

int IDPerfMonZmumu::m_negative_2_vtx {}
private

Definition at line 300 of file IDPerfMonZmumu.h.

300{};

◆ m_negative_2_z0

double IDPerfMonZmumu::m_negative_2_z0 {}
private

Definition at line 292 of file IDPerfMonZmumu.h.

292{};

◆ m_negative_2_z0_err

double IDPerfMonZmumu::m_negative_2_z0_err {}
private

Definition at line 294 of file IDPerfMonZmumu.h.

294{};

◆ m_negative_2_z0_PV

double IDPerfMonZmumu::m_negative_2_z0_PV {}
private

Definition at line 296 of file IDPerfMonZmumu.h.

296{};

◆ m_negative_2_z0_PVerr

double IDPerfMonZmumu::m_negative_2_z0_PVerr {}
private

Definition at line 298 of file IDPerfMonZmumu.h.

298{};

◆ m_negative_d0

double IDPerfMonZmumu::m_negative_d0 {}
private

Definition at line 276 of file IDPerfMonZmumu.h.

276{};

◆ m_negative_d0_err

double IDPerfMonZmumu::m_negative_d0_err {}
private

Definition at line 278 of file IDPerfMonZmumu.h.

278{};

◆ m_negative_d0_PV

double IDPerfMonZmumu::m_negative_d0_PV {}
private

Definition at line 281 of file IDPerfMonZmumu.h.

281{};

◆ m_negative_d0_PVerr

double IDPerfMonZmumu::m_negative_d0_PVerr {}
private

Definition at line 283 of file IDPerfMonZmumu.h.

283{};

◆ m_negative_eta

double IDPerfMonZmumu::m_negative_eta {}
private

Definition at line 274 of file IDPerfMonZmumu.h.

274{};

◆ m_negative_parent

int IDPerfMonZmumu::m_negative_parent {}
private

Definition at line 287 of file IDPerfMonZmumu.h.

287{};

◆ m_negative_phi

double IDPerfMonZmumu::m_negative_phi {}
private

Definition at line 273 of file IDPerfMonZmumu.h.

273{};

◆ m_negative_pt

double IDPerfMonZmumu::m_negative_pt {}
private

Definition at line 271 of file IDPerfMonZmumu.h.

271{};

◆ m_negative_px

double IDPerfMonZmumu::m_negative_px {}
private

Definition at line 269 of file IDPerfMonZmumu.h.

269{};

◆ m_negative_py

double IDPerfMonZmumu::m_negative_py {}
private

Definition at line 270 of file IDPerfMonZmumu.h.

270{};

◆ m_negative_pz

double IDPerfMonZmumu::m_negative_pz {}
private

Definition at line 272 of file IDPerfMonZmumu.h.

272{};

◆ m_negative_qoverp

double IDPerfMonZmumu::m_negative_qoverp {}
private

Definition at line 284 of file IDPerfMonZmumu.h.

284{};

◆ m_negative_sigma_pt

double IDPerfMonZmumu::m_negative_sigma_pt {}
private

Definition at line 279 of file IDPerfMonZmumu.h.

279{};

◆ m_negative_sigma_qoverp

double IDPerfMonZmumu::m_negative_sigma_qoverp {}
private

Definition at line 285 of file IDPerfMonZmumu.h.

285{};

◆ m_negative_z0

double IDPerfMonZmumu::m_negative_z0 {}
private

Definition at line 275 of file IDPerfMonZmumu.h.

275{};

◆ m_negative_z0_err

double IDPerfMonZmumu::m_negative_z0_err {}
private

Definition at line 277 of file IDPerfMonZmumu.h.

277{};

◆ m_negative_z0_PV

double IDPerfMonZmumu::m_negative_z0_PV {}
private

Definition at line 280 of file IDPerfMonZmumu.h.

280{};

◆ m_negative_z0_PVerr

double IDPerfMonZmumu::m_negative_z0_PVerr {}
private

Definition at line 282 of file IDPerfMonZmumu.h.

282{};

◆ m_nPIXhits

std::vector<int> IDPerfMonZmumu::m_nPIXhits
private

Definition at line 426 of file IDPerfMonZmumu.h.

◆ m_nSCThits

std::vector<int> IDPerfMonZmumu::m_nSCThits
private

Definition at line 427 of file IDPerfMonZmumu.h.

◆ m_nTrkInVtx

unsigned int IDPerfMonZmumu::m_nTrkInVtx {}
private

Definition at line 361 of file IDPerfMonZmumu.h.

361{};

◆ m_nTRThits

std::vector<int> IDPerfMonZmumu::m_nTRThits
private

Definition at line 428 of file IDPerfMonZmumu.h.

◆ m_nVertex

unsigned int IDPerfMonZmumu::m_nVertex {}
private

Definition at line 232 of file IDPerfMonZmumu.h.

232{};

◆ m_OpeningAngleCut

double IDPerfMonZmumu::m_OpeningAngleCut {0.2}
private

Definition at line 117 of file IDPerfMonZmumu.h.

117{0.2};

◆ m_outputTracksName

std::string IDPerfMonZmumu::m_outputTracksName
private

Definition at line 432 of file IDPerfMonZmumu.h.

◆ m_positive_1_vtx

int IDPerfMonZmumu::m_positive_1_vtx {}
private

Definition at line 253 of file IDPerfMonZmumu.h.

253{};

◆ m_positive_2_d0

double IDPerfMonZmumu::m_positive_2_d0 {}
private

Definition at line 260 of file IDPerfMonZmumu.h.

260{};

◆ m_positive_2_d0_err

double IDPerfMonZmumu::m_positive_2_d0_err {}
private

Definition at line 262 of file IDPerfMonZmumu.h.

262{};

◆ m_positive_2_d0_PV

double IDPerfMonZmumu::m_positive_2_d0_PV {}
private

Definition at line 264 of file IDPerfMonZmumu.h.

264{};

◆ m_positive_2_d0_PVerr

double IDPerfMonZmumu::m_positive_2_d0_PVerr {}
private

Definition at line 266 of file IDPerfMonZmumu.h.

266{};

◆ m_positive_2_px

double IDPerfMonZmumu::m_positive_2_px {}
private

Definition at line 256 of file IDPerfMonZmumu.h.

256{};

◆ m_positive_2_py

double IDPerfMonZmumu::m_positive_2_py {}
private

Definition at line 257 of file IDPerfMonZmumu.h.

257{};

◆ m_positive_2_pz

double IDPerfMonZmumu::m_positive_2_pz {}
private

Definition at line 258 of file IDPerfMonZmumu.h.

258{};

◆ m_positive_2_vtx

int IDPerfMonZmumu::m_positive_2_vtx {}
private

Definition at line 267 of file IDPerfMonZmumu.h.

267{};

◆ m_positive_2_z0

double IDPerfMonZmumu::m_positive_2_z0 {}
private

Definition at line 259 of file IDPerfMonZmumu.h.

259{};

◆ m_positive_2_z0_err

double IDPerfMonZmumu::m_positive_2_z0_err {}
private

Definition at line 261 of file IDPerfMonZmumu.h.

261{};

◆ m_positive_2_z0_PV

double IDPerfMonZmumu::m_positive_2_z0_PV {}
private

Definition at line 263 of file IDPerfMonZmumu.h.

263{};

◆ m_positive_2_z0_PVerr

double IDPerfMonZmumu::m_positive_2_z0_PVerr {}
private

Definition at line 265 of file IDPerfMonZmumu.h.

265{};

◆ m_positive_d0

double IDPerfMonZmumu::m_positive_d0 {}
private

Definition at line 243 of file IDPerfMonZmumu.h.

243{};

◆ m_positive_d0_err

double IDPerfMonZmumu::m_positive_d0_err {}
private

Definition at line 245 of file IDPerfMonZmumu.h.

245{};

◆ m_positive_d0_PV

double IDPerfMonZmumu::m_positive_d0_PV {}
private

Definition at line 248 of file IDPerfMonZmumu.h.

248{};

◆ m_positive_d0_PVerr

double IDPerfMonZmumu::m_positive_d0_PVerr {}
private

Definition at line 250 of file IDPerfMonZmumu.h.

250{};

◆ m_positive_eta

double IDPerfMonZmumu::m_positive_eta {}
private

Definition at line 241 of file IDPerfMonZmumu.h.

241{};

◆ m_positive_parent

int IDPerfMonZmumu::m_positive_parent {}
private

Definition at line 254 of file IDPerfMonZmumu.h.

254{};

◆ m_positive_phi

double IDPerfMonZmumu::m_positive_phi {}
private

Definition at line 240 of file IDPerfMonZmumu.h.

240{};

◆ m_positive_pt

double IDPerfMonZmumu::m_positive_pt {}
private

Definition at line 238 of file IDPerfMonZmumu.h.

238{};

◆ m_positive_px

double IDPerfMonZmumu::m_positive_px {}
private

Definition at line 236 of file IDPerfMonZmumu.h.

236{};

◆ m_positive_py

double IDPerfMonZmumu::m_positive_py {}
private

Definition at line 237 of file IDPerfMonZmumu.h.

237{};

◆ m_positive_pz

double IDPerfMonZmumu::m_positive_pz {}
private

Definition at line 239 of file IDPerfMonZmumu.h.

239{};

◆ m_positive_qoverp

double IDPerfMonZmumu::m_positive_qoverp {}
private

Definition at line 251 of file IDPerfMonZmumu.h.

251{};

◆ m_positive_sigma_pt

double IDPerfMonZmumu::m_positive_sigma_pt {}
private

Definition at line 246 of file IDPerfMonZmumu.h.

246{};

◆ m_positive_sigma_qoverp

double IDPerfMonZmumu::m_positive_sigma_qoverp {}
private

Definition at line 252 of file IDPerfMonZmumu.h.

252{};

◆ m_positive_z0

double IDPerfMonZmumu::m_positive_z0 {}
private

Definition at line 242 of file IDPerfMonZmumu.h.

242{};

◆ m_positive_z0_err

double IDPerfMonZmumu::m_positive_z0_err {}
private

Definition at line 244 of file IDPerfMonZmumu.h.

244{};

◆ m_positive_z0_PV

double IDPerfMonZmumu::m_positive_z0_PV {}
private

Definition at line 247 of file IDPerfMonZmumu.h.

247{};

◆ m_positive_z0_PVerr

double IDPerfMonZmumu::m_positive_z0_PVerr {}
private

Definition at line 249 of file IDPerfMonZmumu.h.

249{};

◆ m_pv_x

double IDPerfMonZmumu::m_pv_x {}
private

Definition at line 358 of file IDPerfMonZmumu.h.

358{};

◆ m_pv_y

double IDPerfMonZmumu::m_pv_y {}
private

Definition at line 359 of file IDPerfMonZmumu.h.

359{};

◆ m_pv_z

double IDPerfMonZmumu::m_pv_z {}
private

Definition at line 360 of file IDPerfMonZmumu.h.

360{};

◆ m_Refit1_d0

std::vector<float> IDPerfMonZmumu::m_Refit1_d0
private

Definition at line 387 of file IDPerfMonZmumu.h.

◆ m_Refit1_eta

std::vector<float> IDPerfMonZmumu::m_Refit1_eta
private

Definition at line 375 of file IDPerfMonZmumu.h.

◆ m_Refit1_phi

std::vector<float> IDPerfMonZmumu::m_Refit1_phi
private

Definition at line 381 of file IDPerfMonZmumu.h.

◆ m_Refit1_pt

std::vector<float> IDPerfMonZmumu::m_Refit1_pt
private

Definition at line 369 of file IDPerfMonZmumu.h.

◆ m_Refit1_qoverp

std::vector<float> IDPerfMonZmumu::m_Refit1_qoverp
private

Definition at line 399 of file IDPerfMonZmumu.h.

◆ m_Refit1_sigma_d0

std::vector<float> IDPerfMonZmumu::m_Refit1_sigma_d0
private

Definition at line 412 of file IDPerfMonZmumu.h.

◆ m_Refit1_sigma_pt

std::vector<float> IDPerfMonZmumu::m_Refit1_sigma_pt
private

Definition at line 407 of file IDPerfMonZmumu.h.

◆ m_Refit1_sigma_qoverp

std::vector<float> IDPerfMonZmumu::m_Refit1_sigma_qoverp
private

Definition at line 422 of file IDPerfMonZmumu.h.

◆ m_Refit1_sigma_z0

std::vector<float> IDPerfMonZmumu::m_Refit1_sigma_z0
private

Definition at line 417 of file IDPerfMonZmumu.h.

◆ m_Refit1_z0

std::vector<float> IDPerfMonZmumu::m_Refit1_z0
private

Definition at line 393 of file IDPerfMonZmumu.h.

◆ m_refit1Tree

TTree* IDPerfMonZmumu::m_refit1Tree
private

Definition at line 196 of file IDPerfMonZmumu.h.

◆ m_refit1TreeFolder

std::string IDPerfMonZmumu::m_refit1TreeFolder
private

Definition at line 185 of file IDPerfMonZmumu.h.

◆ m_refit1TreeName

std::string IDPerfMonZmumu::m_refit1TreeName
private

Definition at line 169 of file IDPerfMonZmumu.h.

◆ m_Refit2_d0

std::vector<float> IDPerfMonZmumu::m_Refit2_d0
private

Definition at line 388 of file IDPerfMonZmumu.h.

◆ m_Refit2_eta

std::vector<float> IDPerfMonZmumu::m_Refit2_eta
private

Definition at line 376 of file IDPerfMonZmumu.h.

◆ m_Refit2_phi

std::vector<float> IDPerfMonZmumu::m_Refit2_phi
private

Definition at line 382 of file IDPerfMonZmumu.h.

◆ m_Refit2_pt

std::vector<float> IDPerfMonZmumu::m_Refit2_pt
private

Definition at line 370 of file IDPerfMonZmumu.h.

◆ m_Refit2_qoverp

std::vector<float> IDPerfMonZmumu::m_Refit2_qoverp
private

Definition at line 400 of file IDPerfMonZmumu.h.

◆ m_Refit2_sigma_d0

std::vector<float> IDPerfMonZmumu::m_Refit2_sigma_d0
private

Definition at line 413 of file IDPerfMonZmumu.h.

◆ m_Refit2_sigma_pt

std::vector<float> IDPerfMonZmumu::m_Refit2_sigma_pt
private

Definition at line 408 of file IDPerfMonZmumu.h.

◆ m_Refit2_sigma_qoverp

std::vector<float> IDPerfMonZmumu::m_Refit2_sigma_qoverp
private

Definition at line 423 of file IDPerfMonZmumu.h.

◆ m_Refit2_sigma_z0

std::vector<float> IDPerfMonZmumu::m_Refit2_sigma_z0
private

Definition at line 418 of file IDPerfMonZmumu.h.

◆ m_Refit2_z0

std::vector<float> IDPerfMonZmumu::m_Refit2_z0
private

Definition at line 394 of file IDPerfMonZmumu.h.

◆ m_refit2Tree

TTree* IDPerfMonZmumu::m_refit2Tree
private

Definition at line 197 of file IDPerfMonZmumu.h.

◆ m_refit2TreeFolder

std::string IDPerfMonZmumu::m_refit2TreeFolder
private

Definition at line 186 of file IDPerfMonZmumu.h.

◆ m_refit2TreeName

std::string IDPerfMonZmumu::m_refit2TreeName
private

Definition at line 170 of file IDPerfMonZmumu.h.

◆ m_runNumber

unsigned int IDPerfMonZmumu::m_runNumber {}
private

Definition at line 225 of file IDPerfMonZmumu.h.

225{};

◆ m_SecondMuonPtCut

double IDPerfMonZmumu::m_SecondMuonPtCut {15.}
private

Definition at line 116 of file IDPerfMonZmumu.h.

116{15.};

◆ m_selTool

ToolHandle< InDet::IInDetTrackSelectionTool > IDPerfMonZmumu::m_selTool
private

The track selection Tool.

Definition at line 148 of file IDPerfMonZmumu.h.

◆ m_skipMS

bool IDPerfMonZmumu::m_skipMS {}
private

Definition at line 125 of file IDPerfMonZmumu.h.

125{};

◆ m_storeZmumuNtuple

bool IDPerfMonZmumu::m_storeZmumuNtuple {true}
private

Definition at line 124 of file IDPerfMonZmumu.h.

124{true};

◆ m_sTriggerChainName

std::string IDPerfMonZmumu::m_sTriggerChainName
private

Definition at line 431 of file IDPerfMonZmumu.h.

◆ m_trackContainerName

SG::ReadHandleKey<xAOD::TrackParticleContainer> IDPerfMonZmumu::m_trackContainerName {this, "trackContainerName", "InDetTrackParticles"}
private

IDTtacks.

Definition at line 215 of file IDPerfMonZmumu.h.

215{this, "trackContainerName", "InDetTrackParticles"};

◆ m_trackParticleName

std::string IDPerfMonZmumu::m_trackParticleName
private

Track(Particle)TruthCollection input name.

Definition at line 219 of file IDPerfMonZmumu.h.

◆ m_TrackRefitter1

ToolHandle<IegammaTrkRefitterTool> IDPerfMonZmumu::m_TrackRefitter1
private

The track refitter.

Definition at line 132 of file IDPerfMonZmumu.h.

◆ m_TrackRefitter2

ToolHandle<IegammaTrkRefitterTool> IDPerfMonZmumu::m_TrackRefitter2
private

The track refitter.

Definition at line 135 of file IDPerfMonZmumu.h.

◆ m_trackToVertexIPEstimator

ToolHandle< Trk::ITrackToVertexIPEstimator > IDPerfMonZmumu::m_trackToVertexIPEstimator
private

Needed for IP resolution studies.

Definition at line 152 of file IDPerfMonZmumu.h.

◆ m_trackToVertexTool

ToolHandle<Reco::ITrackToVertex> IDPerfMonZmumu::m_trackToVertexTool
private

tool to extrapolate tracks to BL

Definition at line 138 of file IDPerfMonZmumu.h.

◆ m_triggerDecision

ToolHandle<Trig::TrigDecisionTool> IDPerfMonZmumu::m_triggerDecision
private

Definition at line 141 of file IDPerfMonZmumu.h.

◆ m_triggerMatching

ToolHandle<Trig::IMatchingTool> IDPerfMonZmumu::m_triggerMatching
private

Definition at line 145 of file IDPerfMonZmumu.h.

◆ m_triggerName

std::string IDPerfMonZmumu::m_triggerName
private

Definition at line 231 of file IDPerfMonZmumu.h.

◆ m_triggerPrescale

int IDPerfMonZmumu::m_triggerPrescale {}
private

Definition at line 230 of file IDPerfMonZmumu.h.

230{};

◆ m_Trk2VtxAssociationTool

ToolHandle< CP::ITrackVertexAssociationTool > IDPerfMonZmumu::m_Trk2VtxAssociationTool
private

Definition at line 209 of file IDPerfMonZmumu.h.

◆ m_Truth_d0

std::vector<float> IDPerfMonZmumu::m_Truth_d0
private

Definition at line 389 of file IDPerfMonZmumu.h.

◆ m_Truth_eta

std::vector<float> IDPerfMonZmumu::m_Truth_eta
private

Definition at line 377 of file IDPerfMonZmumu.h.

◆ m_Truth_parent

std::vector<int> IDPerfMonZmumu::m_Truth_parent
private

Definition at line 403 of file IDPerfMonZmumu.h.

◆ m_Truth_phi

std::vector<float> IDPerfMonZmumu::m_Truth_phi
private

Definition at line 383 of file IDPerfMonZmumu.h.

◆ m_Truth_pt

std::vector<float> IDPerfMonZmumu::m_Truth_pt
private

Definition at line 371 of file IDPerfMonZmumu.h.

◆ m_Truth_qoverp

std::vector<float> IDPerfMonZmumu::m_Truth_qoverp
private

Definition at line 401 of file IDPerfMonZmumu.h.

◆ m_Truth_z0

std::vector<float> IDPerfMonZmumu::m_Truth_z0
private

Definition at line 395 of file IDPerfMonZmumu.h.

◆ m_truthLinkVecName

std::string IDPerfMonZmumu::m_truthLinkVecName
private

TrackParticle input name.

Definition at line 220 of file IDPerfMonZmumu.h.

◆ m_truthName

std::string IDPerfMonZmumu::m_truthName
private

Definition at line 218 of file IDPerfMonZmumu.h.

◆ m_truthTree

TTree* IDPerfMonZmumu::m_truthTree
private

Definition at line 198 of file IDPerfMonZmumu.h.

◆ m_truthTreeFolder

std::string IDPerfMonZmumu::m_truthTreeFolder
private

Definition at line 187 of file IDPerfMonZmumu.h.

◆ m_truthTreeName

std::string IDPerfMonZmumu::m_truthTreeName
private

Definition at line 171 of file IDPerfMonZmumu.h.

◆ m_useCustomMuonSelector

bool IDPerfMonZmumu::m_useCustomMuonSelector {}
private

Definition at line 126 of file IDPerfMonZmumu.h.

126{};

◆ m_useTrackSelectionTool

bool IDPerfMonZmumu::m_useTrackSelectionTool {}
private

Definition at line 121 of file IDPerfMonZmumu.h.

121{};

◆ m_UseTrigger

bool IDPerfMonZmumu::m_UseTrigger {true}
private

Definition at line 109 of file IDPerfMonZmumu.h.

109{true};

◆ m_validationMode

bool IDPerfMonZmumu::m_validationMode
private

< boolean to switch to validation mode

validation tree name - to be acessed by this from root

Definition at line 163 of file IDPerfMonZmumu.h.

◆ m_ValidationTreeDescription

std::string IDPerfMonZmumu::m_ValidationTreeDescription
private

< validation tree description - second argument in TTree

stream/folder to for the TTree to be written out

Definition at line 179 of file IDPerfMonZmumu.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexKey

SG::ReadHandleKey<xAOD::VertexContainer> IDPerfMonZmumu::m_vertexKey { this, "VertexContainer", "PrimaryVertices", "primary vertex container" }
private

Definition at line 212 of file IDPerfMonZmumu.h.

212{ this, "VertexContainer", "PrimaryVertices", "primary vertex container" };

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ m_xZmm

ZmumuEvent IDPerfMonZmumu::m_xZmm
private

Definition at line 107 of file IDPerfMonZmumu.h.

◆ m_Z0GapCut

double IDPerfMonZmumu::m_Z0GapCut {5.}
private

Definition at line 118 of file IDPerfMonZmumu.h.

118{5.};

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