ATLAS Offline Software
Loading...
Searching...
No Matches
ITkTrackClusterAssValidation.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 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 <map>
22
23namespace ITk {
24
25 // Class-algorithm for track cluster association validation
26 //
28 {
29
31 // Public methods:
33
34 public:
35
37 // Standard Algotithm methods
39
40 TrackClusterAssValidation(const std::string &name, ISvcLocator *pSvcLocator);
42 StatusCode initialize();
43 StatusCode execute(const EventContext& ctx) const;
44 StatusCode finalize();
45
46 protected:
47
49 // Protected data
51
52 BooleanProperty m_usePix{this, "usePixel", true};
53 BooleanProperty m_useStrip{this, "useStrip", true};
54 BooleanProperty m_useOutliers{this, "useOutliers", false};
55 IntegerProperty m_pdg{this, "pdgParticle", 0};
56
57 mutable std::mutex m_statMutex;
58 mutable std::vector<InDet::TrackCollectionStat_t> m_trackCollectionStat ATLAS_THREAD_SAFE; // Guarded by m_statMutex
59 mutable InDet::EventStat_t m_eventStat ATLAS_THREAD_SAFE; // Guarded by m_statMutex
60
61 UnsignedIntegerProperty m_spcut{this, "MinNumberSpacePoints", 3};
62 FloatProperty m_ptcutmax{this, "MomentumMaxCut", 1.e20};
63 FloatProperty m_rapcut{this, "RapidityCut", 4.0};
64 FloatProperty m_ptcut{this, "MomentumCut", {}};
65 FloatProperty m_rmin{this, "RadiusMin", 0.};
66 FloatProperty m_rmax{this, "RadiusMax", 20.};
67
68 FloatArrayProperty m_etabins{this, "EtaBins", {}};
69 FloatArrayProperty m_ptcuts{this, "PtCuts", {}};
70 UnsignedIntegerArrayProperty m_clcuts{this, "MinNumberClustersCuts", {}};
71
72 float m_tcut = 0;
73
75 {this, "TracksLocation", {"CombinedITkTracks"}};
77 {this, "SpacePointsStripName", "ITkStripSpacePoints"};
79 {this, "SpacePointsPixelName", "ITkPixelSpacePoints"};
81 {this, "SpacePointsOverlapName", "ITkOverlapSpacePoints"};
83 {this, "StripClusterContainer", "ITkStripClusters"};
85 {this, "PixelClusterContainer", "ITkPixelClusters"};
87 {this, "TruthLocationPixel", "PRD_MultiTruthITkPixel"};
89 {this, "TruthLocationStrip", "PRD_MultiTruthITkStrip"};
90
91 // For P->T converter of PixelClusters
92 SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_pixelDetEleCollKey{this, "PixelDetEleCollKey", "ITkPixelDetectorElementCollection", "Key of SiDetectorElementCollection for Pixel"};
93 // For P->T converter of StripClusters
94 SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> m_StripDetEleCollKey{this, "StripDetEleCollKey", "ITkStripDetectorElementCollection", "Key of SiDetectorElementCollection for Strip"};
95
96 struct EventData_t {
97 public:
98
99 EventData_t(unsigned int n_collections)
100 : m_nspacepoints(0),
101 m_nclusters(0),
102 m_nqtracks(0),
103 m_truthPix{},
105 {
106 m_particles.resize(n_collections);
107 m_difference.resize(n_collections);
108 m_tracks.resize(n_collections);
109 m_trackCollectionStat.resize(n_collections);
110 }
111
115
116 std::vector<std::unique_ptr<SG::VarHandleBase> > m_clusterHandles;
117 std::vector<SG::ReadHandle<TrackCollection> > m_trackcontainer;
118 std::vector<SG::ReadHandle<SpacePointContainer> > m_spacePointContainer;
119 std::unique_ptr<SG::ReadHandle<SpacePointOverlapCollection> > m_spacepointsOverlap;
122 std::multimap<int,const Trk::PrepRawData*> m_kinecluster ;
123 std::multimap<int,const Trk::SpacePoint*> m_kinespacepoint ;
124 std::vector<std::list<InDet::PartPropCache> > m_particles ;
125 std::vector<std::list<int> > m_difference ;
126 std::vector<std::multimap<int,int> > m_tracks ;
127 std::vector<InDet::TrackCollectionStat_t> m_trackCollectionStat;
129 };
130
132 // Protected methods
134
136 (const EventContext& ctx,
139 (const EventContext& ctx,
142 (const EventContext& ctx,
147 (const ITk::TrackClusterAssValidation::EventData_t &event_data) const;
148
151 int kine
153 const Trk::PrepRawData*, const Trk::PrepRawData*,
154 int*, int) const;
155 int kine
157 const Trk::PrepRawData*,
158 int*, int) const;
159 static int kine0
161 const Trk::PrepRawData*,
162 int*, int);
163 static bool isTruth
165 const Trk::PrepRawData*);
166 static bool isTheSameDetElement
168 int, const Trk::PrepRawData*);
169 static bool isTheSameDetElement
171 int, const Trk::SpacePoint*);
172
173 static PRD_MultiTruthCollection::const_iterator findTruth
175 const Trk::PrepRawData*, PRD_MultiTruthCollection::const_iterator&) ;
176
177 int charge
179 std::pair<int,const Trk::PrepRawData*>, int&, double&) const;
182 std::pair<int,const Trk::PrepRawData*> pa, int& rap) const
183 { double eta; return charge(event_data, pa, rap, eta); };
184
185 float minpT(float eta) const;
186 unsigned int minclusters(float eta) const;
187
188 MsgStream& dumptools(MsgStream& out, MSG::Level level) const;
189 static MsgStream& dumpevent
190 (MsgStream& out,
192
193 };
194
195 inline float ITk::TrackClusterAssValidation::minpT(float eta) const {
196 float aeta = std::abs(eta);
197 for(int n = int(m_ptcuts.size()-1); n>0; --n) {
198 if(aeta > m_etabins.value().at(n)) return m_ptcuts.value().at(n);
199 }
200 return m_ptcuts.value().at(0);
201 }
202
203 inline unsigned int ITk::TrackClusterAssValidation::minclusters(float eta) const {
204 float aeta = std::abs(eta);
205 for(int n = int(m_clcuts.size()-1); n>0; --n) {
206 if(aeta > m_etabins.value().at(n)) return m_clcuts.value().at(n);
207 }
208 return m_clcuts.value().at(0);
209 }
210
211
212}
213#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