ATLAS Offline Software
Loading...
Searching...
No Matches
JetTrackMomentsTool Class Reference

Steven Schramm
February 2014. More...

#include <JetTrackMomentsTool.h>

Inheritance diagram for JetTrackMomentsTool:
Collaboration diagram for JetTrackMomentsTool:

Classes

struct  TrackMomentStruct

Public Member Functions

 JetTrackMomentsTool (const std::string &name)
StatusCode initialize () override
 Dummy implementation of the initialisation function.
virtual StatusCode decorate (const xAOD::JetContainer &jets) const override
 Decorate a jet collection without otherwise modifying it.
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
virtual StatusCode modify (xAOD::JetContainer &jets) const override final
 Concrete implementation of the function inherited from IJetModifier.
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

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

const std::vector< TrackMomentStructgetTrackMoments (const xAOD::Jet &jet, const xAOD::VertexContainer *vertices, const float minTrackPt, const std::vector< const xAOD::TrackParticle * > &tracks, const jet::TrackVertexAssociation *tva) const
TrackMomentStruct getTrackMoments (const xAOD::Jet &, const xAOD::Vertex *vertex, const float minTrackPt, const std::vector< const xAOD::TrackParticle * > &tracks, const jet::TrackVertexAssociation *tva) const
const std::string getMomentBaseName (const float minTrackPt) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< std::string > m_jetContainerName {this, "JetContainer", "", "SG key for input jet container"}
Gaudi::Property< std::string > m_assocTracksName {this, "AssociatedTracks", "", "Name of associated tracks collection"}
Gaudi::Property< std::string > m_suffix {this, "MomentSuffix", "", "Suffix for track moment decorations"}
Gaudi::Property< std::vector< float > > m_minTrackPt {this, "TrackMinPtCuts", {}, "Vector of track pt cuts"}
Gaudi::Property< bool > m_doPFlowMoments {this, "DoPFlowMoments", false, "Calculate PFlow Object track moments?"}
ToolHandle< InDet::IInDetTrackSelectionToolm_htsel {this, "TrackSelector", "", "track selection tool"}
SG::ReadHandleKey< xAOD::VertexContainerm_vertexContainer_key {this, "VertexContainer", "", "SG key for vertex container"}
SG::ReadHandleKey< jet::TrackVertexAssociationm_tva_key {this, "TrackVertexAssociation", "", "SG key for track-vertex association"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysNumTrk {this, "NumTrkDecorKeys", {}, "SG keys for NumTrk decoration (not to be configured manually!)"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysSumPtTrk {this, "SumPtTrkDecorKeys", {}, "SG keys for SumPtTrk decoration (not to be configured manually!)"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysTrkWidth {this, "TrackWidthDecorKeys", {}, "SG keys for TrackWidth decoration (not to be configured manually!)"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysNumCPFO {this, "NumChargedPFODecorKeys", {}, "SG keys for NumChargedPFO decoration (not to be configured manually!)"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysSumPtCPFO {this, "SumPtChargedPFODecorKeys", {}, "SG keys for SumPtChargedPFO decoration (not to be configured manually!)"}
SG::WriteDecorHandleKeyArray< xAOD::JetContainerm_keysCPFOWidth {this, "ChargedPFOWidthDecorKeys", {}, "SG keys for ChargedPFO Width decoration (not to be configured manually!)"}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Steven Schramm
February 2014.

Updated for Run 3 by Bill Balunas March 2020

Tool to calculate general track-based jet moments

Moments to calculate: NumTrkPtXXX SumPtTrkPtXXX TrackWidthPtXXX where the track pT threshold is XXX MeV.

Definition at line 41 of file JetTrackMomentsTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ JetTrackMomentsTool()

JetTrackMomentsTool::JetTrackMomentsTool ( const std::string & name)

Definition at line 13 of file JetTrackMomentsTool.cxx.

14 : asg::AsgTool(name)
15{
16}

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ 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>

◆ decorate()

StatusCode JetTrackMomentsTool::decorate ( const xAOD::JetContainer & jets) const
overridevirtual

Decorate a jet collection without otherwise modifying it.

Implements IJetDecorator.

Definition at line 64 of file JetTrackMomentsTool.cxx.

64 {
65
66 // Get input vertex collection
67 auto handle_v = SG::makeHandle (m_vertexContainer_key);
68 if (!handle_v.isValid()){
69 ATH_MSG_ERROR("Could not retrieve the VertexContainer: "
70 << m_vertexContainer_key.key());
71 return StatusCode::FAILURE;
72 }
73
74 const auto *vertexContainer = handle_v.cptr();
75
76 // Get the track-vertex association
77 auto handle_tva = SG::makeHandle (m_tva_key);
78 if (!handle_tva.isValid()){
79 ATH_MSG_ERROR("Could not retrieve the TrackVertexAssociation: "
80 << m_tva_key.key());
81 return StatusCode::FAILURE;
82 }
83
84 const auto *tva = handle_tva.cptr();
85
86 for(const xAOD::Jet* jet : jets){
87 ATH_MSG_VERBOSE("On jet " << jet->index());
88
89 // Retrieve the associated tracks.
90 std::vector<const xAOD::TrackParticle*> tracks;
91 bool havetracks = jet->getAssociatedObjects(m_assocTracksName, tracks);
92 if(!havetracks) ATH_MSG_WARNING("Associated tracks not found: " << m_assocTracksName);
93 ATH_MSG_VERBOSE("Successfully retrieved track particles for jet " << jet->index());
94
95 std::vector<const xAOD::TrackParticle*> pflowTracks;
96 bool isPFlowJet = false;
98 // Check if this is a PFlow jet. If so, get the PFO tracks.
99 xAOD::Type::ObjectType ctype = jet->rawConstituent(0)->type();
100 if (ctype == xAOD::Type::ParticleFlow) {
101 isPFlowJet = true;
102 size_t numConstit = jet->numConstituents();
103 for ( size_t i=0; i<numConstit; i++ ) {
104 const xAOD::PFO* constit = dynamic_cast<const xAOD::PFO*>(jet->rawConstituent(i));
105 if (constit->isCharged()){
106 const xAOD::TrackParticle *thisTrack = constit->track(0);//by construction xAOD::PFO can only have one track, in eflowRec usage
107 pflowTracks.push_back(thisTrack);
108 }// We have a charged PFO
109 }// Loop on jet constituents
110 }// This jet is either a PFlow jet (constituent type: xAOD::FlowElement::PFlow) or UFO jets
111 else if (ctype == xAOD::Type::FlowElement) {
112 isPFlowJet = true;
113 size_t numConstit = jet->numConstituents();
114 for ( size_t i=0; i<numConstit; i++ ) {
115 const xAOD::FlowElement* constit = dynamic_cast<const xAOD::FlowElement*>(jet->rawConstituent(i));
116 // UFO jet constituents have signalType xAOD::FlowElement::Charged or xAOD::FlowElement::Neutral
117 // PFlow jet constituents have signalType xAOD::FlowElement::ChargedPFlow or xAOD::FlowElement::NeutralPFlow
118 if(constit != nullptr && ((constit->signalType() & xAOD::FlowElement::PFlow) || constit->signalType() == xAOD::FlowElement::Charged)){
119 if (constit->isCharged()){
120 const xAOD::TrackParticle *thisTrack = dynamic_cast<const xAOD::TrackParticle*>(constit->chargedObject(0));//PFO should have only 1 track
121 if(thisTrack != nullptr) pflowTracks.push_back(thisTrack);
122 else ATH_MSG_WARNING("Charged PFO had no associated TrackParticle");
123 }// We have a charged PFO
124 }// The FlowElement is a PFO
125 }// Loop on jet constituents
126 }// This jet is made from xAOD::FlowElement, so we calculate the pflow moments if they're PFOs
127 }// We actually want to calculate the PFlow moments
128
129 // For each track cut, compute and set the associated moments
130 for (size_t iCut = 0; iCut < m_minTrackPt.size(); ++iCut) {
131 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<int> > numTrkHandle(m_keysNumTrk.at(iCut));
132 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<float> > sumPtTrkHandle(m_keysSumPtTrk.at(iCut));
133 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<float> > trkWidthHandle(m_keysTrkWidth.at(iCut));
134 // Get info
135 const float minPt = m_minTrackPt[iCut];
136 const std::vector<TrackMomentStruct> moments = getTrackMoments(*jet,vertexContainer,minPt,tracks,tva);
137 // Collate info
138 std::vector<int> numTrkVec; numTrkVec.resize(moments.size());
139 std::vector<float> sumPtTrkVec; sumPtTrkVec.resize(moments.size());
140 std::vector<float> trackWidthVec; trackWidthVec.resize(moments.size());
141 for ( size_t iVertex = 0; iVertex < moments.size(); ++iVertex ) {
142 numTrkVec[iVertex] = moments.at(iVertex).numTrk;
143 sumPtTrkVec[iVertex] = moments.at(iVertex).sumPtTrk;
144 trackWidthVec[iVertex] = moments.at(iVertex).trackWidth;
145 }
146 // Set moment decorations
147 numTrkHandle(*jet) = numTrkVec;
148 sumPtTrkHandle(*jet) = sumPtTrkVec;
149 trkWidthHandle(*jet) = trackWidthVec;
150
151 if(m_doPFlowMoments) {
152 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<int> > numCPFOHandle(m_keysNumCPFO.at(iCut));
153 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<float> > sumPtCPFOHandle(m_keysSumPtCPFO.at(iCut));
154 SG::WriteDecorHandle<xAOD::JetContainer, std::vector<float> > cPFOWidthHandle(m_keysCPFOWidth.at(iCut));
155 if(isPFlowJet){
156
157 const std::vector<TrackMomentStruct> pflowMoments = getTrackMoments(*jet,vertexContainer,minPt,pflowTracks,tva);
158
159 std::vector<int> pflowNumTrkVec; pflowNumTrkVec.resize(pflowMoments.size());
160 std::vector<float> pflowSumPtTrkVec; pflowSumPtTrkVec.resize(pflowMoments.size());
161 std::vector<float> pflowTrackWidthVec; pflowTrackWidthVec.resize(pflowMoments.size());
162 for ( size_t iVertex = 0; iVertex < pflowMoments.size(); ++iVertex ) {
163 pflowNumTrkVec[iVertex] = pflowMoments.at(iVertex).numTrk;
164 pflowSumPtTrkVec[iVertex] = pflowMoments.at(iVertex).sumPtTrk;
165 pflowTrackWidthVec[iVertex] = pflowMoments.at(iVertex).trackWidth;
166 }
167 // Set moment decorations
168 numCPFOHandle(*jet) = pflowNumTrkVec;
169 sumPtCPFOHandle(*jet) = pflowSumPtTrkVec;
170 cPFOWidthHandle(*jet) = pflowTrackWidthVec;
171 }
172 else{
173 // User configured for PFO track moments but this isn't a PFlow jet. Set them to empty vectors.
174 numCPFOHandle(*jet) = std::vector<int>();
175 sumPtCPFOHandle(*jet) = std::vector<float>();
176 cPFOWidthHandle(*jet) = std::vector<float>();
177 } // Should find a more graceful way to complain?
178 }// do PF moments
179 }
180 }
181
182 return StatusCode::SUCCESS;
183}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexContainer_key
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysSumPtCPFO
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysTrkWidth
const std::vector< TrackMomentStruct > getTrackMoments(const xAOD::Jet &jet, const xAOD::VertexContainer *vertices, const float minTrackPt, const std::vector< const xAOD::TrackParticle * > &tracks, const jet::TrackVertexAssociation *tva) const
Gaudi::Property< std::string > m_assocTracksName
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysNumTrk
SG::ReadHandleKey< jet::TrackVertexAssociation > m_tva_key
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysNumCPFO
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysCPFOWidth
Gaudi::Property< bool > m_doPFlowMoments
SG::WriteDecorHandleKeyArray< xAOD::JetContainer > m_keysSumPtTrk
Gaudi::Property< std::vector< float > > m_minTrackPt
signal_t signalType() const
const xAOD::IParticle * chargedObject(std::size_t i) const
bool isCharged() const
is a charged PFO
Definition PFO_v1.cxx:251
const TrackParticle * track(unsigned int index) const
Retrieve a const pointer to a Rec::TrackParticle.
Definition PFO_v1.cxx:691
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition ObjectType.h:32
@ ParticleFlow
The object is a particle-flow object.
Definition ObjectType.h:41
@ FlowElement
The object is a track-calo-cluster.
Definition ObjectType.h:52
Jet_v1 Jet
Definition of the current "jet version".
PFO_v1 PFO
Definition of the current "pfo version".
Definition PFO.h:17
FlowElement_v1 FlowElement
Definition of the current "pfo version".
Definition FlowElement.h:16
TrackParticle_v1 TrackParticle
Reference the current persistent version:

◆ 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.

◆ 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

◆ 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::TEvent 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::TEvent, 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()

◆ getMomentBaseName()

const std::string JetTrackMomentsTool::getMomentBaseName ( const float minTrackPt) const
private

Definition at line 251 of file JetTrackMomentsTool.cxx.

252{
253 int value = round(minTrackPt);
254 if (fabs(value - minTrackPt) > 0.1)
255 ATH_MSG_WARNING("Cut float and int disagree: " << minTrackPt << " float vs " << value << " int");
256
257 std::ostringstream sout;
258 sout << "Pt" << value;
259 return sout.str();
260}
float round(const float toRound, const unsigned int decimals)
Definition Mdt.cxx:27

◆ 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::TEvent 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::TEvent, 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.

◆ getTrackMoments() [1/2]

JetTrackMomentsTool::TrackMomentStruct JetTrackMomentsTool::getTrackMoments ( const xAOD::Jet & jet,
const xAOD::Vertex * vertex,
const float minTrackPt,
const std::vector< const xAOD::TrackParticle * > & tracks,
const jet::TrackVertexAssociation * tva ) const
private

Definition at line 197 of file JetTrackMomentsTool.cxx.

198{
199 // Prepare the moments
200 TrackMomentStruct moments{};
201 moments.numTrk = 0;
202 moments.sumPtTrk = 0;
203 moments.trackWidth = 0;
204
205 // Prepare const vars for jet eta/phi
206 const float jetEta = jet.eta();
207 const float jetPhi = jet.phi();
208
209 // Track selection and counters
210 bool notsel = m_htsel.empty();
211 unsigned int nkeep = 0;
212 unsigned int nskip = 0;
213
214 // Loop over the tracks
215 for (size_t iTrack = 0; iTrack < tracks.size(); ++iTrack)
216 {
217 const xAOD::TrackParticle* track = tracks.at(iTrack);
218 const float trackPt = track->pt();
219
220 // Skip the track if it doesn't pass the cut
221 if (trackPt < minTrackPt)
222 continue;
223
224 // Skip the track if it's not from the vertex in question
225 if( vertex == nullptr || vertex != tva->associatedVertex(track) ) continue ;
226
227 // Check track passes track selection, otherwise mark as skipped
228 if ( notsel || m_htsel->accept(*track) ) {
229 ++nkeep;
230
231 // Calculate necessary info for the moments
232 const double deltaR = xAOD::P4Helpers::deltaR(jetEta, jetPhi, track->eta(), track->phi() );
233
234 // Adjust values as necessary for this track
235 moments.numTrk += 1;
236 moments.sumPtTrk += trackPt;
237 moments.trackWidth += deltaR * trackPt;
238 }
239 else { ++nskip;}
240 }
241
242 // Finish processing the moments
243 moments.trackWidth = moments.sumPtTrk > 0 ? moments.trackWidth / moments.sumPtTrk : -1;
244
245 ATH_MSG_DEBUG(" jet index= " << jet.index() << " pt="<<jet.pt()
246 << ": nsel=" << nkeep
247 << ", nrej=" << nskip << " minpt="<<minTrackPt);
248 return moments;
249}
Scalar deltaR(const MatrixBase< Derived > &vec) const
#define ATH_MSG_DEBUG(x)
ToolHandle< InDet::IInDetTrackSelectionTool > m_htsel
size_t index() const
Return the index of this element within its container.
const xAOD::Vertex * associatedVertex(const xAOD::TrackParticle *trk) const
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition Jet_v1.cxx:54
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition Jet_v1.cxx:49
bool trackPt(const xAOD::TauJet &, const xAOD::TauTrack &track, float &out)
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi

◆ getTrackMoments() [2/2]

const std::vector< JetTrackMomentsTool::TrackMomentStruct > JetTrackMomentsTool::getTrackMoments ( const xAOD::Jet & jet,
const xAOD::VertexContainer * vertices,
const float minTrackPt,
const std::vector< const xAOD::TrackParticle * > & tracks,
const jet::TrackVertexAssociation * tva ) const
private

Definition at line 186 of file JetTrackMomentsTool.cxx.

187{
188 std::vector<TrackMomentStruct> moments;
189 moments.resize(vertices->size());
190
191 for (size_t iVertex = 0; iVertex < vertices->size(); ++iVertex)
192 moments[iVertex] = getTrackMoments(jet,vertices->at(iVertex),minTrackPt,tracks,tva);
193
194 return moments;
195}
const T * at(size_type n) const
Access an element, as an rvalue.
size_type size() const noexcept
Returns the number of elements in the collection.

◆ initialize()

StatusCode JetTrackMomentsTool::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 asg::AsgTool.

Definition at line 21 of file JetTrackMomentsTool.cxx.

21 {
22
23 ATH_MSG_INFO("Initializing JetTrackMomentsTool " << name());
24 if ( m_htsel.empty() ) {
25 ATH_MSG_INFO(" No track selector.");
26 } else {
27 ATH_MSG_INFO(" Track selector: " << m_htsel->name());
28 }
29
30 if(m_jetContainerName.empty()){
31 ATH_MSG_ERROR("JetTrackMomentsTool needs to have its input container name configured!");
32 return StatusCode::FAILURE;
33 }
34
35 // Set up the decoration names for each track pt cut
36 for (size_t iCut = 0; iCut < m_minTrackPt.size(); ++iCut) {
37 const float minPt = m_minTrackPt[iCut];
38 const std::string baseName = getMomentBaseName(minPt);
39 m_keysNumTrk.emplace_back( m_jetContainerName + ".NumTrk" + baseName + m_suffix);
40 m_keysSumPtTrk.emplace_back(m_jetContainerName + ".SumPtTrk" + baseName + m_suffix);
41 m_keysTrkWidth.emplace_back(m_jetContainerName + ".TrackWidth" + baseName + m_suffix);
43 m_keysNumCPFO.emplace_back( m_jetContainerName + ".NumChargedPFO" + baseName + m_suffix);
44 m_keysSumPtCPFO.emplace_back(m_jetContainerName + ".SumPtChargedPFO" + baseName + m_suffix);
45 m_keysCPFOWidth.emplace_back(m_jetContainerName + ".ChargedPFOWidth" + baseName + m_suffix);
46 }
47 }
48
49 ATH_CHECK(m_vertexContainer_key.initialize());
50 ATH_CHECK(m_tva_key.initialize());
51 ATH_CHECK(m_keysNumTrk.initialize());
52 ATH_CHECK(m_keysSumPtTrk.initialize());
53 ATH_CHECK(m_keysTrkWidth.initialize());
57
58 return StatusCode::SUCCESS;
59}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
Gaudi::Property< std::string > m_jetContainerName
Gaudi::Property< std::string > m_suffix
const std::string getMomentBaseName(const float minTrackPt) const

◆ 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.

◆ modify()

virtual StatusCode IJetDecorator::modify ( xAOD::JetContainer & jets) const
inlinefinaloverridevirtualinherited

Concrete implementation of the function inherited from IJetModifier.

Implements IJetModifier.

Definition at line 32 of file IJetDecorator.h.

32{return decorate(jets);};
virtual StatusCode decorate(const xAOD::JetContainer &jets) const =0
Decorate a jet collection without otherwise modifying it.

◆ 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()

◆ 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 }

◆ 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_assocTracksName

Gaudi::Property<std::string> JetTrackMomentsTool::m_assocTracksName {this, "AssociatedTracks", "", "Name of associated tracks collection"}
private

Definition at line 60 of file JetTrackMomentsTool.h.

60{this, "AssociatedTracks", "", "Name of associated tracks collection"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doPFlowMoments

Gaudi::Property<bool> JetTrackMomentsTool::m_doPFlowMoments {this, "DoPFlowMoments", false, "Calculate PFlow Object track moments?"}
private

Definition at line 63 of file JetTrackMomentsTool.h.

63{this, "DoPFlowMoments", false, "Calculate PFlow Object track moments?"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_htsel

ToolHandle<InDet::IInDetTrackSelectionTool> JetTrackMomentsTool::m_htsel {this, "TrackSelector", "", "track selection tool"}
private

Definition at line 65 of file JetTrackMomentsTool.h.

65{this, "TrackSelector", "", "track selection tool"};

◆ m_jetContainerName

Gaudi::Property<std::string> JetTrackMomentsTool::m_jetContainerName {this, "JetContainer", "", "SG key for input jet container"}
private

Definition at line 59 of file JetTrackMomentsTool.h.

59{this, "JetContainer", "", "SG key for input jet container"};

◆ m_keysCPFOWidth

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysCPFOWidth {this, "ChargedPFOWidthDecorKeys", {}, "SG keys for ChargedPFO Width decoration (not to be configured manually!)"}
private

Definition at line 75 of file JetTrackMomentsTool.h.

75{this, "ChargedPFOWidthDecorKeys", {}, "SG keys for ChargedPFO Width decoration (not to be configured manually!)"};

◆ m_keysNumCPFO

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysNumCPFO {this, "NumChargedPFODecorKeys", {}, "SG keys for NumChargedPFO decoration (not to be configured manually!)"}
private

Definition at line 73 of file JetTrackMomentsTool.h.

73{this, "NumChargedPFODecorKeys", {}, "SG keys for NumChargedPFO decoration (not to be configured manually!)"};

◆ m_keysNumTrk

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysNumTrk {this, "NumTrkDecorKeys", {}, "SG keys for NumTrk decoration (not to be configured manually!)"}
private

Definition at line 70 of file JetTrackMomentsTool.h.

70{this, "NumTrkDecorKeys", {}, "SG keys for NumTrk decoration (not to be configured manually!)"};

◆ m_keysSumPtCPFO

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysSumPtCPFO {this, "SumPtChargedPFODecorKeys", {}, "SG keys for SumPtChargedPFO decoration (not to be configured manually!)"}
private

Definition at line 74 of file JetTrackMomentsTool.h.

74{this, "SumPtChargedPFODecorKeys", {}, "SG keys for SumPtChargedPFO decoration (not to be configured manually!)"};

◆ m_keysSumPtTrk

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysSumPtTrk {this, "SumPtTrkDecorKeys", {}, "SG keys for SumPtTrk decoration (not to be configured manually!)"}
private

Definition at line 71 of file JetTrackMomentsTool.h.

71{this, "SumPtTrkDecorKeys", {}, "SG keys for SumPtTrk decoration (not to be configured manually!)"};

◆ m_keysTrkWidth

SG::WriteDecorHandleKeyArray<xAOD::JetContainer> JetTrackMomentsTool::m_keysTrkWidth {this, "TrackWidthDecorKeys", {}, "SG keys for TrackWidth decoration (not to be configured manually!)"}
private

Definition at line 72 of file JetTrackMomentsTool.h.

72{this, "TrackWidthDecorKeys", {}, "SG keys for TrackWidth decoration (not to be configured manually!)"};

◆ m_minTrackPt

Gaudi::Property<std::vector<float> > JetTrackMomentsTool::m_minTrackPt {this, "TrackMinPtCuts", {}, "Vector of track pt cuts"}
private

Definition at line 62 of file JetTrackMomentsTool.h.

62{this, "TrackMinPtCuts", {}, "Vector of track pt cuts"};

◆ m_suffix

Gaudi::Property<std::string> JetTrackMomentsTool::m_suffix {this, "MomentSuffix", "", "Suffix for track moment decorations"}
private

Definition at line 61 of file JetTrackMomentsTool.h.

61{this, "MomentSuffix", "", "Suffix for track moment decorations"};

◆ m_tva_key

SG::ReadHandleKey<jet::TrackVertexAssociation> JetTrackMomentsTool::m_tva_key {this, "TrackVertexAssociation", "", "SG key for track-vertex association"}
private

Definition at line 68 of file JetTrackMomentsTool.h.

68{this, "TrackVertexAssociation", "", "SG key for track-vertex association"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vertexContainer_key

SG::ReadHandleKey<xAOD::VertexContainer> JetTrackMomentsTool::m_vertexContainer_key {this, "VertexContainer", "", "SG key for vertex container"}
private

Definition at line 67 of file JetTrackMomentsTool.h.

67{this, "VertexContainer", "", "SG key for vertex container"};

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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