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 (const EventContext &ctx)
 Execute method.
virtual StatusCode finalize ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
 Get filter decision:
virtual void setFilterPassed (bool state, const EventContext &ctx) const
 Set filter decision:
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

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, const EventContext &ctx)
StatusCode FillRecParametersTP (const xAOD::TrackParticle *trackp, const xAOD::TrackParticle *trackp_for_unbias, double charge, const xAOD::Vertex *vertex, const EventContext &ctx)
StatusCode FillTruthParameters (const xAOD::TrackParticle *track, const EventContext &ctx)
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
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
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.
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 //m_commonTree cannot be null here
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 2304 of file IDPerfMonZmumu.cxx.

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

◆ Clear4MuNtupleVariables()

void IDPerfMonZmumu::Clear4MuNtupleVariables ( )
private

Definition at line 2454 of file IDPerfMonZmumu.cxx.

2455{
2456 m_positive_px = 0.;
2457 m_positive_py = 0.;
2458 m_positive_pz = 0.;
2459 m_positive_d0 = 0.;
2460 m_positive_z0 = 0.;
2461 m_positive_d0_err = 0.;
2462 m_positive_z0_err = 0.;
2464 m_positive_1_vtx = 0;
2466
2467 m_negative_px = 0.;
2468 m_negative_py = 0.;
2469 m_negative_pz = 0.;
2470 m_negative_d0 = 0.;
2471 m_negative_z0 = 0.;
2472 m_negative_d0_err = 0.;
2473 m_negative_z0_err = 0.;
2475 m_negative_1_vtx = 0;
2477
2478 m_positive_2_px = 0.;
2479 m_positive_2_py = 0.;
2480 m_positive_2_pz = 0.;
2481 m_positive_2_d0 = 0.;
2482 m_positive_2_z0 = 0.;
2485 m_positive_2_vtx = 0;
2486
2487 m_negative_2_px = 0.;
2488 m_negative_2_py = 0.;
2489 m_negative_2_pz = 0.;
2490 m_negative_2_d0 = 0.;
2491 m_negative_2_z0 = 0.;
2494 m_negative_2_vtx = 0;
2495
2496 // electrons
2497 m_el_negative1_px = 0.;
2498 m_el_negative1_py = 0.;
2499 m_el_negative1_pz = 0.;
2500 m_el_negative1_d0 = 0.;
2501 m_el_negative1_z0 = 0.;
2505
2506 m_el_negative2_px = 0.;
2507 m_el_negative2_py = 0.;
2508 m_el_negative2_pz = 0.;
2509 m_el_negative2_d0 = 0.;
2510 m_el_negative2_z0 = 0.;
2514
2515 m_el_positive1_px = 0.;
2516 m_el_positive1_py = 0.;
2517 m_el_positive1_pz = 0.;
2518 m_el_positive1_d0 = 0.;
2519 m_el_positive1_z0 = 0.;
2523
2524 m_el_positive2_px = 0.;
2525 m_el_positive2_py = 0.;
2526 m_el_positive2_pz = 0.;
2527 m_el_positive2_d0 = 0.;
2528 m_el_positive2_z0 = 0.;
2532
2533 // other quantities
2534 m_nVertex = 0;
2535 m_pv_x = 0; m_pv_y = 0; m_pv_z = 0;
2536 m_4mu_minv = 0.;
2537
2538 return;
2539}

◆ 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()

StatusCode IDPerfMonZmumu::execute ( const EventContext & ctx)
virtual

Execute method.

– START 4 lepton analysis

– END 4 lepton analysis

Implements 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, ctx);
939 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandleRec { m_beamSpotKey, ctx };
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, ctx);
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 SG::ReadHandle<xAOD::VertexContainer> vertices { m_vertexKey, ctx };
1068 for (const auto V : *vertices) {
1069 if (V->vertexType() == xAOD::VxType::VertexType::PriVtx) {
1070 // primaryVertex =V;
1071 ppos_comb_v = V;
1072 pneg_comb_v = V;
1073 break;
1074 }
1075 } // vertex
1076
1077 // before continuing check both particles have vertex
1078 if (!ppos_comb_v || !pneg_comb_v){
1079 ATH_MSG_WARNING( "Some or all of the requested particles have no vertex. Exiting event");
1080 return StatusCode::SUCCESS;
1081 }
1082 } // if (muon_pos && muon_neg)
1083 else { // this is the else of --> if (muon_pos && muon_neg)
1084 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Could not find CombinedMuon pos/neg in event"
1085 << " Run: " << m_runNumber
1086 << " event: " << m_evtNumber
1087 << " Lumiblock: " << m_lumi_block );
1088 return StatusCode::SUCCESS;
1089 }
1090
1091 //
1092 // If this point is reached -> there is a good mu+mu- pair and the muons have been associated to a vertex
1093 // So, ntuple can be filled
1094 //
1095 if ( m_xZmm.AcceptEvent() ) {
1096 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to fill ntuples for Run: " << m_runNumber
1097 << " event: " << m_evtNumber
1098 << " Lumiblock: " << m_lumi_block
1099 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ** some preliminaries are due though...");
1100
1102 // The track selection is applied to the InnerDetectorTrackParticle of the muons
1103 if ( !m_selTool->accept(muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) ) {
1104 ATH_MSG_DEBUG("Exiting because the ID segment of muon_pos do not pass the TrackSelection");
1105 return StatusCode::SUCCESS;
1106 }
1107 if ( !m_selTool->accept(muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)) ) {
1108 ATH_MSG_DEBUG("Exiting because the ID segment of muon_neg do not pass the TrackSelection");
1109 return StatusCode::SUCCESS;
1110 }
1111 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Good news ** pos and neg muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle) pass the trackSelection :)");
1112 }
1113 else {
1114 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track selection is not in use ");
1115 }
1116
1117 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** >> before fill rec with default: " << m_trackParticleName << " tracks << ");
1118
1119 if (m_storeZmumuNtuple) {
1120 // reset vectors
1122
1123 // Fill Inner Detector Tree
1124 ATH_MSG_DEBUG("-- >> going to fill ID muons params << --");
1125 success_pos = FillRecParametersTP (muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1126 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1127 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->charge(),
1128 ppos_comb_v, ctx);
1129 success_neg = FillRecParametersTP (muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1130 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1131 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->charge(),
1132 pneg_comb_v, ctx);
1133
1134 if (success_pos && success_neg) {
1135 // before filling the ntuple, extract the hits information. This is filled once and it is used for all track collections
1136 this->ExtractIDHitsInformation(muon_pos, muon_neg);
1137
1138 // Fill ntuple
1139 if (m_IDTree != nullptr) {
1140 ATH_MSG_DEBUG("-- Filling m_IDTree ntuple " << m_IDTree->GetName() << " entry " << m_IDTree->GetEntries()
1141 << " for run: " << m_runNumber
1142 << " event: " << m_evtNumber
1143 << " Lumiblock: " << m_lumi_block
1144 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1145 }
1146 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1147 << ", " << m_positive_py
1148 << ", " << m_positive_pz
1149 << " pt: " << muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->pt()
1150 << " d0: " << m_positive_d0
1151 << " z0: " << m_positive_z0
1152 << " d0unc: " << m_positive_d0_err
1153 << " sigma_pt: " << m_positive_sigma_pt);
1154 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1155 << ", " << m_negative_py
1156 << ", " << m_negative_pz
1157 << " pt: " << muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)->pt()
1158 << " d0: " << m_negative_d0
1159 << " z0: " << m_negative_z0
1160 << " d0unc: " << m_negative_d0_err
1161 << " sigma_pt: " << m_negative_sigma_pt);
1162 // ntuple variables have been filled in FillRecParametersTP
1163 if (m_IDTree) m_IDTree->Fill();
1164
1165 // Fill vectors for common ntuple
1166 m_IDTrack_pt.push_back(m_positive_pt);
1167 m_IDTrack_pt.push_back(m_negative_pt);
1168 m_IDTrack_eta.push_back(m_positive_eta);
1169 m_IDTrack_eta.push_back(m_negative_eta);
1170 m_IDTrack_phi.push_back(m_positive_phi);
1171 m_IDTrack_phi.push_back(m_negative_phi);
1172 m_IDTrack_d0.push_back(m_positive_d0);
1173 m_IDTrack_d0.push_back(m_negative_d0);
1174 m_IDTrack_z0.push_back(m_positive_z0);
1175 m_IDTrack_z0.push_back(m_negative_z0);
1178
1187 }
1188 else {
1189 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** not filling IDTracks in combTree due to problems with muon_xxx->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle)");
1190 }
1191 // End of fill ID Tree
1192
1193 //
1194 // combined muons ntuple
1195 if ((!m_skipMS && m_combTree) || m_commonTree ) { // if skipMS -> no combined muons
1196 success_pos = FillRecParametersTP(muon_pos->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle),
1197 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1198 ppos_comb->charge(),
1199 ppos_comb_v, ctx);
1200 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** success_pos TP pt: " << m_positive_pt << " GeV");
1201 success_neg = FillRecParametersTP(muon_neg->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle),
1202 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1203 pneg_comb->charge(),
1204 pneg_comb_v, ctx);
1205 ATH_MSG_DEBUG("** IDPerfMonZmumu::excute ** success_neg TP pt: " << m_negative_pt << " GeV");
1206
1207 if (success_pos && success_neg) {
1208 if (m_combTree != nullptr) {
1209 ATH_MSG_DEBUG("-- Filling m_combTree ntuple " << m_combTree->GetName() << " entry " << m_combTree->GetEntries()
1210 << " run: " << m_runNumber
1211 << " event: " << m_evtNumber
1212 << " Lumiblock: " << m_lumi_block
1213 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1214 }
1215 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1216 << ", " << m_positive_py
1217 << ", " << m_positive_pz
1218 << " pt: " << m_positive_pt
1219 << " d0: " << m_positive_d0
1220 << " z0: " << m_positive_z0
1221 << " d0unc: " << m_positive_d0_err);
1222 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1223 << ", " << m_negative_py
1224 << ", " << m_negative_pz
1225 << " pt: " << m_negative_pt
1226 << " d0: " << m_negative_d0
1227 << " z0: " << m_negative_z0
1228 << " d0unc: " << m_negative_d0_err);
1229 // ntuple variables have been filled in FillRecParameters
1230 if (m_combTree) m_combTree->Fill();
1231 }
1232 // Fill vectors for common ntuple
1233 m_CBTrack_pt.push_back(m_positive_pt);
1234 m_CBTrack_pt.push_back(m_negative_pt);
1235 m_CBTrack_eta.push_back(m_positive_eta);
1236 m_CBTrack_eta.push_back(m_negative_eta);
1237 m_CBTrack_phi.push_back(m_positive_phi);
1238 m_CBTrack_phi.push_back(m_negative_phi);
1239 m_CBTrack_d0.push_back(m_positive_d0);
1240 m_CBTrack_d0.push_back(m_negative_d0);
1241 m_CBTrack_z0.push_back(m_positive_z0);
1242 m_CBTrack_z0.push_back(m_negative_z0);
1245
1254 } // if skipMS -> no combined muons
1255
1256
1257
1258 // MS ntuple
1259 if (!m_skipMS && m_MSTree) { // if skipMS -> no MS tracks
1260 ATH_MSG_DEBUG("-- >> going to fill MS muons params << --");
1261 success_pos = FillRecParametersTP(m_xZmm.getMSTrack(m_xZmm.getPosMuon(ZmumuEvent::CB)),
1262 muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1263 ppos_comb->charge(),
1264 ppos_comb_v, ctx);
1265
1266 success_neg = FillRecParametersTP(m_xZmm.getMSTrack(m_xZmm.getNegMuon(ZmumuEvent::CB)),
1267 muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle),
1268 pneg_comb->charge(),
1269 pneg_comb_v, ctx);
1270 if (success_pos && success_neg) {
1271 if (m_MSTree != nullptr) ATH_MSG_DEBUG("-- Filling m_MSTree " << m_MSTree->GetName() << " entry " << m_MSTree->GetEntries()
1272 << " run: " << m_runNumber
1273 << " event: " << m_evtNumber
1274 << " Lumiblock: " << m_lumi_block
1275 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1276 ATH_MSG_DEBUG("mu+ --> pxyz " << m_positive_px
1277 << ", " << m_positive_py
1278 << " pt: " << m_xZmm.getMSTrack(m_xZmm.getPosMuon(ZmumuEvent::CB))->pt()
1279 << " d0: " << m_positive_d0
1280 << " z0: " << m_positive_z0
1281 << " d0unc: " << m_positive_d0_err);
1282 ATH_MSG_DEBUG("mu- --> pxyz: " << m_negative_px
1283 << ", " << m_negative_py
1284 << " pt: " << m_xZmm.getMSTrack(m_xZmm.getNegMuon(ZmumuEvent::CB))->pt()
1285 << " d0: " << m_negative_d0
1286 << " z0: " << m_negative_z0
1287 << " d0unc: " << m_negative_d0_err);
1288 // ntuple variables have been filled in FillRecParametersTP
1289 if (m_MSTree) m_MSTree->Fill();
1290 }
1291 else {
1292 ATH_MSG_INFO("FAILED filling m_MSTree "
1293 << " for run: " << m_runNumber
1294 << " event: " << m_evtNumber
1295 << " Lumiblock: " << m_lumi_block);
1296 }
1297 // MS ntuple
1298 }
1299 } // if store Zmumu ntuple
1300
1301 // changed refitting to combined particles since run II DESDM_ZMUMU did not store InDetTrackParticles
1302 if( m_doRefit ) {
1303 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to build TrackCollections: muonTrks, muonTrksRefit1 and muonTrksRefit2");
1304 auto muonTrks = std::make_unique<TrackCollection>(SG::OWN_ELEMENTS);
1305 auto muonTrksRefit1 = std::make_unique<TrackCollection>(SG::OWN_ELEMENTS);
1306 auto muonTrksRefit2 = std::make_unique<TrackCollection>(SG::OWN_ELEMENTS);
1307
1308 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to refit and store the track parameters ");
1309 std::unique_ptr<Trk::Track> defaultMuonTrk1;
1310 std::unique_ptr<Trk::Track> defaultMuonTrk2;
1311 Trk::Track* refit1MuonTrk1{};
1312 Trk::Track* refit2MuonTrk1{};
1313 Trk::Track* refit1MuonTrk2{};
1314 Trk::Track* refit2MuonTrk2{};
1315
1316 StatusCode fitStatus;
1317 //save default and refit track parameters
1318 if( ppos_comb->track() ) {
1319 defaultMuonTrk1 = std::make_unique<Trk::Track>(*ppos_comb->track());
1320 IegammaTrkRefitterTool::Cache fitResult{};
1321 fitStatus = m_TrackRefitter1->refitTrack( ctx, ppos_comb->track(), fitResult );
1322 if (fitStatus.isFailure()) {
1323 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed for ppos_comb->track(). Skipping Event");
1324 return StatusCode::SUCCESS;
1325 } else {
1326 refit1MuonTrk1 = fitResult.refittedTrack.release();
1327 muonTrksRefit1->push_back(refit1MuonTrk1);
1328 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of ppos_comb->track()."
1329 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1330 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1331 }
1332 fitStatus = m_TrackRefitter2->refitTrack( ctx, ppos_comb->track(), fitResult );
1333 if (fitStatus.isFailure()) {
1334 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Failed for ppos_comb->track(). Skipping Event");
1335 return StatusCode::SUCCESS;
1336 } else {
1337 refit2MuonTrk1 = fitResult.refittedTrack.release();
1338 muonTrksRefit2->push_back(refit2MuonTrk1);
1339 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of ppos_comb->track()."
1340 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1341 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1342 }
1343 }
1344
1345 if( pneg_comb->track() ) {
1346 defaultMuonTrk2 = std::make_unique<Trk::Track>(*pneg_comb->track());
1347
1348 IegammaTrkRefitterTool::Cache fitResult {};
1349 fitStatus = m_TrackRefitter1->refitTrack( ctx, pneg_comb->track(), fitResult);
1350 if (fitStatus.isFailure()) {
1351 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed. Skipping Event");
1352 return StatusCode::SUCCESS;
1353 } else {
1354 refit1MuonTrk2 = fitResult.refittedTrack.release();
1355 muonTrksRefit1->push_back(refit1MuonTrk2);
1356 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of pneg_comb->track()."
1357 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1358 << " track refit pt: " << refit1MuonTrk2->perigeeParameters()->pT() );
1359 }
1360
1361
1362 fitStatus = m_TrackRefitter2->refitTrack( ctx, pneg_comb->track(), fitResult );
1363 if (fitStatus.isFailure()) {
1364 ATH_MSG_DEBUG("Track Refit2 Failed. Skipping Event");
1365 return StatusCode::SUCCESS;
1366 } else {
1367 refit2MuonTrk2 = fitResult.refittedTrack.release();
1368 muonTrksRefit2->push_back(refit2MuonTrk2);
1369 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of pneg_comb->track()."
1370 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1371 << " track refit pt: " << refit2MuonTrk2->perigeeParameters()->pT() );
1372 }
1373 if (muonTrksRefit1->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit1: " << muonTrksRefit1->size());
1374 if (muonTrksRefit2->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit2: " << muonTrksRefit2->size());
1375 }
1376
1377 //save tracks to storegrate, they can be used by InDetAlignmentMonitoring
1378 muonTrks->push_back(defaultMuonTrk1.release());
1379 muonTrks->push_back(defaultMuonTrk2.release());
1380 auto nMuonTracks = muonTrks->size();
1381 StatusCode sc = evtStore()->record(std::move(muonTrks), m_outputTracksName);
1382 if (sc.isSuccess()) {
1383 ATH_MSG_DEBUG ("Stored "<< nMuonTracks << " " << m_outputTracksName <<" into StoreGate");
1384 } else{
1385 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName);
1386 }
1387 auto nMuonTracks1 = muonTrksRefit1->size();
1388 if (nMuonTracks1 > 1) { // keep track collection if at least 2 muons were found
1389 sc = evtStore()->record(std::move(muonTrksRefit1), m_outputTracksName + "Refit1");
1390 if (sc.isSuccess()) {
1391 ATH_MSG_DEBUG ("Stored "<< nMuonTracks1 << " " << m_outputTracksName + "Refit1" << " into StoreGate");
1392 } else {
1393 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit1");
1394 }
1395 }
1396 auto nMuonTracks2 = muonTrksRefit2->size();
1397 if (nMuonTracks2 > 1) { // keep track collection if at least 2 muons were found
1398 sc = evtStore()->record(std::move(muonTrksRefit2), m_outputTracksName + "Refit2");
1399 if (sc.isSuccess()) {
1400 ATH_MSG_DEBUG ("Stored "<< nMuonTracks2 << " " << m_outputTracksName + "Refit2" << " into StoreGate");
1401 } else {
1402 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit2");
1403 }
1404 }
1405
1406 //fill refit1 ID parameters
1407 if (nMuonTracks1<2) {
1408 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit1 muon tracks are missing!");
1409 } else {
1410 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** going to fill refit1tree ");
1411 success_pos = FillRecParametersSimple (refit1MuonTrk1, ppos_comb->charge(), ppos_comb_v, ctx);
1412 success_neg = FillRecParametersSimple (refit1MuonTrk2, pneg_comb->charge(), pneg_comb_v, ctx);
1413
1414 if (m_storeZmumuNtuple) {
1415 if (success_pos && success_neg) {
1416 if (m_refit1Tree) {
1417 ATH_MSG_DEBUG("-- Filling ntuple " << m_refit1Tree->GetName() << " entry " << m_refit1Tree->GetEntries()
1418 << " for run: " << m_runNumber
1419 << " event: " << m_evtNumber
1420 << " Lumiblock: " << m_lumi_block
1421 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1422 }
1423 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1424 << m_negative_py << ", "
1425 << m_negative_pz << ") "
1426 << " d0: " << m_negative_d0
1427 << " z0: " << m_negative_z0
1428 << " sigma_pt: " << m_positive_sigma_pt);
1429 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1430 << m_positive_py << ","
1431 << m_positive_pz << ") "
1432 << " d0: " << m_positive_d0
1433 << " z0: " << m_positive_z0
1434 << " sigma_pt: " << m_negative_sigma_pt);
1435 if (m_refit1Tree) {
1436 m_refit1Tree->Fill();
1437 }
1438 // Fill vectors for common ntuple
1439 m_Refit1_pt.push_back(m_positive_pt);
1440 m_Refit1_pt.push_back(m_negative_pt);
1441 m_Refit1_eta.push_back(m_positive_eta);
1442 m_Refit1_eta.push_back(m_negative_eta);
1443 m_Refit1_phi.push_back(m_positive_phi);
1444 m_Refit1_phi.push_back(m_negative_phi);
1445 m_Refit1_d0.push_back(m_positive_d0);
1446 m_Refit1_d0.push_back(m_negative_d0);
1447 m_Refit1_z0.push_back(m_positive_z0);
1448 m_Refit1_z0.push_back(m_negative_z0);
1449
1456 } // if (success_pos && success_neg)
1457 } // if (m_storeZmumuNtuple)
1458 } // enough refit1 tracks
1459
1460 //fill refit2 ID parameters
1461 if (muonTrksRefit2->size()<2) {
1462 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit2 muon tracks are missing!");
1463 } else{
1464 ATH_MSG_DEBUG("-- >> going to fill refit2params << --");
1465 success_pos = FillRecParametersSimple (refit2MuonTrk1, ppos_comb->charge(), ppos_comb_v, ctx);
1466 success_neg = FillRecParametersSimple (refit2MuonTrk2, pneg_comb->charge(), pneg_comb_v, ctx);
1467
1468 if (m_storeZmumuNtuple) {
1469 if (success_pos && success_neg) {
1470 if (m_refit2Tree) {
1471 ATH_MSG_DEBUG("-- Filling " << m_refit2Tree->GetName() << " entry " << m_refit2Tree->GetEntries()
1472 << " run: " << m_runNumber
1473 << " event: " << m_evtNumber
1474 << " Lumiblock: " << m_lumi_block
1475 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1476 }
1477 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1478 << m_negative_py << ", "
1479 << m_negative_pz << ") "
1480 << " d0: " << m_negative_d0
1481 << " z0: " << m_negative_z0
1482 << " sigma_pt: " << m_positive_sigma_pt);
1483 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1484 << m_positive_py << ","
1485 << m_positive_pz << ") "
1486 << " d0: " << m_positive_d0
1487 << " z0: " << m_positive_z0
1488 << " sigma_pt: " << m_negative_sigma_pt);
1489 if (m_refit2Tree) {
1490 m_refit2Tree->Fill();
1491 }
1492 // Fill vectors for common ntuple
1493 m_Refit2_pt.push_back(m_positive_pt);
1494 m_Refit2_pt.push_back(m_negative_pt);
1495 m_Refit2_eta.push_back(m_positive_eta);
1496 m_Refit2_eta.push_back(m_negative_eta);
1497 m_Refit2_phi.push_back(m_positive_phi);
1498 m_Refit2_phi.push_back(m_negative_phi);
1499 m_Refit2_d0.push_back(m_positive_d0);
1500 m_Refit2_d0.push_back(m_negative_d0);
1501 m_Refit2_z0.push_back(m_positive_z0);
1502 m_Refit2_z0.push_back(m_negative_z0);
1503
1510 } // if (success_pos && success_neg)
1511 } // if (m_storeZmumuNtuple)
1512 } // enough refit2 tracks
1513
1514 ATH_MSG_DEBUG("Execute() All NTUPLES filled Run: " << m_runNumber << " event: " << m_evtNumber << " mass: " << m_xZmm.GetInvMass() << " GeV ");
1515 }
1516 } // closing -> if ( m_xZmm.AcceptEvent() )
1517
1518 if ( !m_xZmm.AcceptEvent() ) {
1519 // no good muon pair found
1520 //failed cuts, continue to next event
1521 ATH_MSG_DEBUG ("** IDPerfMonZmumu::execute ** No good muon pair found. Leaving Execute(). Run: " << m_runNumber << " event: " << m_evtNumber);
1522 return StatusCode::SUCCESS;
1523 }
1524
1525 //
1526 // fill truth event iformation even when the reco event has not passed
1527 //
1528 if (m_isMC) {
1529 bool truthStatusIsGood = true;
1530 if (FillTruthParameters(ppos_comb, ctx).isFailure()){
1531 truthStatusIsGood = false;
1532 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1533 }
1534 if (FillTruthParameters(pneg_comb, ctx).isFailure()){
1535 truthStatusIsGood = false;
1536 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1537 }
1538 if (truthStatusIsGood) {
1539 ATH_MSG_DEBUG ("-- Filling " << m_truthTree->GetName() << " entry " << m_truthTree->GetEntries()
1540 << " run: " << m_runNumber
1541 << " event: " << m_evtNumber
1542 << " Lumiblock: " << m_lumi_block
1543 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1544 ATH_MSG_DEBUG ("Negative p: (" << m_negative_px << ", "
1545 << m_negative_py << ", "
1546 << m_negative_pz << ") "
1547 << " d0: " << m_negative_d0
1548 << " z0: " << m_negative_z0
1549 << " parent: " << m_negative_parent);
1550 ATH_MSG_DEBUG ("Positive p: (" << m_positive_px << ","
1551 << m_positive_py << ","
1552 << m_positive_pz << ") "
1553 << " d0: " << m_positive_d0
1554 << " z0: " << m_positive_z0
1555 << " parent: " << m_positive_parent);
1556
1558 m_Truth_pt.push_back(m_positive_pt);
1559 m_Truth_pt.push_back(m_negative_pt);
1560 m_Truth_eta.push_back(m_positive_eta);
1561 m_Truth_eta.push_back(m_negative_eta);
1562 m_Truth_phi.push_back(m_positive_phi);
1563 m_Truth_phi.push_back(m_negative_phi);
1564 m_Truth_d0.push_back(m_positive_d0);
1565 m_Truth_d0.push_back(m_negative_d0);
1566 m_Truth_z0.push_back(m_positive_z0);
1567 m_Truth_z0.push_back(m_negative_z0);
1572
1573 } // truth info properly filled
1574 else {
1575 ATH_MSG_DEBUG("FAILED filling m_truthTree "
1576 << " for run: " << m_runNumber
1577 << " event: " << m_evtNumber
1578 << " Lumiblock: " << m_lumi_block);
1579 }
1580 } // if (m_isMC)
1581
1582 // fill common tree
1583 if (m_commonTree ) {
1584 // fill ntuple if some of the collections is filled
1585 bool dofill = false;
1586 if (m_IDTrack_pt.size() >= 2) dofill = true;
1587 if (m_CBTrack_pt.size() >= 2) dofill = true;
1588 if (m_Refit1_pt.size() >= 2) dofill = true;
1589 if (m_Refit2_pt.size() >= 2) dofill = true;
1590 if (m_Truth_pt.size() >= 2) dofill = true;
1591
1592 if (dofill) {
1593 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " entry " << m_commonTree->GetEntries()
1594 << " run: " << m_runNumber
1595 << " event: " << m_evtNumber
1596 << " Lumiblock: " << m_lumi_block
1597 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1598 m_commonTree->Fill();
1599 }
1600 else {
1601 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " FAILED for "
1602 << " run: " << m_runNumber
1603 << " event: " << m_evtNumber
1604 << " Lumiblock: " << m_lumi_block);
1605 }
1606 }
1607
1608 ATH_MSG_DEBUG(" --IDPerfMonZmumu::execute-- event completed -- Run: " << m_runNumber << " event: " << m_evtNumber);
1609
1610 /* ***********************************************************
1611 * after all, let's make the collection for ALL MUON ID Tracks
1612 * ***********************************************************/
1613
1614 ATH_MSG_DEBUG("IDTracks monitoring..");
1615 int nTracks = 0;
1617
1618 // DIFFERENT RETRIEVAL
1620 if(muons){
1621 for (auto muon : *muons) {
1622 const xAOD::TrackParticle* tp = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
1623 if(!tp) {
1624 ATH_MSG_DEBUG(" - tpb = "<< tp << " -> is null? " << (!tp));
1625 continue;
1626 }
1627 const Trk::Track* t = tp->track();
1628 if ( !t ) {
1629 ATH_MSG_DEBUG(" - tpb does not have track ");
1630 continue;
1631 }
1632 const Trk::Perigee* tPerigee = t->perigeeParameters() ;
1633 if ( !tPerigee ) {
1634 ATH_MSG_DEBUG(" - t does not have perigree ");
1635 continue;
1636 }
1637 IDTracks->push_back ( new Trk::Track (*t));
1638 nTracks++;
1639 }
1640 }
1641 else ATH_MSG_WARNING ("Could not retrieve Muon container");
1642
1643 ATH_MSG_DEBUG(" --> nTracks = " << nTracks);
1644
1645 StatusCode scid = evtStore()->record(IDTracks, "IDTracks");
1646 if (scid.isSuccess()) {
1647 ATH_MSG_DEBUG ("Stored "<< IDTracks->size() << " IDTracks into StoreGate");
1648 }
1649 else{
1650 ATH_MSG_WARNING ("Failed storing IDTracks");
1651 }
1652
1653 /*********************************************************
1654 * ..finish
1655 ********************************************************/
1656
1657 return StatusCode::SUCCESS;
1658}
#define ATH_MSG_WARNING(x)
static Double_t sc
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
ServiceHandle< StoreGateSvc > & evtStore()
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 RunFourLeptonAnalysis()
double m_positive_sigma_qoverp
double m_negative_sigma_qoverp
void ResetCommonNtupleVectors()
StatusCode FillRecParametersSimple(const Trk::Track *track, float charge, const xAOD::Vertex *vertex, const EventContext &ctx)
StatusCode FillRecParametersTP(const xAOD::TrackParticle *trackp, const xAOD::TrackParticle *trackp_for_unbias, double charge, const xAOD::Vertex *vertex, const EventContext &ctx)
StatusCode FillTruthParameters(const xAOD::TrackParticle *track, const EventContext &ctx)
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
used for truth parameters
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexKey
void ExtractIDHitsInformation(const xAOD::Muon *muon_pos, const xAOD::Muon *muon_neg)
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 a nullptr) to the TrackParticle used in identification of this muon.
Definition Muon_v1.cxx:422
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 2782 of file IDPerfMonZmumu.cxx.

2783{
2784 // hits info
2785 // positive Muon
2786 const xAOD::TrackParticle* IDTrkMuPos = muon_pos->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
2787 const xAOD::TrackParticle* IDTrkMuNeg = muon_neg->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
2788
2789 int nBLhits, nhitsPIX, nhitsSCT, nhitsTRT, nContribPixLayers;
2790 int nPIXholes, nSCTholes;
2791 if (IDTrkMuPos && IDTrkMuNeg) { // make sure both summaries are available
2792 uint8_t dummy(-1);
2793 nBLhits = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfBLayerHits ) ? dummy :-1;
2794 nhitsPIX = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfPixelHits ) ? dummy :-1;
2795 nhitsSCT = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfSCTHits ) ? dummy :-1;
2796 nhitsTRT = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfTRTHits ) ? dummy :-1;
2797 nContribPixLayers = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfContribPixelLayers )? dummy :-1;
2798
2799 nPIXholes = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfPixelHoles )? dummy :-1;
2800 nSCTholes = IDTrkMuPos->summaryValue( dummy, xAOD::numberOfSCTHoles )? dummy :-1;
2801
2802
2803 m_nBLhits.push_back(nBLhits);
2804 m_nPIXhits.push_back(nhitsPIX);
2805 m_nSCThits.push_back(nhitsSCT);
2806 m_nTRThits.push_back(nhitsTRT);
2807
2808 ATH_MSG_DEBUG (" -- mu_pos -- HITS --"
2809 << " nBLhits: " << nBLhits
2810 << " nhitsPIX: " << nhitsPIX
2811 << " nPIXLayers: " << nContribPixLayers
2812 << " nhitsSCT: " << nhitsSCT
2813 << " Silicon holes: " << nPIXholes + nSCTholes
2814 << " nhitsTRT: " << nhitsTRT);
2815
2816 nBLhits = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfBLayerHits ) ? dummy :-1;
2817 nhitsPIX = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfPixelHits ) ? dummy :-1;
2818 nhitsSCT = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfSCTHits ) ? dummy :-1;
2819 nhitsTRT = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfTRTHits ) ? dummy :-1;
2820 nContribPixLayers = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfContribPixelLayers )? dummy :-1;
2821 nPIXholes = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfPixelHoles )? dummy :-1;
2822 nSCTholes = IDTrkMuNeg->summaryValue( dummy, xAOD::numberOfSCTHoles )? dummy :-1;
2823
2824 m_nBLhits.push_back(nBLhits);
2825 m_nPIXhits.push_back(nhitsPIX);
2826 m_nSCThits.push_back(nhitsSCT);
2827 m_nTRThits.push_back(nhitsTRT);
2828
2829 ATH_MSG_DEBUG (" -- mu_neg -- HITS --"
2830 << " nBLhits: " << nBLhits
2831 << " nhitsPIX: " << nhitsPIX
2832 << " nPIXLayers: " << nContribPixLayers
2833 << " nhitsSCT: " << nhitsSCT
2834 << " Silicon holes: " << nPIXholes + nSCTholes
2835 << " nhitsTRT: " << nhitsTRT);
2836
2837 }
2838 return;
2839}
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 & AthCommonAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

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

Definition at line 89 of file AthCommonAlgorithm.cxx.

54{
55 // If we didn't find any symlinks to add, just return the collection
56 // from the base class. Otherwise, return the extended collection.
57 if (!m_extendedExtraObjects.empty()) {
59 }
61}
Common base class for algorithms.

◆ 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 1803 of file IDPerfMonZmumu.cxx.

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

Definition at line 1955 of file IDPerfMonZmumu.cxx.

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

Definition at line 1661 of file IDPerfMonZmumu.cxx.

1666{
1667 if (!trackp){
1668 //ATH_MSG_WARNING("Empty Trackparticle. Skipping.");
1669 return StatusCode::FAILURE;
1670 }
1671
1672 if (m_doRemoval && !trackp_for_unbias && !m_skipMS){
1673 return StatusCode::FAILURE;
1674 }
1675
1676 double px = 0;
1677 double py = 0;
1678 double pt = 0;
1679 double pz = 0;
1680 double phi= 0;
1681 double eta= 0;
1682 double d0 = 0;
1683 double z0 = 0;
1684 double d0res = 0;
1685 double z0res = 0;
1686 double PVd0res = 0;
1687 double PVz0res = 0;
1688 double PVd0 = 0;
1689 double PVz0 = 0;
1690 double sigma_pt = 0;
1691 double qoverp = 0;
1692 double sigma_qOverP = 1.; // use a large value by default as 0 is meaningless
1693
1694
1695 px = trackp->p4().Px();
1696 py = trackp->p4().Py();
1697 pt = trackp->p4().Pt();
1698 pz = trackp->p4().Pz();
1699 phi= trackp->p4().Phi();
1700 eta= trackp->p4().Eta();
1701 d0 = trackp->d0();
1702 z0 = trackp->z0();
1703 qoverp = trackp->qOverP();
1704
1705 d0res = std::sqrt(trackp->definingParametersCovMatrix()(Trk::d0,Trk::d0));
1706 z0res = std::sqrt(trackp->definingParametersCovMatrix()(Trk::z0,Trk::z0));
1707 sigma_qOverP = std::sqrt(trackp->definingParametersCovMatrix()(Trk::qOverP,Trk::qOverP));
1708 double sigma_theta = std::sqrt(trackp->definingParametersCovMatrix()(Trk::theta,Trk::theta));
1709
1710 // computing sigma_pt
1711 // pt = sin(theta) / qOverP --> sigma(pt) = (sin(theta)/ qOverP^2) x sigma(qOverP) // neglecting sigma(sin(theta))
1712 double sigma_pt_term1 = (sin(trackp->theta()) / pow(qoverp,2)) * sigma_qOverP;
1713 double sigma_pt_term2 = (1./qoverp) * cos(trackp->theta()) * sigma_theta;
1714 double sigma_pt_term3 = (cos(trackp->theta()) / pow(qoverp,2)) * sigma_theta * sigma_qOverP;
1715 sigma_pt = sqrt( pow(sigma_pt_term1,2) + pow(sigma_pt_term2,2) + 2 * sigma_pt_term3 * trackp->definingParametersCovMatrix()(Trk::qOverP,Trk::theta));
1716
1717 //
1718 if (vertex == nullptr) {
1719 ATH_MSG_WARNING("in FillRecParametersTP. WARNING: Vertex is NULL");
1720 return StatusCode::FAILURE;
1721 }
1723 ATH_MSG_WARNING("in FillRecParametersTP. WARNING: m_trackToVertexIPEstimator is NULL");
1724 return StatusCode::FAILURE;
1725 }
1726
1727 if (m_doIP && vertex != nullptr && m_trackToVertexIPEstimator){
1728 std::unique_ptr<Trk::ImpactParametersAndSigma> iPandSigma(nullptr);
1729 ATH_MSG_DEBUG("-- using the trackToVertexIPEstimator --");
1730 //Calling the estimate(trackp,newtrackp,vertex,doRemoval)
1731 //The first track is used to unbias the vertex, the second to get the extrapolation
1732 if (!m_skipMS) iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trackp_for_unbias, trackp, vertex, m_doRemoval);
1733 else iPandSigma = m_trackToVertexIPEstimator->estimate(ctx, trackp, vertex);
1734 ATH_MSG_DEBUG("return from the trackToVertexIPEstimator->estimate()");
1735
1736 if( !iPandSigma ){
1737 ATH_MSG_WARNING ("FillRecParametersTP::trackToVertexIPEstimator failed !");
1738 return StatusCode::FAILURE;
1739 }
1740 else{
1741 ATH_MSG_DEBUG("FillRecParametersTP::trackToVertexIPEstimator success !");
1742 PVd0 = iPandSigma->IPd0;
1743 PVd0res = iPandSigma->PVsigmad0;
1744 d0res = iPandSigma->sigmad0;
1745 PVz0 = iPandSigma->IPz0;
1746 PVz0res = iPandSigma->PVsigmaz0;
1747 z0res = iPandSigma->sigmaz0;
1748 }
1749 }
1750
1751 if (charge == 1) {
1752 m_positive_px = px;
1753 m_positive_py = py;
1754 m_positive_pt = pt;
1755 m_positive_pz = pz;
1758 m_positive_z0 = z0;
1759 m_positive_z0_err = z0res;
1760 m_positive_d0 = d0;
1761 m_positive_d0_err = d0res;
1762 m_positive_sigma_pt = sigma_pt;
1763 m_positive_qoverp = qoverp;
1764 m_positive_sigma_qoverp = sigma_qOverP;
1765 if(m_doIP){
1766 m_positive_z0_PV = PVz0;
1767 m_positive_d0_PV = PVd0;
1768 m_positive_z0_PVerr = PVz0res;
1769 m_positive_d0_PVerr = PVd0res;
1770 }
1771 ATH_MSG_DEBUG("(Filled charge == 1 ) (reco)-> px : "<< px <<" py: "<<py <<" pt: "<<pt <<" pz: "<<pz
1772 <<" d0: "<<m_positive_d0 << " d0res : "<< d0res << " PVd0res : "<< PVd0res <<" z0: "<< m_positive_z0 << " z0res : " << z0res << " PVz0res : "<< PVz0res );
1773
1774 } else if (charge == -1) {
1775 m_negative_px = px;
1776 m_negative_py = py;
1777 m_negative_pt = pt;
1778 m_negative_pz = pz;
1781 m_negative_z0 = z0;
1782 m_negative_z0_err = z0res;
1783 m_negative_d0 = d0;
1784 m_negative_d0_err = d0res;
1785 m_negative_sigma_pt = sigma_pt;
1786 m_negative_qoverp = qoverp;
1787 m_negative_sigma_qoverp = sigma_qOverP;
1788 if(m_doIP){
1789 m_negative_z0_PV = PVz0;
1790 m_negative_d0_PV = PVd0;
1791 m_negative_z0_PVerr = PVz0res;
1792 m_negative_d0_PVerr = PVd0res;
1793 }
1794 ATH_MSG_DEBUG("(Filled charge == -1 ) (reco)-> px : "<< px <<" py: "<< py <<" pt: " << pt <<" pz: "<<pz
1795 <<" d0: "<<m_negative_d0 << " d0res : "<< d0res << " PVd0res : "<< PVd0res <<" z0: "<< m_negative_z0 << " z0res : " << z0res << " PVz0res : "<< PVz0res );
1796 }
1797
1798 return StatusCode::SUCCESS;
1799}
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,
const EventContext & ctx )
private

Definition at line 2093 of file IDPerfMonZmumu.cxx.

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

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Get filter decision:

Definition at line 93 of file AthCommonAlgorithm.h.

93 {
94 return execState( ctx ).filterPassed();
95 }
virtual bool filterPassed(const EventContext &ctx) const
Get filter decision:

◆ finalize()

StatusCode IDPerfMonZmumu::finalize ( )
virtual

Definition at line 2297 of file IDPerfMonZmumu.cxx.

2298{
2299 m_xZmm.finalize();
2300 return StatusCode::SUCCESS;
2301}

◆ GetDiMuonVertex()

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

Definition at line 2365 of file IDPerfMonZmumu.cxx.

2365 {
2366
2367 const xAOD::VertexContainer* vxContainer(0);
2368 const xAOD::Vertex* myVtx(0);
2370 if (!vxContainer) {
2371 return myVtx;
2372 }
2373
2374 for (int ivtx=0; ivtx< (int) vxContainer->size();ivtx++) {
2375 myVtx = (*vxContainer)[ivtx];
2376 if ((myVtx->vertexType() == xAOD::VxType::PriVtx)) {
2377 if (m_Trk2VtxAssociationTool->isCompatible(*muon1,*myVtx) && (m_Trk2VtxAssociationTool->isCompatible(*muon2,*myVtx)))
2378 return myVtx;
2379 }
2380 }
2381 return myVtx;
2382}
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 2277 of file IDPerfMonZmumu.cxx.

2277 {
2279 typedef ElementLink< xAOD::TruthParticleContainer > Link_t;
2281 static const SG::ConstAccessor< Link_t > acc( "truthParticleLink" );
2282 // Check if such a link exists on the object:
2283 if( ! acc.isAvailable( p ) ) {
2284 return nullptr;
2285 }
2286 // Get the link:
2287 const Link_t& link = acc( p );
2288 // Check if the link is valid:
2289 if( ! link.isValid() ) {
2290 return nullptr;
2291 }
2292 // Everything has passed, let's return the pointer:
2293 return *link;
2294}
ElementLink< xAOD::TruthParticleContainer > Link_t
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.

◆ isClonable()

virtual bool AthCommonAlgorithm< Gaudi::Algorithm >::isClonable ( ) const
inlineoverridevirtualinherited

Specify if the algorithm is clonable.

Only relevant for non-reentrant algorithms. Actual number of clones needs to be set via the "Cardinality" property.

Reimplemented in AFP_DigiTop, AlgB, AlgT, BCM_Digitization, CscDigitBuilder, CscDigitToCscRDO, G4AtlasAlg, G4RunAlg, HGTD_Digitization, HiveAlgBase, InDet::GNNSeedingTrackMaker, InDet::SCT_Clusterization, InDet::SiSPGNNTrackMaker, InDet::SiSPSeededTrackFinder, InDet::SiTrackerSpacePointFinder, ISF::SimKernelMT, ITk::StripDigitization, ITkPixelCablingAlg, ITkStripCablingAlg, LArHitEMapMaker, LArTTL1Maker, LUCID_DigiTop, LVL1::L1TopoSimulation, MergeCalibHits, MergeGenericMuonSimHitColl, MergeHijingPars, MergeMcEventCollection, MergeTrackRecordCollection, MergeTruthJets, MergeTruthParticles, MuonDigitizer, PileUpMTAlg, PixelDigitization, RoIBResultToxAOD, SCT_ByteStreamErrorsTestAlg, SCT_CablingCondAlgFromCoraCool, SCT_CablingCondAlgFromText, SCT_ConditionsParameterTestAlg, SCT_ConditionsSummaryTestAlg, SCT_ConfigurationConditionsTestAlg, SCT_Digitization, SCT_FlaggedConditionTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_PrepDataToxAOD, SCT_RawDataToxAOD, SCT_ReadCalibChipDataTestAlg, SCT_ReadCalibDataTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_SiliconConditionsTestAlg, SCT_StripVetoTestAlg, SCT_TdaqEnabledTestAlg, SCT_TestCablingAlg, SCTEventFlagWriter, SCTRawDataProvider, SCTSiLorentzAngleTestAlg, SCTSiPropertiesTestAlg, SGInputLoader, Simulation::BeamEffectsAlg, TileHitVecToCnt, TileMuonFitter, TilePulseForTileMuonReceiver, TileRawChannelMaker, TRTDigitization, and ZDC_DigiTop.

Definition at line 68 of file AthCommonAlgorithm.h.

68 {
69 return true;
70 }

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 47 of file AthAlgorithm.h.

47{ 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 2385 of file IDPerfMonZmumu.cxx.

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

◆ RunFourLeptonAnalysis()

StatusCode IDPerfMonZmumu::RunFourLeptonAnalysis ( )
private

Definition at line 2541 of file IDPerfMonZmumu.cxx.

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

virtual void AthCommonAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Set filter decision:

Reimplemented in AthFilterAlgorithm.

Definition at line 99 of file AthCommonAlgorithm.h.

99 {
101 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const
Set filter decision:

◆ sysExecute()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Reimplemented in AthAnalysisAlgorithm.

Definition at line 80 of file AthCommonAlgorithm.cxx.

41{
42 return BaseAlg::sysExecute (ctx);
43}

◆ sysInitialize()

StatusCode AthCommonAlgorithm< Gaudi::Algorithm >::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, HypoBase, InputMakerBase, and PyAthena::Alg.

Definition at line 60 of file AthCommonAlgorithm.cxx.

71 {
73
74 if (sc.isFailure()) {
75 return sc;
76 }
77
78 ServiceHandle<ICondSvc> cs("CondSvc",name());
79 for (auto h : outputHandles()) {
80 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
81 // do this inside the loop so we don't create the CondSvc until needed
82 if ( cs.retrieve().isFailure() ) {
83 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
85 }
86 if (cs->regHandle(this,*h).isFailure()) {
88 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
89 << " with CondSvc");
90 }
91 }
92 }
93 return sc;
94}
virtual StatusCode sysInitialize() override
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 AthCommonAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 108 of file AthCommonAlgorithm.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: