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
16
17#include "CaloEvent/CaloCell.h"
19
20#include "GaudiKernel/MsgStream.h"
21#include "GaudiKernel/ToolHandle.h"
22
23#include "CxxUtils/fpcompare.h"
24
25#include "AthLinks/ElementLink.h"
26
28
31#include "PFMatchInterfaces.h"
32
35
36#include <iostream>
37#include <cassert>
38#include <map>
39#include <string>
40#include <string_view>
41
44
45
50public:
51 eflowRecTrack(const EventContext& ctx,
53 const ToolHandle<eflowTrackExtrapolatorBaseAlgTool>& theTrackExtrapolatorTool);
54 eflowRecTrack(const eflowRecTrack& originalEflowRecTrack);
55 eflowRecTrack& operator = (const eflowRecTrack& originalEflowRecTrack);
56 virtual ~eflowRecTrack();
57
58 const xAOD::TrackParticle* getTrack() const { return m_track; }
59
61
63 void addClusterMatch(eflowTrackClusterLink* clusterMatch) { m_clusterMatches.push_back(clusterMatch); }
64 void addDeltaRPrime(const float& dRPrime){ m_deltaRPrimes.push_back(dRPrime);}
65 void addAlternativeClusterMatch(eflowTrackClusterLink* clusterMatch, const std::string& key) { m_alternativeClusterMatches[key].push_back(clusterMatch); }
66
68
69 int getType() const { return m_type; }
70
71 const std::vector<eflowTrackClusterLink*>& getClusterMatches() const { return m_clusterMatches; }
72 const std::vector<float>& getDRPrimes() const { return m_deltaRPrimes;}
73 //This must also clear deltaRPrime, which corresponds to dRPrime between the track and each cluster
75
76 const std::vector<eflowTrackClusterLink*>* getAlternativeClusterMatches(std::string_view key) const;// { return m_alternativeClusterMatches.at(key); }
77
78 bool hasBin() const { return m_hasBin; }
79 void setHasBin(bool hasBin) { m_hasBin = hasBin; }
80
81 void setCaloDepthArray(const double* depthArray);
82 const std::vector<double>& getCaloDepthArray() const { return m_caloDepthArray; }
83
84 bool isSubtracted() const { return m_isSubtracted; }
85 void setSubtracted();
86
87 void setEExpect(double eExpect, double varEExpect){ m_eExpect = eExpect; m_varEExpect = varEExpect; }
88 double getEExpect() const { return m_eExpect; }
89 double getVarEExpect() const { return m_varEExpect; }
90 int getTrackId() const { return m_trackId; }
91 void setTrackId(int trackId) { m_trackId = trackId; }
92
93
94 int getLayerHED() const { return m_layerHED; }
95 void setLayerHED(int layerHED) { m_layerHED = layerHED; }
96
97 const std::vector<int>& getLayerCellOrderVector() const { return m_layerCellOrderVector; }
98 void setLayerCellOrderVector(const std::vector<int>& layerToStoreVector) { m_layerCellOrderVector = layerToStoreVector; }
99
100 const std::vector<float>& getRadiusCellOrderVector() const { return m_radiusCellOrderVector; }
101 void setRadiusCellOrderVector(const std::vector<float>& radiusToStoreVector) { m_radiusCellOrderVector = radiusToStoreVector; }
102
103 const std::vector<float>& getAvgEDensityCellOrderVector() const { return m_avgEdensityCellOrderVector; }
104 void setAvgEDensityCellOrderVector(const std::vector<float>& avgEdensityToStoreVector) { m_avgEdensityCellOrderVector = avgEdensityToStoreVector; }
105
106
109
110 bool isRecovered() const { return m_isRecovered;}
112
113 void setpull15(double pull15){ m_pull15 = pull15; }
114 double getpull15() const { return m_pull15; }
115
116 void insertTruthEnergyPair (const CaloCell* cell, double truthEnergy);
117 double getCellTruthEnergy (const CaloCell* cell) const;
118
119 void addSubtractedCaloCell(ElementLink<CaloCellContainer> theCellLink, const double& weight) { m_subtractedCells.push_back(std::make_pair(theCellLink,weight)); }
120 const std::vector<std::pair<ElementLink<CaloCellContainer>, double> >& getSubtractedCaloCells() const { return m_subtractedCells; }
121
122private:
123
128 double m_pull15;
129
131 std::vector<int> m_layerCellOrderVector;
132 std::vector<float> m_radiusCellOrderVector;
134
135 double m_eExpect;
137
143
144 std::vector<double> m_caloDepthArray;
145
146 std::unique_ptr<eflowTrackCaloPoints> m_trackCaloPoints;
148 std::vector<eflowTrackClusterLink*> m_clusterMatches;
150 std::vector<float> m_deltaRPrimes;
151 std::map<std::string,std::vector<eflowTrackClusterLink*> , std::less<>> m_alternativeClusterMatches;
152
153 //for truth cheating mode only, we store the list of cells and their truth energies
154 std::vector<std::pair<const CaloCell*, double> > m_cellTruthEnergyList;
155 std::map<Identifier,double> m_cellTruthEnergyStore;
156
157 //list of cells that were removed from CaloCluster (only used in doCPData mode)
158 std::vector<std::pair<ElementLink<CaloCellContainer>, double> > m_subtractedCells;
159
160public:
162 public:
163 bool operator()(const eflowRecTrack* a, const eflowRecTrack* b) {
164 return CxxUtils::fpcompare::greater(a->getTrack()->pt(),
165 b->getTrack()->pt());
166 }
167 };
168};
169
174public:
175 eflowRecMatchTrack(const eflowRecTrack* efRecTrack): m_efRecTrack(efRecTrack) { assert(m_efRecTrack); }
177
179 if (m_efRecTrack) return m_efRecTrack->getTrackCaloPoints().getEtaPhiPos(layer);
180 else {
181 std::cerr << "eflowRecMatchTrack ERROR: Invalid pointer to eflowRecTrack " << std::endl;
182 return eflowEtaPhiPosition(-999.,-999.);
183 }
184 }
185
186private:
188};
189
192
193class eflowRecTrackContainer : public DataVector< eflowRecTrack >
194
195{
196
197 public:
198
199 void print() { };
200
201};
202
204#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
const std::vector< eflowTrackClusterLink * > & getClusterMatches() const
const std::vector< float > & getRadiusCellOrderVector() const
std::map< std::string, std::vector< eflowTrackClusterLink * >, std::less<> > m_alternativeClusterMatches
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()
const std::vector< eflowTrackClusterLink * > * getAlternativeClusterMatches(std::string_view key) const
double getVarEExpect() const
bool isRecovered() const
std::vector< std::pair< const CaloCell *, double > > m_cellTruthEnergyList
const std::vector< float > & getAvgEDensityCellOrderVector() 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: