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 if (m_commonTree) {
821 if ((tHistSvc->regTree(m_commonTreeFolder, m_commonTree)).isSuccess() ) {
822 ATH_MSG_INFO("initialize() commonTree succesfully registered!");
823 }
824 else {
825 ATH_MSG_ERROR("initialize() Could not register the validation commonTree -> Switching ValidationMode Off !");
826 delete m_commonTree; m_commonTree = nullptr;
827 m_validationMode = false;
828 }
829 }
830
831 if (m_IDTree) {
832 if ((tHistSvc->regTree(m_IDTreeFolder, m_IDTree)).isSuccess() ) {
833 ATH_MSG_INFO("initialize() IDTree succesfully registered!");
834 }
835 else {
836 ATH_MSG_ERROR("initialize() Could not register the validation IDTree -> Switching ValidationMode Off !");
837 delete m_IDTree; m_IDTree = nullptr;
838 m_validationMode = false;
839 }
840 }
841
842 if ( m_skipMS ) {
843 ATH_MSG_INFO("CBtree has to be skipped: flag ON");
844 delete m_combTree; m_combTree = nullptr;
845 }
846 else {
847 if (m_combTree) {
848 if ((tHistSvc->regTree(m_combTreeFolder, m_combTree)).isSuccess() ) {
849 ATH_MSG_INFO("initialize() CBTree succesfully registered!");
850 }
851 else {
852 ATH_MSG_ERROR("initialize() Could not register the validation CBTree -> Switching ValidationMode Off !");
853 delete m_combTree; m_combTree = nullptr;
854 m_validationMode = false;
855 }
856 }
857 }
858
859 if ( m_skipMS ) {
860 ATH_MSG_INFO("MStree has to be skipped: flag ON");
861 delete m_MSTree; m_MSTree = nullptr;
862 }
863 else {
864 if (m_MSTree) {
865 if ( (tHistSvc->regTree(m_MSTreeFolder, m_MSTree)).isSuccess() ){
866 ATH_MSG_INFO("initialize() MSTree succesfully registered!");
867 }
868 else {
869 ATH_MSG_ERROR("initialize() Could not register the validation MSTree -> Switching ValidationMode Off !");
870 delete m_MSTree; m_MSTree = nullptr;
871 m_validationMode = false;
872 }
873 }
874 }
875
876 if( m_doRefit ){
877 if (m_refit1Tree) {
878 if ((tHistSvc->regTree(m_refit1TreeFolder, m_refit1Tree)).isSuccess() ) {
879 ATH_MSG_INFO("initialize() Refit1 Tree succesfully registered!");
880 }
881 else{
882 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
883 delete m_refit1Tree; m_refit1Tree = nullptr;
884 m_validationMode = false;
885 }
886 }
887
888 if (m_refit2Tree) {
889 if ((tHistSvc->regTree(m_refit2TreeFolder, m_refit2Tree)).isSuccess() ) {
890 ATH_MSG_INFO("initialize() Refit2 Tree succesfully registered!");
891 }
892 else {
893 ATH_MSG_ERROR("initialize() Could not register the validation Tree -> Switching ValidationMode Off !");
894 delete m_refit2Tree; m_refit2Tree = nullptr;
895 m_validationMode = false;
896 }
897 }
898 }
899
900 if (m_isMC) {
901 if ((tHistSvc->regTree(m_truthTreeFolder, m_truthTree)).isSuccess() ) {
902 ATH_MSG_INFO("initialize() truthTree Tree succesfully registered!");
903 }
904 else {
905 ATH_MSG_ERROR("initialize() Could not register the validation truth Tree -> Switching ValidationMode Off !");
906 delete m_truthTree; m_truthTree = nullptr;
907 m_validationMode = false;
908 }
909 }
910
911 if (m_doFourMuAnalysis) {
912 if ((tHistSvc->regTree(m_FourMuTreeFolder, m_FourMuTree)).isSuccess() ) {
913 ATH_MSG_INFO("initialize() FourMu Tree succesfully registered!");
914 }
915 else {
916 ATH_MSG_ERROR("initialize() Could not register the validation FourMu Tree -> Switching ValidationMode Off !");
917 delete m_FourMuTree; m_FourMuTree = nullptr;
918 m_validationMode = false;
919 }
920 }
921
922 return StatusCode::SUCCESS;
923}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
double m_el_negative1_z0_err
std::vector< float > m_Refit1_qoverp
unsigned int m_event_mu
std::vector< float > m_Refit1_sigma_qoverp
double m_el_positive1_d0_err
double m_el_positive2_z0_err
double m_positive_d0_PVerr
double m_negative_2_z0_err
unsigned int m_nVertex
double m_positive_2_d0_err
std::vector< float > m_Refit2_sigma_d0
std::vector< float > m_CBTrack_sigma_z0
TH1F * m_h_cutflow
link vector to map HepMC onto xAOD truth
std::vector< float > m_Refit1_sigma_d0
std::vector< float > m_CBTrack_d0
std::vector< float > m_Refit2_qoverp
std::vector< float > m_Refit1_eta
std::vector< float > m_CBTrack_sigma_d0
unsigned int m_lumi_block
std::vector< float > m_IDTrack_d0
double m_negative_2_d0_err
double m_positive_z0_PVerr
std::vector< float > m_Truth_phi
std::vector< float > m_Truth_pt
std::vector< float > m_Refit2_d0
double m_el_positive1_z0_err
std::vector< float > m_Refit1_phi
std::vector< float > m_Refit2_eta
std::vector< float > m_IDTrack_pt
std::vector< float > m_CBTrack_sigma_pt
std::vector< float > m_Truth_z0
double m_negative_z0_PVerr
std::vector< float > m_IDTrack_sigma_d0
std::vector< float > m_Refit2_pt
unsigned int m_evtNumber
double m_positive_sigma_pt
unsigned int m_runNumber
double m_el_negative2_z0_err
std::vector< float > m_CBTrack_z0
std::vector< float > m_CBTrack_pt
std::vector< float > m_Refit1_sigma_pt
std::vector< float > m_Refit1_d0
std::vector< float > m_Truth_eta
double m_negative_d0_PVerr
double m_positive_2_z0_err
std::vector< float > m_CBTrack_sigma_qoverp
std::vector< int > m_nSCThits
std::vector< int > m_nTRThits
std::vector< float > m_IDTrack_qoverp
std::vector< float > m_Refit2_z0
std::vector< float > m_Truth_d0
std::vector< int > m_nBLhits
std::vector< float > m_Refit1_pt
double m_el_positive2_d0_err
std::vector< float > m_IDTrack_phi
std::vector< float > m_Refit2_sigma_pt
std::vector< float > m_IDTrack_sigma_z0
double m_negative_sigma_pt
std::vector< float > m_Refit2_sigma_qoverp
std::vector< float > m_Refit1_z0
std::vector< float > m_Truth_qoverp
std::vector< float > m_IDTrack_z0
std::vector< float > m_Refit2_phi
double m_el_negative2_d0_err
std::vector< int > m_nPIXhits
std::vector< float > m_IDTrack_sigma_pt
unsigned int m_nTrkInVtx
std::vector< float > m_CBTrack_eta
std::vector< int > m_Truth_parent
std::vector< float > m_IDTrack_sigma_qoverp
std::vector< float > m_Refit1_sigma_z0
std::vector< float > m_CBTrack_qoverp
double m_el_negative1_d0_err
std::vector< float > m_Refit2_sigma_z0
std::vector< float > m_IDTrack_eta
std::vector< float > m_CBTrack_phi
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)

◆ CheckTriggerStatusAndPrescale()

StatusCode IDPerfMonZmumu::CheckTriggerStatusAndPrescale ( )
private

Definition at line 2312 of file IDPerfMonZmumu.cxx.

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

◆ Clear4MuNtupleVariables()

void IDPerfMonZmumu::Clear4MuNtupleVariables ( )
private

Definition at line 2462 of file IDPerfMonZmumu.cxx.

2463{
2464 m_positive_px = 0.;
2465 m_positive_py = 0.;
2466 m_positive_pz = 0.;
2467 m_positive_d0 = 0.;
2468 m_positive_z0 = 0.;
2469 m_positive_d0_err = 0.;
2470 m_positive_z0_err = 0.;
2472 m_positive_1_vtx = 0;
2474
2475 m_negative_px = 0.;
2476 m_negative_py = 0.;
2477 m_negative_pz = 0.;
2478 m_negative_d0 = 0.;
2479 m_negative_z0 = 0.;
2480 m_negative_d0_err = 0.;
2481 m_negative_z0_err = 0.;
2483 m_negative_1_vtx = 0;
2485
2486 m_positive_2_px = 0.;
2487 m_positive_2_py = 0.;
2488 m_positive_2_pz = 0.;
2489 m_positive_2_d0 = 0.;
2490 m_positive_2_z0 = 0.;
2493 m_positive_2_vtx = 0;
2494
2495 m_negative_2_px = 0.;
2496 m_negative_2_py = 0.;
2497 m_negative_2_pz = 0.;
2498 m_negative_2_d0 = 0.;
2499 m_negative_2_z0 = 0.;
2502 m_negative_2_vtx = 0;
2503
2504 // electrons
2505 m_el_negative1_px = 0.;
2506 m_el_negative1_py = 0.;
2507 m_el_negative1_pz = 0.;
2508 m_el_negative1_d0 = 0.;
2509 m_el_negative1_z0 = 0.;
2513
2514 m_el_negative2_px = 0.;
2515 m_el_negative2_py = 0.;
2516 m_el_negative2_pz = 0.;
2517 m_el_negative2_d0 = 0.;
2518 m_el_negative2_z0 = 0.;
2522
2523 m_el_positive1_px = 0.;
2524 m_el_positive1_py = 0.;
2525 m_el_positive1_pz = 0.;
2526 m_el_positive1_d0 = 0.;
2527 m_el_positive1_z0 = 0.;
2531
2532 m_el_positive2_px = 0.;
2533 m_el_positive2_py = 0.;
2534 m_el_positive2_pz = 0.;
2535 m_el_positive2_d0 = 0.;
2536 m_el_positive2_z0 = 0.;
2540
2541 // other quantities
2542 m_nVertex = 0;
2543 m_pv_x = 0; m_pv_y = 0; m_pv_z = 0;
2544 m_4mu_minv = 0.;
2545
2546 return;
2547}

◆ 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");
1305 TrackCollection* muonTrksRefit1 = new TrackCollection(SG::OWN_ELEMENTS);
1306 TrackCollection* muonTrksRefit2 = new TrackCollection(SG::OWN_ELEMENTS);
1307
1308 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Going to refit and store the track parameters ");
1309 Trk::Track* defaultMuonTrk1{};
1310 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 = new Trk::Track(*ppos_comb->track());
1320
1321 IegammaTrkRefitterTool::Cache fitResult{};
1322 fitStatus = m_TrackRefitter1->refitTrack( ctx, ppos_comb->track(), fitResult );
1323 if (fitStatus.isFailure()) {
1324 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed for ppos_comb->track(). Skipping Event");
1325 return StatusCode::SUCCESS;
1326 } else {
1327 refit1MuonTrk1 = fitResult.refittedTrack.release();
1328 muonTrksRefit1->push_back(refit1MuonTrk1);
1329 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of ppos_comb->track()."
1330 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1331 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1332 }
1333
1334
1335 fitStatus = m_TrackRefitter2->refitTrack( ctx, ppos_comb->track(), fitResult );
1336 if (fitStatus.isFailure()) {
1337 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Failed for ppos_comb->track(). Skipping Event");
1338 return StatusCode::SUCCESS;
1339 } else {
1340 refit2MuonTrk1 = fitResult.refittedTrack.release();
1341 muonTrksRefit2->push_back(refit2MuonTrk1);
1342 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of ppos_comb->track()."
1343 << " Original pt: " << ppos_comb->track()->perigeeParameters()->pT()
1344 << " track refit pt: " << refit1MuonTrk1->perigeeParameters()->pT() );
1345 }
1346 }
1347
1348 if( pneg_comb->track() ) {
1349 defaultMuonTrk2 = new Trk::Track(*pneg_comb->track());
1350
1351 IegammaTrkRefitterTool::Cache fitResult {};
1352 fitStatus = m_TrackRefitter1->refitTrack( ctx, pneg_comb->track(), fitResult);
1353 if (fitStatus.isFailure()) {
1354 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Failed. Skipping Event");
1355 return StatusCode::SUCCESS;
1356 } else {
1357 refit1MuonTrk2 = fitResult.refittedTrack.release();
1358 muonTrksRefit1->push_back(refit1MuonTrk2);
1359 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit1 Success of pneg_comb->track()."
1360 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1361 << " track refit pt: " << refit1MuonTrk2->perigeeParameters()->pT() );
1362 }
1363
1364
1365 fitStatus = m_TrackRefitter2->refitTrack( ctx, pneg_comb->track(), fitResult );
1366 if (fitStatus.isFailure()) {
1367 ATH_MSG_DEBUG("Track Refit2 Failed. Skipping Event");
1368 return StatusCode::SUCCESS;
1369 } else {
1370 refit2MuonTrk2 = fitResult.refittedTrack.release();
1371 muonTrksRefit2->push_back(refit2MuonTrk2);
1372 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** Track Refit2 Success of pneg_comb->track()."
1373 << " Original pt: " << pneg_comb->track()->perigeeParameters()->pT()
1374 << " track refit pt: " << refit2MuonTrk2->perigeeParameters()->pT() );
1375 }
1376
1377 if (muonTrksRefit1->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit1: " << muonTrksRefit1->size());
1378 if (muonTrksRefit2->size() != 2) ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** WARNING ** size of muonTrksRefit2: " << muonTrksRefit2->size());
1379 }
1380
1381 //save tracks to storegrate, they can be used by InDetAlignmentMonitoring
1382 muonTrks->push_back(defaultMuonTrk1);
1383 muonTrks->push_back(defaultMuonTrk2);
1384
1385 StatusCode sc = evtStore()->record(muonTrks, m_outputTracksName);
1386 if (sc.isSuccess()) {
1387 ATH_MSG_DEBUG ("Stored "<< muonTrks->size() << " " << m_outputTracksName <<" into StoreGate");
1388 }
1389 else{
1390 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName);
1391 }
1392
1393 if (muonTrksRefit1->size() > 1) { // keep track collection if at least 2 muons were found
1394 sc = evtStore()->record(muonTrksRefit1, m_outputTracksName + "Refit1");
1395 if (sc.isSuccess()) {
1396 ATH_MSG_DEBUG ("Stored "<< muonTrksRefit1->size() << " " << m_outputTracksName + "Refit1" << " into StoreGate");
1397 } else {
1398 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit1");
1399 }
1400 }
1401
1402 if (muonTrksRefit2->size() > 1) { // keep track collection if at least 2 muons were found
1403 sc = evtStore()->record(muonTrksRefit2, m_outputTracksName + "Refit2");
1404 if (sc.isSuccess()) {
1405 ATH_MSG_DEBUG ("Stored "<< muonTrksRefit2->size() << " " << m_outputTracksName + "Refit2" << " into StoreGate");
1406 } else {
1407 ATH_MSG_WARNING ("Failed storing " << m_outputTracksName + "Refit2");
1408 }
1409 }
1410
1411
1412 //fill refit1 ID parameters
1413 if (muonTrksRefit1->size()<2) {
1414 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit1 muon tracks are missing!");
1415 }
1416 else {
1417 ATH_MSG_DEBUG("** IDPerfMonZmumu::execute ** going to fill refit1tree ");
1418 success_pos = FillRecParametersSimple (refit1MuonTrk1, ppos_comb->charge(), ppos_comb_v, ctx);
1419 success_neg = FillRecParametersSimple (refit1MuonTrk2, pneg_comb->charge(), pneg_comb_v, ctx);
1420
1421 if (m_storeZmumuNtuple) {
1422 if (success_pos && success_neg) {
1423 if (m_refit1Tree) {
1424 ATH_MSG_DEBUG("-- Filling ntuple " << m_refit1Tree->GetName() << " entry " << m_refit1Tree->GetEntries()
1425 << " for run: " << m_runNumber
1426 << " event: " << m_evtNumber
1427 << " Lumiblock: " << m_lumi_block
1428 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1429 }
1430 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1431 << m_negative_py << ", "
1432 << m_negative_pz << ") "
1433 << " d0: " << m_negative_d0
1434 << " z0: " << m_negative_z0
1435 << " sigma_pt: " << m_positive_sigma_pt);
1436 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1437 << m_positive_py << ","
1438 << m_positive_pz << ") "
1439 << " d0: " << m_positive_d0
1440 << " z0: " << m_positive_z0
1441 << " sigma_pt: " << m_negative_sigma_pt);
1442 if (m_refit1Tree) {
1443 m_refit1Tree->Fill();
1444 }
1445 // Fill vectors for common ntuple
1446 m_Refit1_pt.push_back(m_positive_pt);
1447 m_Refit1_pt.push_back(m_negative_pt);
1448 m_Refit1_eta.push_back(m_positive_eta);
1449 m_Refit1_eta.push_back(m_negative_eta);
1450 m_Refit1_phi.push_back(m_positive_phi);
1451 m_Refit1_phi.push_back(m_negative_phi);
1452 m_Refit1_d0.push_back(m_positive_d0);
1453 m_Refit1_d0.push_back(m_negative_d0);
1454 m_Refit1_z0.push_back(m_positive_z0);
1455 m_Refit1_z0.push_back(m_negative_z0);
1456
1463 } // if (success_pos && success_neg)
1464 } // if (m_storeZmumuNtuple)
1465 } // enough refit1 tracks
1466
1467 //fill refit2 ID parameters
1468 if (muonTrksRefit2->size()<2) {
1469 ATH_MSG_WARNING("** IDPerfMonZmumu::execute ** Refit2 muon tracks are missing!");
1470 }
1471 else{
1472 ATH_MSG_DEBUG("-- >> going to fill refit2params << --");
1473 success_pos = FillRecParametersSimple (refit2MuonTrk1, ppos_comb->charge(), ppos_comb_v, ctx);
1474 success_neg = FillRecParametersSimple (refit2MuonTrk2, pneg_comb->charge(), pneg_comb_v, ctx);
1475
1476 if (m_storeZmumuNtuple) {
1477 if (success_pos && success_neg) {
1478 if (m_refit2Tree) {
1479 ATH_MSG_DEBUG("-- Filling " << m_refit2Tree->GetName() << " entry " << m_refit2Tree->GetEntries()
1480 << " run: " << m_runNumber
1481 << " event: " << m_evtNumber
1482 << " Lumiblock: " << m_lumi_block
1483 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1484 }
1485 ATH_MSG_DEBUG("Negative p: (" << m_negative_px << ", "
1486 << m_negative_py << ", "
1487 << m_negative_pz << ") "
1488 << " d0: " << m_negative_d0
1489 << " z0: " << m_negative_z0
1490 << " sigma_pt: " << m_positive_sigma_pt);
1491 ATH_MSG_DEBUG("Positive p: (" << m_positive_px << ","
1492 << m_positive_py << ","
1493 << m_positive_pz << ") "
1494 << " d0: " << m_positive_d0
1495 << " z0: " << m_positive_z0
1496 << " sigma_pt: " << m_negative_sigma_pt);
1497 if (m_refit2Tree) {
1498 m_refit2Tree->Fill();
1499 }
1500 // Fill vectors for common ntuple
1501 m_Refit2_pt.push_back(m_positive_pt);
1502 m_Refit2_pt.push_back(m_negative_pt);
1503 m_Refit2_eta.push_back(m_positive_eta);
1504 m_Refit2_eta.push_back(m_negative_eta);
1505 m_Refit2_phi.push_back(m_positive_phi);
1506 m_Refit2_phi.push_back(m_negative_phi);
1507 m_Refit2_d0.push_back(m_positive_d0);
1508 m_Refit2_d0.push_back(m_negative_d0);
1509 m_Refit2_z0.push_back(m_positive_z0);
1510 m_Refit2_z0.push_back(m_negative_z0);
1511
1518 } // if (success_pos && success_neg)
1519 } // if (m_storeZmumuNtuple)
1520 } // enough refit2 tracks
1521
1522 ATH_MSG_DEBUG("Execute() All NTUPLES filled Run: " << m_runNumber << " event: " << m_evtNumber << " mass: " << m_xZmm.GetInvMass() << " GeV ");
1523 }
1524 } // closing -> if ( m_xZmm.AcceptEvent() )
1525
1526 if ( !m_xZmm.AcceptEvent() ) {
1527 // no good muon pair found
1528 //failed cuts, continue to next event
1529 ATH_MSG_DEBUG ("** IDPerfMonZmumu::execute ** No good muon pair found. Leaving Execute(). Run: " << m_runNumber << " event: " << m_evtNumber);
1530 return StatusCode::SUCCESS;
1531 }
1532
1533 //
1534 // fill truth event iformation even when the reco event has not passed
1535 //
1536 if (m_isMC) {
1537 bool truthStatusIsGood = true;
1538 if (FillTruthParameters(ppos_comb, ctx).isFailure()){
1539 truthStatusIsGood = false;
1540 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1541 }
1542 if (FillTruthParameters(pneg_comb, ctx).isFailure()){
1543 truthStatusIsGood = false;
1544 ATH_MSG_WARNING("Failed to fill truth parameters - skipping event");
1545 }
1546 if (truthStatusIsGood) {
1547 ATH_MSG_DEBUG ("-- Filling " << m_truthTree->GetName() << " entry " << m_truthTree->GetEntries()
1548 << " run: " << m_runNumber
1549 << " event: " << m_evtNumber
1550 << " Lumiblock: " << m_lumi_block
1551 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1552 ATH_MSG_DEBUG ("Negative p: (" << m_negative_px << ", "
1553 << m_negative_py << ", "
1554 << m_negative_pz << ") "
1555 << " d0: " << m_negative_d0
1556 << " z0: " << m_negative_z0
1557 << " parent: " << m_negative_parent);
1558 ATH_MSG_DEBUG ("Positive p: (" << m_positive_px << ","
1559 << m_positive_py << ","
1560 << m_positive_pz << ") "
1561 << " d0: " << m_positive_d0
1562 << " z0: " << m_positive_z0
1563 << " parent: " << m_positive_parent);
1564
1566 m_Truth_pt.push_back(m_positive_pt);
1567 m_Truth_pt.push_back(m_negative_pt);
1568 m_Truth_eta.push_back(m_positive_eta);
1569 m_Truth_eta.push_back(m_negative_eta);
1570 m_Truth_phi.push_back(m_positive_phi);
1571 m_Truth_phi.push_back(m_negative_phi);
1572 m_Truth_d0.push_back(m_positive_d0);
1573 m_Truth_d0.push_back(m_negative_d0);
1574 m_Truth_z0.push_back(m_positive_z0);
1575 m_Truth_z0.push_back(m_negative_z0);
1580
1581 } // truth info properly filled
1582 else {
1583 ATH_MSG_DEBUG("FAILED filling m_truthTree "
1584 << " for run: " << m_runNumber
1585 << " event: " << m_evtNumber
1586 << " Lumiblock: " << m_lumi_block);
1587 }
1588 } // if (m_isMC)
1589
1590 // fill common tree
1591 if (m_commonTree ) {
1592 // fill ntuple if some of the collections is filled
1593 bool dofill = false;
1594 if (m_IDTrack_pt.size() >= 2) dofill = true;
1595 if (m_CBTrack_pt.size() >= 2) dofill = true;
1596 if (m_Refit1_pt.size() >= 2) dofill = true;
1597 if (m_Refit2_pt.size() >= 2) dofill = true;
1598 if (m_Truth_pt.size() >= 2) dofill = true;
1599
1600 if (dofill) {
1601 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " entry " << m_commonTree->GetEntries()
1602 << " run: " << m_runNumber
1603 << " event: " << m_evtNumber
1604 << " Lumiblock: " << m_lumi_block
1605 << " Invariant mass = " << m_xZmm.GetInvMass() << " GeV ");
1606 m_commonTree->Fill();
1607 }
1608 else {
1609 ATH_MSG_DEBUG("-- Filling m_commonTree " << m_commonTree->GetName() << " FAILED for "
1610 << " run: " << m_runNumber
1611 << " event: " << m_evtNumber
1612 << " Lumiblock: " << m_lumi_block);
1613 }
1614 }
1615
1616 ATH_MSG_DEBUG(" --IDPerfMonZmumu::execute-- event completed -- Run: " << m_runNumber << " event: " << m_evtNumber);
1617
1618 /* ***********************************************************
1619 * after all, let's make the collection for ALL MUON ID Tracks
1620 * ***********************************************************/
1621
1622 ATH_MSG_DEBUG("IDTracks monitoring..");
1623 int nTracks = 0;
1625
1626 // DIFFERENT RETRIEVAL
1628 if(muons){
1629 for (auto muon : *muons) {
1630 const xAOD::TrackParticle* tp = muon->trackParticle(xAOD::Muon::TrackParticleType::InnerDetectorTrackParticle);
1631 if(!tp) {
1632 ATH_MSG_DEBUG(" - tpb = "<< tp << " -> is null? " << (!tp));
1633 continue;
1634 }
1635 const Trk::Track* t = tp->track();
1636 if ( !t ) {
1637 ATH_MSG_DEBUG(" - tpb does not have track ");
1638 continue;
1639 }
1640 const Trk::Perigee* tPerigee = t->perigeeParameters() ;
1641 if ( !tPerigee ) {
1642 ATH_MSG_DEBUG(" - t does not have perigree ");
1643 continue;
1644 }
1645 IDTracks->push_back ( new Trk::Track (*t));
1646 nTracks++;
1647 }
1648 }
1649 else ATH_MSG_WARNING ("Could not retrieve Muon container");
1650
1651 ATH_MSG_DEBUG(" --> nTracks = " << nTracks);
1652
1653 StatusCode scid = evtStore()->record(IDTracks, "IDTracks");
1654 if (scid.isSuccess()) {
1655 ATH_MSG_DEBUG ("Stored "<< IDTracks->size() << " IDTracks into StoreGate");
1656 }
1657 else{
1658 ATH_MSG_WARNING ("Failed storing IDTracks");
1659 }
1660
1661 /*********************************************************
1662 * ..finish
1663 ********************************************************/
1664
1665 return StatusCode::SUCCESS;
1666}
#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:423
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 2790 of file IDPerfMonZmumu.cxx.

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

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

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

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

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

2306{
2307 m_xZmm.finalize();
2308 return StatusCode::SUCCESS;
2309}

◆ GetDiMuonVertex()

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

Definition at line 2373 of file IDPerfMonZmumu.cxx.

2373 {
2374
2375 const xAOD::VertexContainer* vxContainer(0);
2376 const xAOD::Vertex* myVtx(0);
2378 if (!vxContainer) {
2379 return myVtx;
2380 }
2381
2382 for (int ivtx=0; ivtx< (int) vxContainer->size();ivtx++) {
2383 myVtx = (*vxContainer)[ivtx];
2384 if ((myVtx->vertexType() == xAOD::VxType::PriVtx)) {
2385 if (m_Trk2VtxAssociationTool->isCompatible(*muon1,*myVtx) && (m_Trk2VtxAssociationTool->isCompatible(*muon2,*myVtx)))
2386 return myVtx;
2387 }
2388 }
2389 return myVtx;
2390}
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 2285 of file IDPerfMonZmumu.cxx.

2285 {
2287 typedef ElementLink< xAOD::TruthParticleContainer > Link_t;
2289 static const SG::ConstAccessor< Link_t > acc( "truthParticleLink" );
2290 // Check if such a link exists on the object:
2291 if( ! acc.isAvailable( p ) ) {
2292 return nullptr;
2293 }
2294 // Get the link:
2295 const Link_t& link = acc( p );
2296 // Check if the link is valid:
2297 if( ! link.isValid() ) {
2298 return nullptr;
2299 }
2300 // Everything has passed, let's return the pointer:
2301 return *link;
2302}
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 2393 of file IDPerfMonZmumu.cxx.

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

◆ RunFourLeptonAnalysis()

StatusCode IDPerfMonZmumu::RunFourLeptonAnalysis ( )
private

Definition at line 2549 of file IDPerfMonZmumu.cxx.

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