58 return StatusCode::SUCCESS;
70 return StatusCode::FAILURE;
76 return StatusCode::FAILURE;
78 return StatusCode::SUCCESS;
84 std::vector<const xAOD::IParticle*>& tclist,
91 <<
", eta " << mu->eta()
92 <<
", phi " << mu->phi()
93 <<
" has cluster with "
94 <<
"eta " << muclus->
calEta()
95 <<
", phi " << muclus->
calPhi()
96 <<
", E " << muclus->
calE()
97 <<
" formed of " << muclus->
size() <<
" cells.");
99 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
100 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
101 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
104 for(
const auto& matchel : tcLinkAcc(*muclus)) {
105 if(!matchel.isValid()) {
continue;}
106 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
107 if((*matchel)->e()>1
e-9) {
108 tclist.push_back(*matchel);
113 return StatusCode::SUCCESS;
117 std::vector<const xAOD::IParticle*>& constlist,
121 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
124 ATH_MSG_VERBOSE(
"Accept muon track " << idtrack <<
" px, py = " << idtrack->
p4().Px() <<
", " << idtrack->
p4().Py());
126 constlist.push_back(idtrack);
131 return StatusCode::SUCCESS;
137 std::vector<const xAOD::IParticle*>& pfolist,
139 std::map<const IParticle*,MissingETBase::Types::constvec_t>& ,
const EventContext& ctx)
const
142 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
146 <<
", eta " << mu->eta()
147 <<
", phi " << mu->phi());
150 <<
"eta " << muclus->
calEta()
151 <<
", phi " << muclus->
calPhi()
152 <<
", E " << muclus->
calE()
153 <<
" formed of " << muclus->
size() <<
" cells.");
156 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
157 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
158 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
161 for(
const auto *
const pfo : *constits.
pfoCont) {
162 if(pfo->isCharged()) {
170 ATH_MSG_VERBOSE(
"Accept muon PFO " << pfo <<
" px, py = " << pfo->p4().Px() <<
", " << pfo->p4().Py());
171 ATH_MSG_VERBOSE(
"Muon PFO index: " << pfo->index() <<
", pt: " << pfo->pt() <<
", eta: " << pfo->eta() <<
", phi: " << pfo->phi() );
172 ATH_MSG_VERBOSE(
"Muon ID Track index: " << idtrack->index() <<
", pt: " << idtrack->
pt() <<
", eta: " << idtrack->
eta() <<
", phi: " << idtrack->
phi() );
173 pfolist.push_back(pfo);
181 for(
const auto& matchel : tcLinkAcc(*muclus)) {
182 if(!matchel.isValid()) {
185 if((*matchel)->e()>FLT_MIN && pfo->cluster(0) == *matchel) {
186 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
187 pfolist.push_back(pfo);
195 return StatusCode::SUCCESS;
200 std::vector<const xAOD::IParticle*>& felist,
202 std::map<const IParticle*,MissingETBase::Types::constvec_t> &,
const EventContext& ctx)
const
210 return StatusCode::SUCCESS;
214 std::vector<const xAOD::IParticle*>& felist,
217 ATH_MSG_DEBUG(
"Extract FEs From Links for " << mu->type() <<
" with pT " << mu->pt());
219 std::vector<FELink_t> nFELinks;
220 std::vector<FELink_t> cFELinks;
224 nFELinks=neutralFEReadDecorHandle(*mu);
225 cFELinks=chargedFEReadDecorHandle(*mu);
228 for (
const FELink_t& feLink : cFELinks) {
229 if (!feLink.isValid())
continue;
231 for (
const auto *
const fe : *constits.
feCont){
232 if (fe->index() == fe_init->index() && fe->
isCharged()){
235 ATH_MSG_DEBUG(
"Accept cFE with pt " << fe->pt() <<
", e " << fe->e() <<
", eta " << fe->eta() <<
", phi " << fe->phi() );
236 felist.push_back(fe);
243 for (
const FELink_t& feLink : nFELinks) {
244 if (!feLink.isValid())
continue;
246 for (
const auto *
const fe : *constits.
feCont){
247 if (fe->index() == fe_init->index() && !fe->
isCharged()){
248 if( ( !fe->isCharged()&& fe->e() > FLT_MIN ) ){
249 ATH_MSG_DEBUG(
"Accept nFE with pt " << fe->pt() <<
", e " << fe->e() <<
", eta " << fe->eta() <<
", phi " << fe->phi() <<
" in sum.");
250 felist.push_back(fe);
257 return StatusCode::SUCCESS;
261 std::vector<const xAOD::IParticle*>& felist,
264 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
267 <<
", eta " << mu->eta()
268 <<
", phi " << mu->phi());
271 <<
"eta " << muclus->
calEta()
272 <<
", phi " << muclus->
calPhi()
273 <<
", E " << muclus->
calE()
274 <<
" formed of " << muclus->
size() <<
" cells.");
277 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
278 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
279 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
291 ATH_MSG_VERBOSE(
"Accept muon PFO (FE) " << fe <<
" px, py = " << fe->
p4().Px() <<
", " << fe->
p4().Py());
292 ATH_MSG_VERBOSE(
"Muon PFO index: " << fe->index() <<
", pt: " << fe->
pt() <<
", eta: " << fe->
eta() <<
", phi: " << fe->
phi() );
293 ATH_MSG_VERBOSE(
"Muon ID Track index: " << idtrack->index() <<
", pt: " << idtrack->
pt() <<
", eta: " << idtrack->
eta() <<
", phi: " << idtrack->
phi() );
294 felist.push_back(fe);
302 for(
const auto& matchel : tcLinkAcc(*muclus)) {
303 if(!matchel.isValid()) {
306 if((*matchel)->e()>FLT_MIN && fe->
otherObject(0) == *matchel) {
307 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
308 felist.push_back(fe);
316 return StatusCode::SUCCESS;
322 std::vector<const xAOD::IParticle*> hardObjs,
323 std::vector<const xAOD::IParticle*>& felist,
325 std::map<const IParticle*,MissingETBase::Types::constvec_t> & ,
331 return StatusCode::SUCCESS;
336 for(
const auto fe : *constits.
feCont) {
337 if( fe->isCharged()) {
340 felist.push_back(fe);
345 felist.push_back(fe);
354 for(
const auto fe_itr : *constits.
feCont) {
355 if( fe_itr->pt() < 0 || fe_itr->e() < 0 ) {
367 std::vector<const xAOD::Muon*> v_mu;
368 for(
const auto& obj_i : hardObjs) {
373 v_mu.push_back(mu_curr);
378 for(
const auto fe_i : *constits.
feCont) {
379 if( fe_i->pt() < 0 || fe_i->e() < 0 ) {
382 for(
const auto& mu_i : v_mu) {
383 double dR =
P4Helpers::deltaR( fe_i->eta(), fe_i->phi(), mu_i->eta(), mu_i->phi() );
392 std::vector<TLorentzVector> v_muTLV;
393 v_muTLV.reserve(v_mu.size());
394 for(
const auto& mu_i : v_mu) {
395 v_muTLV.push_back( mu_i->p4() );
399 TLorentzVector muTLV = mu->p4();
406 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
ElementLink< xAOD::MuonContainer > MuonLink_t
ElementLink< xAOD::FlowElementContainer > FELink_t
Handle class for reading a decoration on an object.
ElementLink implementation for ROOT usage.
Helper class to provide constant type-safe access to aux data.
Handle class for reading a decoration on an object.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
StatusCode extractTracks(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &constlist, const met::METAssociator::ConstitHolder &constits) const final
StatusCode executeTool(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap, const EventContext &ctx) const final
METMuonAssociator()
Default constructor:
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_neutralFEReadDecorKey
StatusCode extractFEsFromLinks(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
Gaudi::Property< bool > m_doMuonClusterMatch
StatusCode extractFEs(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
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 EventContext &ctx) const final
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_chargedFEReadDecorKey
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 EventContext &ctx) const final
StatusCode extractFEHR(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > hardObjs, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, std::map< const xAOD::IParticle *, MissingETBase::Types::constvec_t > &momenta, float &UEcorr) const final
SG::ReadHandleKey< xAOD::MuonContainer > m_muContKey
static constexpr float m_Drcone
virtual StatusCode extractTopoClusters(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const final
static constexpr float m_MinDistCone
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
SG::ReadDecorHandleKey< xAOD::CaloClusterContainer > m_elementLinkName
flt_t calPhi() const
Get in signal state CALIBRATED.
size_t size() const
size method (forwarded from CaloClusterCellLink obj)
flt_t calEta() const
Get in signal state CALIBRATED.
flt_t calE() const
Geet Energy in signal state CALIBRATED.
virtual double pt() const override
virtual double phi() const override
The azimuthal angle ( ) of the particle.
virtual double eta() const override
The pseudorapidity ( ) of the particle.
const xAOD::IParticle * chargedObject(std::size_t i) const
const xAOD::IParticle * otherObject(std::size_t i) const
virtual FourMom_t p4() const override
The full 4-momentum of the particle.
Class providing the definition of the 4-vector interface.
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
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 phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
static const SG::ConstAccessor< char > PVMatchedAcc("matchedToPV")
@ Muon
The object is a muon.
bool isInDeltaR(const xAOD::IParticle &p1, const xAOD::IParticle &p2, double dR, bool useRapidity=true)
Check if 2 xAOD::IParticle are in a cone.
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
FlowElement_v1 FlowElement
Definition of the current "pfo version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
MissingETContainer_v1 MissingETContainer
Muon_v1 Muon
Reference the current persistent version:
MissingETAssociationMap_v1 MissingETAssociationMap
Version control by type defintion.