ATLAS Offline Software
Loading...
Searching...
No Matches
SiSpacePointsSeedMaker_HeavyIon.h
Go to the documentation of this file.
1// -*- C++ -*-
2
3/*
4 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5*/
6
8// Header file for class SiSpacePointsSeedMaker_HeavyIon
10// Version 1.0 3/10/2004 I.Gavrilenko
12
13#ifndef SiSpacePointsSeedMaker_HeavyIon_H
14#define SiSpacePointsSeedMaker_HeavyIon_H
15
18
25#include "GaudiKernel/ITHistSvc.h"
26
28// MagField cache
32
33#include <iosfwd>
34#include <list>
35#include <vector>
36
37class MsgStream;
38
39namespace InDet {
40
41 using EventData = SiSpacePointsSeedMakerEventData;
42
53
55 public extends<AthAlgTool, ISiSpacePointsSeedMaker>
56 {
58 // Public methods:
60
61 public:
62
66
68 (const std::string&,const std::string&,const IInterface*);
70 virtual StatusCode initialize() override;
71 virtual StatusCode finalize() override;
73
77
78 virtual void newEvent (const EventContext& ctx, EventData& data, int iteration) const override;
79 virtual void newRegion(const EventContext& ctx, EventData& data,
80 const std::vector<IdentifierHash>& vPixel, const std::vector<IdentifierHash>&vSCT) const override;
81 virtual void newRegion(const EventContext& ctx, EventData& data,
82 const std::vector<IdentifierHash>& vPixel, const std::vector<IdentifierHash>&vSCT,
83 const IRoiDescriptor& iRD) const override;
85
89
90
92 virtual void find2Sp(EventData& data, const std::list<Trk::Vertex>& lv) const override;
93
95 virtual void find3Sp(const EventContext& ctx, EventData& data, const std::list<Trk::Vertex>& lv) const override;
96
99 virtual void find3Sp(const EventContext& ctx, EventData& data, const std::list<Trk::Vertex>& lv, const double* zVertex) const override;
100
101 // with variable number space points with or without vertex constraint
102 // Variable means (2,3,4,....) any number space points
103 virtual void findVSp(const EventContext& ctx, EventData& data, const std::list<Trk::Vertex>& lv) const override;
105
110
111 virtual const SiSpacePointsSeed* next(const EventContext& ctx, EventData& data) const override;
113
114 virtual void writeNtuple(const SiSpacePointsSeed* seed, const Trk::Track* track, int seedType, long eventNumber) const override;
115
116 virtual bool getWriteNtupleBoolProperty() const override;
117
121
122 virtual MsgStream& dump(EventData& data, MsgStream& out) const override;
124
125 private:
135
137 // Private data and methods
139
141
142 SG::ReadHandleKey<SpacePointContainer> m_spacepointsSCT{this, "SpacePointsSCTName", "SCT_SpacePoints", "SCT space points container"};
143 SG::ReadHandleKey<SpacePointContainer> m_spacepointsPixel{this, "SpacePointsPixelName", "PixelSpacePoints", "Pixel space points container"};
144 SG::ReadHandleKey<SpacePointOverlapCollection> m_spacepointsOverlap{this, "SpacePointsOverlapName", "OverlapSpacePoints"};
145 SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};
146 // Read handle for conditions object to get the field cache
147 SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
148 SG::ReadHandleKey<Trk::PRDtoTrackMap> m_prdToTrackMap{this,"PRDtoTrackMap","","option PRD-to-track association"};
150
152
153 BooleanProperty m_pixel{this, "usePixel", true};
154 BooleanProperty m_sct{this, "useSCT", true};
155 BooleanProperty m_useOverlap{this, "useOverlapSpCollection", false};
156 IntegerProperty m_maxsize{this, "maxSize", 20000};
157 IntegerProperty m_maxsizeSP{this, "maxSizeSP", 4000};
158 IntegerProperty m_maxOneSize{this, "maxSeedsForSpacePoint", 6};
159 UnsignedIntegerProperty m_maxNumberVertices{this, "maxNumberVertices", 1};
160 FloatProperty m_r1minv{this, "minVRadius1", 0.};
161 FloatProperty m_r1maxv{this, "maxVRadius1", 60.};
162 FloatProperty m_r2minv{this, "minVRadius2", 70.};
163 FloatProperty m_r2maxv{this, "maxVRadius2", 200.};
164 FloatProperty m_r3minv{this, "minVRadius3", 0.};
165 FloatProperty m_drmin_b{this, "mindRadius", 10.};
166 FloatProperty m_drmin_t{this, "mindRadiusTop", 10.};
167 FloatProperty m_drmax{this, "maxdRadius", 270.};
168 FloatProperty m_zmin{this, "minZ", -250.};
169 FloatProperty m_zmax{this, "maxZ", +250.};
170 FloatProperty m_r_rmin{this, "radMin", 43.};
171 FloatProperty m_r_rmax{this, "radMax", 600.};
172 FloatProperty m_r_rstep{this, "radStep", 2.};
173 FloatProperty m_dzver{this, "maxdZver", 5.};
174 FloatProperty m_dzdrver{this, "maxdZdRver", 0.02};
175 FloatProperty m_diver{this, "maxdImpact", 10.};
176 FloatProperty m_diverpps{this, "maxdImpactPPS", 1.7};
177 FloatProperty m_diversss{this, "maxdImpactSSS", 1000.};
178 BooleanProperty m_useVertexPosition {this, "useVertexPosition", false};
179 BooleanProperty m_writeNtuple {this, "WriteNtuple", false, "Flag to write Validation Ntuples"};
181
183
184 FloatProperty m_etamax{this, "etaMax", 2.7};
185 FloatProperty m_ptmin{this, "pTmin", 500.};
186 FloatProperty m_ptmax{this, "pTmax", std::numeric_limits<float>::max()};
187 FloatProperty m_fieldScale{this, "fieldScale", 1.};
189
191
192 float m_drminv{20.};
194
195 // @name Data members, which are updated only in initialize
197 bool m_initialized{false};
199 int m_r_size{0};
200 int m_fNmax{0};
201 int m_fvNmax{0};
208 float m_dzdrmin{0.};
209 float m_dzdrmax{0.};
210 float m_ipt{0.};
211 float m_iptmax{0.};
212 float m_ipt2{0.};
213 float m_COF{0.};
214 float m_sF{0.};
215 float m_sFv{0.};
217
218 ServiceHandle<ITHistSvc> m_thistSvc {this, "THistSvc", "THistSvc", "Histogramming svc"};
219 TTree* m_outputTree {nullptr};
220
221 mutable std::mutex m_mutex;
222
223 std::string m_treeName {""};
224 std::string m_treeFolder {"/valNtuples/"};
225
226 mutable float m_d0 ATLAS_THREAD_SAFE = 0;
227 mutable float m_z0 ATLAS_THREAD_SAFE = 0;
228 mutable float m_pt ATLAS_THREAD_SAFE = 0;
229 mutable float m_eta ATLAS_THREAD_SAFE = 0;
230 mutable double m_x1 ATLAS_THREAD_SAFE = 0;
231 mutable double m_x2 ATLAS_THREAD_SAFE = 0;
232 mutable double m_x3 ATLAS_THREAD_SAFE = 0;
233 mutable double m_y1 ATLAS_THREAD_SAFE = 0;
234 mutable double m_y2 ATLAS_THREAD_SAFE = 0;
235 mutable double m_y3 ATLAS_THREAD_SAFE = 0;
236 mutable double m_z1 ATLAS_THREAD_SAFE = 0;
237 mutable double m_z2 ATLAS_THREAD_SAFE = 0;
238 mutable double m_z3 ATLAS_THREAD_SAFE = 0;
239 mutable double m_r1 ATLAS_THREAD_SAFE = 0;
240 mutable double m_r2 ATLAS_THREAD_SAFE = 0;
241 mutable double m_r3 ATLAS_THREAD_SAFE = 0;
242 mutable float m_quality ATLAS_THREAD_SAFE = 0;
243 mutable int m_type ATLAS_THREAD_SAFE = 0;
244 mutable double m_dzdr_t ATLAS_THREAD_SAFE = 0;
245 mutable double m_dzdr_b ATLAS_THREAD_SAFE = 0;
246 mutable double m_dr_b ATLAS_THREAD_SAFE = 0;
247 mutable double m_dr_t ATLAS_THREAD_SAFE = 0;
248 mutable bool m_givesTrack ATLAS_THREAD_SAFE = 0;
249 mutable float m_trackPt ATLAS_THREAD_SAFE = 0;
250 mutable float m_trackEta ATLAS_THREAD_SAFE = 0;
251 mutable long m_eventNumber ATLAS_THREAD_SAFE = 0;
252
253
255 // Private methods
258
263
264 MsgStream& dumpConditions(EventData& data, MsgStream& out) const;
265 static MsgStream& dumpEvent(EventData& data, MsgStream& out) ;
266
267 void buildFrameWork();
268 void buildBeamFrameWork(const EventContext& ctx, EventData& data) const;
269
271 (EventData& data, const Trk::SpacePoint*const&) ;
272 static void newSeed
273 (EventData& data,
274 const Trk::SpacePoint*&,const Trk::SpacePoint*&,
275 const float&) ;
276 static void newSeed
277 (EventData& data,
278 const Trk::SpacePoint*&,const Trk::SpacePoint*&,
279 const Trk::SpacePoint*&,const float&) ;
280
281 void newOneSeed
282 (EventData& data,
283 const Trk::SpacePoint*&,const Trk::SpacePoint*&,
284 const Trk::SpacePoint*&,const float&,const float&) const;
285 static void fillSeeds(EventData& data) ;
286
287 void fillLists(EventData& data) const;
288 static void erase(EventData& data) ;
289 void production2Sp(EventData& data) const;
290 void production3Sp(EventData& data) const;
291 void production3Sp
292 (EventData& data,
293 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
294 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
295 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
296 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
297 int,int,int&) const;
299 (EventData& data,
300 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
301 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
302 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
303 std::vector<InDet::SiSpacePointForSeed*>::iterator*,
304 int,int,int&) const;
305
306 bool newVertices(EventData& data, const std::list<Trk::Vertex>&) const;
307 void findNext(EventData& data) const;
308 bool isZCompatible(EventData& data, float&,float&,float&) const;
309 static float dZVertexMin(EventData& data, float&) ;
310 static void convertToBeamFrameWork(EventData& data, const Trk::SpacePoint*const&,std::array<float, 3>&) ;
311
312 void initializeEventData(EventData& data) const;
313
314 bool isUsed(const Trk::SpacePoint* sp, const Trk::PRDtoTrackMap &prd_to_track_map) const;
315 };
316
317 inline
319 {
320 const Trk::PrepRawData* d = sp->clusterList().first;
321 if (!d || !prd_to_track_map.isUsed(*d)) return false;
322 d = sp->clusterList().second;
323 if (!d || prd_to_track_map.isUsed(*d)) return true;
324 return false;
325 }
326
327} // end of name space
328
329#endif // SiSpacePointsSeedMaker_HeavyIon_H
static Double_t sp
Describes the API of the Region of Ineterest geometry.
virtual void writeNtuple(const SiSpacePointsSeed *seed, const Trk::Track *track, int seedType, long eventNumber) const override
virtual void newRegion(const EventContext &ctx, EventData &data, const std::vector< IdentifierHash > &vPixel, const std::vector< IdentifierHash > &vSCT) const override
void newOneSeed(EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &, const float &) const
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
static MsgStream & dumpEvent(EventData &data, MsgStream &out)
bool isUsed(const Trk::SpacePoint *sp, const Trk::PRDtoTrackMap &prd_to_track_map) const
SiSpacePointsSeedMaker_HeavyIon(const std::string &, const std::string &, const IInterface *)
bool newVertices(EventData &data, const std::list< Trk::Vertex > &) const
bool isZCompatible(EventData &data, float &, float &, float &) const
void buildBeamFrameWork(const EventContext &ctx, EventData &data) const
virtual void newEvent(const EventContext &ctx, EventData &data, int iteration) const override
SG::ReadHandleKey< SpacePointOverlapCollection > m_spacepointsOverlap
virtual const SiSpacePointsSeed * next(const EventContext &ctx, EventData &data) const override
virtual ~SiSpacePointsSeedMaker_HeavyIon()=default
virtual void find2Sp(EventData &data, const std::list< Trk::Vertex > &lv) const override
with two space points with or without vertex constraint
static void convertToBeamFrameWork(EventData &data, const Trk::SpacePoint *const &, std::array< float, 3 > &)
static void newSeed(EventData &data, const Trk::SpacePoint *&, const Trk::SpacePoint *&, const float &)
static float dZVertexMin(EventData &data, float &)
MsgStream & dumpConditions(EventData &data, MsgStream &out) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< SpacePointContainer > m_spacepointsSCT
virtual void findVSp(const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
SG::ReadHandleKey< SpacePointContainer > m_spacepointsPixel
void production3SpNoVertex(EventData &data, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, std::vector< InDet::SiSpacePointForSeed * >::iterator *, int, int, int &) const
static SiSpacePointForSeed * newSpacePoint(EventData &data, const Trk::SpacePoint *const &)
SiSpacePointsSeedMaker_HeavyIon & operator=(const SiSpacePointsSeedMaker_HeavyIon &)=delete
SiSpacePointsSeedMaker_HeavyIon(const SiSpacePointsSeedMaker_HeavyIon &)=delete
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
virtual void find3Sp(const EventContext &ctx, EventData &data, const std::list< Trk::Vertex > &lv) const override
with three space points with or without vertex constraint
SiSpacePointsSeedMakerEventData EventData
Property holding a SG store/key/clid from which a ReadHandle is made.
bool isUsed(const PrepRawData &prd) const
does this PRD belong to at least one track?
Primary Vertex Finder.
-event-from-file