ATLAS Offline Software
Loading...
Searching...
No Matches
met::METMuonAssociator Class Referencefinal

#include <METMuonAssociator.h>

Inheritance diagram for met::METMuonAssociator:
Collaboration diagram for met::METMuonAssociator:

Public Member Functions

 METMuonAssociator (const std::string &name)
 ~METMuonAssociator ()=default
virtual StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual StatusCode execute (xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap, const EventContext &ctx) const override
virtual void print () const
 Print the state of the tool.
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 sysInitialize () override
 Perform system initialization for an algorithm.
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
Additional helper functions, not directly mimicking Athena
template<class T>
const T * getProperty (const std::string &name) const
 Get one of the tool's properties.
const std::string & msg_level_name () const __attribute__((deprecated))
 A deprecated function for getting the message level's name.
const std::string & getName (const void *ptr) const
 Get the name of an object that is / should be in the event store.
SG::sgkey_t getKey (const void *ptr) const
 Get the (hashed) key of an object that is in the event store.

Protected Member Functions

StatusCode executeTool (xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap, const EventContext &ctx) const final
virtual StatusCode extractTopoClusters (const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const final
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
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
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
StatusCode extractFEsFromLinks (const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
StatusCode extractFEs (const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
StatusCode extractTracks (const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &constlist, const met::METAssociator::ConstitHolder &constits) const final
StatusCode retrieveConstituents (met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
bool acceptTrack (const xAOD::TrackParticle *trk, const xAOD::Vertex *pv) const
bool isGoodEoverP (const xAOD::TrackParticle *trk) const
virtual StatusCode fillAssocMap (xAOD::MissingETAssociationMap *metMap, const xAOD::IParticleContainer *hardObjs, const EventContext &ctx) const
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
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.

Static Protected Member Functions

static bool greaterPt (const xAOD::IParticle *part1, const xAOD::IParticle *part2)
static bool greaterPtPFO (const xAOD::PFO *part1, const xAOD::PFO *part2)
static bool greaterPtFE (const xAOD::FlowElement *part1, const xAOD::FlowElement *part2)

Protected Attributes

ToolHandle< InDet::IInDetTrackSelectionToolm_trkseltool {this, "TrackSelectorTool", ""}
ToolHandle< xAOD::ITrackIsolationToolm_trkIsolationTool {this, "TrackIsolationTool", ""}
ToolHandle< xAOD::ICaloTopoClusterIsolationToolm_caloIsolationTool {this, "CaloIsolationTool", ""}
Gaudi::Property< std::string > m_neutralFELinksKey {this, "NeutralFELinksKey", "neutralGlobalFELinks"}
Gaudi::Property< std::string > m_chargedFELinksKey {this, "ChargedFELinksKey", "chargedGlobalFELinks"}
Gaudi::Property< std::string > m_neutralPFOLinksKey {this, "NeutralPFOLinksKey", "neutralpfoLinks"}
Gaudi::Property< std::string > m_chargedPFOLinksKey {this, "ChargedPFOLinksKey", "chargedpfoLinks"}
Gaudi::Property< boolm_usePFOLinks {this, "UsePFOLinks", false}
Gaudi::Property< boolm_useFELinks {this, "UseFELinks", false}
SG::ReadHandleKey< xAOD::VertexContainerm_pvcollKey {this,"PrimVxColl","PrimaryVertices","Primary Vertex Collection"}
SG::ReadHandleKey< xAOD::IParticleContainerm_clcollKey {this,"ClusColl","CaloCalTopoClusters","Topo cluster Collection"}
SG::ReadHandleKey< xAOD::TrackParticleContainerm_trkcollKey {this,"TrkColl","InDetTrackParticles","Track particle Collection"}
SG::ReadHandleKey< xAOD::PFOContainerm_pfcollKey {this,"PFlowColl","","PFO Collection"}
SG::ReadHandleKey< xAOD::FlowElementContainerm_fecollKey {this,"FlowElementCollection","","FlowElement Collection (overrides PFO if not empty)"}
SG::ReadHandleKey< xAOD::IParticleContainerm_hybridContKey {this,"HybridKey","","Hybrid Collection"}
SG::WriteDecorHandleKey< xAOD::IParticleContainerm_UEcorrPtDecorKey {this, "UEcorrPtDecorKey", "", "UE correction for each lepton"}
Gaudi::Property< boolm_recoil {this, "HRecoil", false, ""}
Gaudi::Property< boolm_pflow {this, "PFlow", false}
Gaudi::Property< boolm_useTracks {this, "UseTracks", true}
Gaudi::Property< boolm_useRapidity {this, "UseRapidity", false}
Gaudi::Property< boolm_useModifiedClus {this, "UseModifiedClus", false}
Gaudi::Property< boolm_cleanChargedPFO {this, "CleanCPFO", true}
Gaudi::Property< boolm_skipconst {this, "IgnoreJetConst", false}
Gaudi::Property< std::string > m_forcoll {this, "ForwardColl", ""}
Gaudi::Property< doublem_foreta {this, "ForwardDef", 2.5}
Gaudi::Property< doublem_cenTrackPtThr {this, "CentralTrackPtThr", 30e+3}
Gaudi::Property< doublem_forTrackPtThr {this, "ForwardTrackPtThr", 30e+3}

Private Member Functions

 METMuonAssociator ()
 Default constructor:

Private Attributes

Gaudi::Property< boolm_doMuonClusterMatch {this, "DoClusterMatch", true, ""}
SG::ReadHandleKey< xAOD::MuonContainerm_muContKey
SG::ReadDecorHandleKey< xAOD::MuonContainerm_neutralFEReadDecorKey
SG::ReadDecorHandleKey< xAOD::MuonContainerm_chargedFEReadDecorKey
SG::ReadDecorHandleKey< xAOD::CaloClusterContainerm_elementLinkName

Static Private Attributes

static constexpr float m_Drcone = 0.2
static constexpr float m_MinDistCone = 0.4

Detailed Description

Definition at line 22 of file METMuonAssociator.h.

Constructor & Destructor Documentation

◆ METMuonAssociator() [1/2]

met::METMuonAssociator::METMuonAssociator ( const std::string & name)

Definition at line 41 of file METMuonAssociator.cxx.

41 :
44 {
45 }
AsgTool(const std::string &name)
Constructor specifying the tool instance's name.
Definition AsgTool.cxx:58

◆ ~METMuonAssociator()

met::METMuonAssociator::~METMuonAssociator ( )
default

◆ METMuonAssociator() [2/2]

met::METMuonAssociator::METMuonAssociator ( )
private

Default constructor:

Member Function Documentation

◆ acceptTrack()

bool met::METAssociator::acceptTrack ( const xAOD::TrackParticle * trk,
const xAOD::Vertex * pv ) const
protectedinherited

Definition at line 354 of file METAssociator.cxx.

355 {
356
357 if (!vx) return false;//in events with no pv, we will just reject all tracks, and therefore build only the calo MET
358 return static_cast<bool> (m_trkseltool->accept( *trk, vx ));
359 }
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkseltool

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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< AlgTool > >::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 met::METAssociator::execute ( xAOD::MissingETContainer * metCont,
xAOD::MissingETAssociationMap * metMap,
const EventContext & ctx ) const
overridevirtualinherited

Implements IMETAssocToolBase.

Definition at line 124 of file METAssociator.cxx.

125 {
126 ATH_MSG_DEBUG ("In execute: " << name() << "...");
127 if(!metCont) {
128 ATH_MSG_WARNING("Invalid pointer to MissingETContainer supplied! Abort.");
129 return StatusCode::FAILURE;
130 }
131
132 if(!metMap) {
133 ATH_MSG_WARNING("Invalid pointer to MissingETAssociationMap supplied! Abort.");
134 return StatusCode::FAILURE;
135 }
136 if(m_pflow && !m_useTracks ){
137 ATH_MSG_WARNING("Attempting to build PFlow MET without a track collection.");
138 return StatusCode::FAILURE;
139 }
140
141 return this->executeTool(metCont, metMap, ctx);
142 }
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Gaudi::Property< bool > m_pflow
virtual StatusCode executeTool(xAOD::MissingETContainer *metCont, xAOD::MissingETAssociationMap *metMap, const EventContext &ctx) const =0
Gaudi::Property< bool > m_useTracks

◆ executeTool()

StatusCode met::METMuonAssociator::executeTool ( xAOD::MissingETContainer * metCont,
xAOD::MissingETAssociationMap * metMap,
const EventContext & ctx ) const
finalprotectedvirtual

Implements met::METAssociator.

Definition at line 63 of file METMuonAssociator.cxx.

64 {
65 ATH_MSG_VERBOSE ("In execute: " << name() << "...");
66
67 SG::ReadHandle<xAOD::MuonContainer> muonCont(m_muContKey, ctx);
68 if (!muonCont.isValid()) {
69 ATH_MSG_WARNING("Unable to retrieve input muon container " << m_muContKey.key());
70 return StatusCode::FAILURE;
71 }
72
73 ATH_MSG_DEBUG("Successfully retrieved muon collection");
74 if (fillAssocMap(metMap,muonCont.cptr(), ctx).isFailure()) {
75 ATH_MSG_WARNING("Unable to fill map with muon container " << m_muContKey.key());
76 return StatusCode::FAILURE;
77 }
78 return StatusCode::SUCCESS;
79 }
#define ATH_MSG_VERBOSE(x)
virtual StatusCode fillAssocMap(xAOD::MissingETAssociationMap *metMap, const xAOD::IParticleContainer *hardObjs, const EventContext &ctx) const
SG::ReadHandleKey< xAOD::MuonContainer > m_muContKey

◆ extractFE()

StatusCode met::METMuonAssociator::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
finalprotectedvirtual

Implements met::METAssociator.

Definition at line 199 of file METMuonAssociator.cxx.

203 {
204 const xAOD::Muon *mu = static_cast<const xAOD::Muon*>(obj);
205 if (m_useFELinks)
206 ATH_CHECK( extractFEsFromLinks(mu, felist,constits, ctx) );
207 else
208 ATH_CHECK( extractFEs(mu, felist, constits, ctx) );
209
210 return StatusCode::SUCCESS;
211 }
#define ATH_CHECK
Evaluate an expression and check for errors.
Gaudi::Property< bool > m_useFELinks
StatusCode extractFEsFromLinks(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
StatusCode extractFEs(const xAOD::Muon *mu, std::vector< const xAOD::IParticle * > &felist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const
Muon_v1 Muon
Reference the current persistent version:

◆ extractFEHR()

StatusCode met::METMuonAssociator::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
finalprotectedvirtual

Reimplemented from met::METAssociator.

Definition at line 321 of file METMuonAssociator.cxx.

327 {
328 if(obj->type() != xAOD::Type::ObjectType::Muon){
329 UEcorr=0.0;
330 felist={};
331 return StatusCode::SUCCESS;
332 }
333 const xAOD::Muon* mu = static_cast<const xAOD::Muon*>(obj);
334
335 // Get PFOs associated to muons
336 for(const auto fe : *constits.feCont) {
337 if( fe->isCharged()) { // Fill list with charged PFOs (using muon tracks)
338 if( mu && P4Helpers::isInDeltaR(*fe, *mu, m_Drcone, m_useRapidity) && PVMatchedAcc(*fe) &&
339 ( !m_cleanChargedPFO || isGoodEoverP(static_cast<const xAOD::TrackParticle*>(fe->chargedObject(0))) ) ){
340 felist.push_back(fe);
341 }
342 }
343 else{ // Fill list with neutral PFOs (using muon clusters)
344 if( mu && P4Helpers::isInDeltaR(*fe, *mu, m_Drcone, m_useRapidity) ){
345 felist.push_back(fe);
346 }
347 } // neutral PFO condition
348 } // loop over all PFOs
349
350 // Calculating UE energy correction for a given lepton (using mu)
351 if(mu){
352 // Vectoral sum of all FE
353 TLorentzVector HR; // uncorrected HR (initialized with 0,0,0,0 automatically)
354 for(const auto fe_itr : *constits.feCont) {
355 if( fe_itr->pt() < 0 || fe_itr->e() < 0 ) { // sanity check
356 continue;
357 }
358
359 //remove charged FE that are not matched to the PV
360 if(fe_itr->isCharged() && !PVMatchedAcc(*fe_itr)){
361 continue;
362 }
363 HR += fe_itr->p4();
364 }
365
366 // Create vectors of muons
367 std::vector<const xAOD::Muon*> v_mu;
368 for(const auto& obj_i : hardObjs) {
369 if(obj_i->pt()<5e3 && obj_i->type() != xAOD::Type::Muon) { // sanity check
370 continue;
371 }
372 const xAOD::Muon* mu_curr = static_cast<const xAOD::Muon*>(obj_i); // current muon
373 v_mu.push_back(mu_curr);
374 }
375
376
377 // Subtracting PFOs matched to muons from HR
378 for(const auto fe_i : *constits.feCont) { // charged and neutral PFOs
379 if( fe_i->pt() < 0 || fe_i->e() < 0 ) { // sanity check
380 continue;
381 }
382 for(const auto& mu_i : v_mu) { // loop over muons
383 double dR = P4Helpers::deltaR( fe_i->eta(), fe_i->phi(), mu_i->eta(), mu_i->phi() );
384 if( dR < m_Drcone ) { // if PFO is in a cone around muon
385 HR -= fe_i->p4();
386 break;
387 } // cone requirement
388 } // over v_mu
389 } // over PFOs
390
391 // Save v_mu as a vector TLV (as commonn type for electrons and muons)
392 std::vector<TLorentzVector> v_muTLV;
393 v_muTLV.reserve(v_mu.size());
394 for(const auto& mu_i : v_mu) { // loop over v_mu
395 v_muTLV.push_back( mu_i->p4() );
396 }
397
398 // Save current mu as TLV
399 TLorentzVector muTLV = mu->p4();
400
401 // Get UE correction
402 ATH_CHECK( GetUEcorr(constits, v_muTLV, muTLV, HR, m_Drcone, m_MinDistCone, UEcorr) );
403 } // available mu requirement
404
405
406 return StatusCode::SUCCESS;
407 }
Gaudi::Property< bool > m_useRapidity
Gaudi::Property< bool > m_cleanChargedPFO
bool isGoodEoverP(const xAOD::TrackParticle *trk) const
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
static constexpr float m_Drcone
static constexpr float m_MinDistCone
static const SG::ConstAccessor< char > PVMatchedAcc("matchedToPV")
@ Muon
The object is a muon.
Definition ObjectType.h:48
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
TrackParticle_v1 TrackParticle
Reference the current persistent version:
const xAOD::FlowElementContainer * feCont

◆ extractFEs()

StatusCode met::METMuonAssociator::extractFEs ( const xAOD::Muon * mu,
std::vector< const xAOD::IParticle * > & felist,
const met::METAssociator::ConstitHolder & constits,
const EventContext & ctx ) const
protected

Definition at line 260 of file METMuonAssociator.cxx.

263 {
264 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
265 const CaloCluster* muclus = mu->cluster();
266 ATH_MSG_VERBOSE("Muon " << mu->index() << " with pt " << mu->pt()
267 << ", eta " << mu->eta()
268 << ", phi " << mu->phi());
269 if(muclus) {
270 ATH_MSG_VERBOSE(" has cluster with "
271 << "eta " << muclus->calEta()
272 << ", phi " << muclus->calPhi()
273 << ", E " << muclus->calE()
274 << " formed of " << muclus->size() << " cells.");
275 }
276 ATH_MSG_VERBOSE("Muon Eloss type: " << mu->energyLossType()
277 << " Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
278 << " MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
279 << " FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
280
281 // One loop over PFOs
282 for(const xAOD::FlowElement* fe : *constits.feCont) {
283 if(fe->isCharged()) {
284 // get charged FEs by matching the muon ID track
285 // We set a small -ve pt for cPFOs that were rejected
286 // by the ChargedHadronSubtractionTool
287 const static SG::ConstAccessor<char> PVMatchedAcc("matchedToPV");
288 if(idtrack && fe->chargedObject(0) == idtrack && PVMatchedAcc(*fe) &&
289 ( !m_cleanChargedPFO || isGoodEoverP(static_cast<const xAOD::TrackParticle*>(fe->chargedObject(0))) )
290 ) {
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);
295 break;
296 } // track match
297 } else {
298 // get neutral PFOs by matching the muon cluster
299 if(muclus && m_doMuonClusterMatch) {
300
301 SG::ReadDecorHandle<CaloClusterContainer, std::vector<ElementLink<CaloClusterContainer> > > tcLinkAcc(m_elementLinkName, ctx);
302 for(const auto& matchel : tcLinkAcc(*muclus)) {
303 if(!matchel.isValid()) {
304 ATH_MSG_DEBUG("Invalid muon-cluster elementLink");
305 } else {
306 if((*matchel)->e()>FLT_MIN && fe->otherObject(0) == *matchel) { // +ve E && matches cluster
307 ATH_MSG_VERBOSE("Tool found cluster " << (*matchel)->index() << " with pt " << (*matchel)->pt() );
308 felist.push_back(fe);
309 }
310 }
311 }
312 } // muon has linked cluster
313 }
314 } // end of cluster loop
315
316 return StatusCode::SUCCESS;
317 }
Gaudi::Property< bool > m_doMuonClusterMatch
SG::ReadDecorHandleKey< xAOD::CaloClusterContainer > m_elementLinkName
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.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
FlowElement_v1 FlowElement
Definition of the current "pfo version".
Definition FlowElement.h:16

◆ extractFEsFromLinks()

StatusCode met::METMuonAssociator::extractFEsFromLinks ( const xAOD::Muon * mu,
std::vector< const xAOD::IParticle * > & felist,
const met::METAssociator::ConstitHolder & constits,
const EventContext & ctx ) const
protected

Definition at line 213 of file METMuonAssociator.cxx.

216 {
217 ATH_MSG_DEBUG("Extract FEs From Links for " << mu->type() << " with pT " << mu->pt());
218
219 std::vector<FELink_t> nFELinks;
220 std::vector<FELink_t> cFELinks;
221
222 SG::ReadDecorHandle<xAOD::MuonContainer, std::vector<FELink_t> > neutralFEReadDecorHandle (m_neutralFEReadDecorKey, ctx);
223 SG::ReadDecorHandle<xAOD::MuonContainer, std::vector<FELink_t> > chargedFEReadDecorHandle (m_chargedFEReadDecorKey, ctx);
224 nFELinks=neutralFEReadDecorHandle(*mu);
225 cFELinks=chargedFEReadDecorHandle(*mu);
226
227 // Charged FEs
228 for (const FELink_t& feLink : cFELinks) {
229 if (!feLink.isValid()) continue;
230 const xAOD::FlowElement* fe_init = *feLink;
231 for (const auto *const fe : *constits.feCont){
232 if (fe->index() == fe_init->index() && fe->isCharged()){ //index-based match between JetETmiss and CHSFlowElements collections
233 const static SG::ConstAccessor<char> PVMatchedAcc("matchedToPV");
234 if( fe->isCharged() && PVMatchedAcc(*fe)&& ( !m_cleanChargedPFO || isGoodEoverP(static_cast<const xAOD::TrackParticle*>(fe->chargedObject(0))) ) ) {
235 ATH_MSG_DEBUG("Accept cFE with pt " << fe->pt() << ", e " << fe->e() << ", eta " << fe->eta() << ", phi " << fe->phi() );
236 felist.push_back(fe);
237 }
238 }
239 }
240 } // end cFE loop
241
242 // Neutral FEs
243 for (const FELink_t& feLink : nFELinks) {
244 if (!feLink.isValid()) continue;
245 const xAOD::FlowElement* fe_init = *feLink;
246 for (const auto *const fe : *constits.feCont){
247 if (fe->index() == fe_init->index() && !fe->isCharged()){ //index-based match between JetETmiss and CHSFlowElements collections
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);
251 }
252 }
253 }
254 } // end nFE links loop
255
256
257 return StatusCode::SUCCESS;
258 }
ElementLink< xAOD::FlowElementContainer > FELink_t
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_neutralFEReadDecorKey
SG::ReadDecorHandleKey< xAOD::MuonContainer > m_chargedFEReadDecorKey

◆ extractPFO()

StatusCode met::METMuonAssociator::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
finalprotectedvirtual

Implements met::METAssociator.

Definition at line 136 of file METMuonAssociator.cxx.

140 {
141 const xAOD::Muon *mu = static_cast<const xAOD::Muon*>(obj);
142 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
143 const CaloCluster* muclus = mu->cluster();
144
145 ATH_MSG_VERBOSE("Muon " << mu->index() << " with pt " << mu->pt()
146 << ", eta " << mu->eta()
147 << ", phi " << mu->phi());
148 if(muclus) {
149 ATH_MSG_VERBOSE(" has cluster with "
150 << "eta " << muclus->calEta()
151 << ", phi " << muclus->calPhi()
152 << ", E " << muclus->calE()
153 << " formed of " << muclus->size() << " cells.");
154 }
155 ATH_MSG_VERBOSE("Muon Eloss type: " << mu->energyLossType()
156 << " Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
157 << " MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
158 << " FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
159
160 // One loop over PFOs
161 for(const auto *const pfo : *constits.pfoCont) {
162 if(pfo->isCharged()) {
163 // get charged PFOs by matching the muon ID track
164 // We set a small -ve pt for cPFOs that were rejected
165 // by the ChargedHadronSubtractionTool
166 const static SG::ConstAccessor<char> PVMatchedAcc("matchedToPV");
167 if(idtrack && pfo->track(0) == idtrack && PVMatchedAcc(*pfo) &&
168 ( !m_cleanChargedPFO || isGoodEoverP(pfo->track(0)) )
169 ) {
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);
174 break;
175 } // track match
176 } else {
177 // get neutral PFOs by matching the muon cluster
178 if(muclus && m_doMuonClusterMatch) {
179
180 SG::ReadDecorHandle<CaloClusterContainer, std::vector<ElementLink<CaloClusterContainer> > > tcLinkAcc(m_elementLinkName, ctx);
181 for(const auto& matchel : tcLinkAcc(*muclus)) {
182 if(!matchel.isValid()) {
183 ATH_MSG_DEBUG("Invalid muon-cluster elementLink");
184 } else {
185 if((*matchel)->e()>FLT_MIN && pfo->cluster(0) == *matchel) { // +ve E && matches cluster
186 ATH_MSG_VERBOSE("Tool found cluster " << (*matchel)->index() << " with pt " << (*matchel)->pt() );
187 pfolist.push_back(pfo);
188 }
189 }
190 }
191 } // muon has linked cluster
192 }
193 } // end of cluster loop
194
195 return StatusCode::SUCCESS;
196 }
const xAOD::PFOContainer * pfoCont

◆ extractTopoClusters()

StatusCode met::METMuonAssociator::extractTopoClusters ( const xAOD::IParticle * obj,
std::vector< const xAOD::IParticle * > & tclist,
const met::METAssociator::ConstitHolder & constits,
const EventContext & ctx ) const
finalprotectedvirtual

Implements met::METAssociator.

Definition at line 83 of file METMuonAssociator.cxx.

86 {
87 const xAOD::Muon *mu = static_cast<const xAOD::Muon*>(obj);
88 const CaloCluster* muclus = mu->cluster();
89 if(muclus && m_doMuonClusterMatch) {
90 ATH_MSG_VERBOSE("Muon " << mu->index() << " with pt " << mu->pt()
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.");
98 ATH_MSG_VERBOSE("Muon Eloss type: " << mu->energyLossType()
99 << " Eloss: " << mu->floatParameter(xAOD::Muon::EnergyLoss)
100 << " MeasuredEloss: " << mu->floatParameter(xAOD::Muon::MeasEnergyLoss)
101 << " FSR E: " << mu->floatParameter(xAOD::Muon::FSR_CandidateEnergy) );
102
103 SG::ReadDecorHandle<CaloClusterContainer, std::vector<ElementLink<CaloClusterContainer> > > tcLinkAcc(m_elementLinkName, ctx);
104 for(const auto& matchel : tcLinkAcc(*muclus)) {
105 if(!matchel.isValid()) {continue;} // In case of thinned cluster collection
106 ATH_MSG_VERBOSE("Tool found cluster " << (*matchel)->index() << " with pt " << (*matchel)->pt() );
107 if((*matchel)->e()>1e-9) { // +ve E
108 tclist.push_back(*matchel);
109 }
110 }
111 } // muon has linked cluster
112
113 return StatusCode::SUCCESS;
114 }

◆ extractTracks()

StatusCode met::METMuonAssociator::extractTracks ( const xAOD::IParticle * obj,
std::vector< const xAOD::IParticle * > & constlist,
const met::METAssociator::ConstitHolder & constits ) const
finalprotectedvirtual

Implements met::METAssociator.

Definition at line 116 of file METMuonAssociator.cxx.

119 {
120 const xAOD::Muon *mu = static_cast<const xAOD::Muon*>(obj);
121 const TrackParticle* idtrack = mu->trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
122 if(idtrack && acceptTrack(idtrack,constits.pv) && isGoodEoverP(idtrack)) {
123 // if(idtrack && acceptTrack(idtrack,pv)) {
124 ATH_MSG_VERBOSE("Accept muon track " << idtrack << " px, py = " << idtrack->p4().Px() << ", " << idtrack->p4().Py());
125 ATH_MSG_VERBOSE("Muon ID track ptr: " << idtrack);
126 constlist.push_back(idtrack);
127 // if(mu->pt()>10e3 && (mu->muonType()==xAOD::Muon::Combined || mu->muonType()==xAOD::Muon::SegmentTagged)) {
128 // mutracks.push_back(idtrack);
129 // }
130 }
131 return StatusCode::SUCCESS;
132 }
bool acceptTrack(const xAOD::TrackParticle *trk, const xAOD::Vertex *pv) const

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ fillAssocMap()

StatusCode met::METAssociator::fillAssocMap ( xAOD::MissingETAssociationMap * metMap,
const xAOD::IParticleContainer * hardObjs,
const EventContext & ctx ) const
protectedvirtualinherited

Reimplemented in met::METTruthAssociator.

Definition at line 278 of file METAssociator.cxx.

280 {
281 ConstitHolder constits;
282
283 if (retrieveConstituents(constits, ctx).isFailure()) {
284 ATH_MSG_DEBUG("Unable to retrieve constituent containers");
285 return StatusCode::FAILURE;
286 }
287
288 SG::WriteDecorHandle<xAOD::IParticleContainer, float> dec_UEcorr (m_UEcorrPtDecorKey, ctx);
289 std::vector<const IParticle*> constlist;
290 constlist.reserve(20);
291 std::vector<const IParticle*> hardObjs_tmp;
292 for(const auto *const obj : *hardObjs) {
293 hardObjs_tmp.push_back(obj);
294 }
295 std::sort(hardObjs_tmp.begin(),hardObjs_tmp.end(),greaterPt);
296
297 for(const auto& obj : hardObjs_tmp) {
298 if(obj->pt()<4e3 && obj->type()!=xAOD::Type::Muon){
299 if (m_pflow && !m_fecollKey.key().empty() && m_useTracks && m_recoil) { dec_UEcorr(*obj) = 0.f; }
300 continue;
301 }
302 constlist.clear();
303 ATH_MSG_VERBOSE( "Object type, pt, eta, phi = " << obj->type() << ", " << obj->pt() << ", " << obj->eta() << "," << obj->phi() );
304 if(m_pflow){
305 if(!m_fecollKey.key().empty()){
306 if(!m_useTracks){
307 ATH_MSG_ERROR("Attempting to build FlowElement MET without a track collection.");
308 return StatusCode::FAILURE;
309 }
310 std::map<const IParticle*, MissingETBase::Types::constvec_t> momentumOverride;
311 if(m_recoil){ // HR part:
312 float UEcorr_Pt = 0.; // Underlying event correction for HR
313 ATH_CHECK(extractFEHR(obj,hardObjs_tmp,constlist,constits,momentumOverride, UEcorr_Pt));
314 ATH_MSG_DEBUG("Energy correction is: " << UEcorr_Pt);
315 dec_UEcorr(*obj) = UEcorr_Pt;
316 }
317 else{ // MET part:
318 ATH_CHECK( this->extractFE(obj, constlist, constits, momentumOverride, ctx) );
319 }
320 MissingETComposition::insert(metMap, obj, constlist, momentumOverride);
321 }
322 else{
323 // Old PFO EDM
324 if(!m_useTracks){
325 ATH_MSG_DEBUG("Attempting to build PFlow without a track collection.");
326 return StatusCode::FAILURE;
327 }else{
328 std::map<const IParticle*,MissingETBase::Types::constvec_t> momentumOverride;
329 ATH_CHECK( this->extractPFO(obj,constlist,constits,momentumOverride, ctx) );
330 MissingETComposition::insert(metMap,obj,constlist,momentumOverride);
331 }
332 }
333 } else {
334 std::vector<const IParticle*> tclist;
335 tclist.reserve(20);
336 ATH_CHECK( this->extractTopoClusters(obj,tclist,constits, ctx) );
338 for(const auto& cl : tclist) {
339 // use index-parallelism to identify shallow copied constituents
340 constlist.push_back((*constits.tcCont)[cl->index()]);
341 }
342 } else {
343 constlist = tclist;
344 }
345 if(m_useTracks) ATH_CHECK( this->extractTracks(obj,constlist,constits) );
346 MissingETComposition::insert(metMap,obj,constlist);
347 }
348 }
349 return StatusCode::SUCCESS;
350 }
#define ATH_MSG_ERROR(x)
StatusCode retrieveConstituents(met::METAssociator::ConstitHolder &constits, const EventContext &ctx) 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 EventContext &ctx) const =0
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
Gaudi::Property< bool > m_useModifiedClus
SG::WriteDecorHandleKey< xAOD::IParticleContainer > m_UEcorrPtDecorKey
static bool greaterPt(const xAOD::IParticle *part1, const xAOD::IParticle *part2)
virtual StatusCode extractTracks(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &constlist, const met::METAssociator::ConstitHolder &constits) const =0
virtual StatusCode extractTopoClusters(const xAOD::IParticle *obj, std::vector< const xAOD::IParticle * > &tclist, const met::METAssociator::ConstitHolder &constits, const EventContext &ctx) const =0
Gaudi::Property< bool > m_recoil
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 =0
SG::ReadHandleKey< xAOD::FlowElementContainer > m_fecollKey
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
static bool insert(MissingETComponentMap *pMap, const MissingET *pMET, const IParticle *pPart, MissingETBase::Types::weight_t weight=MissingETBase::Types::weight_t())
Insert contributing signal or physics object by pointer, with optional kinematic weight object.

◆ getKey()

SG::sgkey_t asg::AsgTool::getKey ( const void * ptr) const
inherited

Get the (hashed) key of an object that is in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::Event both provide ways for getting the SG::sgkey_t key for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getName
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The hashed key of the object in the store. If not found, an invalid (zero) key.

Definition at line 119 of file AsgTool.cxx.

119 {
120
121#ifdef XAOD_STANDALONE
122 // In case we use @c xAOD::Event, we have a direct function call
123 // for this.
124 return evtStore()->event()->getKey( ptr );
125#else
126 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
127 return ( proxy == nullptr ? 0 : proxy->sgkey() );
128#endif // XAOD_STANDALONE
129 }
ServiceHandle< StoreGateSvc > & evtStore()

◆ getName()

const std::string & asg::AsgTool::getName ( const void * ptr) const
inherited

Get the name of an object that is / should be in the event store.

This is a bit of a special one. StoreGateSvc and xAOD::Event both provide ways for getting the std::string name for an object that is in the store, based on a bare pointer. But they provide different interfaces for doing so.

In order to allow tools to efficiently perform this operation, they can use this helper function.

See also
asg::AsgTool::getKey
Parameters
ptrThe bare pointer to the object that the event store should know about
Returns
The string name of the object in the store. If not found, an empty string.

Definition at line 106 of file AsgTool.cxx.

106 {
107
108#ifdef XAOD_STANDALONE
109 // In case we use @c xAOD::Event, we have a direct function call
110 // for this.
111 return evtStore()->event()->getName( ptr );
112#else
113 const SG::DataProxy* proxy = evtStore()->proxy( ptr );
114 static const std::string dummy = "";
115 return ( proxy == nullptr ? dummy : proxy->name() );
116#endif // XAOD_STANDALONE
117 }

◆ getProperty()

template<class T>
const T * asg::AsgTool::getProperty ( const std::string & name) const
inherited

Get one of the tool's properties.

◆ GetUEcorr()

StatusCode met::METAssociator::GetUEcorr ( const met::METAssociator::ConstitHolder & constits,
std::vector< TLorentzVector > & v_clus,
TLorentzVector & clus,
TLorentzVector & HR,
const float Drcone,
const float MinDistCone,
float & UEcorr ) const
protectedinherited

Definition at line 424 of file METAssociator.cxx.

431 {
432 // 1. Get random phi
433 unsigned int seed = floor( clus.Pt() * Gaudi::Units::GeV );
434 TRandom3 hole;
435 hole.SetSeed(seed);
436
437 bool isNextToPart(true);
438 bool isNextToHR(true);
439 double phiRnd(0.);
440
441 int numOfRndTrials = 0; // Counter for trials to find random cone without overlaps
442 const int maxNumOfRndTrials = 100; // Max. number of trials to find random cone without overlaps
443
444 while(isNextToPart || isNextToHR ){
445 isNextToPart = false;
446 isNextToHR = true;
447
448 phiRnd = hole.Uniform( -std::numbers::pi, std::numbers::pi);
449 double dR = P4Helpers::deltaR( HR.Eta(), HR.Phi(), clus.Eta(), phiRnd );
450 if(dR > MinDistCone){
451 isNextToHR = false;
452 }
453
454 for(const auto& clus_j : v_clus) { // loop over leptons
455 dR = P4Helpers::deltaR( clus.Eta(), phiRnd, clus_j.Eta(), clus_j.Phi() );
456 if(dR < MinDistCone){
457 isNextToPart = true;
458 break;
459 }
460 } // swclus_j
461
462 numOfRndTrials++;
463 if(numOfRndTrials == maxNumOfRndTrials){ // check number of trials
464 UEcorr = 0.;
465 return StatusCode::SUCCESS;
466 }
467 } // while isNextToPart, isNextToHR
468
469 ATH_MSG_DEBUG("Found rnd phi: " << phiRnd);
470
471
472 // 2. Calculete UE correction
473 TLorentzVector tv_UEcorr; // TLV of UE correction (initialized with 0,0,0,0 automatically)
474 std::pair <double, double> eta_rndphi = std::make_pair(clus.Eta(), phiRnd); // pair of current cluser eta and random phi
475
476
477 // Calculate delta phi -> always the same angle so its sufficient to calculate it only once
478 float dphi_angle=P4Helpers::deltaPhi(clus.Phi(),eta_rndphi.second);
479
480 for(const auto fe_itr : *constits.feCont){ // loop over PFOs
481 if(fe_itr->pt() < 0 || fe_itr->e() < 0){ //sanity check
482 continue;
483 }
484
485 //remove charged FE that are not matched to the PV
486 const static SG::ConstAccessor<char> PVMatchedAcc("matchedToPV");
487 if(fe_itr->isCharged() && !PVMatchedAcc(*fe_itr)){
488 continue;
489 }
490
491 double dR = P4Helpers::deltaR( fe_itr->eta(), fe_itr->phi(), eta_rndphi.first, eta_rndphi.second );
492 if( dR < Drcone ){
493 // Rotate on dphi_angle
494 TLorentzVector tv_fe = fe_itr->p4();
495 tv_fe.RotateZ(dphi_angle);
496 tv_UEcorr += tv_fe; // summing PFOs of UE for correction
497 } // cone requirement
498 } // loop over PFOs
499
500 UEcorr = tv_UEcorr.Pt(); // Pt of UE correction
501
502 return StatusCode::SUCCESS;
503 }
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[

◆ greaterPt()

bool met::METAssociator::greaterPt ( const xAOD::IParticle * part1,
const xAOD::IParticle * part2 )
inlinestaticprotectedinherited

Definition at line 163 of file METAssociator.h.

163 {
164 return part1->pt()>part2->pt();
165 }
virtual double pt() const =0
The transverse momentum ( ) of the particle.

◆ greaterPtFE()

bool met::METAssociator::greaterPtFE ( const xAOD::FlowElement * part1,
const xAOD::FlowElement * part2 )
inlinestaticprotectedinherited

Definition at line 172 of file METAssociator.h.

172 {
173 if (!(part1->isCharged()) && part2->isCharged()) return false;
174 if (part1->isCharged() && !(part2->isCharged())) return true;
175 return part1->pt() > part2->pt();
176 }

◆ greaterPtPFO()

bool met::METAssociator::greaterPtPFO ( const xAOD::PFO * part1,
const xAOD::PFO * part2 )
inlinestaticprotectedinherited

Definition at line 166 of file METAssociator.h.

166 {
167 if (part1->charge()==0 && part2->charge()!=0) return false;
168 if (part1->charge()!=0 && part2->charge()==0) return true;
169 if (part1->charge()==0 && part2->charge()==0) return part1->ptEM()>part2->ptEM();
170 return part1->pt()>part2->pt();
171 }
virtual double ptEM() const
get EM scale pt
Definition PFO_v1.cxx:204
float charge() const
get charge of PFO
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition PFO_v1.cxx:52

◆ initialize()

StatusCode met::METMuonAssociator::initialize ( void )
overridevirtual

Dummy implementation of the initialisation function.

It's here to allow the dual-use tools to skip defining an initialisation function. Since many are doing so...

Reimplemented from met::METAssociator.

Definition at line 49 of file METMuonAssociator.cxx.

50 {
52 ATH_MSG_VERBOSE ("Initializing " << name() << "...");
53 ATH_CHECK( m_muContKey.initialize());
57
58 return StatusCode::SUCCESS;
59 }
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ isGoodEoverP()

bool met::METAssociator::isGoodEoverP ( const xAOD::TrackParticle * trk) const
protectedinherited

Definition at line 362 of file METAssociator.cxx.

363 {
364
365 if( (fabs(trk->eta())<1.5 && trk->pt()>m_cenTrackPtThr) ||
366 (fabs(trk->eta())>=1.5 && trk->pt()>m_forTrackPtThr) ) {
367
368 // Get relative error on qoverp
369 float Rerr = Amg::error(trk->definingParametersCovMatrix(),4)/fabs(trk->qOverP());
370 ATH_MSG_VERBOSE( "Track momentum error (%): " << Rerr*100 );
371
372 // first compute track and calo isolation variables
373 float ptcone20 = 0., isolfrac = 0., etcone10 = 0., EoverP = 0.;
374 // ptcone
375 TrackIsolation trkIsoResult;
376 std::vector<Iso::IsolationType> trkIsoCones;
377 trkIsoCones.push_back(xAOD::Iso::IsolationType::ptcone20);
378 xAOD::TrackCorrection trkIsoCorr;
380 m_trkIsolationTool->trackIsolation(trkIsoResult,
381 *trk,
382 trkIsoCones,
383 trkIsoCorr);
384 ptcone20 = !trkIsoResult.ptcones.empty() ? trkIsoResult.ptcones[0] : 0;
385 isolfrac = ptcone20/trk->pt();
386 // etcone
387 CaloIsolation caloIsoResult;
388 std::vector<Iso::IsolationType> caloIsoCones;
389 // We can't actually configure the tool to give etcone10, so instead we have to compute etcone20,
390 // applying the core cone correction.
391 // Then, we retrieve the correction value, which is etcone10, rather than the isolation value
392 caloIsoCones.push_back(xAOD::Iso::IsolationType::etcone20);
393 xAOD::CaloCorrection caloIsoCorr_coreCone;
394 caloIsoCorr_coreCone.calobitset.set(xAOD::Iso::IsolationCaloCorrection::coreCone); // this is etcone10
395 m_caloIsolationTool->caloTopoClusterIsolation(caloIsoResult,
396 *trk,
397 caloIsoCones,
398 caloIsoCorr_coreCone);
399 if(!caloIsoResult.etcones.empty()) {
400 // retrieve the correction value for the core cone
402 } else {
403 ATH_MSG_WARNING("isGoodEoverP: Failed to retrieve the isolation core correction (etcone10)! Setting etcone10=0");
404 etcone10 = 0.;
405 }
406 EoverP = etcone10/trk->pt();
408 ATH_MSG_VERBOSE( "Track isolation fraction: " << isolfrac );
409 ATH_MSG_VERBOSE( "Track E/P = " << EoverP );
410
411 if(isolfrac<0.1) {
412 // isolated track cuts
413 if(Rerr>0.4) return false;
414 else if (EoverP<0.65 && ((EoverP>0.1 && Rerr>0.05) || Rerr>0.1)) return false;
415 } else {
416 // non-isolated track cuts
417 float trkptsum = ptcone20+trk->pt();
418 if(etcone10/trkptsum<0.6 && trk->pt()/trkptsum>0.6) return false;
419 }
420 }
421 return true;
422 }
Gaudi::Property< double > m_forTrackPtThr
Gaudi::Property< double > m_cenTrackPtThr
ToolHandle< xAOD::ICaloTopoClusterIsolationTool > m_caloIsolationTool
ToolHandle< xAOD::ITrackIsolationTool > m_trkIsolationTool
const ParametersCovMatrix_t definingParametersCovMatrix() const
Returns the 5x5 symmetric matrix containing the defining parameters covariance matrix.
float qOverP() const
Returns the parameter.
virtual double pt() const override final
The transverse momentum ( ) of the particle.
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
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 ...
@ TrackIsolation
tracker isolation (ptcone30)
@ etcone20
Calorimeter isolation.
@ ptcone20
Track isolation.
setRcore setEtHad setFside pt
Iso::IsolationCaloCorrectionBitset calobitset
Iso::IsolationTrackCorrectionBitset trackbitset

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msg_level_name()

const std::string & asg::AsgTool::msg_level_name ( ) const
inherited

A deprecated function for getting the message level's name.

Instead of using this, weirdly named function, user code should get the string name of the current minimum message level (in case they really need it...), with:

MSG::name( msg().level() )

This function's name doesn't follow the ATLAS coding rules, and as such will be removed in the not too distant future.

Returns
The string name of the current minimum message level that's printed

Definition at line 101 of file AsgTool.cxx.

101 {
102
103 return MSG::name( msg().level() );
104 }
MsgStream & msg() const
const std::string & name(Level lvl)
Convenience function for translating message levels to strings.
Definition MsgLevel.cxx:19

◆ msgLvl()

bool AthCommonMsg< AlgTool >::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< AlgTool > >::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.

◆ print()

void asg::AsgTool::print ( ) const
virtualinherited

◆ 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< AlgTool > >::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< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ retrieveConstituents()

StatusCode met::METAssociator::retrieveConstituents ( met::METAssociator::ConstitHolder & constits,
const EventContext & ctx ) const
protectedinherited

Definition at line 144 of file METAssociator.cxx.

145 {
146 ATH_MSG_DEBUG ("In execute: " << name() << "...");
147 if (!m_skipconst || m_forcoll.value().empty()) { // FIXME m_clcollKey.value().empty() ???
148
149 SG::ReadHandle<IParticleContainer> topoclusterCont(m_clcollKey, ctx);
150 if (!topoclusterCont.isValid()) {
151 ATH_MSG_WARNING("Unable to retrieve topocluster container " << m_clcollKey.key() << " for overlap removal");
152 return StatusCode::FAILURE;
153 }
154 constits.tcCont=topoclusterCont.cptr();
155 ATH_MSG_DEBUG("Successfully retrieved topocluster collection");
156 } else {
157 std::string hybridname = "Etmiss";
158 hybridname += m_clcollKey.key();
159 hybridname += m_foreta.value();
160 hybridname += m_forcoll.value();
161
162 SG::ReadHandle<IParticleContainer> hybridCont(m_hybridContKey, ctx);
163 if( hybridCont.isValid()) {
164 constits.tcCont=hybridCont.cptr();
165 } else {
166 ATH_MSG_WARNING("Trying to do something currently unsupported- lets abort");
167 return StatusCode::FAILURE;
168 // Trying to do this using write handles (need to get some input here)
169 /*std::unique_ptr<ConstDataVector<IParticleContainer>> hybridCont = std::make_unique<ConstDataVector<IParticleContainer>>();
170 SG::WriteHandle<ConstDataVector<IParticleContainer>> hybridContHandle(hybridname, ctx);
171
172 StatusCode sc = hybridContHandle.record(std::make_unique<ConstDataVector<IParticleContainer>>(*hybridCont));
173
174 if (sc.isFailure()) {
175 ATH_MSG_WARNING("Unable to record container");
176 return StatusCode::SUCCESS;
177
178 }*/
179
180 /*SG::ReadHandle<IParticleContainer> centCont(m_clcoll, ctx);
181 if (!centCont.isValid()) {
182 ATH_MSG_WARNING("Unable to retrieve central container " << m_clcoll << " for overlap removal");
183 return StatusCode::FAILURE;
184 }
185
186 SG::ReadHandle<IParticleContainer> forCont(m_forcoll, ctx);
187 if (!forCont.isValid()) {
188 ATH_MSG_WARNING("Unable to retrieve forward container " << m_forcoll << " for overlap removal");
189 return StatusCode::FAILURE;
190 }
191 ConstDataVector<IParticleContainer> *hybridCont = new ConstDataVector<IParticleContainer>(SG::VIEW_ELEMENTS);
192
193 const IParticleContainer* centCont=0;
194 if( evtStore()->retrieve(centCont, m_clcoll).isFailure() ) {
195 ATH_MSG_WARNING("Unable to retrieve central container " << m_clcoll << " for overlap removal");
196 return StatusCode::FAILURE;
197 }
198
199 const IParticleContainer* forCont=0;
200 if( evtStore()->retrieve(forCont, m_forcoll).isFailure() ) {
201 ATH_MSG_WARNING("Unable to retrieve forward container " << m_forcoll << " for overlap removal");
202 return StatusCode::FAILURE;
203 }
204
205 for(const auto clus : *centCont) if (fabs(clus->eta())<m_foreta) hybridCont->push_back(clus);
206 for(const auto clus : *forCont) if (fabs(clus->eta())>=m_foreta) hybridCont->push_back(clus);
207 ATH_CHECK( evtStore()->record(hybridCont,hybridname));
208 constits.tcCont = hybridCont->asDataVector();
209 */
210 }
211 }
212
213 if( !m_useTracks){
214 //if you want to skip tracks, set the track collection empty manually
215 ATH_MSG_DEBUG("Skipping tracks");
216 }else{
217 SG::ReadHandle<VertexContainer> vxCont(m_pvcollKey, ctx);
218 if (!vxCont.isValid()) {
219 ATH_MSG_WARNING("Unable to retrieve primary vertex container " << m_pvcollKey.key());
220 //this is actually really bad. If it's empty that's okay
221 return StatusCode::FAILURE;
222 }
223
224 ATH_MSG_DEBUG("Successfully retrieved primary vertex container");
225 ATH_MSG_DEBUG("Container holds " << vxCont->size() << " vertices");
226
227 for(const auto *const vx : *vxCont) {
228 ATH_MSG_VERBOSE( "Testing vertex " << vx->index() );
229 if(vx->vertexType()==VxType::PriVtx)
230 {constits.pv = vx; break;}
231 }
232 if(!constits.pv) {
233 ATH_MSG_DEBUG("Failed to find primary vertex! Reject all tracks.");
234 } else {
235 ATH_MSG_VERBOSE("Primary vertex has z = " << constits.pv->z());
236 }
237
238 constits.trkCont=nullptr;
239 ATH_MSG_DEBUG("Retrieving Track collection " << m_trkcollKey.key());
240 SG::ReadHandle<TrackParticleContainer> trCont(m_trkcollKey, ctx);
241 if (!trCont.isValid()) {
242 ATH_MSG_WARNING("Unable to retrieve track particle container");
243 return StatusCode::FAILURE;
244 }
245 constits.trkCont=trCont.cptr();
246
247 if(m_pflow){
248 if(!m_fecollKey.key().empty()){
249 ATH_MSG_DEBUG("Retrieving FlowElement collection " << m_fecollKey.key());
250 constits.feCont = nullptr;
251 SG::ReadHandle<xAOD::FlowElementContainer> feCont(m_fecollKey, ctx);
252 if (!feCont.isValid()) {
253 ATH_MSG_ERROR("Unable to retrieve FlowElement container "<< m_fecollKey.key());
254 return StatusCode::FAILURE;
255 }
256 constits.feCont=feCont.cptr();
257 }
258 else{
259 ATH_MSG_DEBUG("Retrieving PFlow collection " << m_pfcollKey.key());
260 constits.pfoCont = nullptr;
261 SG::ReadHandle<PFOContainer> pfCont(m_pfcollKey, ctx);
262 if (!pfCont.isValid()) {
263 ATH_MSG_WARNING("Unable to PFlow object container");
264 return StatusCode::FAILURE;
265 }
266 constits.pfoCont=pfCont.cptr();
267 }
268 }//pflow
269 }//retrieve track/pfo containers
270
271 return StatusCode::SUCCESS;
272 }
SG::ReadHandleKey< xAOD::PFOContainer > m_pfcollKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trkcollKey
SG::ReadHandleKey< xAOD::VertexContainer > m_pvcollKey
Gaudi::Property< std::string > m_forcoll
Gaudi::Property< bool > m_skipconst
Gaudi::Property< double > m_foreta
SG::ReadHandleKey< xAOD::IParticleContainer > m_hybridContKey
SG::ReadHandleKey< xAOD::IParticleContainer > m_clcollKey
float z() const
Returns the z position.
@ PriVtx
Primary vertex.
const xAOD::IParticleContainer * tcCont
const xAOD::TrackParticleContainer * trkCont

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_caloIsolationTool

ToolHandle<xAOD::ICaloTopoClusterIsolationTool> met::METAssociator::m_caloIsolationTool {this, "CaloIsolationTool", ""}
protectedinherited

Definition at line 83 of file METAssociator.h.

83{this, "CaloIsolationTool", ""};

◆ m_cenTrackPtThr

Gaudi::Property<double> met::METAssociator::m_cenTrackPtThr {this, "CentralTrackPtThr", 30e+3}
protectedinherited

Definition at line 114 of file METAssociator.h.

114{this, "CentralTrackPtThr", 30e+3};

◆ m_chargedFELinksKey

Gaudi::Property<std::string> met::METAssociator::m_chargedFELinksKey {this, "ChargedFELinksKey", "chargedGlobalFELinks"}
protectedinherited

Definition at line 86 of file METAssociator.h.

86{this, "ChargedFELinksKey", "chargedGlobalFELinks"};

◆ m_chargedFEReadDecorKey

SG::ReadDecorHandleKey<xAOD::MuonContainer> met::METMuonAssociator::m_chargedFEReadDecorKey
private
Initial value:
{
this,
"ChargedFEReadDecorKey",
m_muContKey, "chargedGlobalFELinks",
"Charged FlowElement links key"
}

Definition at line 102 of file METMuonAssociator.h.

102 {
103 this,
104 "ChargedFEReadDecorKey",
105 m_muContKey, "chargedGlobalFELinks",
106 "Charged FlowElement links key"
107 };

◆ m_chargedPFOLinksKey

Gaudi::Property<std::string> met::METAssociator::m_chargedPFOLinksKey {this, "ChargedPFOLinksKey", "chargedpfoLinks"}
protectedinherited

Definition at line 88 of file METAssociator.h.

88{this, "ChargedPFOLinksKey", "chargedpfoLinks"};

◆ m_clcollKey

SG::ReadHandleKey<xAOD::IParticleContainer> met::METAssociator::m_clcollKey {this,"ClusColl","CaloCalTopoClusters","Topo cluster Collection"}
protectedinherited

Definition at line 93 of file METAssociator.h.

93{this,"ClusColl","CaloCalTopoClusters","Topo cluster Collection"};

◆ m_cleanChargedPFO

Gaudi::Property<bool> met::METAssociator::m_cleanChargedPFO {this, "CleanCPFO", true}
protectedinherited

Definition at line 108 of file METAssociator.h.

108{this, "CleanCPFO", true};

◆ m_doMuonClusterMatch

Gaudi::Property<bool> met::METMuonAssociator::m_doMuonClusterMatch {this, "DoClusterMatch", true, ""}
private

Definition at line 85 of file METMuonAssociator.h.

85{this, "DoClusterMatch", true, ""};

◆ m_Drcone

float met::METMuonAssociator::m_Drcone = 0.2
staticconstexprprivate

Definition at line 81 of file METMuonAssociator.h.

◆ m_elementLinkName

SG::ReadDecorHandleKey<xAOD::CaloClusterContainer> met::METMuonAssociator::m_elementLinkName
private
Initial value:
{
this,
"ElementLinkName",
"MuonClusterCollection.constituentClusterLinks"
}

Definition at line 108 of file METMuonAssociator.h.

108 {
109 this,
110 "ElementLinkName",
111 "MuonClusterCollection.constituentClusterLinks"
112 };

◆ m_fecollKey

SG::ReadHandleKey<xAOD::FlowElementContainer> met::METAssociator::m_fecollKey {this,"FlowElementCollection","","FlowElement Collection (overrides PFO if not empty)"}
protectedinherited

Definition at line 96 of file METAssociator.h.

96{this,"FlowElementCollection","","FlowElement Collection (overrides PFO if not empty)"};

◆ m_forcoll

Gaudi::Property<std::string> met::METAssociator::m_forcoll {this, "ForwardColl", ""}
protectedinherited

Definition at line 111 of file METAssociator.h.

111{this, "ForwardColl", ""};

◆ m_foreta

Gaudi::Property<double> met::METAssociator::m_foreta {this, "ForwardDef", 2.5}
protectedinherited

Definition at line 112 of file METAssociator.h.

112{this, "ForwardDef", 2.5};

◆ m_forTrackPtThr

Gaudi::Property<double> met::METAssociator::m_forTrackPtThr {this, "ForwardTrackPtThr", 30e+3}
protectedinherited

Definition at line 115 of file METAssociator.h.

115{this, "ForwardTrackPtThr", 30e+3};

◆ m_hybridContKey

SG::ReadHandleKey<xAOD::IParticleContainer> met::METAssociator::m_hybridContKey {this,"HybridKey","","Hybrid Collection"}
protectedinherited

Definition at line 97 of file METAssociator.h.

97{this,"HybridKey","","Hybrid Collection"};

◆ m_MinDistCone

float met::METMuonAssociator::m_MinDistCone = 0.4
staticconstexprprivate

Definition at line 82 of file METMuonAssociator.h.

◆ m_muContKey

SG::ReadHandleKey<xAOD::MuonContainer> met::METMuonAssociator::m_muContKey
private
Initial value:
{
this,
"InputCollection",
"Muons",
"muons input key"
}

Definition at line 90 of file METMuonAssociator.h.

90 {
91 this,
92 "InputCollection",
93 "Muons",
94 "muons input key"
95 };

◆ m_neutralFELinksKey

Gaudi::Property<std::string> met::METAssociator::m_neutralFELinksKey {this, "NeutralFELinksKey", "neutralGlobalFELinks"}
protectedinherited

Definition at line 85 of file METAssociator.h.

85{this, "NeutralFELinksKey", "neutralGlobalFELinks"};

◆ m_neutralFEReadDecorKey

SG::ReadDecorHandleKey<xAOD::MuonContainer> met::METMuonAssociator::m_neutralFEReadDecorKey
private
Initial value:
{
this,
"NeutralFEReadDecorKey",
m_muContKey, "neutralGlobalFELinks",
"Neutral FlowElement links key"
}

Definition at line 96 of file METMuonAssociator.h.

96 {
97 this,
98 "NeutralFEReadDecorKey",
99 m_muContKey, "neutralGlobalFELinks",
100 "Neutral FlowElement links key"
101 };

◆ m_neutralPFOLinksKey

Gaudi::Property<std::string> met::METAssociator::m_neutralPFOLinksKey {this, "NeutralPFOLinksKey", "neutralpfoLinks"}
protectedinherited

Definition at line 87 of file METAssociator.h.

87{this, "NeutralPFOLinksKey", "neutralpfoLinks"};

◆ m_pfcollKey

SG::ReadHandleKey<xAOD::PFOContainer> met::METAssociator::m_pfcollKey {this,"PFlowColl","","PFO Collection"}
protectedinherited

Definition at line 95 of file METAssociator.h.

95{this,"PFlowColl","","PFO Collection"};

◆ m_pflow

Gaudi::Property<bool> met::METAssociator::m_pflow {this, "PFlow", false}
protectedinherited

Definition at line 104 of file METAssociator.h.

104{this, "PFlow", false};

◆ m_pvcollKey

SG::ReadHandleKey<xAOD::VertexContainer> met::METAssociator::m_pvcollKey {this,"PrimVxColl","PrimaryVertices","Primary Vertex Collection"}
protectedinherited

Definition at line 92 of file METAssociator.h.

92{this,"PrimVxColl","PrimaryVertices","Primary Vertex Collection"};

◆ m_recoil

Gaudi::Property<bool> met::METAssociator::m_recoil {this, "HRecoil", false, ""}
protectedinherited

Definition at line 102 of file METAssociator.h.

102{this, "HRecoil", false, ""};

◆ m_skipconst

Gaudi::Property<bool> met::METAssociator::m_skipconst {this, "IgnoreJetConst", false}
protectedinherited

Definition at line 110 of file METAssociator.h.

110{this, "IgnoreJetConst", false};

◆ m_trkcollKey

SG::ReadHandleKey<xAOD::TrackParticleContainer> met::METAssociator::m_trkcollKey {this,"TrkColl","InDetTrackParticles","Track particle Collection"}
protectedinherited

Definition at line 94 of file METAssociator.h.

94{this,"TrkColl","InDetTrackParticles","Track particle Collection"};

◆ m_trkIsolationTool

ToolHandle<xAOD::ITrackIsolationTool> met::METAssociator::m_trkIsolationTool {this, "TrackIsolationTool", ""}
protectedinherited

Definition at line 82 of file METAssociator.h.

82{this, "TrackIsolationTool", ""};

◆ m_trkseltool

ToolHandle<InDet::IInDetTrackSelectionTool> met::METAssociator::m_trkseltool {this, "TrackSelectorTool", ""}
protectedinherited

Definition at line 81 of file METAssociator.h.

81{this, "TrackSelectorTool", ""};

◆ m_UEcorrPtDecorKey

SG::WriteDecorHandleKey<xAOD::IParticleContainer> met::METAssociator::m_UEcorrPtDecorKey {this, "UEcorrPtDecorKey", "", "UE correction for each lepton"}
protectedinherited

Definition at line 99 of file METAssociator.h.

99{this, "UEcorrPtDecorKey", "", "UE correction for each lepton"};

◆ m_useFELinks

Gaudi::Property<bool> met::METAssociator::m_useFELinks {this, "UseFELinks", false}
protectedinherited

Definition at line 90 of file METAssociator.h.

90{this, "UseFELinks", false};

◆ m_useModifiedClus

Gaudi::Property<bool> met::METAssociator::m_useModifiedClus {this, "UseModifiedClus", false}
protectedinherited

Definition at line 107 of file METAssociator.h.

107{this, "UseModifiedClus", false};

◆ m_usePFOLinks

Gaudi::Property<bool> met::METAssociator::m_usePFOLinks {this, "UsePFOLinks", false}
protectedinherited

Definition at line 89 of file METAssociator.h.

89{this, "UsePFOLinks", false};

◆ m_useRapidity

Gaudi::Property<bool> met::METAssociator::m_useRapidity {this, "UseRapidity", false}
protectedinherited

Definition at line 106 of file METAssociator.h.

106{this, "UseRapidity", false};

◆ m_useTracks

Gaudi::Property<bool> met::METAssociator::m_useTracks {this, "UseTracks", true}
protectedinherited

Definition at line 105 of file METAssociator.h.

105{this, "UseTracks", true};

The documentation for this class was generated from the following files: