ATLAS Offline Software
Loading...
Searching...
No Matches
METAssociator.h
Go to the documentation of this file.
1
2
3/*
4 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5*/
6
7// METAssociator.h
8// Header file for class METAssociator
9//
10// This is the base class for tools that construct MET terms
11// from other object collections.
12//
13// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
14//
15// Author: P Loch, S Resconi, TJ Khoo, AS Mete
17#ifndef METRECONSTRUCTION_METASSOCIATOR_H
18#define METRECONSTRUCTION_METASSOCIATOR_H
19
20// STL includes
21#include <string>
22
23// FrameWork includes
24#include "AsgTools/AsgTool.h"
25#include "AsgTools/ToolHandle.h"
26
27// METRecoInterface includes
29
35
37#include "xAODTracking/Vertex.h"
39#include "xAODPFlow/PFO.h"
41
42namespace InDet {
44}
45
46namespace xAOD {
49}
50
51namespace met {
53 : virtual public asg::AsgTool,
54 virtual public IMETAssocToolBase
55 {
56
58 // Public methods:
60 public:
61
64 // Use IParticleContainer for flexibility e.g. if combining clusters & towers
68 const xAOD::Vertex* pv = 0;
69 };
70
71 // Constructor w/ name
72 METAssociator(const std::string& name);
73 // Default Destructor
74 virtual ~METAssociator();
75
76 // AsgTool Handles
77 virtual StatusCode initialize() override;
78 virtual StatusCode execute (xAOD::MissingETContainer* metCont, xAOD::MissingETAssociationMap* metMap) const override;
79
81 // Protected methods:
83 protected:
84
85 ToolHandle<InDet::IInDetTrackSelectionTool> m_trkseltool;
86 ToolHandle<xAOD::ITrackIsolationTool> m_trkIsolationTool;
87 ToolHandle<xAOD::ICaloTopoClusterIsolationTool> m_caloIsolationTool;
88
89 std::string m_neutralFELinksKey;
90 std::string m_chargedFELinksKey;
95
96 SG::ReadHandleKey<xAOD::VertexContainer> m_pvcollKey{this,"PrimVxColl","PrimaryVertices","Primary Vertex Collection"};
97 SG::ReadHandleKey<xAOD::IParticleContainer> m_clcollKey{this,"ClusColl","CaloCalTopoClusters","Topo cluster Collection"};
98 SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trkcollKey{this,"TrkColl","InDetTrackParticles","Track particle Collection"};
99 SG::ReadHandleKey<xAOD::PFOContainer> m_pfcollKey{this,"PFlowColl","","PFO Collection"};
100 SG::ReadHandleKey<xAOD::FlowElementContainer> m_fecollKey{this,"FlowElementCollection","","FlowElement Collection (overrides PFO if not empty)"};
101 SG::ReadHandleKey<xAOD::IParticleContainer> m_hybridContKey{this,"HybridKey","","Hybrid Collection"};
102
103 //for HR implementation migrated from release 21.2
104 Gaudi::Property<bool> m_recoil{this, "HRecoil", false, ""};
105
113
115 std::string m_forcoll;
116 double m_foreta;
117
120
121
122
123 // reconstruction process to be defined in the individual tools
124 // pure virtual -- we have no default
125 virtual StatusCode executeTool(xAOD::MissingETContainer* metCont, xAOD::MissingETAssociationMap* metMap) const = 0;
127
128 bool acceptTrack (const xAOD::TrackParticle* trk, const xAOD::Vertex* pv) const;
129 bool isGoodEoverP(const xAOD::TrackParticle* trk) const;
130
131 virtual StatusCode fillAssocMap(xAOD::MissingETAssociationMap* metMap,
132 const xAOD::IParticleContainer* hardObjs) const;
133 virtual StatusCode extractPFO(const xAOD::IParticle* obj,
134 std::vector<const xAOD::IParticle*>& pfolist,
135 const met::METAssociator::ConstitHolder& constits,
136 std::map<const xAOD::IParticle*,MissingETBase::Types::constvec_t> &momenta) const = 0;
137
138 //Get UE correction for HR implementation using METMaker
139 StatusCode GetUEcorr(const met::METAssociator::ConstitHolder& constits,
140 std::vector<TLorentzVector>& v_clus,
141 TLorentzVector& clus,
142 TLorentzVector& HR,
143 const float Drcone,
144 const float MinDistCone,
145 float& UEcorr) const;
146
147 virtual StatusCode extractFE(const xAOD::IParticle* obj,
148 std::vector<const xAOD::IParticle*>& felist,
149 const met::METAssociator::ConstitHolder& constits,
150 std::map<const xAOD::IParticle*,MissingETBase::Types::constvec_t> &momenta) const = 0;
151
152 //HR implementation dealing with FEs instead of PFOs
153 virtual StatusCode extractFEHR(const xAOD::IParticle* /*obj*/,
154 std::vector<const xAOD::IParticle*> /*hardObjs*/,
155 std::vector<const xAOD::IParticle*>& /*pfolist*/,
156 const met::METAssociator::ConstitHolder& /*constits*/,
157 std::map<const xAOD::IParticle*,MissingETBase::Types::constvec_t> &/*momenta*/,
158 float& /*UEcorr*/) const
159 {return StatusCode::FAILURE;}
160
161 virtual StatusCode extractTracks(const xAOD::IParticle* obj,
162 std::vector<const xAOD::IParticle*>& constlist,
163 const met::METAssociator::ConstitHolder& constits) const = 0;
164 virtual StatusCode extractTopoClusters(const xAOD::IParticle* obj,
165 std::vector<const xAOD::IParticle*>& tclist,
166 const met::METAssociator::ConstitHolder& constits) const = 0;
167 static inline bool greaterPt(const xAOD::IParticle* part1, const xAOD::IParticle* part2) {
168 return part1->pt()>part2->pt();
169 }
170 static inline bool greaterPtPFO(const xAOD::PFO* part1, const xAOD::PFO* part2) {
171 if (part1->charge()==0 && part2->charge()!=0) return false;
172 if (part1->charge()!=0 && part2->charge()==0) return true;
173 if (part1->charge()==0 && part2->charge()==0) return part1->ptEM()>part2->ptEM();
174 return part1->pt()>part2->pt();
175 }
176 static inline bool greaterPtFE(const xAOD::FlowElement* part1, const xAOD::FlowElement* part2) {
177 if (!(part1->isCharged()) && part2->isCharged()) return false;
178 if (part1->isCharged() && !(part2->isCharged())) return true;
179 return part1->pt() > part2->pt();
180 }
181
182 // Private methods:
184 private:
185
186 // Default Constructor
188 };
189}
190
191#endif // METRECONSTRUCTION_METASSOCBUILDERTOOL_H
Interface for track selection tool.
Property holding a SG store/key/clid from which a ReadHandle is made.
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
SG::ReadHandleKey< xAOD::PFOContainer > m_pfcollKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkcollKey
SG::ReadHandleKey< xAOD::VertexContainer > m_pvcollKey
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
virtual StatusCode extractFEHR(const xAOD::IParticle *, std::vector< const xAOD::IParticle * >, std::vector< const xAOD::IParticle * > &, const met::METAssociator::ConstitHolder &, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &, float &) const
virtual StatusCode extractPFO(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &pfolist, const met::METAssociator::ConstitHolder &constits, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &momenta) const =0
ToolHandle< xAOD::ICaloTopoClusterIsolationTool > m_caloIsolationTool
virtual StatusCode extractFE(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &momenta) const =0
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkseltool
virtual StatusCode execute(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap) const override
virtual StatusCode fillAssocMap(xAOD::MissingETAssociationMap *metMap, const xAOD::IParticleContainer *hardObjs) const
std::string m_chargedFELinksKey
std::string m_forcoll
static bool greaterPtPFO(const xAOD::PFO *part1, const xAOD::PFO *part2)
static bool greaterPtFE(const xAOD::FlowElement *part1, const xAOD::FlowElement *part2)
SG::ReadHandleKey< xAOD::IParticleContainer > m_hybridContKey
std::string m_neutralPFOLinksKey
static bool greaterPt(const xAOD::IParticle *part1, const xAOD::IParticle *part2)
virtual StatusCode extractTopoClusters(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits) const =0
virtual ~METAssociator()
std::string m_chargedPFOLinksKey
virtual StatusCode extractTracks(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &constlist, const met::METAssociator::ConstitHolder &constits) const =0
ToolHandle< xAOD::ITrackIsolationTool > m_trkIsolationTool
Gaudi::Property< bool > m_recoil
virtual StatusCode executeTool(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap) const =0
METAssociator(const std::string &name)
bool isGoodEoverP(const xAOD::TrackParticle *trk) const
StatusCode retrieveConstituents(met::METAssociator::ConstitHolder &constits) const
std::string m_neutralFELinksKey
SG::ReadHandleKey< xAOD::IParticleContainer > m_clcollKey
SG::ReadHandleKey< xAOD::FlowElementContainer > m_fecollKey
StatusCode GetUEcorr(const met::METAssociator::ConstitHolder &constits, std::vector< TLorentzVector > &v_clus, TLorentzVector &clus, TLorentzVector &HR, const float Drcone, const float MinDistCone, float &UEcorr) const
bool acceptTrack(const xAOD::TrackParticle *trk, const xAOD::Vertex *pv) const
interface for tools calculating topo cluster isolation
Class providing the definition of the 4-vector interface.
interface for tools calculating track isolation
Primary Vertex Finder.
Definition part1.py:1
Definition part2.py:1
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
FlowElementContainer_v1 FlowElementContainer
Definition of the current "pfo container version".
PFO_v1 PFO
Definition of the current "pfo version".
Definition PFO.h:17
PFOContainer_v1 PFOContainer
Definition of the current "pfo container version".
FlowElement_v1 FlowElement
Definition of the current "pfo version".
Definition FlowElement.h:16
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
MissingETAssociationMap_v1 MissingETAssociationMap
Version control by type defintion.
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
const xAOD::IParticleContainer * tcCont
const xAOD::FlowElementContainer * feCont
const xAOD::PFOContainer * pfoCont
const xAOD::TrackParticleContainer * trkCont