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

Electron / photon ambiguity resolution. More...

#include <EGammaAmbiguityTool.h>

Inheritance diagram for EGammaAmbiguityTool:
Collaboration diagram for EGammaAmbiguityTool:

Public Member Functions

 EGammaAmbiguityTool (const std::string &myname)
 Standard constructor.
virtual ~EGammaAmbiguityTool ()=default
 Standard destructor.
virtual StatusCode initialize () override final
 Gaudi Service Interface method implementations.
virtual unsigned int ambiguityResolve (const xAOD::CaloCluster *cluster, const xAOD::Vertex *vx, const xAOD::TrackParticle *tp, xAOD::AmbiguityTool::AmbiguityType &type) const override final
 Return value: AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown.
virtual unsigned int ambiguityResolve (const xAOD::CaloCluster *cluster, const xAOD::Vertex *vx, const xAOD::TrackParticle *tp) const override final
 Return value: AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown Needed because of existing client usage (i.e Trigger).
virtual unsigned int ambiguityResolve (const xAOD::Egamma &egamma) const override final
 Access the ambiguity resolution of central electrons and photons and return AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown or the author of the object if no overlapping object is found.
virtual bool accept (const xAOD::Egamma &egamma) const override final
 Accept or reject egamma object based on ambiguity resolution (e.g.
bool hasInnermostPixelHit (const xAOD::TrackParticle &tp) const
 Return true if track has innermost pixel hit or next-to-innermost in case innermost is not expected or at least m_MinNoPixHits pixel hits in case next-to-innermost is not expected.
size_t nTrkWithInnermostPixelHits (const xAOD::Vertex &vx) const
 Return the number of tracks with "innermost pixel hits" (see above) in the given vertex.
bool isInVertex (const xAOD::TrackParticle &, const xAOD::Vertex &) const
 Return true if the given TrackParticle is part of the vertex.
bool passDeltaR_innermost (const xAOD::Vertex &vx) const
 Return true if the vertex passes the requirement on Rconv - RfirstHit.
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

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

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

int m_MinNoSiHits
 Minimum number of silicon hits to be an electron and not a photon.
int m_MinNoPixHits
 Minimum number of pixel hits to be an electron and not a photon.
float m_maxEoverPCut
 Maximum EoverP, more that this is ambiguous.
float m_minPtCut
 Minimum Pt, less that this is ambiguous.
float m_maxDeltaR_innermost
 Maximum value for Rconv - RfirstHit for Si+Si conversions where both tracks have innermost hits.
bool m_noVertexNoInnermostAsAmb
 no vertex && no innermost hit -> amb.
bool m_acceptAmbiguous
 @When used as a selector reject/accpet ambiguous cases
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

Electron / photon ambiguity resolution.

Dual-use version

Authors
Bruno Lenzi, Anastopoulos Christos, Ludovica Apperio Bella
Date
May 2015

Dual-use version

Author
Bruno Lenzi , Christos Anastopoulos, Ruggero Turra
Date
May 2015

Dual-use version, interface

Author
Bruno Lenzi
Date
May 2015

Definition at line 21 of file EGammaAmbiguityTool.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

◆ EGammaAmbiguityTool()

EGammaAmbiguityTool::EGammaAmbiguityTool ( const std::string & myname)

Standard constructor.

Definition at line 38 of file EGammaAmbiguityTool.cxx.

39 : asg::AsgTool(myname)
40{
42 "minNoSiHits",
43 m_MinNoSiHits = 4,
44 "Minimum number of silicon hits to be an electron==>not photon for sure");
46 "minNoPixHits",
48 "Minimum number of Pixel hits to be an electron==>not photon for sure");
49 declareProperty("maxEoverPCut",
50 m_maxEoverPCut = 10,
51 "Maximum EoverP , more that this is ambiguous");
53 "minPCut", m_minPtCut = 2000, "Minimum Pt, less than that is ambiguous");
54 declareProperty("maxDeltaR_innermost",
56 "Maximum value for Rconv - RfirstHit for Si+Si conversions "
57 "where both tracks have innermost hits");
58 declareProperty("noVertexNoInnermostAsAmb",
60 "If true classify as ambiguous when there is no vertex and "
61 "no innermost Hits. "
62 "If false classify no vertex as for sure not photon");
63 declareProperty("AcceptAmbiguous",
64 m_acceptAmbiguous = true,
65 "When used as a selector accept the ambiguous as default");
66}
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool m_noVertexNoInnermostAsAmb
no vertex && no innermost hit -> amb.
int m_MinNoSiHits
Minimum number of silicon hits to be an electron and not a photon.
float m_maxEoverPCut
Maximum EoverP, more that this is ambiguous.
float m_maxDeltaR_innermost
Maximum value for Rconv - RfirstHit for Si+Si conversions where both tracks have innermost hits.
float m_minPtCut
Minimum Pt, less that this is ambiguous.
int m_MinNoPixHits
Minimum number of pixel hits to be an electron and not a photon.
bool m_acceptAmbiguous
@When used as a selector reject/accpet ambiguous cases

◆ ~EGammaAmbiguityTool()

virtual EGammaAmbiguityTool::~EGammaAmbiguityTool ( )
virtualdefault

Standard destructor.

Member Function Documentation

◆ accept()

bool EGammaAmbiguityTool::accept ( const xAOD::Egamma & egamma) const
finaloverridevirtual

Accept or reject egamma object based on ambiguity resolution (e.g.

Accept or reject egamma object based on ambiguity resolution.

if object is a photon and ambiguity return value is electron -> reject)

Implements IEGammaAmbiguityTool.

Definition at line 289 of file EGammaAmbiguityTool.cxx.

289 {
290 unsigned int author = ambiguityResolve(egamma);
291
294 return true;
295 }
296
298 return true;
299 }
300
301 return (author == (egamma.type() == xAOD::Type::Electron ?
303}
virtual unsigned int ambiguityResolve(const xAOD::CaloCluster *cluster, const xAOD::Vertex *vx, const xAOD::TrackParticle *tp, xAOD::AmbiguityTool::AmbiguityType &type) const override final
Return value: AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown.
@ Electron
The object is an electron.
Definition ObjectType.h:46
const uint16_t AuthorPhoton
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:28
const uint16_t AuthorCaloTopo35
Photon reconstructed by SW CaloTopo35 seeded clusters.
Definition EgammaDefs.h:38
const uint16_t AuthorElectron
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:24
const uint16_t AuthorAmbiguous
Object Reconstructed by standard cluster-based algorithm.
Definition EgammaDefs.h:32
const uint16_t AuthorFwdElectron
Electron reconstructed by the Forward cluster-based algorithm.
Definition EgammaDefs.h:30

◆ ambiguityResolve() [1/3]

unsigned int EGammaAmbiguityTool::ambiguityResolve ( const xAOD::CaloCluster * cluster,
const xAOD::Vertex * vx,
const xAOD::TrackParticle * tp ) const
finaloverridevirtual

Return value: AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown Needed because of existing client usage (i.e Trigger).

Implementation calls method above

Implements IEGammaAmbiguityTool.

Definition at line 232 of file EGammaAmbiguityTool.cxx.

234 {
235
237 return ambiguityResolve(cluster,
238 vx,
239 tp,
240 type);
241
242}

◆ ambiguityResolve() [2/3]

unsigned int EGammaAmbiguityTool::ambiguityResolve ( const xAOD::CaloCluster * cluster,
const xAOD::Vertex * vx,
const xAOD::TrackParticle * tp,
xAOD::AmbiguityTool::AmbiguityType & type ) const
finaloverridevirtual

Return value: AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown.

Implements IEGammaAmbiguityTool.

Definition at line 75 of file EGammaAmbiguityTool.cxx.

78 {
79
81 // Result should stay the same before after calibration corrections
82 double cluster_e = (cluster->clusterSize() != xAOD::CaloCluster::SW_35ele &&
85 ? cluster->altE()
86 : cluster->e();
87
88 //Number of hits from the track
89 uint8_t trkPixelHits(0);
90 uint8_t trkSiHits(0);
91 if (tp && !tp->summaryValue(trkPixelHits,xAOD::numberOfPixelHits)){
92 ATH_MSG_WARNING("Could not retrieve number of pixel hits from track");
93 }
94 if (tp && !tp->summaryValue(trkSiHits, xAOD::numberOfSCTHits)){
95 ATH_MSG_WARNING("Could not retrieve number of SCT hits from track");
96 }
97 trkSiHits += trkPixelHits;
98
99 //Check if the vertex is double silicon
101 bool vxDoubleSi = (convType == xAOD::EgammaParameters::doubleSi);
102
103 // Check if the track particle and the ones associated to the conversion vertex
104 // have innermost pixel hits
105 bool trkHasInnermostHit = tp && hasInnermostPixelHit(*tp);
106 size_t nTrkVxWithInnermostHit{};
107 if (vx and vxDoubleSi) nTrkVxWithInnermostHit = nTrkWithInnermostPixelHits(*vx);
108
109 //See if the Si+Si conversion shares one track with the electron
110 //if not we might have a trident.
111 //if yes and the track is not good we definitely matched the conversion as electron.
112 bool shareTrack = vx && tp && trkSiHits>=m_MinNoSiHits && vxDoubleSi && isInVertex(*tp, *vx);
113
114 //Debug messages
115 ATH_MSG_DEBUG("Vertex, SiSi, tracks with innermost pixel hits: "
116 << (vx != nullptr) << ", " << vxDoubleSi << ", " << nTrkVxWithInnermostHit);
117 ATH_MSG_DEBUG("Track, Si hits, pixel hits, has innermost pixel hit: "
118 << (tp != nullptr) << ", " << (int) trkSiHits << ", " << (int) trkPixelHits
119 << " , " << (int) trkHasInnermostHit);
120 ATH_MSG_DEBUG("Share track : " << shareTrack);
121
122 //The Electron collection will NOT contain Photons
123 //The Photon collection will NOT contain Electrons
124
125 //So for conversions vs electrons better to go to ambiguous
126 //except if we are sure.
127
128 //Practically a photon here means definetely not Electron
129 //And vice-versa
130
131 //Photon ==> Surely not electron
132 // - no track
133 // - or no track with the minimum requirent hits to be an electron
134 // - or Si+Si vertex and
135 // - No pixel
136 // - The electron track is part of the conversion
137 // In this case we do not want this to be in Electrons
138 if (!tp ||
139 trkSiHits<m_MinNoSiHits ||
140 (vxDoubleSi && !trkPixelHits && shareTrack)){
141 ATH_MSG_DEBUG("Returning Photon");
144 }
145
146 // Ambigous due to E/P, Min Pt, pixel hits
147 // We are not sure it is a Photon, but is not good enough either to be surely
148 // an Electron
149 // - E/P >10 or track Pt < 2.0 GeV or no-pixel then Ambiguous
150 double track_ep = cluster_e * fabs(tp->qOverP());
151
152 if(tp->pt()<m_minPtCut) {
153 ATH_MSG_DEBUG("Returning Ambiguous due min Pt");
156 }
157
158 if( track_ep > m_maxEoverPCut) {
159 ATH_MSG_DEBUG("Returning Ambiguous due to E over P");
162 }
163
164
165 if(!trkPixelHits) {
166 ATH_MSG_DEBUG("Returning Ambiguous due to no pixels");
169 }
170
171 // Electron ==> Surely not Photon
172 // - No vertex Matched (and trk has "innermost pixel hits" when
173 // m_noVertexNoInnermostAsAmb is true,
174 // othewise ambiguous)
175 // - Track with at least the minimum Si and Pixel hits (previous selection for
176 // photons/ambiguous)
177 // - And has E/P < 10 and Pt > 2.0 GeV (previous for ambiguous)
178 // - Or if a vertex exists and:
179 // * is not Si+Si
180 // * is Si+Si but only 1 trk has "innermost pixel hits"
181 // * is Si+Si and both tracks have "innermost pixel hits" but
182 // Rconv - RfirstHit > maxDeltaR_innermost
183 // In this case we do not want this to be in Photons
184
185 if (!vx) {
186 if (trkHasInnermostHit || !m_noVertexNoInnermostAsAmb) {
187 ATH_MSG_DEBUG("Returning Electron");
190 } else {
191 // the true photons falling here are classified as unconverted photons
192 // but it may happen that they are late single-track conversions
193 // very few true electrons are falling here, since there is no innermost
194 // hits
195 ATH_MSG_DEBUG("Returning Ambiguous due to no conv vertex and track with "
196 "no innermost hits");
199 }
200 }
201
202 // here we have a conv vertex
203 if (trkHasInnermostHit && (!vxDoubleSi || nTrkVxWithInnermostHit == 1 ||
204 !passDeltaR_innermost(*vx))) {
205 ATH_MSG_DEBUG("Returning Electron");
208 }
209
210 // Ambiguous all else, these will go to both electrons and photons
211 // A matched Si+Si vertex (where either both or none of the tracks have
212 // "innermost pixel hits")
213 // and a track with "innermost pixel hits"
214 // A non Si+Si vertex matched and a track with no "innermost pixel hits"
215
216 //If we have no double si
217 //or if the single track p matches the cluster E than the vertex p
218 //mark TrackEoverPBetterThanVertexEover.
219 //Otherwise maek as TrackEoverPBetterThanVertexEover
220 //as the double si vertex is a better match to the cluster E.
221 const double track_p = fabs(1.0/tp->qOverP());
222 const double vertex_p=xAOD::EgammaHelpers::momentumAtVertex(*vx).mag() ;
223 type = !vxDoubleSi || (fabs(track_p - cluster_e) < fabs(vertex_p- cluster_e))?
225 xAOD::AmbiguityTool::ambiguousVertexEoverPBetterThanTrackEoverP ;
226 //end of types
227
228 ATH_MSG_DEBUG("Returning Ambiguous");
230}
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
size_t nTrkWithInnermostPixelHits(const xAOD::Vertex &vx) const
Return the number of tracks with "innermost pixel hits" (see above) in the given vertex.
bool isInVertex(const xAOD::TrackParticle &, const xAOD::Vertex &) const
Return true if the given TrackParticle is part of the vertex.
bool hasInnermostPixelHit(const xAOD::TrackParticle &tp) const
Return true if track has innermost pixel hit or next-to-innermost in case innermost is not expected o...
bool passDeltaR_innermost(const xAOD::Vertex &vx) const
Return true if the vertex passes the requirement on Rconv - RfirstHit.
ClusterSize clusterSize() const
Get cluster size.
virtual double e() const
The total energy of the particle.
flt_t altE() const
Get Energy in signal state ALTCALIBRATED.
Amg::Vector3D momentumAtVertex(const xAOD::Photon *, bool debug=false)
return the momentum at the vertex (which can be 0)
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
@ doubleSi
two tracks, both with Si hits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].

◆ ambiguityResolve() [3/3]

unsigned int EGammaAmbiguityTool::ambiguityResolve ( const xAOD::Egamma & egamma) const
finaloverridevirtual

Access the ambiguity resolution of central electrons and photons and return AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown or the author of the object if no overlapping object is found.

Redo the ambiguity resolution of central electrons and photons and return AuthorElectron, AuthorPhoton, AuthorAmbiguous, AuthorUnknown or the author of the object if no overlapping object is found.

ELink.isAvailable(*egamma)) {

Implements IEGammaAmbiguityTool.

Definition at line 250 of file EGammaAmbiguityTool.cxx.

250 {
251
252 //Fwd and Topo seeded not handled
255 ATH_MSG_DEBUG("Author Fwd of Topo seeded. Do not do overlap or ambiguity");
256 return egamma.author();
257 }
258
259 //No overlap found so either photon or electron
260 if (!egamma.ambiguousObject()){
262 ATH_MSG_DEBUG("No overlaping object found");
263 return egamma.author();
264 }
265
266 // Overlap found. define the electron and the photon
267 const xAOD::Electron* electron = static_cast<const xAOD::Electron*>(
268 egamma.type() == xAOD::Type::Electron ? &egamma : egamma.ambiguousObject());
269 const xAOD::Photon* photon = static_cast<const xAOD::Photon*>(
270 egamma.type() == xAOD::Type::Photon ? &egamma : egamma.ambiguousObject());
271
272 //Error if cannot define any of them
273 if (!electron || !photon){
274 ATH_MSG_WARNING("Could not cast to electron and/or photon");
275 return egamma.author();
276 }
277
278 //pass the proper input to the ambiguity resolve method
280 unsigned int result = ambiguityResolve(electron->caloCluster(),
281 photon->vertex(),
282 electron->trackParticle(),
283 type);
284 ATH_MSG_DEBUG("Performed ambiguity resolution, resulting type is: "<< type);
285 return result;
286}
@ Photon
The object is a photon.
Definition ObjectType.h:47
Photon_v1 Photon
Definition of the current "egamma version".
Electron_v1 Electron
Definition of the current "egamma version".

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

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

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

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

◆ hasInnermostPixelHit()

bool EGammaAmbiguityTool::hasInnermostPixelHit ( const xAOD::TrackParticle & tp) const

Return true if track has innermost pixel hit or next-to-innermost in case innermost is not expected or at least m_MinNoPixHits pixel hits in case next-to-innermost is not expected.

Definition at line 309 of file EGammaAmbiguityTool.cxx.

310{
311 uint8_t trkExpectHit(0);
312 uint8_t trkNhits(0);
313 CHECK_HITS( tp.summaryValue(trkNhits,xAOD::numberOfInnermostPixelLayerHits) );
314 if (trkNhits) {return true;}
315
316 CHECK_HITS( tp.summaryValue(trkExpectHit,xAOD::expectInnermostPixelLayerHit) );
317 if (trkExpectHit) {return false;}
318
320 if (trkNhits) {return true;}
321
322 CHECK_HITS( tp.summaryValue(trkExpectHit,xAOD::expectNextToInnermostPixelLayerHit) );
323 if (trkExpectHit) {return false;}
324
325 CHECK_HITS( tp.summaryValue(trkNhits,xAOD::numberOfPixelHits) );
326 return (trkNhits >= m_MinNoPixHits);
327}
#define CHECK_HITS(EXP)
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer

◆ initialize()

StatusCode EGammaAmbiguityTool::initialize ( void )
finaloverridevirtual

Gaudi Service Interface method implementations.

Reimplemented from asg::AsgTool.

Definition at line 68 of file EGammaAmbiguityTool.cxx.

68 {
69 ATH_MSG_DEBUG("Initializing " << name() << "...");
70 return StatusCode::SUCCESS;
71}

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

◆ isInVertex()

bool EGammaAmbiguityTool::isInVertex ( const xAOD::TrackParticle & trk,
const xAOD::Vertex & vx ) const

Return true if the given TrackParticle is part of the vertex.

Definition at line 342 of file EGammaAmbiguityTool.cxx.

342 {
343 for (size_t i = 0; i < vx.nTrackParticles(); ++i){
344 const xAOD::TrackParticle *tp = vx.trackParticle(i);
345 if (!tp) {ATH_MSG_WARNING("Null pointer to track particle in vertex");}
346 if (tp == &trk) {return true;}
347 }
348 return false;
349}
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
const TrackParticle * trackParticle(size_t i) const
Get the pointer to a given track that was used in vertex reco.
TrackParticle_v1 TrackParticle
Reference the current persistent version:

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

◆ nTrkWithInnermostPixelHits()

size_t EGammaAmbiguityTool::nTrkWithInnermostPixelHits ( const xAOD::Vertex & vx) const

Return the number of tracks with "innermost pixel hits" (see above) in the given vertex.

Definition at line 331 of file EGammaAmbiguityTool.cxx.

331 {
332 size_t n = 0;
333 for (size_t i = 0; i < vx.nTrackParticles(); ++i){
334 const xAOD::TrackParticle *tp = vx.trackParticle(i);
335 if (!tp) {ATH_MSG_WARNING("Null pointer to track particle in vertex");}
336 else if (hasInnermostPixelHit(*tp)) {++n;}
337 }
338 return n;
339}

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

◆ passDeltaR_innermost()

bool EGammaAmbiguityTool::passDeltaR_innermost ( const xAOD::Vertex & vx) const

Return true if the vertex passes the requirement on Rconv - RfirstHit.

Definition at line 352 of file EGammaAmbiguityTool.cxx.

353{
354 static const SG::AuxElement::Accessor<float> minRfirstHitAcc("minRfirstHit");
355 if (not minRfirstHitAcc.isAvailable(vx)) {
356 ATH_MSG_WARNING("minRfirstHit not available");
357 return false;
358 }
359 return xAOD::EgammaHelpers::conversionRadius(&vx) - minRfirstHitAcc(vx) < m_maxDeltaR_innermost;
360}
float conversionRadius(const xAOD::Vertex *vx)
return the conversion radius or 9999.

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

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

bool EGammaAmbiguityTool::m_acceptAmbiguous
private

@When used as a selector reject/accpet ambiguous cases

Definition at line 97 of file EGammaAmbiguityTool.h.

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

float EGammaAmbiguityTool::m_maxDeltaR_innermost
private

Maximum value for Rconv - RfirstHit for Si+Si conversions where both tracks have innermost hits.

Definition at line 93 of file EGammaAmbiguityTool.h.

◆ m_maxEoverPCut

float EGammaAmbiguityTool::m_maxEoverPCut
private

Maximum EoverP, more that this is ambiguous.

Definition at line 89 of file EGammaAmbiguityTool.h.

◆ m_MinNoPixHits

int EGammaAmbiguityTool::m_MinNoPixHits
private

Minimum number of pixel hits to be an electron and not a photon.

Definition at line 87 of file EGammaAmbiguityTool.h.

◆ m_MinNoSiHits

int EGammaAmbiguityTool::m_MinNoSiHits
private

Minimum number of silicon hits to be an electron and not a photon.

Definition at line 85 of file EGammaAmbiguityTool.h.

◆ m_minPtCut

float EGammaAmbiguityTool::m_minPtCut
private

Minimum Pt, less that this is ambiguous.

Definition at line 91 of file EGammaAmbiguityTool.h.

◆ m_noVertexNoInnermostAsAmb

bool EGammaAmbiguityTool::m_noVertexNoInnermostAsAmb
private

no vertex && no innermost hit -> amb.

Use true in reconstruction to have more ambiguous

Definition at line 95 of file EGammaAmbiguityTool.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

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