ATLAS Offline Software
Loading...
Searching...
No Matches
ITkTrackClusterAssValidation.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#ifndef ITkTrackClusterAssValidation_H
7#define ITkTrackClusterAssValidation_H
8
20#include <string>
21#include <cmath>
22#include <map>
23
24namespace ITk {
25
26 // Class-algorithm for track cluster association validation
27 //
29 {
30
32 // Public methods:
34
35 public:
36
38 // Standard Algotithm methods
40
41 TrackClusterAssValidation(const std::string &name, ISvcLocator *pSvcLocator);
43 StatusCode initialize();
44 StatusCode execute(const EventContext& ctx) const;
45 StatusCode finalize();
46
47 protected:
48
50 // Protected data
52
53 BooleanProperty m_usePix{this, "usePixel", true};
54 BooleanProperty m_useStrip{this, "useStrip", true};
55 BooleanProperty m_useOutliers{this, "useOutliers", false};
56 IntegerProperty m_pdg{this, "pdgParticle", 0};
57
58 mutable std::mutex m_statMutex;
59 mutable std::vector<InDet::TrackCollectionStat_t> m_trackCollectionStat ATLAS_THREAD_SAFE; // Guarded by m_statMutex
60 mutable InDet::EventStat_t m_eventStat ATLAS_THREAD_SAFE; // Guarded by m_statMutex
61
62 UnsignedIntegerProperty m_spcut{this, "MinNumberSpacePoints", 3};
63 FloatProperty m_ptcutmax{this, "MomentumMaxCut", 1.e20};
64 FloatProperty m_rapcut{this, "RapidityCut", 4.0};
65 FloatProperty m_ptcut{this, "MomentumCut", {}};
66 FloatProperty m_rmin{this, "RadiusMin", 0.};
67 FloatProperty m_rmax{this, "RadiusMax", 20.};
68
69 FloatArrayProperty m_etabins{this, "EtaBins", {}};
70 FloatArrayProperty m_ptcuts{this, "PtCuts", {}};
71 UnsignedIntegerArrayProperty m_clcuts{this, "MinNumberClustersCuts", {}};
72
73 float m_tcut = 0;
74
76 {this, "TracksLocation", {"CombinedITkTracks"}};
78 {this, "SpacePointsStripName", "ITkStripSpacePoints"};
80 {this, "SpacePointsPixelName", "ITkPixelSpacePoints"};
82 {this, "SpacePointsOverlapName", "ITkOverlapSpacePoints"};
84 {this, "StripClusterContainer", "ITkStripClusters"};
86 {this, "PixelClusterContainer", "ITkPixelClusters"};
88 {this, "TruthLocationPixel", "PRD_MultiTruthITkPixel"};
90 {this, "TruthLocationStrip", "PRD_MultiTruthITkStrip"};
91
92 // For P->T converter of PixelClusters
93 SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "ITkPixelDetectorElementCollection", "Key of SiDetectorElementCollection for Pixel"};
94 // For P->T converter of StripClusters
95 SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_StripDetEleCollKey{this, "StripDetEleCollKey", "ITkStripDetectorElementCollection", "Key of SiDetectorElementCollection for Strip"};
96
97 struct EventData_t {
98 public:
99
100 EventData_t(unsigned int n_collections)
101 : m_nspacepoints(0),
102 m_nclusters(0),
103 m_nqtracks(0),
104 m_truthPix{},
106 {
107 m_particles.resize(n_collections);
108 m_difference.resize(n_collections);
109 m_tracks.resize(n_collections);
110 m_trackCollectionStat.resize(n_collections);
111 }
112
116
117 std::vector<std::unique_ptr<SG::VarHandleBase> > m_clusterHandles;
118 std::vector<SG::ReadHandle<TrackCollection> > m_trackcontainer;
119 std::vector<SG::ReadHandle<SpacePointContainer> > m_spacePointContainer;
120 std::unique_ptr<SG::ReadHandle<SpacePointOverlapCollection> > m_spacepointsOverlap;
123 std::multimap<int,const Trk::PrepRawData*> m_kinecluster ;
124 std::multimap<int,const Trk::SpacePoint*> m_kinespacepoint ;
125 std::vector<std::list<InDet::PartPropCache> > m_particles ;
126 std::vector<std::list<int> > m_difference ;
127 std::vector<std::multimap<int,int> > m_tracks ;
128 std::vector<InDet::TrackCollectionStat_t> m_trackCollectionStat;
130 };
131
133 // Protected methods
135
137 (const EventContext& ctx,
140 (const EventContext& ctx,
143 (const EventContext& ctx,
148 (const ITk::TrackClusterAssValidation::EventData_t &event_data) const;
149
152 int kine
154 const Trk::PrepRawData*, const Trk::PrepRawData*,
155 int*, int) const;
156 int kine
158 const Trk::PrepRawData*,
159 int*, int) const;
160 static int kine0
162 const Trk::PrepRawData*,
163 int*, int);
164 static bool isTruth
166 const Trk::PrepRawData*);
167 static bool isTheSameDetElement
169 int, const Trk::PrepRawData*);
170 static bool isTheSameDetElement
172 int, const Trk::SpacePoint*);
173
174 static PRD_MultiTruthCollection::const_iterator findTruth
176 const Trk::PrepRawData*, PRD_MultiTruthCollection::const_iterator&) ;
177
178 int charge
180 std::pair<int,const Trk::PrepRawData*>, int&, double&) const;
183 std::pair<int,const Trk::PrepRawData*> pa, int& rap) const
184 { double eta; return charge(event_data, pa, rap, eta); };
185
186 float minpT(float eta) const;
187 unsigned int minclusters(float eta) const;
188
189 MsgStream& dumptools(MsgStream& out, MSG::Level level) const;
190 static MsgStream& dumpevent
191 (MsgStream& out,
193
194 };
195
196 inline float ITk::TrackClusterAssValidation::minpT(float eta) const {
197 float aeta = std::abs(eta);
198 for(int n = int(m_ptcuts.size()-1); n>0; --n) {
199 if(aeta > m_etabins.value().at(n)) return m_ptcuts.value().at(n);
200 }
201 return m_ptcuts.value().at(0);
202 }
203
204 inline unsigned int ITk::TrackClusterAssValidation::minclusters(float eta) const {
205 float aeta = std::abs(eta);
206 for(int n = int(m_clcuts.size()-1); n>0; --n) {
207 if(aeta > m_etabins.value().at(n)) return m_clcuts.value().at(n);
208 }
209 return m_clcuts.value().at(0);
210 }
211
212
213}
214#endif // TrackClusterAssValidation_H
Scalar eta() const
pseudorapidity method
Property holding a SG store/key/clid from which a ReadHandle is made.
Define macros for attributes used to control the static checker.
An algorithm that can be simultaneously executed in multiple threads.
static int kine0(const ITk::TrackClusterAssValidation::EventData_t &event_data, const Trk::PrepRawData *, int *, int)
SG::ReadHandleKey< PRD_MultiTruthCollection > m_truth_locationPixel
int charge(const ITk::TrackClusterAssValidation::EventData_t &event_data, std::pair< int, const Trk::PrepRawData * >, int &, double &) const
StatusCode execute(const EventContext &ctx) const
static PRD_MultiTruthCollection::const_iterator findTruth(const ITk::TrackClusterAssValidation::EventData_t &event_data, const Trk::PrepRawData *, PRD_MultiTruthCollection::const_iterator &)
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_StripDetEleCollKey
bool noReconstructedParticles(const ITk::TrackClusterAssValidation::EventData_t &event_data) const
int charge(const ITk::TrackClusterAssValidation::EventData_t &event_data, std::pair< int, const Trk::PrepRawData * > pa, int &rap) const
static MsgStream & dumpevent(MsgStream &out, const ITk::TrackClusterAssValidation::EventData_t &event_data)
void newClustersEvent(const EventContext &ctx, ITk::TrackClusterAssValidation::EventData_t &event_data) const
TrackClusterAssValidation(const std::string &name, ISvcLocator *pSvcLocator)
void tracksComparison(const EventContext &ctx, ITk::TrackClusterAssValidation::EventData_t &event_data) const
MsgStream & dumptools(MsgStream &out, MSG::Level level) const
int qualityTracksSelection(ITk::TrackClusterAssValidation::EventData_t &event_data) const
SG::ReadHandleKey< InDet::SiClusterContainer > m_clustersPixelname
SG::ReadHandleKey< PRD_MultiTruthCollection > m_truth_locationStrip
static bool isTruth(const ITk::TrackClusterAssValidation::EventData_t &, const Trk::PrepRawData *)
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_pixelDetEleCollKey
SG::ReadHandleKey< SpacePointContainer > m_spacepointsStripname
static bool isTheSameDetElement(const ITk::TrackClusterAssValidation::EventData_t &event_data, int, const Trk::PrepRawData *)
std::vector< InDet::TrackCollectionStat_t > m_trackCollectionStat ATLAS_THREAD_SAFE
SG::ReadHandleKey< SpacePointContainer > m_spacepointsPixelname
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlapname
SG::ReadHandleKey< InDet::SiClusterContainer > m_clustersStripname
void newSpacePointsEvent(const EventContext &ctx, ITk::TrackClusterAssValidation::EventData_t &event_data) const
SG::ReadHandleKeyArray< TrackCollection > m_tracklocation
int kine(const ITk::TrackClusterAssValidation::EventData_t &event_data, const Trk::PrepRawData *, const Trk::PrepRawData *, int *, int) const
unsigned int minclusters(float eta) const
void efficiencyReconstruction(ITk::TrackClusterAssValidation::EventData_t &event_data) const
A PRD is mapped onto all contributing particles.
Property holding a SG store/key/clid from which a ReadHandle is made.
HandleKeyArray< ReadHandle< T >, ReadHandleKey< T >, Gaudi::DataHandle::Reader > ReadHandleKeyArray
std::multimap< int, const Trk::SpacePoint * > m_kinespacepoint
std::vector< std::list< InDet::PartPropCache > > m_particles
std::vector< SG::ReadHandle< TrackCollection > > m_trackcontainer
std::vector< SG::ReadHandle< SpacePointContainer > > m_spacePointContainer
std::vector< std::multimap< int, int > > m_tracks
std::vector< InDet::TrackCollectionStat_t > m_trackCollectionStat
std::unique_ptr< SG::ReadHandle< SpacePointOverlapCollection > > m_spacepointsOverlap
std::multimap< int, const Trk::PrepRawData * > m_kinecluster
std::vector< std::unique_ptr< SG::VarHandleBase > > m_clusterHandles