ATLAS Offline Software
Loading...
Searching...
No Matches
eflowRecTrack.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 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
35
38
41
42
47public:
49 const ToolHandle<eflowTrackExtrapolatorBaseAlgTool>& theTrackExtrapolatorTool);
50 eflowRecTrack(const eflowRecTrack& originalEflowRecTrack);
51 eflowRecTrack& operator = (const eflowRecTrack& originalEflowRecTrack);
52 virtual ~eflowRecTrack();
53
54 const xAOD::TrackParticle* getTrack() const { return m_track; }
55
57
59 void addClusterMatch(eflowTrackClusterLink* clusterMatch) { m_clusterMatches.push_back(clusterMatch); }
60 void addDeltaRPrime(const float& dRPrime){ m_deltaRPrimes.push_back(dRPrime);}
61 void addAlternativeClusterMatch(eflowTrackClusterLink* clusterMatch, const std::string& key) { m_alternativeClusterMatches[key].push_back(clusterMatch); }
62
64
65 int getType() const { return m_type; }
66
67 const std::vector<eflowTrackClusterLink*>& getClusterMatches() const { return m_clusterMatches; }
68 const std::vector<float>& getDRPrimes() const { return m_deltaRPrimes;}
69 //This must also clear deltaRPrime, which corresponds to dRPrime between the track and each cluster
71
72 const std::vector<eflowTrackClusterLink*>* getAlternativeClusterMatches(const std::string& key) const;// { return m_alternativeClusterMatches.at(key); }
73
74 bool hasBin() const { return m_hasBin; }
75 void setHasBin(bool hasBin) { m_hasBin = hasBin; }
76
77 void setCaloDepthArray(const double* depthArray);
78 const std::vector<double>& getCaloDepthArray() const { return m_caloDepthArray; }
79
80 bool isSubtracted() const { return m_isSubtracted; }
81 void setSubtracted();
82
83 void setEExpect(double eExpect, double varEExpect){ m_eExpect = eExpect; m_varEExpect = varEExpect; }
84 double getEExpect() const { return m_eExpect; }
85 double getVarEExpect() const { return m_varEExpect; }
86 int getTrackId() const { return m_trackId; }
87 void setTrackId(int trackId) { m_trackId = trackId; }
88
89
90 int getLayerHED() const { return m_layerHED; }
91 void setLayerHED(int layerHED) { m_layerHED = layerHED; }
92
93 const std::vector<int>& getLayerCellOrderVector() const { return m_layerCellOrderVector; }
94 void setLayerCellOrderVector(const std::vector<int>& layerToStoreVector) { m_layerCellOrderVector = layerToStoreVector; }
95
96 const std::vector<float>& getRadiusCellOrderVector() const { return m_radiusCellOrderVector; }
97 void setRadiusCellOrderVector(const std::vector<float>& radiusToStoreVector) { m_radiusCellOrderVector = radiusToStoreVector; }
98
99 const std::vector<float>& getAvgEDensityCellOrderVector() const { return m_avgEdensityCellOrderVector; }
100 void setAvgEDensityCellOrderVector(const std::vector<float>& avgEdensityToStoreVector) { m_avgEdensityCellOrderVector = avgEdensityToStoreVector; }
101
102
105
106 bool isRecovered() const { return m_isRecovered;}
108
109 void setpull15(double pull15){ m_pull15 = pull15; }
110 double getpull15() const { return m_pull15; }
111
112 void insertTruthEnergyPair (const CaloCell* cell, double truthEnergy);
113 double getCellTruthEnergy (const CaloCell* cell) const;
114
115 void addSubtractedCaloCell(ElementLink<CaloCellContainer> theCellLink, const double& weight) { m_subtractedCells.push_back(std::make_pair(theCellLink,weight)); }
116 const std::vector<std::pair<ElementLink<CaloCellContainer>, double> >& getSubtractedCaloCells() const { return m_subtractedCells; }
117
118private:
119
124 double m_pull15;
125
127 std::vector<int> m_layerCellOrderVector;
128 std::vector<float> m_radiusCellOrderVector;
130
131 double m_eExpect;
133
139
140 std::vector<double> m_caloDepthArray;
141
142 std::unique_ptr<eflowTrackCaloPoints> m_trackCaloPoints;
144 std::vector<eflowTrackClusterLink*> m_clusterMatches;
146 std::vector<float> m_deltaRPrimes;
147 std::map<std::string,std::vector<eflowTrackClusterLink*> > m_alternativeClusterMatches;
148
149 //for truth cheating mode only, we store the list of cells and their truth energies
150 std::vector<std::pair<const CaloCell*, double> > m_cellTruthEnergyList;
151 std::map<Identifier,double> m_cellTruthEnergyStore;
152
153 //list of cells that were removed from CaloCluster (only used in doCPData mode)
154 std::vector<std::pair<ElementLink<CaloCellContainer>, double> > m_subtractedCells;
155
156public:
158 public:
159 bool operator()(const eflowRecTrack* a, const eflowRecTrack* b) {
160 return CxxUtils::fpcompare::greater(a->getTrack()->pt(),
161 b->getTrack()->pt());
162 }
163 };
164};
165
170public:
171 eflowRecMatchTrack(const eflowRecTrack* efRecTrack): m_efRecTrack(efRecTrack) { assert(m_efRecTrack); }
173
175 if (m_efRecTrack) return m_efRecTrack->getTrackCaloPoints().getEtaPhiPos(layer);
176 else {
177 std::cerr << "eflowRecMatchTrack ERROR: Invalid pointer to eflowRecTrack " << std::endl;
178 return eflowEtaPhiPosition(-999.,-999.);
179 }
180 }
181
182private:
184};
185
188
189class eflowRecTrackContainer : public DataVector< eflowRecTrack >
190
191{
192
193 public:
194
195 void print() { };
196
197};
198
200#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.
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....
eflowRecTrack(const ElementLink< xAOD::TrackParticleContainer > &trackElemLink, const ToolHandle< eflowTrackExtrapolatorBaseAlgTool > &theTrackExtrapolatorTool)
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: