ATLAS Offline Software
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 "GaudiKernel/MsgStream.h"
21 #include "GaudiKernel/ToolHandle.h"
22 
23 #include "CxxUtils/fpcompare.h"
24 
25 #include "AthLinks/ElementLink.h"
26 
28 
32 
35 
38 
39 class IMessageSvc;
40 class ISvcLocator;
41 
46 public:
48  const ToolHandle<eflowTrackExtrapolatorBaseAlgTool>& theTrackExtrapolatorTool);
49  eflowRecTrack(const eflowRecTrack& originalEflowRecTrack);
50  eflowRecTrack& operator = (const eflowRecTrack& originalEflowRecTrack);
51  virtual ~eflowRecTrack();
52 
53  const xAOD::TrackParticle* getTrack() const { return m_track; }
54 
56 
58  void addClusterMatch(eflowTrackClusterLink* clusterMatch) { m_clusterMatches.push_back(clusterMatch); }
59  void addDeltaRPrime(const float& dRPrime){ m_deltaRPrimes.push_back(dRPrime);}
60  void addAlternativeClusterMatch(eflowTrackClusterLink* clusterMatch, const std::string& key) { m_alternativeClusterMatches[key].push_back(clusterMatch); }
61 
63 
64  int getType() const { return m_type; }
65 
66  const std::vector<eflowTrackClusterLink*>& getClusterMatches() const { return m_clusterMatches; }
67  const std::vector<float>& getDRPrimes() const { return m_deltaRPrimes;}
68  //This must also clear deltaRPrime, which corresponds to dRPrime between the track and each cluster
70 
71  const std::vector<eflowTrackClusterLink*>* getAlternativeClusterMatches(const std::string& key) const;// { return m_alternativeClusterMatches.at(key); }
72 
73  bool hasBin() const { return m_hasBin; }
74  void setHasBin(bool hasBin) { m_hasBin = hasBin; }
75 
76  void setCaloDepthArray(const double* depthArray);
77  const std::vector<double>& getCaloDepthArray() const { return m_caloDepthArray; }
78 
79  bool isSubtracted() const { return m_isSubtracted; }
80 
81  void setSubtracted() {
82  if (isSubtracted()){
83  MsgStream* mlog = m_mlog.get();
84  std::string errorString = "Invoke setSubtracted() on track that is subtracted already!";
85  if (mlog) (*mlog) << MSG::WARNING << errorString << endmsg;
86  else {
87  std::string errorPrefix = "eflowRecTrack: WARNING";
88  std::cerr << errorPrefix << " - have invalid pointer to MsgStream service " << std::endl;
89  std::cerr << errorPrefix << errorString << std::endl;
90  }//if don't have valid pointer to mlog service, warn and use cerr
91  return;
92  }//if track was already subtracted then print a warning to the user about that and return
93  m_isSubtracted = true;
94  }
95 
96  void setEExpect(double eExpect, double varEExpect){ m_eExpect = eExpect; m_varEExpect = varEExpect; }
97  double getEExpect() const { return m_eExpect; }
98  double getVarEExpect() const { return m_varEExpect; }
99  int getTrackId() const { return m_trackId; }
100  void setTrackId(int trackId) { m_trackId = trackId; }
101 
102 
103  int getLayerHED() const { return m_layerHED; }
104  void setLayerHED(int layerHED) { m_layerHED = layerHED; }
105 
106  const std::vector<int>& getLayerCellOrderVector() const { return m_layerCellOrderVector; }
107  void setLayerCellOrderVector(const std::vector<int>& layerToStoreVector) { m_layerCellOrderVector = layerToStoreVector; }
108 
109  const std::vector<float>& getRadiusCellOrderVector() const { return m_radiusCellOrderVector; }
110  void setRadiusCellOrderVector(const std::vector<float>& radiusToStoreVector) { m_radiusCellOrderVector = radiusToStoreVector; }
111 
112  const std::vector<float>& getAvgEDensityCellOrderVector() const { return m_avgEdensityCellOrderVector; }
113  void setAvgEDensityCellOrderVector(const std::vector<float>& avgEdensityToStoreVector) { m_avgEdensityCellOrderVector = avgEdensityToStoreVector; }
114 
115 
118 
119  bool isRecovered() const { return m_isRecovered;}
120  void setIsRecovered() { m_isRecovered= true; }
121 
122  void setpull15(double pull15){ m_pull15 = pull15; }
123  double getpull15() const { return m_pull15; }
124 
125 private:
126 
130  int m_type;
131  double m_pull15;
132 
133  int m_layerHED{};
134  std::vector<int> m_layerCellOrderVector;
135  std::vector<float> m_radiusCellOrderVector;
136  std::vector<float> m_avgEdensityCellOrderVector;
137 
138  double m_eExpect;
139  double m_varEExpect;
140 
145  bool m_hasBin;
146 
147  std::vector<double> m_caloDepthArray;
148 
149  std::unique_ptr<eflowTrackCaloPoints> m_trackCaloPoints;
151  std::vector<eflowTrackClusterLink*> m_clusterMatches;
153  std::vector<float> m_deltaRPrimes;
154  std::map<std::string,std::vector<eflowTrackClusterLink*> > m_alternativeClusterMatches;
155 
156  IMessageSvc* m_msgSvc{};
157  std::unique_ptr<MsgStream> m_mlog;
158 
159 public:
161  public:
162  bool operator()(const eflowRecTrack* a, const eflowRecTrack* b) {
163  return CxxUtils::fpcompare::greater(a->getTrack()->pt(),
164  b->getTrack()->pt());
165  }
166  };
167 };
168 
173 public:
174  eflowRecMatchTrack(const eflowRecTrack* efRecTrack): m_efRecTrack(efRecTrack) { assert(m_efRecTrack); }
175  virtual ~eflowRecMatchTrack() { }
176 
179  else {
180  std::cerr << "eflowRecMatchTrack ERROR: Invalid pointer to eflowRecTrack " << std::endl;
181  return eflowEtaPhiPosition(-999.,-999.);
182  }
183  }
184 
185 private:
187 };
188 
190 #include "AthenaKernel/CLASS_DEF.h"
191 
192 class eflowRecTrackContainer : public DataVector< eflowRecTrack >
193 
194 {
195 
196  public:
197 
198  void print() { };
199 
200 };
201 
203 #endif /* EFLOWRECTRACK_H_ */
eflowRecTrack::m_track
const xAOD::TrackParticle * m_track
Definition: eflowRecTrack.h:129
eflowRecTrack::addClusterMatch
void addClusterMatch(eflowTrackClusterLink *clusterMatch)
Definition: eflowRecTrack.h:58
PFMatchInterfaces.h
eflowRecTrack::m_mlog
std::unique_ptr< MsgStream > m_mlog
Definition: eflowRecTrack.h:157
eflowRecTrack::m_isSubtracted
bool m_isSubtracted
Definition: eflowRecTrack.h:142
eflowRecTrack::isRecovered
bool isRecovered() const
Definition: eflowRecTrack.h:119
eflowTrackCaloPoints
This class stores a map of calorimeter layers and track parameters (the result of the track extrapola...
Definition: eflowTrackCaloPoints.h:30
eflowRecTrack::setRadiusCellOrderVector
void setRadiusCellOrderVector(const std::vector< float > &radiusToStoreVector)
Definition: eflowRecTrack.h:110
eflowRecTrack::clearClusterMatches
void clearClusterMatches()
Definition: eflowRecTrack.h:69
eflowRecTrack::getCaloDepthArray
const std::vector< double > & getCaloDepthArray() const
Definition: eflowRecTrack.h:77
eflowRecTrack::getAlternativeClusterMatches
const std::vector< eflowTrackClusterLink * > * getAlternativeClusterMatches(const std::string &key) const
Definition: eflowRecTrack.cxx:92
eflowRecTrack::getRadiusCellOrderVector
const std::vector< float > & getRadiusCellOrderVector() const
Definition: eflowRecTrack.h:109
eflowRecTrack::isInDenseEnvironment
bool isInDenseEnvironment() const
Definition: eflowRecTrack.h:116
eflowRecTrack::setCaloDepthArray
void setCaloDepthArray(const double *depthArray)
Definition: eflowRecTrack.cxx:88
eflowRecTrack::setAvgEDensityCellOrderVector
void setAvgEDensityCellOrderVector(const std::vector< float > &avgEdensityToStoreVector)
Definition: eflowRecTrack.h:113
eflowRecTrack::m_varEExpect
double m_varEExpect
Definition: eflowRecTrack.h:139
eflowRecTrackContainer::print
void print()
Definition: eflowRecTrack.h:198
eflowRecTrack::m_type
int m_type
Definition: eflowRecTrack.h:130
eflowEtaPhiPosition
Definition: eflowUtil.h:85
eflowRecTrack::hasBin
bool hasBin() const
Definition: eflowRecTrack.h:73
eflowRecTrack::getTrackElemLink
ElementLink< xAOD::TrackParticleContainer > getTrackElemLink() const
Definition: eflowRecTrack.h:57
eflowTrackExtrapolatorBaseAlgTool
Definition: eflowTrackExtrapolatorBaseAlgTool.h:28
eflowRecTrack::m_layerCellOrderVector
std::vector< int > m_layerCellOrderVector
Definition: eflowRecTrack.h:134
eflowRecTrack::setIsRecovered
void setIsRecovered()
Definition: eflowRecTrack.h:120
eflowRecTrack::setLayerCellOrderVector
void setLayerCellOrderVector(const std::vector< int > &layerToStoreVector)
Definition: eflowRecTrack.h:107
eflowTrackCaloPoints.h
CxxUtils::fpcompare::greater
bool greater(double a, double b)
Compare two FP numbers, working around x87 precision issues.
Definition: fpcompare.h:140
eflowRecTrack::getLayerHED
int getLayerHED() const
Definition: eflowRecTrack.h:103
eflowRecTrack::setpull15
void setpull15(double pull15)
Definition: eflowRecTrack.h:122
eflowRecTrack::getDRPrimes
const std::vector< float > & getDRPrimes() const
Definition: eflowRecTrack.h:67
eflowRecTrack::setTrackId
void setTrackId(int trackId)
Definition: eflowRecTrack.h:100
eflowRecTrack::setIsInDenseEnvironment
void setIsInDenseEnvironment()
Definition: eflowRecTrack.h:117
eflowRecTrack::m_trackElemLink
ElementLink< xAOD::TrackParticleContainer > m_trackElemLink
Definition: eflowRecTrack.h:128
eflowRecTrack::m_clusterMatches
std::vector< eflowTrackClusterLink * > m_clusterMatches
Definition: eflowRecTrack.h:151
eflowRecTrack::m_eExpect
double m_eExpect
Definition: eflowRecTrack.h:138
eflowRecTrack::m_hasBin
bool m_hasBin
Definition: eflowRecTrack.h:145
eflowRecMatchTrack
This class, which inherits from the pure virtual ITrack, stores a pointer to an eflowRecTrack and has...
Definition: eflowRecTrack.h:172
eflowRecTrack
This class extends the information about a xAOD::Track.
Definition: eflowRecTrack.h:45
eflowRecTrack::getCellSubtractionManager
eflowRingSubtractionManager & getCellSubtractionManager()
Definition: eflowRecTrack.h:62
eflowRecTrack::setSubtracted
void setSubtracted()
Definition: eflowRecTrack.h:81
eflowRecTrack::addDeltaRPrime
void addDeltaRPrime(const float &dRPrime)
Definition: eflowRecTrack.h:59
eflowRecTrack::getClusterMatches
const std::vector< eflowTrackClusterLink * > & getClusterMatches() const
Definition: eflowRecTrack.h:66
eflowRecMatchTrack::~eflowRecMatchTrack
virtual ~eflowRecMatchTrack()
Definition: eflowRecTrack.h:175
eflowRecTrack::getAvgEDensityCellOrderVector
const std::vector< float > & getAvgEDensityCellOrderVector() const
Definition: eflowRecTrack.h:112
PFMatch::ITrack
Definition: PFMatchInterfaces.h:28
python.InDetPriVxFinderConfig.mlog
mlog
Definition: InDetPriVxFinderConfig.py:134
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
eflowRecTrack::isSubtracted
bool isSubtracted() const
Definition: eflowRecTrack.h:79
eflowRecTrack::getpull15
double getpull15() const
Definition: eflowRecTrack.h:123
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
fpcompare.h
Workaround x86 precision issues for FP inequality comparisons.
eflowRecTrack::getTrackId
int getTrackId() const
Definition: eflowRecTrack.h:99
eflowRecTrack::m_ringSubtractionManager
eflowRingSubtractionManager m_ringSubtractionManager
Definition: eflowRecTrack.h:150
eflowRecTrack::m_deltaRPrimes
std::vector< float > m_deltaRPrimes
List of distance measurements between track and cluster used in first pass matching - i....
Definition: eflowRecTrack.h:153
eflowRecTrack::getEExpect
double getEExpect() const
Definition: eflowRecTrack.h:97
eflowRecTrack::SortDescendingPt
Definition: eflowRecTrack.h:160
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
eflowRecTrack::m_layerHED
int m_layerHED
Definition: eflowRecTrack.h:133
eflowRingSubtractionManager.h
eflowRecTrack::~eflowRecTrack
virtual ~eflowRecTrack()
eflowRecTrack::setLayerHED
void setLayerHED(int layerHED)
Definition: eflowRecTrack.h:104
eflowRingSubtractionManager
This stores information, a rank and ring thickness, about cell rings in an ordered way.
Definition: eflowRingSubtractionManager.h:31
eflowRecTrack::operator=
eflowRecTrack & operator=(const eflowRecTrack &originalEflowRecTrack)
Definition: eflowRecTrack.cxx:61
eflowRecTrack::getTrack
const xAOD::TrackParticle * getTrack() const
Definition: eflowRecTrack.h:53
eflowRecTrack::setHasBin
void setHasBin(bool hasBin)
Definition: eflowRecTrack.h:74
eflowRecTrack::getType
int getType() const
Definition: eflowRecTrack.h:64
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
eflowRecMatchTrack::eflowRecMatchTrack
eflowRecMatchTrack(const eflowRecTrack *efRecTrack)
Definition: eflowRecTrack.h:174
eflowRecTrack::m_msgSvc
IMessageSvc * m_msgSvc
Definition: eflowRecTrack.h:156
eflowRecTrack::m_caloDepthArray
std::vector< double > m_caloDepthArray
Definition: eflowRecTrack.h:147
eflowRecTrack::getTrackCaloPoints
const eflowTrackCaloPoints & getTrackCaloPoints() const
Definition: eflowRecTrack.h:55
eflowRecTrack::m_isRecovered
bool m_isRecovered
Tells us whether this track underwent split shower revovery.
Definition: eflowRecTrack.h:144
eflowRecTrackContainer
Definition: eflowRecTrack.h:194
TrackParticle.h
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
eflowCalo::LAYER
LAYER
Definition: eflowCaloRegions.h:36
a
TList * a
Definition: liststreamerinfos.cxx:10
eflowRecTrack::m_pull15
double m_pull15
Definition: eflowRecTrack.h:131
eflowRecTrack::m_radiusCellOrderVector
std::vector< float > m_radiusCellOrderVector
Definition: eflowRecTrack.h:135
eflowRecTrack::getVarEExpect
double getVarEExpect() const
Definition: eflowRecTrack.h:98
eflowTrackCaloPoints::getEtaPhiPos
const eflowEtaPhiPosition & getEtaPhiPos(eflowCalo::LAYER layer) const
Definition: eflowTrackCaloPoints.cxx:86
CLASS_DEF
#define CLASS_DEF(NAME, CID, VERSION)
associate a clid and a version to a type eg
Definition: Control/AthenaKernel/AthenaKernel/CLASS_DEF.h:64
eflowRecTrack::m_alternativeClusterMatches
std::map< std::string, std::vector< eflowTrackClusterLink * > > m_alternativeClusterMatches
Definition: eflowRecTrack.h:154
eflowRecMatchTrack::etaPhiInLayer
virtual eflowEtaPhiPosition etaPhiInLayer(PFMatch::LayerType layer) const
Definition: eflowRecTrack.h:177
eflowRecTrack::setEExpect
void setEExpect(double eExpect, double varEExpect)
Definition: eflowRecTrack.h:96
eflowRecMatchTrack::m_efRecTrack
const eflowRecTrack * m_efRecTrack
Definition: eflowRecTrack.h:186
eflowRecTrack::m_avgEdensityCellOrderVector
std::vector< float > m_avgEdensityCellOrderVector
Definition: eflowRecTrack.h:136
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
eflowRecTrack::SortDescendingPt::operator()
bool operator()(const eflowRecTrack *a, const eflowRecTrack *b)
Definition: eflowRecTrack.h:162
eflowRecTrack::getLayerCellOrderVector
const std::vector< int > & getLayerCellOrderVector() const
Definition: eflowRecTrack.h:106
eflowRecTrack::eflowRecTrack
eflowRecTrack(const ElementLink< xAOD::TrackParticleContainer > &trackElemLink, const ToolHandle< eflowTrackExtrapolatorBaseAlgTool > &theTrackExtrapolatorTool)
Definition: eflowRecTrack.cxx:20
CLASS_DEF.h
macros to associate a CLID to a type
eflowRecTrack::m_isInDenseEnvironment
bool m_isInDenseEnvironment
Definition: eflowRecTrack.h:141
eflowRecTrack::addAlternativeClusterMatch
void addAlternativeClusterMatch(eflowTrackClusterLink *clusterMatch, const std::string &key)
Definition: eflowRecTrack.h:60
TrackParticleContainer.h
eflowRecTrack::m_trackCaloPoints
std::unique_ptr< eflowTrackCaloPoints > m_trackCaloPoints
Definition: eflowRecTrack.h:149
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
TrackParticleContainer.h
eflowRecTrack::m_trackId
int m_trackId
Definition: eflowRecTrack.h:127