ATLAS Offline Software
Loading...
Searching...
No Matches
eflowRecTrack.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5/*
6 * eflowRecTrack.h
7 *
8 * Created on: 30.09.2013
9 * Author: tlodd
10 */
11
12#ifndef EFLOWRECTRACK_H_
13#define EFLOWRECTRACK_H_
14
15#include <iostream>
16#include <cassert>
17#include <map>
18#include <string>
19
20#include "CaloEvent/CaloCell.h"
22
23#include "GaudiKernel/MsgStream.h"
24#include "GaudiKernel/ToolHandle.h"
25
26#include "CxxUtils/fpcompare.h"
27
28#include "AthLinks/ElementLink.h"
29
31
34#include "PFMatchInterfaces.h"
35
38
41
42
47public:
48 eflowRecTrack(const EventContext& ctx,
50 const ToolHandle<eflowTrackExtrapolatorBaseAlgTool>& theTrackExtrapolatorTool);
51 eflowRecTrack(const eflowRecTrack& originalEflowRecTrack);
52 eflowRecTrack& operator = (const eflowRecTrack& originalEflowRecTrack);
53 virtual ~eflowRecTrack();
54
55 const xAOD::TrackParticle* getTrack() const { return m_track; }
56
58
60 void addClusterMatch(eflowTrackClusterLink* clusterMatch) { m_clusterMatches.push_back(clusterMatch); }
61 void addDeltaRPrime(const float& dRPrime){ m_deltaRPrimes.push_back(dRPrime);}
62 void addAlternativeClusterMatch(eflowTrackClusterLink* clusterMatch, const std::string& key) { m_alternativeClusterMatches[key].push_back(clusterMatch); }
63
65
66 int getType() const { return m_type; }
67
68 const std::vector<eflowTrackClusterLink*>& getClusterMatches() const { return m_clusterMatches; }
69 const std::vector<float>& getDRPrimes() const { return m_deltaRPrimes;}
70 //This must also clear deltaRPrime, which corresponds to dRPrime between the track and each cluster
72
73 const std::vector<eflowTrackClusterLink*>* getAlternativeClusterMatches(const std::string& key) const;// { return m_alternativeClusterMatches.at(key); }
74
75 bool hasBin() const { return m_hasBin; }
76 void setHasBin(bool hasBin) { m_hasBin = hasBin; }
77
78 void setCaloDepthArray(const double* depthArray);
79 const std::vector<double>& getCaloDepthArray() const { return m_caloDepthArray; }
80
81 bool isSubtracted() const { return m_isSubtracted; }
82 void setSubtracted();
83
84 void setEExpect(double eExpect, double varEExpect){ m_eExpect = eExpect; m_varEExpect = varEExpect; }
85 double getEExpect() const { return m_eExpect; }
86 double getVarEExpect() const { return m_varEExpect; }
87 int getTrackId() const { return m_trackId; }
88 void setTrackId(int trackId) { m_trackId = trackId; }
89
90
91 int getLayerHED() const { return m_layerHED; }
92 void setLayerHED(int layerHED) { m_layerHED = layerHED; }
93
94 const std::vector<int>& getLayerCellOrderVector() const { return m_layerCellOrderVector; }
95 void setLayerCellOrderVector(const std::vector<int>& layerToStoreVector) { m_layerCellOrderVector = layerToStoreVector; }
96
97 const std::vector<float>& getRadiusCellOrderVector() const { return m_radiusCellOrderVector; }
98 void setRadiusCellOrderVector(const std::vector<float>& radiusToStoreVector) { m_radiusCellOrderVector = radiusToStoreVector; }
99
100 const std::vector<float>& getAvgEDensityCellOrderVector() const { return m_avgEdensityCellOrderVector; }
101 void setAvgEDensityCellOrderVector(const std::vector<float>& avgEdensityToStoreVector) { m_avgEdensityCellOrderVector = avgEdensityToStoreVector; }
102
103
106
107 bool isRecovered() const { return m_isRecovered;}
109
110 void setpull15(double pull15){ m_pull15 = pull15; }
111 double getpull15() const { return m_pull15; }
112
113 void insertTruthEnergyPair (const CaloCell* cell, double truthEnergy);
114 double getCellTruthEnergy (const CaloCell* cell) const;
115
116 void addSubtractedCaloCell(ElementLink<CaloCellContainer> theCellLink, const double& weight) { m_subtractedCells.push_back(std::make_pair(theCellLink,weight)); }
117 const std::vector<std::pair<ElementLink<CaloCellContainer>, double> >& getSubtractedCaloCells() const { return m_subtractedCells; }
118
119private:
120
125 double m_pull15;
126
128 std::vector<int> m_layerCellOrderVector;
129 std::vector<float> m_radiusCellOrderVector;
131
132 double m_eExpect;
134
140
141 std::vector<double> m_caloDepthArray;
142
143 std::unique_ptr<eflowTrackCaloPoints> m_trackCaloPoints;
145 std::vector<eflowTrackClusterLink*> m_clusterMatches;
147 std::vector<float> m_deltaRPrimes;
148 std::map<std::string,std::vector<eflowTrackClusterLink*> > m_alternativeClusterMatches;
149
150 //for truth cheating mode only, we store the list of cells and their truth energies
151 std::vector<std::pair<const CaloCell*, double> > m_cellTruthEnergyList;
152 std::map<Identifier,double> m_cellTruthEnergyStore;
153
154 //list of cells that were removed from CaloCluster (only used in doCPData mode)
155 std::vector<std::pair<ElementLink<CaloCellContainer>, double> > m_subtractedCells;
156
157public:
159 public:
160 bool operator()(const eflowRecTrack* a, const eflowRecTrack* b) {
161 return CxxUtils::fpcompare::greater(a->getTrack()->pt(),
162 b->getTrack()->pt());
163 }
164 };
165};
166
171public:
172 eflowRecMatchTrack(const eflowRecTrack* efRecTrack): m_efRecTrack(efRecTrack) { assert(m_efRecTrack); }
174
176 if (m_efRecTrack) return m_efRecTrack->getTrackCaloPoints().getEtaPhiPos(layer);
177 else {
178 std::cerr << "eflowRecMatchTrack ERROR: Invalid pointer to eflowRecTrack " << std::endl;
179 return eflowEtaPhiPosition(-999.,-999.);
180 }
181 }
182
183private:
185};
186
189
190class eflowRecTrackContainer : public DataVector< eflowRecTrack >
191
192{
193
194 public:
195
196 void print() { };
197
198};
199
201#endif /* EFLOWRECTRACK_H_ */
macros to associate a CLID to a type
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
An STL vector of pointers that by default owns its pointed-to elements.
static Double_t a
Data object for each calorimeter readout cell.
Definition CaloCell.h:57
DataVector(SG::OwnershipPolicy ownPolicy=SG::OWN_ELEMENTS, SG::IndexTrackingPolicy trackIndices=SG::DEFAULT_TRACK_INDICES)
virtual eflowEtaPhiPosition etaPhiInLayer(PFMatch::LayerType layer) const
eflowRecMatchTrack(const eflowRecTrack *efRecTrack)
const eflowRecTrack * m_efRecTrack
virtual ~eflowRecMatchTrack()
bool operator()(const eflowRecTrack *a, const eflowRecTrack *b)
This class extends the information about a xAOD::Track.
double getEExpect() const
std::vector< int > m_layerCellOrderVector
void addClusterMatch(eflowTrackClusterLink *clusterMatch)
void setEExpect(double eExpect, double varEExpect)
eflowRecTrack & operator=(const eflowRecTrack &originalEflowRecTrack)
void setLayerHED(int layerHED)
const std::vector< float > & getDRPrimes() const
std::vector< float > m_avgEdensityCellOrderVector
std::map< std::string, std::vector< eflowTrackClusterLink * > > m_alternativeClusterMatches
const std::vector< eflowTrackClusterLink * > & getClusterMatches() const
const std::vector< float > & getRadiusCellOrderVector() const
ElementLink< xAOD::TrackParticleContainer > m_trackElemLink
void setRadiusCellOrderVector(const std::vector< float > &radiusToStoreVector)
std::vector< double > m_caloDepthArray
std::vector< std::pair< ElementLink< CaloCellContainer >, double > > m_subtractedCells
const std::vector< double > & getCaloDepthArray() const
bool isSubtracted() const
double getpull15() const
virtual ~eflowRecTrack()
int getType() const
void setHasBin(bool hasBin)
const xAOD::TrackParticle * getTrack() const
std::unique_ptr< eflowTrackCaloPoints > m_trackCaloPoints
const eflowTrackCaloPoints & getTrackCaloPoints() const
const std::vector< int > & getLayerCellOrderVector() const
void setIsRecovered()
bool m_isRecovered
Tells us whether this track underwent split shower revovery.
eflowRecTrack(const EventContext &ctx, const ElementLink< xAOD::TrackParticleContainer > &trackElemLink, const ToolHandle< eflowTrackExtrapolatorBaseAlgTool > &theTrackExtrapolatorTool)
void setpull15(double pull15)
const std::vector< std::pair< ElementLink< CaloCellContainer >, double > > & getSubtractedCaloCells() const
void setIsInDenseEnvironment()
void setLayerCellOrderVector(const std::vector< int > &layerToStoreVector)
eflowRingSubtractionManager & getCellSubtractionManager()
void setAvgEDensityCellOrderVector(const std::vector< float > &avgEdensityToStoreVector)
void addDeltaRPrime(const float &dRPrime)
std::map< Identifier, double > m_cellTruthEnergyStore
void addSubtractedCaloCell(ElementLink< CaloCellContainer > theCellLink, const double &weight)
void insertTruthEnergyPair(const CaloCell *cell, double truthEnergy)
bool hasBin() const
std::vector< float > m_radiusCellOrderVector
double getCellTruthEnergy(const CaloCell *cell) const
int getTrackId() const
bool isInDenseEnvironment() const
int getLayerHED() const
std::vector< float > m_deltaRPrimes
List of distance measurements between track and cluster used in first pass matching - i....
std::vector< eflowTrackClusterLink * > m_clusterMatches
void setCaloDepthArray(const double *depthArray)
eflowRingSubtractionManager m_ringSubtractionManager
void clearClusterMatches()
double getVarEExpect() const
bool isRecovered() const
std::vector< std::pair< const CaloCell *, double > > m_cellTruthEnergyList
const std::vector< float > & getAvgEDensityCellOrderVector() const
const std::vector< eflowTrackClusterLink * > * getAlternativeClusterMatches(const std::string &key) const
bool m_isInDenseEnvironment
ElementLink< xAOD::TrackParticleContainer > getTrackElemLink() const
const xAOD::TrackParticle * m_track
void setTrackId(int trackId)
void addAlternativeClusterMatch(eflowTrackClusterLink *clusterMatch, const std::string &key)
This stores information, a rank and ring thickness, about cell rings in an ordered way.
This class stores a map of calorimeter layers and track parameters (the result of the track extrapola...
Workaround x86 precision issues for FP inequality comparisons.
bool greater(double a, double b)
Compare two FP numbers, working around x87 precision issues.
Definition fpcompare.h:140
eflowCalo::LAYER LayerType
TrackParticle_v1 TrackParticle
Reference the current persistent version: