ATLAS Offline Software
Loading...
Searching...
No Matches
SiTrackMaker_xk.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 SiTrackMaker_xk
10// Version 1.0 22/03/2005 I.Gavrilenko
12
13#ifndef SiTrackMaker_xk_H
14#define SiTrackMaker_xk_H
15
18
28#include "GaudiKernel/ToolHandle.h"
29
31// MagField cache
35
36#include <array>
37#include <iosfwd>
38#include <list>
39#include <vector>
40#include <mutex>
41
42class MsgStream;
43
44namespace InDet{
45
47
62
63 class SiTrackMaker_xk final:
64 public extends<AthAlgTool, ISiTrackMaker>
65 {
66
68 // Public methods:
70
71 public:
72
76
78 (const std::string&,const std::string&,const IInterface*);
79 virtual ~SiTrackMaker_xk() = default;
80 virtual StatusCode initialize() override;
81 virtual StatusCode finalize() override;
83
87
88 virtual std::list<Trk::Track*>
89 getTracks(const EventContext& ctx, SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const override;
90
91 virtual std::list<Trk::Track*>
92 getTracks(const EventContext& ctx, SiTrackMakerEventData_xk& data, const Trk::TrackParameters& Tp, const std::vector<Amg::Vector3D>& Gp) const override;
93
94 virtual void newEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const override;
95 virtual void newTrigEvent(const EventContext& ctx, SiTrackMakerEventData_xk& data, bool PIX, bool SCT) const override;
96
97 virtual void endEvent(SiTrackMakerEventData_xk& data) const override;
99
103
104 MsgStream& dump(SiTrackMakerEventData_xk& data, MsgStream& out) const override;
106
107 private:
108
110
111 SiTrackMaker_xk() = delete;
115
117 // Protected Data
119
121
122 ToolHandle<InDet::ISiDetElementsRoadMaker> m_roadmaker{this, "RoadTool", "InDet::SiDetElementsRoadMaker_xk"};
123 ToolHandle<InDet::ISiCombinatorialTrackFinder> m_tracksfinder{this, "CombinatorialTrackFinder", "InDet::SiCombinatorialTrackFinder_xk"};
124 ToolHandle<ITrigInDetTrackFollowingTool> m_trigInDetTrackFollowingTool{this, "TrigTrackFollowingTool", "TrigInDetTrackFollowingTool"};
125 ToolHandle<ITrigInDetRoadPredictorTool> m_trigInDetRoadPredictorTool{this, "TrigInDetRoadPredictorTool", "TrigInDetRoadPredictorTool_FTF"};
126 ToolHandle<InDet::ISeedToTrackConversionTool> m_seedtrack{this, "SeedToTrackConversion", "InDet::SeedToTrackConversionTool"};
128
130
131 SG::ReadCondHandleKey<InDet::BeamSpotData> m_beamSpotKey{this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot"};
132 SG::ReadCondHandleKey<AtlasFieldCacheCondObj> m_fieldCondObjInputKey {this, "AtlasFieldCacheCondObj", "fieldCondObj", "Name of the Magnetic Field conditions object key"};
133 SG::ReadHandleKey<ROIPhiRZContainer> m_caloCluster{this, "EMROIPhiRZContainer", ""};
134 SG::ReadHandleKey<ROIPhiRZContainer> m_caloHad{this, "HadROIPhiRZContainer", ""};
136
138
139 BooleanProperty m_seedsfilter{this, "UseSeedFilter", true, "Use seed filter"};
140 StringProperty m_fieldmode{this, "MagneticFieldMode", "MapSolenoid", "Mode of magnetic field"};
141 StringProperty m_patternName{this, "TrackPatternRecoInfo", "SiSPSeededFinder", "Name of the pattern recognition"};
142 BooleanProperty m_usePix{this, "usePixel", true, "flags to set whether to use pixel/sct cluster, irrespective of what is in event"};
143 BooleanProperty m_useSct{this, "useSCT", true};
144 BooleanProperty m_useassoTool{this, "UseAssociationTool", false, "Use prd-track association tool"};
145 BooleanProperty m_cosmicTrack{this, "CosmicTrack", false, "Is it cosmic track"};
146 BooleanProperty m_multitracks{this, "doMultiTracksProd", false};
147 BooleanProperty m_useBremModel{this, "useBremModel", false};
148 BooleanProperty m_useCaloSeeds{this, "doCaloSeededBrem", false};
149 BooleanProperty m_useSSSfilter{this, "useSSSseedsFilter", true};
150 BooleanProperty m_useHClusSeed{this, "doHadCaloSeedSSS", false, "Hadronic Calorimeter Seeds"};
151 BooleanProperty m_ITKGeometry{this, "ITKGeometry", false, "ITK geometry"};
152 BooleanProperty m_seedsegmentsWrite{this, "SeedSegmentsWrite", false, "Call seed to track conversion"};
153 BooleanProperty m_useTrigTrackFollowingTool{this, "useTrigTrackFollowingTool", false, "Option to use TrigInDetTrackFollowingTool instead of SiCombinatorialTrackFinder_xk"};
154 BooleanProperty m_useTrigInDetRoadPredictorTool{this, "useTrigInDetRoadPredictorTool", false, "Option to use TrigInDetRoadPredictorTool instead of ISiDetElementsRoadMaker"};
155 BooleanProperty m_LRTmode{this, "LRTMode", false};
156 DoubleProperty m_xi2max{this, "Xi2max", 15., "max Xi2 for updators"};
157 DoubleProperty m_xi2maxNoAdd{this, "Xi2maxNoAdd", 35., "max Xi2 for clusters"};
158 DoubleProperty m_xi2maxlink{this, "Xi2maxlink", 200., "max Xi2 for clusters"};
159 DoubleProperty m_pTmin{this, "pTmin", 500., "min pT"};
160 DoubleProperty m_pTminBrem{this, "pTminBrem", 1000., "min pT for Brem mode"};
161 DoubleProperty m_distmax{this, "MaxDistanceForSCTsp", 5.};
162 DoubleProperty m_xi2multitracks{this, "Xi2maxMultiTracks", 3., "max Xi2 for multi tracks"};
163 IntegerProperty m_nholesmax{this, "nHolesMax", 2, "Max number holes"};
164 IntegerProperty m_dholesmax{this, "nHolesGapMax", 2, "Max holes gap"};
165 IntegerProperty m_nclusmin{this, "nClustersMin", 6, "Min number clusters"};
166 IntegerProperty m_nwclusmin{this, "nWeightedClustersMin", 6, "Min umber weighted clusters(pix=2 sct=1)"};
167 IntegerProperty m_trackletPoints{this, "trackletPoints", 1, "Select which tracklet points to use"};
168 DoubleProperty m_phiWidth{this, "phiWidth", 0.3};
169 DoubleProperty m_etaWidth{this, "etaWidth", 0.3};
170 DoubleArrayProperty m_etabins{this, "etaBins", {}, "eta bins"};
171 DoubleArrayProperty m_ptbins{this, "pTBins", {}, "pT bins"};
173
175
177 bool m_heavyion{false}; // Is it heavy ion events
180
182 // Counters
184
185 mutable std::mutex m_counterMutex;
186 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_totalInputSeeds ATLAS_THREAD_SAFE {};
187 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_totalUsedSeeds ATLAS_THREAD_SAFE {};
188 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_totalNoTrackPar ATLAS_THREAD_SAFE {};
189 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_totalBremSeeds ATLAS_THREAD_SAFE {};
190 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_twoClusters ATLAS_THREAD_SAFE {};
191 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_wrongRoad ATLAS_THREAD_SAFE {};
192 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_wrongInit ATLAS_THREAD_SAFE {};
193 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_noTrack ATLAS_THREAD_SAFE {};
194 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_notNewTrack ATLAS_THREAD_SAFE {};
195 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_bremAttempt ATLAS_THREAD_SAFE {};
196 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_outputTracks ATLAS_THREAD_SAFE {};
197 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_extraTracks ATLAS_THREAD_SAFE {};
198 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_bremTracks ATLAS_THREAD_SAFE {};
199 mutable std::array<std::atomic<int>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_seedsWithTrack ATLAS_THREAD_SAFE {};
200 mutable std::array<std::atomic<double>,SiCombinatorialTrackFinderData_xk::kNSeedTypes> m_deSize ATLAS_THREAD_SAFE {};
201
202 mutable std::vector<std::vector<double>> m_usedSeedsEta ATLAS_THREAD_SAFE;
203 mutable std::vector<std::vector<double>> m_seedsWithTracksEta ATLAS_THREAD_SAFE;
204
222
227
229
231 // Methods
233
234 std::unique_ptr<Trk::TrackParameters> getAtaPlane(
235 MagField::AtlasFieldCache& fieldCache,
237 bool sss,
238 const std::vector<const Trk::SpacePoint*>& SP,
239 const EventContext& ctx) const;
241 const Trk::SpacePoint& s1,
242 const Trk::SpacePoint& s2,
243 double* p0,
244 double* p1,
245 double* p2) const;
246 bool globalPosition(const Trk::SpacePoint& sp, const double* dir, double* p) const;
247 static void globalDirections(const double* p0, const double* p1, const double* p2, double* d0, double* d1, double* d2) ;
248 InDet::TrackQualityCuts setTrackQualityCuts(bool simpleTrack) const;
250 std::vector<const InDetDD::SiDetectorElement*>& DE) ;
251 bool newSeed(SiTrackMakerEventData_xk& data, const std::vector<const Trk::SpacePoint*>& Sp) const;
252 static int kindSeed(const std::vector<const Trk::SpacePoint*>& Sp) ;
253 static int rapidity(const std::vector<const Trk::SpacePoint*>& Sp) ;
258 double pTmin(double eta) const;
259
260 MsgStream& dumpStatistics(MsgStream &out) const;
261 MsgStream& dumpconditions(MsgStream& out) const;
262 static MsgStream& dumpevent(SiTrackMakerEventData_xk& data, MsgStream& out) ;
263
265 template <typename T, size_t N,size_t M> void resetCounter(std::array<std::array<T,M>,N> & a) const{
266 for (auto & subarr : a) resetCounter(subarr);
267 }
268 template <typename T, size_t N> void resetCounter(std::array<T,N> & a) const{
269 std::fill(a.begin(),a.end(),0);
270 }
271 };
272
273} // end of name space
274
275#endif // SiTrackMaker_xk_H
Scalar eta() const
pseudorapidity method
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t sp
static Double_t s0
static Double_t a
static Double_t Tp(Double_t *t, Double_t *par)
InDet::SiTrackMakerEventData_xk holds event dependent data used by ISiTrackMaker.
bool globalPositions(const Trk::SpacePoint &s0, const Trk::SpacePoint &s1, const Trk::SpacePoint &s2, double *p0, double *p1, double *p2) const
BooleanProperty m_useassoTool
DoubleArrayProperty m_etabins
BooleanProperty m_ITKGeometry
SG::ReadHandleKey< ROIPhiRZContainer > m_caloCluster
BooleanProperty m_seedsfilter
DoubleProperty m_xi2maxNoAdd
ToolHandle< InDet::ISiCombinatorialTrackFinder > m_tracksfinder
BooleanProperty m_multitracks
void resetCounter(std::array< std::array< T, M >, N > &a) const
helper for working with the stat arrays
SiTrackMaker_xk(const SiTrackMaker_xk &)=delete
static void globalDirections(const double *p0, const double *p1, const double *p2, double *d0, double *d1, double *d2)
Here, we derive the local track direction in the space-points as the tangents to the estimated trajec...
virtual std::list< Trk::Track * > getTracks(const EventContext &ctx, SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const override
bool newSeed(SiTrackMakerEventData_xk &data, const std::vector< const Trk::SpacePoint * > &Sp) const
virtual void newEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
double pTmin(double eta) const
BooleanProperty m_LRTmode
static MsgStream & dumpevent(SiTrackMakerEventData_xk &data, MsgStream &out)
SiTrackMaker_xk & operator=(const SiTrackMaker_xk &)=delete
ToolHandle< InDet::ISeedToTrackConversionTool > m_seedtrack
std::unique_ptr< Trk::TrackParameters > getAtaPlane(MagField::AtlasFieldCache &fieldCache, SiTrackMakerEventData_xk &data, bool sss, const std::vector< const Trk::SpacePoint * > &SP, const EventContext &ctx) const
virtual ~SiTrackMaker_xk()=default
DoubleProperty m_xi2multitracks
StringProperty m_patternName
BooleanProperty m_useTrigInDetRoadPredictorTool
BooleanProperty m_seedsegmentsWrite
IntegerProperty m_dholesmax
std::vector< statAllTypes > m_indexToEnum
std::array< std::atomic< int >, SiCombinatorialTrackFinderData_xk::kNSeedTypes > m_totalInputSeeds ATLAS_THREAD_SAFE
BooleanProperty m_useBremModel
MsgStream & dumpStatistics(MsgStream &out) const
virtual void newTrigEvent(const EventContext &ctx, SiTrackMakerEventData_xk &data, bool PIX, bool SCT) const override
virtual StatusCode finalize() override
static void clusterTrackMap(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
ToolHandle< InDet::ISiDetElementsRoadMaker > m_roadmaker
DoubleProperty m_xi2maxlink
BooleanProperty m_cosmicTrack
bool globalPosition(const Trk::SpacePoint &sp, const double *dir, double *p) const
This is a refinement of the global position for strip space-points.
virtual StatusCode initialize() override
SG::ReadHandleKey< ROIPhiRZContainer > m_caloHad
IntegerProperty m_nholesmax
BooleanProperty m_useTrigTrackFollowingTool
static int rapidity(const std::vector< const Trk::SpacePoint * > &Sp)
bool isCaloCompatible(SiTrackMakerEventData_xk &data) const
static int kindSeed(const std::vector< const Trk::SpacePoint * > &Sp)
BooleanProperty m_useCaloSeeds
ToolHandle< ITrigInDetRoadPredictorTool > m_trigInDetRoadPredictorTool
Trk::MagneticFieldMode m_fieldModeEnum
IntegerProperty m_nwclusmin
ToolHandle< ITrigInDetTrackFollowingTool > m_trigInDetTrackFollowingTool
SiTrackMaker_xk(const std::string &, const std::string &, const IInterface *)
void resetCounter(std::array< T, N > &a) const
IntegerProperty m_trackletPoints
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
bool isHadCaloCompatible(SiTrackMakerEventData_xk &data) const
MsgStream & dumpconditions(MsgStream &out) const
InDet::TrackQualityCuts setTrackQualityCuts(bool simpleTrack) const
BooleanProperty m_useSSSfilter
virtual void endEvent(SiTrackMakerEventData_xk &data) const override
static bool isNewTrack(SiTrackMakerEventData_xk &data, Trk::Track *Tr)
static void detectorElementsSelection(SiTrackMakerEventData_xk &data, std::vector< const InDetDD::SiDetectorElement * > &DE)
IntegerProperty m_nclusmin
BooleanProperty m_useHClusSeed
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
DoubleArrayProperty m_ptbins
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Property holding a SG store/key/clid from which a ReadHandle is made.
Contains information about the 'fitter' of this track.
Primary Vertex Finder.
MagneticFieldMode
MagneticFieldMode describing the field setup within a volume.
@ FullField
Field is set to be realistic, but within a given Volume.
ParametersBase< TrackParametersDim, Charged > TrackParameters
-event-from-file