63 return StatusCode::SUCCESS;
75 return StatusCode::FAILURE;
81 return StatusCode::FAILURE;
83 return StatusCode::SUCCESS;
89 std::vector<const xAOD::IParticle*>& tclist,
96 <<
", eta " << mu->eta()
97 <<
", phi " << mu->phi()
98 <<
" has cluster with "
99 <<
"eta " << muclus->
calEta()
100 <<
", phi " << muclus->
calPhi()
101 <<
", E " << muclus->
calE()
102 <<
" formed of " << muclus->
size() <<
" cells.");
104 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
105 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
106 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
109 for(
const auto& matchel : tcLinkAcc(*muclus)) {
110 if(!matchel.isValid()) {
continue;}
111 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
112 if((*matchel)->e()>1
e-9) {
113 tclist.push_back(*matchel);
118 return StatusCode::SUCCESS;
122 std::vector<const xAOD::IParticle*>& constlist,
126 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
129 ATH_MSG_VERBOSE(
"Accept muon track " << idtrack <<
" px, py = " << idtrack->
p4().Px() <<
", " << idtrack->
p4().Py());
131 constlist.push_back(idtrack);
136 return StatusCode::SUCCESS;
142 std::vector<const xAOD::IParticle*>& pfolist,
144 std::map<const IParticle*,MissingETBase::Types::constvec_t>& )
const
147 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
151 <<
", eta " << mu->eta()
152 <<
", phi " << mu->phi());
155 <<
"eta " << muclus->
calEta()
156 <<
", phi " << muclus->
calPhi()
157 <<
", E " << muclus->
calE()
158 <<
" formed of " << muclus->
size() <<
" cells.");
161 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
162 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
163 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
166 for(
const auto *
const pfo : *constits.
pfoCont) {
167 if(pfo->isCharged()) {
175 ATH_MSG_VERBOSE(
"Accept muon PFO " << pfo <<
" px, py = " << pfo->p4().Px() <<
", " << pfo->p4().Py());
176 ATH_MSG_VERBOSE(
"Muon PFO index: " << pfo->index() <<
", pt: " << pfo->pt() <<
", eta: " << pfo->eta() <<
", phi: " << pfo->phi() );
177 ATH_MSG_VERBOSE(
"Muon ID Track index: " << idtrack->
index() <<
", pt: " << idtrack->
pt() <<
", eta: " << idtrack->
eta() <<
", phi: " << idtrack->
phi() );
178 pfolist.push_back(pfo);
186 for(
const auto& matchel : tcLinkAcc(*muclus)) {
187 if(!matchel.isValid()) {
190 if((*matchel)->e()>FLT_MIN && pfo->cluster(0) == *matchel) {
191 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
192 pfolist.push_back(pfo);
200 return StatusCode::SUCCESS;
205 std::vector<const xAOD::IParticle*>& felist,
207 std::map<const IParticle*,MissingETBase::Types::constvec_t> &)
const
215 return StatusCode::SUCCESS;
219 std::vector<const xAOD::IParticle*>& felist,
222 ATH_MSG_DEBUG(
"Extract FEs From Links for " << mu->type() <<
" with pT " << mu->pt());
224 std::vector<FELink_t> nFELinks;
225 std::vector<FELink_t> cFELinks;
229 nFELinks=neutralFEReadDecorHandle(*mu);
230 cFELinks=chargedFEReadDecorHandle(*mu);
233 for (
const FELink_t& feLink : cFELinks) {
234 if (!feLink.isValid())
continue;
236 for (
const auto *
const fe : *constits.
feCont){
237 if (fe->index() == fe_init->
index() && fe->isCharged()){
240 ATH_MSG_DEBUG(
"Accept cFE with pt " << fe->pt() <<
", e " << fe->e() <<
", eta " << fe->eta() <<
", phi " << fe->phi() );
241 felist.push_back(fe);
248 for (
const FELink_t& feLink : nFELinks) {
249 if (!feLink.isValid())
continue;
251 for (
const auto *
const fe : *constits.
feCont){
252 if (fe->index() == fe_init->
index() && !fe->isCharged()){
253 if( ( !fe->isCharged()&& fe->e() > FLT_MIN ) ){
254 ATH_MSG_DEBUG(
"Accept nFE with pt " << fe->pt() <<
", e " << fe->e() <<
", eta " << fe->eta() <<
", phi " << fe->phi() <<
" in sum.");
255 felist.push_back(fe);
262 return StatusCode::SUCCESS;
266 std::vector<const xAOD::IParticle*>& felist,
269 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
272 <<
", eta " << mu->eta()
273 <<
", phi " << mu->phi());
276 <<
"eta " << muclus->
calEta()
277 <<
", phi " << muclus->
calPhi()
278 <<
", E " << muclus->
calE()
279 <<
" formed of " << muclus->
size() <<
" cells.");
282 <<
" Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
283 <<
" MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
284 <<
" FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
296 ATH_MSG_VERBOSE(
"Accept muon PFO (FE) " << fe <<
" px, py = " << fe->
p4().Px() <<
", " << fe->
p4().Py());
298 ATH_MSG_VERBOSE(
"Muon ID Track index: " << idtrack->
index() <<
", pt: " << idtrack->
pt() <<
", eta: " << idtrack->
eta() <<
", phi: " << idtrack->
phi() );
299 felist.push_back(fe);
307 for(
const auto& matchel : tcLinkAcc(*muclus)) {
308 if(!matchel.isValid()) {
311 if((*matchel)->e()>FLT_MIN && fe->
otherObject(0) == *matchel) {
312 ATH_MSG_VERBOSE(
"Tool found cluster " << (*matchel)->index() <<
" with pt " << (*matchel)->pt() );
313 felist.push_back(fe);
321 return StatusCode::SUCCESS;
327 std::vector<const xAOD::IParticle*> hardObjs,
328 std::vector<const xAOD::IParticle*>& felist,
330 std::map<const IParticle*,MissingETBase::Types::constvec_t> & ,
336 return StatusCode::SUCCESS;
341 for(
const auto fe : *constits.
feCont) {
342 if( fe->isCharged()) {
345 felist.push_back(fe);
350 felist.push_back(fe);
359 for(
const auto fe_itr : *constits.
feCont) {
360 if( fe_itr->pt() < 0 || fe_itr->e() < 0 ) {
372 std::vector<const xAOD::Muon*> v_mu;
373 for(
const auto& obj_i : hardObjs) {
378 v_mu.push_back(mu_curr);
383 for(
const auto fe_i : *constits.
feCont) {
384 if( fe_i->pt() < 0 || fe_i->e() < 0 ) {
387 for(
const auto& mu_i : v_mu) {
388 double dR =
P4Helpers::deltaR( fe_i->eta(), fe_i->phi(), mu_i->eta(), mu_i->phi() );
397 std::vector<TLorentzVector> v_muTLV;
398 v_muTLV.reserve(v_mu.size());
399 for(
const auto& mu_i : v_mu) {
400 v_muTLV.push_back( mu_i->p4() );
404 TLorentzVector muTLV = mu->p4();
411 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.
SG::ConstAccessor< T, ALLOC > ConstAccessor
size_t index() const
Return the index of this element within its container.
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 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 final
METMuonAssociator()
Default constructor:
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_neutralFEReadDecorKey
Gaudi::Property< bool > m_doMuonClusterMatch
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_chargedFEReadDecorKey
StatusCode executeTool(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap) const final
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 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
StatusCode extractFEs(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits) const
StatusCode extractTopoClusters(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits) const final
static constexpr float m_Drcone
StatusCode extractFEsFromLinks(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits) const
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.