ATLAS Offline Software
Loading...
Searching...
No Matches
TrigInDetR3TrackSeedingTool Class Reference

#include <TrigInDetR3TrackSeedingTool.h>

Inheritance diagram for TrigInDetR3TrackSeedingTool:
Collaboration diagram for TrigInDetR3TrackSeedingTool:

Public Member Functions

 TrigInDetR3TrackSeedingTool (const std::string &, const std::string &, const IInterface *)
virtual ~TrigInDetR3TrackSeedingTool ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual TrigInDetTrackSeedingResult findSeeds (const IRoiDescriptor &, std::vector< TrigInDetTracklet > &, const EventContext &) const override final
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const
 DeclareInterfaceID (ITrigInDetTrackSeedingTool, 1, 0)

Protected Types

typedef TrigFTF_GNN_Node GNN_Node
typedef TrigFTF_GNN_DataStorage GNN_DataStorage
typedef TrigFTF_GNN_Edge GNN_Edge
typedef TrigFTF_GNNR3_Node GNNR3_Node
typedef TrigFTF_GNNR3_DataStorage GNNR3_DataStorage
typedef TrigFTF_GNNR3_Edge GNNR3_Edge

Protected Member Functions

void createGraphNodes (const SpacePointCollection *, std::vector< GNNR3_Node > &, std::vector< const Trk::SpacePoint * > &, unsigned short, float, float) const
std::pair< int, int > buildTheGraph (const IRoiDescriptor &, const std::unique_ptr< GNN_DataStorage > &, std::vector< GNN_Edge > &) const
std::pair< int, int > buildTheGraph (const IRoiDescriptor &, const std::unique_ptr< GNNR3_DataStorage > &, std::vector< GNNR3_Edge > &) const
int runCCA (int, std::vector< GNN_Edge > &) const
int runCCA (int, std::vector< GNNR3_Edge > &) const
void extractSeedsFromTheGraph (int, int, int, std::vector< GNN_Edge > &, std::vector< std::tuple< float, int, std::vector< unsigned int > > > &) const
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
BooleanProperty m_usePixelSpacePoints {this, "UsePixelSpacePoints", true}
BooleanProperty m_useSctSpacePoints {this, "UseSctSpacePoints", false}
SG::ReadHandleKey< SpacePointContainerm_sctSpacePointsContainerKey {this, "SCT_SP_ContainerName", "ITkStripTrigSpacePoints"}
SG::ReadHandleKey< SpacePointContainerm_pixelSpacePointsContainerKey {this, "PixelSP_ContainerName", "ITkPixelTrigSpacePoints"}
ToolHandle< IRegSelToolm_regsel_pix { this, "RegSelTool_Pixel", "RegSelTool/RegSelTool_Pixel" }
 region selector tools
ToolHandle< IRegSelToolm_regsel_sct { this, "RegSelTool_SCT", "RegSelTool/RegSelTool_SCT" }
BooleanProperty m_useGPU {this, "UseGPU", false}
ToolHandle< ITrigL2LayerNumberToolm_layerNumberTool {this, "layerNumberTool", "TrigL2LayerNumberToolITk"}
const AtlasDetectorIDm_atlasId = nullptr
const SCT_IDm_sctId = nullptr
const PixelIDm_pixelId = nullptr
BooleanProperty m_filter_phi {this, "DoPhiFiltering", true}
BooleanProperty m_useBeamTilt {this, "UseBeamTilt", false}
BooleanProperty m_LRTmode {this, "LRTMode",false}
BooleanProperty m_useML {this, "useML", true}
UnsignedIntegerProperty m_nMaxPhiSlice {this, "nMaxPhiSlice", 53}
BooleanProperty m_doubletFilterRZ {this, "Doublet_FilterRZ", true}
BooleanProperty m_useEtaBinning {this, "UseEtaBinning", true}
BooleanProperty m_matchBeforeCreate {this, "MatchBeforeCreate", true}
FloatProperty m_minPt {this, "pTmin", 1000.0}
FloatProperty m_etaBinOverride {this, "etaBin", 0.0f, "specify non-zero to override eta bin width from connection file (default 0.2 in createLinkingScheme.py)"}
IntegerProperty m_nMaxEdges {this, "MaxGraphEdges", 2000000}
IntegerProperty m_nBufferEdges {this, "BufferEdges", 200000}
StringProperty m_connectionFile {this, "ConnectionFileName", "binTables_ITK_RUN4.txt"}
StringProperty m_lutFile {this, "MLpredictorLutFileName", "gbts_ml_pixel_barrel_loose.lut"}
BooleanProperty m_useGPUseedExtraction {this, "UseGPUseedExtraction", true}
BooleanProperty m_useOldTunings {this, "UseOldTunings", false}
FloatProperty m_tau_ratio_cut {this, "tau_ratio_cut", 0.007}
float m_phiSliceWidth = 0.
std::unique_ptr< GNN_FasTrackConnectorm_connector = nullptr
std::unique_ptr< GNNR3_FasTrackConnectorm_connector = nullptr
std::vector< TrigInDetSiLayerm_layerGeometry
std::unique_ptr< const TrigFTF_GNN_Geometrym_geo = nullptr
std::unique_ptr< const TrigFTF_GNNR3_Geometrym_geo = nullptr
std::vector< std::array< float, 5 > > m_mlLUT

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 38 of file TrigInDetR3TrackSeedingTool.h.

Member Typedef Documentation

◆ GNN_DataStorage

◆ GNN_Edge

typedef TrigFTF_GNN_Edge SeedingToolBase::GNN_Edge
protectedinherited

Definition at line 37 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ GNN_Node

typedef TrigFTF_GNN_Node SeedingToolBase::GNN_Node
protectedinherited

Definition at line 35 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ GNNR3_DataStorage

◆ GNNR3_Edge

◆ GNNR3_Node

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ TrigInDetR3TrackSeedingTool()

TrigInDetR3TrackSeedingTool::TrigInDetR3TrackSeedingTool ( const std::string & t,
const std::string & n,
const IInterface * p )

Definition at line 27 of file TrigInDetR3TrackSeedingTool.cxx.

29 : SeedingToolBase(t,n,p)
30{
31
32}
SeedingToolBase(const std::string &t, const std::string &n, const IInterface *p)

◆ ~TrigInDetR3TrackSeedingTool()

virtual TrigInDetR3TrackSeedingTool::~TrigInDetR3TrackSeedingTool ( )
inlinevirtual

Definition at line 43 of file TrigInDetR3TrackSeedingTool.h.

43{};

Member Function Documentation

◆ buildTheGraph() [1/2]

std::pair< int, int > SeedingToolBase::buildTheGraph ( const IRoiDescriptor & roi,
const std::unique_ptr< GNN_DataStorage > & storage,
std::vector< GNN_Edge > & edgeStorage ) const
protectedinherited

Definition at line 98 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.

98 {
99
100
101 struct GBTS_SlidingWindow {
102
103 GBTS_SlidingWindow() : m_first_it(0), m_deltaPhi(0.0), m_has_nodes(false), m_bin(nullptr) {};
104
105 unsigned int m_first_it;// sliding window position
106 float m_deltaPhi; // window half-width;
107 bool m_has_nodes; // active or not
108
109 const TrigFTF_GNN_EtaBin* m_bin;//associated eta bin
110 };
111
112 constexpr float M_2PI = 2.0*M_PI;
113
114 const float cut_dphi_max = m_LRTmode ? 0.07f : 0.012f;
115 const float cut_dcurv_max = m_LRTmode ? 0.015f : 0.001f;
116 const float cut_tau_ratio_max = m_LRTmode ? 0.015f : static_cast<float>(m_tau_ratio_cut);
117 const float min_z0 = m_LRTmode ? -600.0 : roi.zedMinus();
118 const float max_z0 = m_LRTmode ? 600.0 : roi.zedPlus();
119 const float min_deltaPhi = m_LRTmode ? 0.01f : 0.001f;
120 const float tau_ratio_precut = 0.009f;
121
122 const float maxOuterRadius = m_LRTmode ? 1050.0 : 550.0;
123
124 const float cut_zMinU = min_z0 + maxOuterRadius*roi.dzdrMinus();
125 const float cut_zMaxU = max_z0 + maxOuterRadius*roi.dzdrPlus();
126
127 constexpr float ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assuming nominal field of 2*T
128
129 float tripletPtMin = 0.8f*m_minPt;//correction due to limited pT resolution
130 const float pt_scale = 900.0f/m_minPt;//to re-scale original tunings done for the 900 MeV pT cut
131
132 float maxCurv = ptCoeff/tripletPtMin;
133
134 float maxKappa_high_eta = m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.8f)*maxCurv;
135 float maxKappa_low_eta = m_LRTmode ? 1.0f*maxCurv : std::sqrt(0.6f)*maxCurv;
136
137 if(!m_useOldTunings && !m_LRTmode) {//new settings for curvature cuts
138 maxKappa_high_eta = 4.75e-4f*pt_scale;
139 maxKappa_low_eta = 3.75e-4f*pt_scale;
140 }
141
142 const float dphi_coeff = m_LRTmode ? 1.0f*maxCurv : 0.68f*maxCurv;
143
144 const float minDeltaRadius = 2.0;
145
146 float deltaPhi0 = 0.5f*m_phiSliceWidth;//the default sliding window along phi
147
148 unsigned int nConnections = 0;
149
150 edgeStorage.reserve(m_nMaxEdges);
151
152 int nEdges = 0;
153
154 for(const auto& bg : m_geo->bin_groups()) {//loop over bin groups
155
156 TrigFTF_GNN_EtaBin& B1 = storage->getEtaBin(bg.first);
157
158 if(B1.empty()) continue;
159
160 float rb1 = B1.getMinBinRadius();
161
162 const unsigned int lk1 = B1.m_layerKey;
163
164 //prepare a sliding window for each bin2 in the group
165
166 std::vector<GBTS_SlidingWindow> vSLW;
167
168 vSLW.resize(bg.second.size());//initialization using default ctor
169
170 int win_idx = 0;
171
172 for(const auto& b2_idx : bg.second) { //loop over n2 eta-bins in L2 layers
173
174 const TrigFTF_GNN_EtaBin& B2 = storage->getEtaBin(b2_idx);
175
176 if(B2.empty()) {
177 win_idx++;
178 continue;
179 }
180
181 float rb2 = B2.getMaxBinRadius();
182
183 float deltaPhi = deltaPhi0;//the default
184
185 if(m_useEtaBinning) { //override the default window width
186 float abs_dr = std::fabs(rb2-rb1);
187 if (m_useOldTunings) {
188 deltaPhi = min_deltaPhi + dphi_coeff*abs_dr;
189 }
190 else {
191 if(abs_dr < 60.0) {
192 deltaPhi = 0.002f + 4.33e-4f*pt_scale*abs_dr;
193 } else {
194 deltaPhi = 0.015f + 2.2e-4f*pt_scale*abs_dr;
195 }
196 }
197 }
198
199 vSLW[win_idx].m_bin = &B2;
200 vSLW[win_idx].m_has_nodes = true;
201 vSLW[win_idx].m_deltaPhi = deltaPhi;
202 win_idx++;
203 }
204
205 for(unsigned int n1Idx = 0;n1Idx<B1.m_vn.size();n1Idx++) {//in GBTSv3 the outer loop goes over n1 nodes in the Layer 1 bin
206
207 B1.m_vFirstEdge[n1Idx] = nEdges;//initialization using the top watermark of the edge storage
208
209 unsigned short num_created_edges = 0;//the counter for the incoming graph edges created for n1
210
211 const std::array<float, 5>& n1pars = B1.m_params[n1Idx];
212
213 float phi1 = n1pars[2];
214 float r1 = n1pars[3];
215 float z1 = n1pars[4];
216
217 for(unsigned int winIdx = 0; winIdx < vSLW.size(); winIdx++) {//the intermediate loop over sliding windows
218
219 GBTS_SlidingWindow& slw = vSLW[winIdx];
220
221 if (!slw.m_has_nodes) continue;
222
223 const TrigFTF_GNN_EtaBin& B2 = *slw.m_bin;
224
225 float deltaPhi = slw.m_deltaPhi;
226
227 //sliding window phi1 +/- deltaPhi
228
229 float minPhi = phi1 - deltaPhi;
230 float maxPhi = phi1 + deltaPhi;
231
232 for(unsigned int n2PhiIdx = slw.m_first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//the inner loop over n2 nodes using sliding window
233
234 float phi2 = B2.m_vPhiNodes[n2PhiIdx].first;
235
236 if(phi2 < minPhi) {
237 slw.m_first_it = n2PhiIdx; //update the window position
238 continue;
239 }
240 if(phi2 > maxPhi) break; //break and go to the next window
241
242 unsigned int n2Idx = B2.m_vPhiNodes[n2PhiIdx].second;
243
244 unsigned int n2_first_edge = B2.m_vFirstEdge[n2Idx];
245 unsigned short n2_num_edges = B2.m_vNumEdges[n2Idx];
246 unsigned int n2_last_edge = n2_first_edge + n2_num_edges;
247
248 const std::array<float, 5>& n2pars = B2.m_params[n2Idx];
249
250 float r2 = n2pars[3];
251
252 float dr = r2 - r1;
253
254 if(dr < minDeltaRadius) {
255 continue;
256 }
257
258 float z2 = n2pars[4];
259
260 float dz = z2 - z1;
261 float tau = dz/dr;
262 float ftau = std::fabs(tau);
263 if (ftau > 36.0) {
264 continue;
265 }
266
267 if(ftau < n1pars[0]) continue;
268 if(ftau > n1pars[1]) continue;
269
270 if(ftau < n2pars[0]) continue;
271 if(ftau > n2pars[1]) continue;
272
273 if (m_doubletFilterRZ) {
274
275 float z0 = z1 - r1*tau;
276
277 if(z0 < min_z0 || z0 > max_z0) continue;
278
279 float zouter = z0 + maxOuterRadius*tau;
280
281 if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
282 }
283
284 float curv = (phi2-phi1)/dr;
285 float abs_curv = std::abs(curv);
286
287 if(ftau < 4.0) {//eta = 2.1
288 if(abs_curv > maxKappa_low_eta) {
289 continue;
290 }
291 }
292 else {
293 if(abs_curv > maxKappa_high_eta) {
294 continue;
295 }
296 }
297
298 float exp_eta = std::sqrt(1.f+tau*tau) - tau;
299
300 if (m_matchBeforeCreate && (lk1 == 80000 || lk1 == 81000) ) {//match edge candidate against edges incoming to n2
301
302 bool isGood = n2_num_edges <= 2;//we must have enough incoming edges to decide
303
304 if(!isGood) {
305
306 float uat_1 = 1.0f/exp_eta;
307
308 for(unsigned int n2_in_idx = n2_first_edge; n2_in_idx < n2_last_edge; n2_in_idx++) {
309
310 float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
311 float tau_ratio = tau2*uat_1 - 1.0f;
312
313 if(std::fabs(tau_ratio) > tau_ratio_precut){//bad match
314 continue;
315 }
316 isGood = true;//good match found
317 break;
318 }
319 }
320
321 if(!isGood) {//no match found, skip creating [n1 <- n2] edge
322 continue;
323 }
324 }
325
326 float dPhi2 = curv*r2;
327 float dPhi1 = curv*r1;
328
329 if(nEdges < m_nMaxEdges) {
330
331 edgeStorage.emplace_back(B1.m_vn[n1Idx], B2.m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
332
333 num_created_edges++;
334
335 int outEdgeIdx = nEdges;
336
337 float uat_2 = 1.f/exp_eta;
338 float Phi2 = phi2 + dPhi2;
339 float curv2 = curv;
340
341 for(unsigned int inEdgeIdx = n2_first_edge; inEdgeIdx < n2_last_edge; inEdgeIdx++) {//looking for neighbours of the new edge
342
343 TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
344
345 if(pS->m_nNei >= N_SEG_CONNS) continue;
346
347 float tau_ratio = pS->m_p[0]*uat_2 - 1.0f;
348
349 if(std::abs(tau_ratio) > cut_tau_ratio_max){//bad match
350 continue;
351 }
352
353 float dPhi = Phi2 - pS->m_p[2];
354
355 if(dPhi<-M_PI) dPhi += M_2PI;
356 else if(dPhi>M_PI) dPhi -= M_2PI;
357
358 if(std::abs(dPhi) > cut_dphi_max) {
359 continue;
360 }
361
362 float dcurv = curv2 - pS->m_p[1];
363
364 if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
365 continue;
366 }
367
368 pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
369
370 nConnections++;
371
372 }
373 nEdges++;
374 }
375 } //loop over n2 (outer) nodes inside a sliding window on n2 bin
376 } //loop over sliding windows associated with n2 bins
377
378 B1.m_vNumEdges[n1Idx] = num_created_edges;//update
379
380 } //loop over n1 (inner) nodes
381 } //loop over bin groups: a single n1 bin and multiple n2 bins
382
383 if(nEdges >= m_nMaxEdges) {
384 ATH_MSG_WARNING("Maximum number of graph edges exceeded - possible efficiency loss "<< nEdges);
385 }
386
387 return std::make_pair(nEdges, nConnections);
388}
#define M_PI
Scalar deltaPhi(const MatrixBase< Derived > &vec) const
#define ATH_MSG_WARNING(x)
#define M_2PI
#define N_SEG_CONNS
virtual double zedPlus() const =0
the zed and eta values at the most forward and most rear ends of the RoI
virtual double dzdrMinus() const =0
return the gradients
virtual double zedMinus() const =0
virtual double dzdrPlus() const =0
std::unique_ptr< const TrigFTF_GNN_Geometry > m_geo
unsigned int m_vNei[N_SEG_CONNS]
unsigned char m_nNei
std::vector< const TrigFTF_GNN_Node * > m_vn
float getMinBinRadius() const
float getMaxBinRadius() const
std::vector< unsigned int > m_vFirstEdge
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
std::vector< std::array< float, 5 > > m_params
unsigned int m_layerKey
std::vector< unsigned short > m_vNumEdges
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
@ deltaPhi0
difference between the cluster phi (presampler) and the eta of the track extrapolated to the presampl...

◆ buildTheGraph() [2/2]

std::pair< int, int > SeedingToolBase::buildTheGraph ( const IRoiDescriptor & roi,
const std::unique_ptr< GNNR3_DataStorage > & storage,
std::vector< GNNR3_Edge > & edgeStorage ) const
protectedinherited

Definition at line 71 of file TrigInDetR3PattRecoTools/src/SeedingToolBase.cxx.

71 {
72
73 const float M_2PI = 2.0*M_PI;
74
75 const float cut_dphi_max = m_LRTmode ? 0.07 : 0.012;
76 const float cut_dcurv_max = m_LRTmode ? 0.015 : 0.001;
77 const float cut_tau_ratio_max = m_LRTmode ? 0.015 : 0.007;
78 const float min_z0 = m_LRTmode ? -600.0 : roi.zedMinus();
79 const float max_z0 = m_LRTmode ? 600.0 : roi.zedPlus();
80 const float min_deltaPhi = m_LRTmode ? 0.01f : 0.001f;
81
82 const float maxOuterRadius = m_LRTmode ? 1050.0 : 550.0;
83
84 const float cut_zMinU = min_z0 + maxOuterRadius*roi.dzdrMinus();
85 const float cut_zMaxU = max_z0 + maxOuterRadius*roi.dzdrPlus();
86
87 const float ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assuming nominal field of 2*T
88
89 float tripletPtMin = 0.8*m_minPt;//correction due to limited pT resolution
90
91 float maxCurv = ptCoeff/tripletPtMin;
92
93 const float maxKappa_high_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.8)*maxCurv;
94 const float maxKappa_low_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.6)*maxCurv;
95 const float dphi_coeff = m_LRTmode ? 1.0*maxCurv : 0.68*maxCurv;
96
97 const float minDeltaRadius = 2.0;
98
99 float deltaPhi = 0.5f*m_phiSliceWidth;//the default sliding window along phi
100
101 unsigned int nConnections = 0;
102
103 edgeStorage.reserve(m_nMaxEdges);
104
105 int nEdges = 0;
106
107 for(const auto& bg : m_geo->bin_groups()) {//loop over bin groups
108
109 TrigFTF_GNNR3_EtaBin& B1 = storage->getEtaBin(bg.first);
110
111 if(B1.empty()) continue;
112
113 float rb1 = B1.getMinBinRadius();
114
115 for(const auto& b2_idx : bg.second) {
116
117 const TrigFTF_GNNR3_EtaBin& B2 = storage->getEtaBin(b2_idx);
118
119 if(B2.empty()) continue;
120
121 float rb2 = B2.getMaxBinRadius();
122
123 if(m_useEtaBinning) {
124 deltaPhi = min_deltaPhi + dphi_coeff*std::fabs(rb2-rb1);
125 }
126
127 unsigned int first_it = 0;
128
129 for(unsigned int n1Idx = 0;n1Idx<B1.m_vn.size();n1Idx++) {//loop over nodes in Layer 1
130
131 std::vector<unsigned int>& v1In = B1.m_in[n1Idx];
132
133 if(v1In.size() >= MAX_SEG_PER_NODE) continue;
134
135 const std::array<float, 5>& n1pars = B1.m_params[n1Idx];
136
137 float phi1 = n1pars[2];
138 float r1 = n1pars[3];
139 float z1 = n1pars[4];
140
141 //sliding window phi1 +/- deltaPhi
142
143 float minPhi = phi1 - deltaPhi;
144 float maxPhi = phi1 + deltaPhi;
145
146 for(unsigned int n2PhiIdx = first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//sliding window over nodes in Layer 2
147
148 float phi2 = B2.m_vPhiNodes[n2PhiIdx].first;
149
150 if(phi2 < minPhi) {
151 first_it = n2PhiIdx;
152 continue;
153 }
154 if(phi2 > maxPhi) break;
155
156 unsigned int n2Idx = B2.m_vPhiNodes[n2PhiIdx].second;
157
158 const std::vector<unsigned int>& v2In = B2.m_in[n2Idx];
159
160 if(v2In.size() >= MAX_SEG_PER_NODE) continue;
161
162 const std::array<float, 5>& n2pars = B2.m_params[n2Idx];
163
164 float r2 = n2pars[3];
165
166 float dr = r2 - r1;
167
168 if(dr < minDeltaRadius) {
169 continue;
170 }
171
172 float z2 = n2pars[4];
173
174 float dz = z2 - z1;
175 float tau = dz/dr;
176 float ftau = std::fabs(tau);
177 if (ftau > 36.0) {
178 continue;
179 }
180
181 if(ftau < n1pars[0]) continue;
182 if(ftau > n1pars[1]) continue;
183
184 if(ftau < n2pars[0]) continue;
185 if(ftau > n2pars[1]) continue;
186
187 if (m_doubletFilterRZ) {
188
189 float z0 = z1 - r1*tau;
190
191 if(z0 < min_z0 || z0 > max_z0) continue;
192
193 float zouter = z0 + maxOuterRadius*tau;
194
195 if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
196 }
197
198 float curv = (phi2-phi1)/dr;
199 float abs_curv = std::abs(curv);
200
201 if(ftau < 4.0) {//eta = 2.1
202 if(abs_curv > maxKappa_low_eta) {
203 continue;
204 }
205 }
206 else {
207 if(abs_curv > maxKappa_high_eta) {
208 continue;
209 }
210 }
211
212 float exp_eta = std::sqrt(1+tau*tau)-tau;
213
214 if (m_matchBeforeCreate) {//match edge candidate against edges incoming to n2
215
216 bool isGood = v2In.size() <= 2;//we must have enough incoming edges to decide
217
218 if(!isGood) {
219
220 float uat_1 = 1.0f/exp_eta;
221
222 for(const auto& n2_in_idx : v2In) {
223
224 float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
225 float tau_ratio = tau2*uat_1 - 1.0f;
226
227 if(std::fabs(tau_ratio) > cut_tau_ratio_max){//bad match
228 continue;
229 }
230 isGood = true;//good match found
231 break;
232 }
233 }
234
235 if(!isGood) {//no match found, skip creating [n1 <- n2] edge
236 continue;
237 }
238 }
239
240 float dPhi2 = curv*r2;
241 float dPhi1 = curv*r1;
242
243 if(nEdges < m_nMaxEdges) {
244
245 edgeStorage.emplace_back(B1.m_vn[n1Idx], B2.m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
246
247 if(v1In.size() < MAX_SEG_PER_NODE) v1In.push_back(nEdges);
248
249 int outEdgeIdx = nEdges;
250
251 float uat_2 = 1/exp_eta;
252 float Phi2 = phi2 + dPhi2;
253 float curv2 = curv;
254
255 for(const auto& inEdgeIdx : v2In) {//looking for neighbours of the new edge
256
257 TrigFTF_GNNR3_Edge* pS = &(edgeStorage.at(inEdgeIdx));
258
259 if(pS->m_nNei >= N_SEG_CONNS) continue;
260
261 float tau_ratio = pS->m_p[0]*uat_2 - 1.0f;
262
263 if(std::abs(tau_ratio) > cut_tau_ratio_max){//bad match
264 continue;
265 }
266
267 float dPhi = Phi2 - pS->m_p[2];
268
269 if(dPhi<-M_PI) dPhi += M_2PI;
270 else if(dPhi>M_PI) dPhi -= M_2PI;
271
272 if(dPhi < -cut_dphi_max || dPhi > cut_dphi_max) {
273 continue;
274 }
275
276 float dcurv = curv2 - pS->m_p[1];
277
278 if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
279 continue;
280 }
281
282 pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
283
284 nConnections++;
285
286 }
287 nEdges++;
288 }
289 } //loop over n2 (outer) nodes
290 } //loop over n1 (inner) nodes
291 } //loop over bins in Layer 2
292 } //loop over bin groups
293
294 return std::make_pair(nEdges, nConnections);
295}
#define MAX_SEG_PER_NODE
unsigned int m_vNei[N_SEG_CONNS]
float getMaxBinRadius() const
std::vector< std::array< float, 5 > > m_params
float getMinBinRadius() const
std::vector< const TrigFTF_GNNR3_Node * > m_vn
std::vector< std::pair< float, unsigned int > > m_vPhiNodes
std::vector< std::vector< unsigned int > > m_in

◆ createGraphNodes()

void TrigInDetR3TrackSeedingTool::createGraphNodes ( const SpacePointCollection * spColl,
std::vector< GNNR3_Node > & tmpColl,
std::vector< const Trk::SpacePoint * > & vSP,
unsigned short layer,
float shift_x,
float shift_y ) const
protected

Definition at line 634 of file TrigInDetR3TrackSeedingTool.cxx.

634 {
635
636 tmpColl.resize(spColl->size(), GNNR3_Node(layer));//all nodes belong to the same layer
637
638 int idx = 0;
639 int init_size = vSP.size();
640 for(const auto sp : *spColl) {
641 const auto& pos = sp->globalPosition();
642 vSP.emplace_back(sp);
643 float xs = pos.x() - shift_x;
644 float ys = pos.y() - shift_y;
645 float zs = pos.z();
646 tmpColl[idx].m_x = xs;
647 tmpColl[idx].m_y = ys;
648 tmpColl[idx].m_z = zs;
649 tmpColl[idx].m_r = std::sqrt(xs*xs + ys*ys);
650 tmpColl[idx].m_phi = std::atan2(ys,xs);
651 tmpColl[idx].m_idx = init_size + idx;
652
653 const InDet::PixelCluster* pCL = dynamic_cast<const InDet::PixelCluster*>(sp->clusterList().first);
654 if(pCL != nullptr){
655 tmpColl[idx].m_pcw = pCL->width().z();
656 }
657
658 idx++;
659 }
660}
static Double_t sp
size_type size() const noexcept
Returns the number of elements in the collection.
const InDet::SiWidth & width() const
return width class reference
double z() const
Definition SiWidth.h:131

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ DeclareInterfaceID()

ITrigInDetTrackSeedingTool::DeclareInterfaceID ( ITrigInDetTrackSeedingTool ,
1 ,
0  )
inherited

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extractSeedsFromTheGraph()

void SeedingToolBase::extractSeedsFromTheGraph ( int maxLevel,
int nEdges,
int nHits,
std::vector< GNN_Edge > & edgeStorage,
std::vector< std::tuple< float, int, std::vector< unsigned int > > > & vSeedCandidates ) const
protectedinherited

Definition at line 458 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.

458 {
459
460 const float edge_mask_min_eta = 1.5;
461 const float hit_share_threshold = 0.49;
462
463 vSeedCandidates.clear();
464
465 int minLevel = 3;//a triplet + 2 confirmation
466
467 if(m_LRTmode) {
468 minLevel = 2;//a triplet + 1 confirmation
469 }
470
471 if(maxLevel < minLevel) return;
472
473 std::vector<GNN_Edge*> vSeeds;
474
475 vSeeds.reserve(nEdges/2);
476
477 for(int edgeIndex = 0; edgeIndex < nEdges; edgeIndex++) {
478
479 GNN_Edge* pS = &(edgeStorage.at(edgeIndex));
480
481 if(pS->m_level < minLevel) continue;
482
483 vSeeds.push_back(pS);
484 }
485
486 if(vSeeds.empty()) return;
487
488 std::sort(vSeeds.begin(), vSeeds.end(), GNN_Edge::CompareLevel());
489
490 //backtracking
491
492 vSeedCandidates.reserve(vSeeds.size());
493
494 auto tFilter = std::make_unique<TrigFTF_GNN_TrackingFilter>(m_layerGeometry, edgeStorage);
495
496 for(auto pS : vSeeds) {
497
498 if(pS->m_level == -1) continue;
499
500 TrigFTF_GNN_EdgeState rs(false);
501
502 tFilter->followTrack(pS, rs);
503
504 if(!rs.m_initialized) {
505 continue;
506 }
507
508 if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
509
510 float seed_eta = std::abs(-std::log(pS->m_p[0]));
511
512 std::vector<const GNN_Node*> vN;
513
514 for(std::vector<GNN_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
515
516 if (seed_eta > edge_mask_min_eta) {
517 (*sIt)->m_level = -1;//mark as collected
518 }
519
520 if(sIt == rs.m_vs.rbegin()) {
521 vN.push_back((*sIt)->m_n1);
522 }
523
524 vN.push_back((*sIt)->m_n2);
525
526 }
527
528 if(vN.size()<3) continue;
529
530 std::vector<unsigned int> vSpIdx;
531
532 vSpIdx.resize(vN.size());
533
534 for(unsigned int k = 0; k < vN.size(); k++) {
535 vSpIdx[k] = vN[k]->sp_idx();
536 }
537
538 vSeedCandidates.emplace_back(-rs.m_J/vN.size(), 0, vSpIdx);
539
540 }
541
542 //clone removal code goes below ...
543
544 std::sort(vSeedCandidates.begin(), vSeedCandidates.end());
545
546 std::vector<int> H2T(nHits + 1, 0);//hit to track associations
547
548 int trackId = 0;
549
550 for(const auto& seed : vSeedCandidates) {
551
552 trackId++;
553
554 for(const auto& h : std::get<2>(seed) ) {//loop over spacepoints indices
555
556 unsigned int hit_id = h + 1;
557
558 int tid = H2T[hit_id];
559
560 if(tid == 0 || tid > trackId) {//unused hit or used by a lesser track
561
562 H2T[hit_id] = trackId;//overwrite
563
564 }
565 }
566 }
567
568 for(unsigned int trackIdx = 0; trackIdx < vSeedCandidates.size(); trackIdx++) {
569
570 int nTotal = std::get<2>(vSeedCandidates[trackIdx]).size();
571 int nOther = 0;
572
573 int trackId = trackIdx + 1;
574
575 for(const auto& h : std::get<2>(vSeedCandidates[trackIdx]) ) {
576
577 unsigned int hit_id = h + 1;
578
579 int tid = H2T[hit_id];
580
581 if(tid != trackId) {//taken by a better candidate
582 nOther++;
583 }
584 }
585
586 if (nOther > hit_share_threshold*nTotal) {
587 std::get<1>(vSeedCandidates[trackIdx]) = -1;//reject
588 }
589
590 }
591}
static Double_t rs
static const uint32_t nHits
std::vector< TrigInDetSiLayer > m_layerGeometry
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ finalize()

StatusCode TrigInDetR3TrackSeedingTool::finalize ( )
overridevirtual

Reimplemented from SeedingToolBase.

Definition at line 70 of file TrigInDetR3TrackSeedingTool.cxx.

◆ findSeeds()

TrigInDetTrackSeedingResult TrigInDetR3TrackSeedingTool::findSeeds ( const IRoiDescriptor & internalRoI,
std::vector< TrigInDetTracklet > & output,
const EventContext & ctx ) const
finaloverridevirtual

Implements ITrigInDetTrackSeedingTool.

Definition at line 75 of file TrigInDetR3TrackSeedingTool.cxx.

75 {
76
77 TrigInDetTrackSeedingResult seedStats;
78
79 output.clear();
80
81 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
82 const Amg::Vector3D &vertex = beamSpotHandle->beamPos();
83 float shift_x = vertex.x() - beamSpotHandle->beamTilt(0)*vertex.z();
84 float shift_y = vertex.y() - beamSpotHandle->beamTilt(1)*vertex.z();
85
86 std::unique_ptr<GNNR3_DataStorage> storage = std::make_unique<GNNR3_DataStorage>(*m_geo);
87
88 int nPixels = 0;
89 int nStrips = 0;
90
91 const SpacePointContainer* sctSpacePointsContainer = nullptr;
92 const SpacePointContainer* pixelSpacePointsContainer = nullptr;
93
94 std::map<short, std::vector<IdentifierHash> > detIdMap;//relates global detector layer ID to constituent detector elements
95
97
98 SG::ReadHandle<SpacePointContainer> sctHandle(m_sctSpacePointsContainerKey, ctx);
99
100 if(!sctHandle.isValid()) {
101 ATH_MSG_WARNING("Invalid Strip Spacepoints handle: "<<sctHandle);
102 return seedStats;
103
104 }
105
106 sctSpacePointsContainer = sctHandle.ptr();
107
108 std::vector<IdentifierHash> listOfSctIds;
109 m_regsel_sct->lookup(ctx)->HashIDList( internalRoI, listOfSctIds );
110
111 const std::vector<short>* h2l = m_layerNumberTool->sctLayers();
112
113 for(const auto& hashId : listOfSctIds) {
114
115 short layerIndex = h2l->at(static_cast<int>(hashId));
116
117 auto it = detIdMap.find(layerIndex);
118 if(it != detIdMap.end()) (*it).second.push_back(hashId);
119 else {
120 std::vector<IdentifierHash> v = {hashId};
121 detIdMap.insert(std::make_pair(layerIndex,v));
122 }
123 }
124 }
125
127
128 SG::ReadHandle<SpacePointContainer> pixHandle(m_pixelSpacePointsContainerKey, ctx);
129
130 if(!pixHandle.isValid()) {
131 ATH_MSG_WARNING("Invalid Pixel Spacepoints handle: "<<pixHandle);
132 return seedStats;
133 }
134
135 pixelSpacePointsContainer = pixHandle.ptr();
136
137 std::vector<IdentifierHash> listOfPixIds;
138
139 m_regsel_pix->lookup(ctx)->HashIDList( internalRoI, listOfPixIds );
140
141 const std::vector<short>* h2l = m_layerNumberTool->pixelLayers();
142
143 for(const auto& hashId : listOfPixIds) {
144
145 short layerIndex = h2l->at(static_cast<int>(hashId));
146
147 auto it = detIdMap.find(layerIndex);
148 if(it != detIdMap.end()) (*it).second.push_back(hashId);
149 else {
150 std::vector<IdentifierHash> v = {hashId};
151 detIdMap.insert(std::make_pair(layerIndex,v));
152 }
153 }
154 }
155
156 if(!m_useGPU) {
157
158 std::unique_ptr<GNNR3_DataStorage> storage = std::make_unique<GNNR3_DataStorage>(*m_geo);
159
160 std::vector<const Trk::SpacePoint*> vSP;
161
162 vSP.reserve(m_nMaxEdges);
163
164 std::vector<std::vector<GNNR3_Node> > trigSpStorage[2];
165
166 trigSpStorage[1].resize(m_layerNumberTool->sctLayers()->size());
167
168 trigSpStorage[0].resize(m_layerNumberTool->pixelLayers()->size());
169
170 for(const auto& lColl : detIdMap) {
171
172 short layerIndex = lColl.first;
173
174 int layerKey = m_geo->getTrigFTF_GNNR3_LayerByIndex(layerIndex)->m_layer.m_subdet;
175
176 bool isPixel = layerKey > 20000;
177
178 auto pCont = isPixel ? pixelSpacePointsContainer : sctSpacePointsContainer;
179
180 int contIdx= isPixel ? 0 : 1;
181
182 int nNewNodes = 0;
183
184 for(const auto& idx : lColl.second) {
185
186 std::vector<GNNR3_Node>& tmpColl = trigSpStorage[contIdx].at(static_cast<int>(idx));
187
188 auto input_coll = pCont->indexFindPtr(idx);
189
190 if(input_coll == nullptr) continue;
191
192 createGraphNodes(input_coll, tmpColl, vSP, layerIndex, shift_x, shift_y);//TO-DO: if(m_useBeamTilt) SP full transform functor
193
194 nNewNodes += (isPixel) ? storage->loadPixelGraphNodes(layerIndex, tmpColl, m_useML) : storage->loadStripGraphNodes(layerIndex, tmpColl);
195 }
196
197 if(isPixel) nPixels += nNewNodes;
198 else nStrips += nNewNodes;
199 }
200
201 seedStats.m_nPixelSPs = nPixels;
202 seedStats.m_nStripSPs = nStrips;
203
204 storage->sortByPhi();
205 storage->initializeNodes(m_useML);
206 storage->generatePhiIndexing(1.5*m_phiSliceWidth);
207
208 std::vector<GNNR3_Edge> edgeStorage;
209
210 std::pair<int, int> graphStats = buildTheGraph(internalRoI, storage, edgeStorage);
211
212 ATH_MSG_DEBUG("Created graph with "<<graphStats.first<<" edges and "<<graphStats.second<< " edge links");
213
214 seedStats.m_nGraphEdges = graphStats.first;
215 seedStats.m_nEdgeLinks = graphStats.second;
216
217 if(graphStats.second == 0) return seedStats;
218
219 int maxLevel = runCCA(graphStats.first, edgeStorage);
220
221 ATH_MSG_DEBUG("Reached Level "<<maxLevel<<" after GNN iterations");
222
223 int minLevel = 3;//a triplet + 1 confirmation
224
225 if(m_LRTmode) {
226 minLevel = 2;//a triplet
227 }
228
229 if(maxLevel < minLevel) return seedStats;
230
231 std::vector<GNNR3_Edge*> vSeeds;
232
233 vSeeds.reserve(graphStats.first/2);
234
235 for(int edgeIndex=0;edgeIndex<graphStats.first;edgeIndex++) {
236 GNNR3_Edge* pS = &(edgeStorage.at(edgeIndex));
237
238 if(pS->m_level < minLevel) continue;
239
240 vSeeds.push_back(pS);
241 }
242
243 if(vSeeds.empty()) return seedStats;
244
245 std::sort(vSeeds.begin(), vSeeds.end(), GNNR3_Edge::CompareLevel());
246
247 //backtracking
248
249 TrigFTF_GNNR3_TrackingFilter tFilter(m_layerGeometry, edgeStorage);
250
251 output.reserve(vSeeds.size());
252
253 for(auto pS : vSeeds) {
254
255 if(pS->m_level == -1) continue;
256
257 TrigFTF_GNNR3_EdgeState rs(false);
258
259 tFilter.followTrack(pS, rs);
260
261 if(!rs.m_initialized) {
262 continue;
263 }
264
265 if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
266
267 std::vector<const GNNR3_Node*> vN;
268
269 for(std::vector<GNNR3_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
270
271 (*sIt)->m_level = -1;//mark as collected
272
273 if(sIt == rs.m_vs.rbegin()) {
274 vN.push_back((*sIt)->m_n1);
275 }
276 vN.push_back((*sIt)->m_n2);
277 }
278
279 if(vN.size()<3) continue;
280
281 unsigned int lastIdx = output.size();
282 output.emplace_back(rs.m_J);
283
284 for(const auto& n : vN) {
285 output[lastIdx].addSpacePoint(vSP[n->m_idx]);
286 }
287 }
288
289 ATH_MSG_DEBUG("Found "<<output.size()<<" tracklets");
290 }
291#if 0
292 else {//GPU-accelerated graph building
293
294
295 //1. data export
296
297 std::vector<const Trk::SpacePoint*> vSP;
298 std::vector<short> vL;
299
302
303 std::unique_ptr<TrigAccel::DATA_EXPORT_BUFFER> dataBuffer = std::unique_ptr<TrigAccel::DATA_EXPORT_BUFFER>(new TrigAccel::DATA_EXPORT_BUFFER(5000));
304
305 size_t dataTypeSize = sizeof(TrigAccel::ITk::GRAPH_MAKING_INPUT_DATA);
306 const size_t bufferOffset = 256;
307 size_t totalSize = bufferOffset+dataTypeSize;//make room for the header
308 if(!dataBuffer->fit(totalSize)) dataBuffer->reallocate(totalSize);
309
310 TrigAccel::ITk::GRAPH_MAKING_INPUT_DATA* pJobData = reinterpret_cast<TrigAccel::ITk::GRAPH_MAKING_INPUT_DATA*>(dataBuffer->m_buffer + bufferOffset);
311
312 unsigned int spIdx = 0;
313 int sp_offset = 0;
314 int nLayers = 0;
315 int MaxEtaBin = 0;
316 int nEtaBins = 0;
317
318 for(const auto& lColl : detIdMap) {
319
320 short layerIndex = lColl.first;
321
322 const TrigFTF_GNNR3_Layer* pL = m_geo->getTrigFTF_GNNR3_LayerByIndex(layerIndex);
323
324 int layerKey = pL->m_layer.m_subdet;
325
326 bool isPixel = layerKey > 20000;
327 bool isBarrel = (pL->m_layer.m_type == 0);
328
329 auto pCont = isPixel ? pixelSpacePointsContainer : sctSpacePointsContainer;
330
331 pJobData->m_layerIdx[nLayers] = layerIndex;
332
333 pJobData->m_layerInfo[4*nLayers ] = spIdx;//layerInfo.x
334 pJobData->m_layerInfo[4*nLayers + 2] = pL->num_bins();//layerInfo.z
335 pJobData->m_layerInfo[4*nLayers + 3] = pL->m_bins[0];//layerInfo.w
336
337 pJobData->m_layerGeo[2*nLayers ] = pL->m_minEta;//layerGeo.x
338 pJobData->m_layerGeo[2*nLayers + 1] = pL->m_etaBin;//layerGeo.y
339
340 nEtaBins += pL->m_bins.size();
341
342 for(auto b : pL->m_bins) {
343 if(b > MaxEtaBin) MaxEtaBin = b;
344 }
345
346 for(const auto& idx : lColl.second) {
347
348 auto input_coll = pCont->indexFindPtr(idx);
349
350 if(input_coll == nullptr) continue;
351
352 for(const auto sp : *input_coll) {
353
354 float cw = -1.0;
355
356 const InDet::PixelCluster* pCL = dynamic_cast<const InDet::PixelCluster*>(sp->clusterList().first);
357 if(pCL != nullptr) {
358 cw = pCL->width().widthPhiRZ().y();
359 if(!isBarrel && m_useML) {
360 if(cw > 0.2) continue;
361 cw = -1.0;//set it to -1 so that it can be skipped later in the ML code on GPU
362 }
363 }
364
365 vSP.emplace_back(sp);
366 vL.emplace_back(layerIndex);
367
368 const auto& p = sp->globalPosition();
369
370 float params[4] = {(float)(p.x() - shift_x), float(p.y() - shift_y), (float)(p.z()), cw};
371
372 memcpy(&pJobData->m_params[sp_offset], &params[0], sizeof(params));
373
374 sp_offset += 4;
375 spIdx++;
377 }
379 }
380
381 pJobData->m_layerInfo[4*nLayers + 1] = spIdx;//layerInfo.y
382
383 if (isPixel) nPixels += spIdx - pJobData->m_layerInfo[4*nLayers];
384 else nStrips += spIdx - pJobData->m_layerInfo[4*nLayers];
385
386 nLayers++;
387 }
388
389 pJobData->m_nSpacepoints = spIdx;
390 pJobData->m_nLayers = nLayers;
391 pJobData->m_nEtaBins = nEtaBins;
392 pJobData->m_maxEtaBin = MaxEtaBin;
393 pJobData->m_nMaxEdges = m_nMaxEdges;
394
395 //load bin pairs
396
397 int pairIdx = 0;
398
399 for(const auto& bg : m_geo->bin_groups()) {//loop over bin groups
400
401 int bin1_idx = bg.first;
402
403 for(const auto& bin2_idx : bg.second) {
404 pJobData->m_bin_pairs[2*pairIdx ] = bin1_idx;
405 pJobData->m_bin_pairs[2*pairIdx+1] = bin2_idx;
406 pairIdx++;
407 }
408 }
409
410 pJobData->m_nBinPairs = pairIdx;
411
412 //add algorithm parameters
413
414 const float ptCoeff = 0.29997*1.9972/2.0;// ~0.3*B/2 - assuming nominal field of 2*T
415
416 float tripletPtMin = 0.8*m_minPt;//correction due to limited pT resolution
417
418 float maxCurv = ptCoeff/tripletPtMin;
419
420 const float min_deltaPhi = 0.001;
421 const float dphi_coeff = 0.68*maxCurv;
422 const float cut_dphi_max = m_LRTmode ? 0.07 : 0.012;
423 const float cut_dcurv_max = m_LRTmode ? 0.015 : 0.001;
424 const float cut_tau_ratio_max = m_LRTmode ? 0.015 : 0.007;
425 const float min_z0 = m_LRTmode ? -600.0 : internalRoI.zedMinus();
426 const float max_z0 = m_LRTmode ? 600.0 : internalRoI.zedPlus();
427
428 const float maxOuterRadius = m_LRTmode ? 1050.0 : 550.0;
429 const float minDeltaRadius = 2.0;
430
431 const float cut_zMinU = min_z0 + maxOuterRadius*internalRoI.dzdrMinus();
432 const float cut_zMaxU = max_z0 + maxOuterRadius*internalRoI.dzdrPlus();
433
434 const float maxKappa_high_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.8)*maxCurv;
435 const float maxKappa_low_eta = m_LRTmode ? 1.0*maxCurv : std::sqrt(0.6)*maxCurv;
436
437 pJobData->m_algo_params[0] = min_deltaPhi;
438 pJobData->m_algo_params[1] = dphi_coeff;
439 pJobData->m_algo_params[2] = minDeltaRadius;
440 pJobData->m_algo_params[3] = min_z0;
441 pJobData->m_algo_params[4] = max_z0;
442 pJobData->m_algo_params[5] = maxOuterRadius;
443 pJobData->m_algo_params[6] = cut_zMinU;
444 pJobData->m_algo_params[7] = cut_zMaxU;
445 pJobData->m_algo_params[8] = maxKappa_low_eta;
446 pJobData->m_algo_params[9] = maxKappa_high_eta;
447 pJobData->m_algo_params[10]= cut_dphi_max;
448 pJobData->m_algo_params[11]= cut_dcurv_max;
449 pJobData->m_algo_params[12]= cut_tau_ratio_max;
450
451 int minLevel = 3;//a triplet + 1 confirmation
452
453 if(m_LRTmode) {
454 minLevel = 2;//a triplet
455 }
456
457 pJobData->m_minLevel = minLevel;
458
460
461 seedStats.m_nPixelSPs = nPixels;
462 seedStats.m_nStripSPs = nStrips;
463
464 ATH_MSG_DEBUG("Loaded "<<nPixels<< " Pixel Spacepoints and "<<nStrips<< " Strip SpacePoints");
465
466 std::shared_ptr<TrigAccel::OffloadBuffer> pBuff = std::make_shared<TrigAccel::OffloadBuffer>(dataBuffer.get());
467
468 std::unique_ptr<TrigAccel::Work> pWork = std::unique_ptr<TrigAccel::Work>(m_accelSvc->createWork(TrigAccel::InDetJobControlCode::RUN_GBTS, pBuff));
469
470 if(!pWork) {
471 ATH_MSG_WARNING("Failed to create a work item for task "<<TrigAccel::InDetJobControlCode::RUN_GBTS);
472 return seedStats;
473 }
474
475 ATH_MSG_DEBUG("Work item created for task "<<TrigAccel::InDetJobControlCode::RUN_GBTS);
476
477 bool workSuccess = pWork->run();
478 if(!workSuccess) {
479 ATH_MSG_WARNING("Work item failed to complete");
480 return seedStats;
481 }
482
483 std::shared_ptr<TrigAccel::OffloadBuffer> pOutput = pWork->getOutput();
484
485 TrigAccel::ITk::GRAPH_AND_SEEDS_OUTPUT* pGraphAndSeeds = reinterpret_cast<TrigAccel::ITk::GRAPH_AND_SEEDS_OUTPUT*>(pOutput->m_rawBuffer);
486 TrigAccel::ITk::COMPRESSED_GRAPH* pGraph = &pGraphAndSeeds->m_CompressedGraph;
487 TrigAccel::ITk::OUTPUT_SEEDS* pSeeds = &pGraphAndSeeds->m_OutputSeeds;
488
490 //converting tracklet into GBTS-CPU format
491 for(unsigned int seed=0; seed<pSeeds->m_nSeeds; seed++) {
492
493 unsigned int lastIdx = output.size();
494 output.emplace_back(pSeeds->m_seedsArray[seed].m_Q);
495 for(int node=0; node<pSeeds->m_seedsArray[seed].m_size; node++) {
496 output[lastIdx].addSpacePoint(vSP[pSeeds->m_seedsArray[seed].m_nodes[node]]);
497 }
498 }
499 }
500 else {
501
502 unsigned int nEdges = pGraph->m_nEdges;
503 unsigned int nMaxNei = pGraph->m_nMaxNeighbours;
504
505 //populating the edgeStorage
506
507 std::vector<GNNR3_Node> nodes;
508
509 nodes.reserve(vSP.size());
510
511 for(unsigned int idx = 0;idx < vSP.size(); idx++) {
512
513 nodes.emplace_back(vL[idx]);
514
515 const auto& pos = vSP[idx]->globalPosition();
516 float xs = pos.x() - shift_x;
517 float ys = pos.y() - shift_y;
518 float zs = pos.z();
519
520 nodes[idx].m_x = xs;
521 nodes[idx].m_y = ys;
522 nodes[idx].m_z = zs;
523 nodes[idx].m_r = std::sqrt(xs*xs + ys*ys);
524
525 nodes[idx].m_idx = idx;
526
527 }
528
529 std::vector<GNNR3_Edge> edgeStorage;
530
531 std::pair<int, int> graphStats(0,0);
532
533 edgeStorage.resize(nEdges);
534
535 unsigned int edgeSize = nMaxNei + 1 + 2;//neigbours, num_neighbours, 2 nodes
536
537 for(unsigned int idx=0;idx<nEdges;idx++) {
538 unsigned int pos = idx*edgeSize;
539
540 int node1Idx = pGraph->m_graphArray[pos + TrigAccel::ITk::node1];
541 int node2Idx = pGraph->m_graphArray[pos + TrigAccel::ITk::node2];
542 int nNei = pGraph->m_graphArray[pos + TrigAccel::ITk::nNei];
543
544 if(nNei > N_SEG_CONNS) nNei = N_SEG_CONNS;
545
546 edgeStorage[idx].m_n1 = &nodes[node1Idx];
547 edgeStorage[idx].m_n2 = &nodes[node2Idx];
548 edgeStorage[idx].m_level = 1;
549 edgeStorage[idx].m_nNei = nNei;
550 for(int k=0;k<nNei;k++) {
551 edgeStorage[idx].m_vNei[k] = pGraph->m_graphArray[pos + TrigAccel::ITk::nei_idx_start + k];
552 }
553 }
554
555 graphStats.first = nEdges;
556 graphStats.second = pGraph->m_nLinks;
557
558 //run the rest of the GBTS workflow
559
560 int maxLevel = runCCA(graphStats.first, edgeStorage);
561
562 ATH_MSG_DEBUG("Reached Level "<<maxLevel<<" after GNN iterations");
563
564 if(maxLevel < minLevel) return seedStats;
565
566 std::vector<GNNR3_Edge*> vSeeds;
567
568 vSeeds.reserve(graphStats.first/2);
569
570 for(int edgeIndex=0;edgeIndex<graphStats.first;edgeIndex++) {
571 GNNR3_Edge* pS = &(edgeStorage.at(edgeIndex));
572
573 if(pS->m_level < minLevel) continue;
574
575 vSeeds.push_back(pS);
576 }
577
578 if(vSeeds.empty()) return seedStats;
579
580 std::sort(vSeeds.begin(), vSeeds.end(), GNNR3_Edge::CompareLevel());
581
582 //backtracking
583
584 TrigFTF_GNNR3_TrackingFilter tFilter(m_layerGeometry, edgeStorage);
585
586 output.reserve(vSeeds.size());
587
588 for(auto pS : vSeeds) {
589
590 if(pS->m_level == -1) continue;
591
592 TrigFTF_GNNR3_EdgeState rs(false);
593
594 tFilter.followTrack(pS, rs);
595
596 if(!rs.m_initialized) {
597 continue;
598 }
599
600 if(static_cast<int>(rs.m_vs.size()) < minLevel) continue;
601
602 std::vector<const GNNR3_Node*> vN;
603
604 for(std::vector<GNNR3_Edge*>::reverse_iterator sIt=rs.m_vs.rbegin();sIt!=rs.m_vs.rend();++sIt) {
605
606 (*sIt)->m_level = -1;//mark as collected
607
608 if(sIt == rs.m_vs.rbegin()) {
609 vN.push_back((*sIt)->m_n1);
610 }
611 vN.push_back((*sIt)->m_n2);
612 }
613
614 if(vN.size()<3) continue;
615
616 unsigned int lastIdx = output.size();
617 output.emplace_back(rs.m_J);
618
619 for(const auto& n : vN) {
620 output[lastIdx].addSpacePoint(vSP[n->m_idx]);
621 }
622 }
623 }
624
625 ATH_MSG_DEBUG("Found "<<output.size()<<" tracklets");
626 }
627
628#endif
629
630 return seedStats;
631
632}
#define ATH_MSG_DEBUG(x)
static unsigned int totalSize(const MultiDimArray< T, N > &ht)
const Amg::Vector2D & widthPhiRZ() const
Definition SiWidth.h:121
int runCCA(int, std::vector< GNN_Edge > &) const
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool
std::pair< int, int > buildTheGraph(const IRoiDescriptor &, const std::unique_ptr< GNN_DataStorage > &, std::vector< GNN_Edge > &) const
const TrigInDetSiLayer & m_layer
std::vector< int > m_bins
SG::ReadHandleKey< SpacePointContainer > m_sctSpacePointsContainerKey
ToolHandle< IRegSelTool > m_regsel_pix
region selector tools
void createGraphNodes(const SpacePointCollection *, std::vector< GNNR3_Node > &, std::vector< const Trk::SpacePoint * > &, unsigned short, float, float) const
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
SG::ReadHandleKey< SpacePointContainer > m_pixelSpacePointsContainerKey
ToolHandle< IRegSelTool > m_regsel_sct
Eigen::Matrix< double, 3, 1 > Vector3D
int nStrips(const MuonGM::TgcReadoutElement &readoutEle, int layer)
constexpr unsigned nEtaBins
struct TrigAccel::ITk::GraphMakingInputData GRAPH_MAKING_INPUT_DATA
static constexpr unsigned int GBTS_MAX_NUMBER_SPACEPOINTS
static constexpr unsigned char nNei
static constexpr unsigned char node1
static constexpr unsigned char node2
struct TrigAccel::ITk::OutputSeeds OUTPUT_SEEDS
struct TrigAccel::ITk::GraphAndSeedsOutput GRAPH_AND_SEEDS_OUTPUT
static constexpr unsigned char nei_idx_start
struct TrigAccel::ITk::CompressedGraph COMPRESSED_GRAPH
struct TrigAccel::DataExportBuffer DATA_EXPORT_BUFFER
output
Definition merge.py:16
SpacePointContainer_v1 SpacePointContainer
Define the version of the space point container.
std::unique_ptr< int[]> m_graphArray
int m_bin_pairs[2 *GBTS_MAX_ETA_BIN_PAIR]
int m_layerInfo[4 *GBTS_MAX_SILICON_LAYERS]
float m_layerGeo[2 *GBTS_MAX_SILICON_LAYERS]
int m_layerIdx[GBTS_MAX_SILICON_LAYERS]
float m_params[4 *GBTS_MAX_NUMBER_SPACEPOINTS]
std::unique_ptr< Tracklet[]> m_seedsArray

◆ initialize()

StatusCode TrigInDetR3TrackSeedingTool::initialize ( )
overridevirtual

Reimplemented from SeedingToolBase.

Definition at line 34 of file TrigInDetR3TrackSeedingTool.cxx.

34 {
35
37
38 ATH_CHECK(m_regsel_pix.retrieve());
39 ATH_CHECK(m_regsel_sct.retrieve());
40
41 ATH_CHECK(m_beamSpotKey.initialize());
42
43#if 0
44 if(m_useGPU) {//for GPU offloading
45 ATH_CHECK(m_accelSvc.retrieve());
46 ATH_CHECK(m_accelSvc->isReady());
47 }
48#endif
49
51 ATH_MSG_FATAL("Both usePixelSpacePoints and useSctSpacePoints set to False. At least one needs to be True");
52 return StatusCode::FAILURE;
53 }
54
55 if (!m_useSctSpacePoints) ATH_MSG_INFO("Only using Pixel spacepoints => Pixel seeds only");
56
57 if (!m_usePixelSpacePoints) ATH_MSG_INFO("Only using SCT spacepoints => Strip seeds only");
58
59 if (m_usePixelSpacePoints && m_useSctSpacePoints) ATH_MSG_INFO("Using SCT and Pixel spacepoints");
60
62
64
65 ATH_MSG_INFO("TrigInDetR3TrackSeedingTool initialized with " << m_useGPU);
66
67 return StatusCode::SUCCESS;
68}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ runCCA() [1/2]

int SeedingToolBase::runCCA ( int nEdges,
std::vector< GNN_Edge > & edgeStorage ) const
protectedinherited

Definition at line 390 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.

390 {
391
392 constexpr int maxIter = 15;
393
394 int maxLevel = 0;
395
396 int iter = 0;
397
398 std::vector<TrigFTF_GNN_Edge*> v_old;
399
400 for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
401
402 TrigFTF_GNN_Edge* pS = &(edgeStorage[edgeIndex]);
403 if(pS->m_nNei == 0) continue;
404
405 v_old.push_back(pS);//TO-DO: increment level for segments as they already have at least one neighbour
406 }
407
408 std::vector<TrigFTF_GNN_Edge*> v_new;
409 v_new.reserve(v_old.size());
410
411 for(;iter<maxIter;iter++) {
412
413 //generate proposals
414 v_new.clear();
415
416 for(auto pS : v_old) {
417
418 int next_level = pS->m_level;
419
420 for(int nIdx=0;nIdx<pS->m_nNei;nIdx++) {
421
422 unsigned int nextEdgeIdx = pS->m_vNei[nIdx];
423
424 TrigFTF_GNN_Edge* pN = &(edgeStorage[nextEdgeIdx]);
425
426 if(pS->m_level == pN->m_level) {
427 next_level = pS->m_level + 1;
428 v_new.push_back(pS);
429 break;
430 }
431 }
432
433 pS->m_next = next_level;//proposal
434 }
435
436 //update
437
438 int nChanges = 0;
439
440 for(auto pS : v_new) {
441 if(pS->m_next != pS->m_level) {
442 nChanges++;
443 pS->m_level = pS->m_next;
444 if(maxLevel < pS->m_level) maxLevel = pS->m_level;
445 }
446 }
447
448 if(nChanges == 0) break;
449
450
451 v_old.swap(v_new);
452 v_new.clear();
453 }
454
455 return maxLevel;
456}

◆ runCCA() [2/2]

int SeedingToolBase::runCCA ( int nEdges,
std::vector< GNNR3_Edge > & edgeStorage ) const
protectedinherited

Definition at line 297 of file TrigInDetR3PattRecoTools/src/SeedingToolBase.cxx.

297 {
298
299 const int maxIter = 15;
300
301 int maxLevel = 0;
302
303 int iter = 0;
304
305 std::vector<TrigFTF_GNNR3_Edge*> v_old;
306
307 for(int edgeIndex=0;edgeIndex<nEdges;edgeIndex++) {
308
309 TrigFTF_GNNR3_Edge* pS = &(edgeStorage[edgeIndex]);
310 if(pS->m_nNei == 0) continue;
311
312 v_old.push_back(pS);//TO-DO: increment level for segments as they already have at least one neighbour
313 }
314
315 for(;iter<maxIter;iter++) {
316
317 //generate proposals
318 std::vector<TrigFTF_GNNR3_Edge*> v_new;
319 v_new.clear();
320 v_new.reserve(v_old.size());
321
322 for(auto pS : v_old) {
323
324 int next_level = pS->m_level;
325
326 for(int nIdx=0;nIdx<pS->m_nNei;nIdx++) {
327
328 unsigned int nextEdgeIdx = pS->m_vNei[nIdx];
329
330 TrigFTF_GNNR3_Edge* pN = &(edgeStorage[nextEdgeIdx]);
331
332 if(pS->m_level == pN->m_level) {
333 next_level = pS->m_level + 1;
334 v_new.push_back(pS);
335 break;
336 }
337 }
338
339 pS->m_next = next_level;//proposal
340 }
341
342 //update
343
344 int nChanges = 0;
345
346 for(auto pS : v_new) {
347 if(pS->m_next != pS->m_level) {
348 nChanges++;
349 pS->m_level = pS->m_next;
350 if(maxLevel < pS->m_level) maxLevel = pS->m_level;
351 }
352 }
353
354 if(nChanges == 0) break;
355
356
357 v_old = std::move(v_new);
358 v_new.clear();
359 }
360
361 return maxLevel;
362}

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_atlasId

const AtlasDetectorID * SeedingToolBase::m_atlasId = nullptr
protectedinherited

Definition at line 50 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> TrigInDetR3TrackSeedingTool::m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
protected

Definition at line 56 of file TrigInDetR3TrackSeedingTool.h.

56{ this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };

◆ m_connectionFile

StringProperty SeedingToolBase::m_connectionFile {this, "ConnectionFileName", "binTables_ITK_RUN4.txt"}
protectedinherited

Definition at line 67 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

67{this, "ConnectionFileName", "binTables_ITK_RUN4.txt"};

◆ m_connector [1/2]

std::unique_ptr<GNN_FasTrackConnector> SeedingToolBase::m_connector = nullptr
protectedinherited

Definition at line 77 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_connector [2/2]

std::unique_ptr<GNNR3_FasTrackConnector> SeedingToolBase::m_connector = nullptr
protectedinherited

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doubletFilterRZ

BooleanProperty SeedingToolBase::m_doubletFilterRZ {this, "Doublet_FilterRZ", true}
protectedinherited

Definition at line 60 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

60{this, "Doublet_FilterRZ", true};

◆ m_etaBinOverride

FloatProperty SeedingToolBase::m_etaBinOverride {this, "etaBin", 0.0f, "specify non-zero to override eta bin width from connection file (default 0.2 in createLinkingScheme.py)"}
protectedinherited

Definition at line 64 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

64{this, "etaBin", 0.0f, "specify non-zero to override eta bin width from connection file (default 0.2 in createLinkingScheme.py)"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_filter_phi

BooleanProperty SeedingToolBase::m_filter_phi {this, "DoPhiFiltering", true}
protectedinherited

Definition at line 54 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

54{this, "DoPhiFiltering", true};

◆ m_geo [1/2]

std::unique_ptr<const TrigFTF_GNN_Geometry> SeedingToolBase::m_geo = nullptr
protectedinherited

Definition at line 79 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_geo [2/2]

std::unique_ptr<const TrigFTF_GNNR3_Geometry> SeedingToolBase::m_geo = nullptr
protectedinherited

◆ m_layerGeometry

std::vector< TrigInDetSiLayer > SeedingToolBase::m_layerGeometry
protectedinherited

Definition at line 78 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_layerNumberTool

ToolHandle< ITrigL2LayerNumberTool > SeedingToolBase::m_layerNumberTool {this, "layerNumberTool", "TrigL2LayerNumberToolITk"}
protectedinherited

Definition at line 48 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

48{this, "layerNumberTool", "TrigL2LayerNumberToolITk"};

◆ m_LRTmode

BooleanProperty SeedingToolBase::m_LRTmode {this, "LRTMode",false}
protectedinherited

Definition at line 56 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

56{this, "LRTMode",false};

◆ m_lutFile

StringProperty SeedingToolBase::m_lutFile {this, "MLpredictorLutFileName", "gbts_ml_pixel_barrel_loose.lut"}
protectedinherited

Definition at line 68 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

68{this, "MLpredictorLutFileName", "gbts_ml_pixel_barrel_loose.lut"};

◆ m_matchBeforeCreate

BooleanProperty SeedingToolBase::m_matchBeforeCreate {this, "MatchBeforeCreate", true}
protectedinherited

Definition at line 62 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

62{this, "MatchBeforeCreate", true};

◆ m_minPt

FloatProperty SeedingToolBase::m_minPt {this, "pTmin", 1000.0}
protectedinherited

Definition at line 63 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

63{this, "pTmin", 1000.0};

◆ m_mlLUT

std::vector<std::array<float, 5> > SeedingToolBase::m_mlLUT
protectedinherited

Definition at line 80 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_nBufferEdges

IntegerProperty SeedingToolBase::m_nBufferEdges {this, "BufferEdges", 200000}
protectedinherited

Definition at line 66 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

66{this, "BufferEdges", 200000};

◆ m_nMaxEdges

IntegerProperty SeedingToolBase::m_nMaxEdges {this, "MaxGraphEdges", 2000000}
protectedinherited

Definition at line 65 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

65{this, "MaxGraphEdges", 2000000};

◆ m_nMaxPhiSlice

UnsignedIntegerProperty SeedingToolBase::m_nMaxPhiSlice {this, "nMaxPhiSlice", 53}
protectedinherited

Definition at line 59 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

59{this, "nMaxPhiSlice", 53};

◆ m_phiSliceWidth

float SeedingToolBase::m_phiSliceWidth = 0.
protectedinherited

Definition at line 75 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_pixelId

const PixelID * SeedingToolBase::m_pixelId = nullptr
protectedinherited

Definition at line 52 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_pixelSpacePointsContainerKey

SG::ReadHandleKey<SpacePointContainer> TrigInDetR3TrackSeedingTool::m_pixelSpacePointsContainerKey {this, "PixelSP_ContainerName", "ITkPixelTrigSpacePoints"}
protected

Definition at line 63 of file TrigInDetR3TrackSeedingTool.h.

63{this, "PixelSP_ContainerName", "ITkPixelTrigSpacePoints"};

◆ m_regsel_pix

ToolHandle<IRegSelTool> TrigInDetR3TrackSeedingTool::m_regsel_pix { this, "RegSelTool_Pixel", "RegSelTool/RegSelTool_Pixel" }
protected

region selector tools

Definition at line 67 of file TrigInDetR3TrackSeedingTool.h.

67{ this, "RegSelTool_Pixel", "RegSelTool/RegSelTool_Pixel" };

◆ m_regsel_sct

ToolHandle<IRegSelTool> TrigInDetR3TrackSeedingTool::m_regsel_sct { this, "RegSelTool_SCT", "RegSelTool/RegSelTool_SCT" }
protected

Definition at line 68 of file TrigInDetR3TrackSeedingTool.h.

68{ this, "RegSelTool_SCT", "RegSelTool/RegSelTool_SCT" };

◆ m_sctId

const SCT_ID * SeedingToolBase::m_sctId = nullptr
protectedinherited

Definition at line 51 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

◆ m_sctSpacePointsContainerKey

SG::ReadHandleKey<SpacePointContainer> TrigInDetR3TrackSeedingTool::m_sctSpacePointsContainerKey {this, "SCT_SP_ContainerName", "ITkStripTrigSpacePoints"}
protected

Definition at line 62 of file TrigInDetR3TrackSeedingTool.h.

62{this, "SCT_SP_ContainerName", "ITkStripTrigSpacePoints"};

◆ m_tau_ratio_cut

FloatProperty SeedingToolBase::m_tau_ratio_cut {this, "tau_ratio_cut", 0.007}
protectedinherited

Definition at line 73 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

73{this, "tau_ratio_cut", 0.007};

◆ m_useBeamTilt

BooleanProperty SeedingToolBase::m_useBeamTilt {this, "UseBeamTilt", false}
protectedinherited

Definition at line 55 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

55{this, "UseBeamTilt", false};

◆ m_useEtaBinning

BooleanProperty SeedingToolBase::m_useEtaBinning {this, "UseEtaBinning", true}
protectedinherited

Definition at line 61 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

61{this, "UseEtaBinning", true};

◆ m_useGPU

BooleanProperty TrigInDetR3TrackSeedingTool::m_useGPU {this, "UseGPU", false}
protected

Definition at line 72 of file TrigInDetR3TrackSeedingTool.h.

72{this, "UseGPU", false};

◆ m_useGPUseedExtraction

BooleanProperty SeedingToolBase::m_useGPUseedExtraction {this, "UseGPUseedExtraction", true}
protectedinherited

Definition at line 70 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

70{this, "UseGPUseedExtraction", true};

◆ m_useML

BooleanProperty SeedingToolBase::m_useML {this, "useML", true}
protectedinherited

Definition at line 57 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

57{this, "useML", true};

◆ m_useOldTunings

BooleanProperty SeedingToolBase::m_useOldTunings {this, "UseOldTunings", false}
protectedinherited

Definition at line 71 of file TrigInDetPattRecoTools/src/SeedingToolBase.h.

71{this, "UseOldTunings", false};

◆ m_usePixelSpacePoints

BooleanProperty TrigInDetR3TrackSeedingTool::m_usePixelSpacePoints {this, "UsePixelSpacePoints", true}
protected

Definition at line 58 of file TrigInDetR3TrackSeedingTool.h.

58{this, "UsePixelSpacePoints", true};

◆ m_useSctSpacePoints

BooleanProperty TrigInDetR3TrackSeedingTool::m_useSctSpacePoints {this, "UseSctSpacePoints", false}
protected

Definition at line 59 of file TrigInDetR3TrackSeedingTool.h.

59{this, "UseSctSpacePoints", false};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: