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

#include <Gbts2ActsSeedingTool.h>

Inheritance diagram for Gbts2ActsSeedingTool:
Collaboration diagram for Gbts2ActsSeedingTool:

Public Member Functions

 Gbts2ActsSeedingTool (const std::string &, const std::string &, const IInterface *)
virtual ~Gbts2ActsSeedingTool ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual StatusCode createSeeds (const EventContext &ctx, const Acts::SpacePointContainer< ActsTrk::SpacePointCollector, Acts::detail::RefHolder > &spContainer, const Acts::Vector3 &beamSpotPos, const Acts::Vector3 &bField, ActsTrk::SeedContainer &seedContainer) const override
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 (ISeedingTool, 1, 0)
virtual StatusCode createSeeds (const EventContext &ctx, const Acts::SpacePointContainer< ActsTrk::SpacePointCollector, Acts::detail::RefHolder > &spContainer, const Acts::Vector3 &beamSpotPos, const Acts::Vector3 &bField, ActsTrk::SeedContainer &seedContainer) const
virtual StatusCode createSeeds2 (const EventContext &ctx, const std::vector< const xAOD::SpacePointContainer * > &spacePointCollections, const Eigen::Vector3f &beamSpotPos, float bFieldInZ, ActsTrk::SeedContainer &seedContainer) const

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

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" }
const std::vector< short > * m_sct_h2l {nullptr}
const std::vector< short > * m_pix_h2l {nullptr}
std::vector< bool > m_are_pixels
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 14 of file Gbts2ActsSeedingTool.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

◆ Gbts2ActsSeedingTool()

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

Definition at line 13 of file Gbts2ActsSeedingTool.cxx.

15 : SeedingToolBase(t,n,p)
16{
17}
SeedingToolBase(const std::string &t, const std::string &n, const IInterface *p)

◆ ~Gbts2ActsSeedingTool()

virtual Gbts2ActsSeedingTool::~Gbts2ActsSeedingTool ( )
inlinevirtual

Definition at line 19 of file Gbts2ActsSeedingTool.h.

19{};

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 bool is_connected = false;
212
213 const std::array<float, 5>& n1pars = B1.m_params[n1Idx];
214
215 float phi1 = n1pars[2];
216 float r1 = n1pars[3];
217 float z1 = n1pars[4];
218
219 for(unsigned int winIdx = 0; winIdx < vSLW.size(); winIdx++) {//the intermediate loop over sliding windows
220
221 GBTS_SlidingWindow& slw = vSLW[winIdx];
222
223 if (!slw.m_has_nodes) continue;
224
225 const TrigFTF_GNN_EtaBin& B2 = *slw.m_bin;
226
227 float deltaPhi = slw.m_deltaPhi;
228
229 //sliding window phi1 +/- deltaPhi
230
231 float minPhi = phi1 - deltaPhi;
232 float maxPhi = phi1 + deltaPhi;
233
234 for(unsigned int n2PhiIdx = slw.m_first_it; n2PhiIdx<B2.m_vPhiNodes.size();n2PhiIdx++) {//the inner loop over n2 nodes using sliding window
235
236 float phi2 = B2.m_vPhiNodes[n2PhiIdx].first;
237
238 if(phi2 < minPhi) {
239 slw.m_first_it = n2PhiIdx; //update the window position
240 continue;
241 }
242 if(phi2 > maxPhi) break; //break and go to the next window
243
244 unsigned int n2Idx = B2.m_vPhiNodes[n2PhiIdx].second;
245
246 if ((lk1 == 80000) && (B2.m_vIsConnected[n2Idx] == 0) ) continue;//skip isolated nodes as their incoming edges lead to nowhere
247
248 unsigned int n2_first_edge = B2.m_vFirstEdge[n2Idx];
249 unsigned short n2_num_edges = B2.m_vNumEdges[n2Idx];
250 unsigned int n2_last_edge = n2_first_edge + n2_num_edges;
251
252 const std::array<float, 5>& n2pars = B2.m_params[n2Idx];
253
254 float r2 = n2pars[3];
255
256 float dr = r2 - r1;
257
258 if(dr < minDeltaRadius) {
259 continue;
260 }
261
262 float z2 = n2pars[4];
263
264 float dz = z2 - z1;
265 float tau = dz/dr;
266 float ftau = std::fabs(tau);
267 if (ftau > 36.0) {
268 continue;
269 }
270
271 if(ftau < n1pars[0]) continue;
272 if(ftau > n1pars[1]) continue;
273
274 if(ftau < n2pars[0]) continue;
275 if(ftau > n2pars[1]) continue;
276
277 if (m_doubletFilterRZ) {
278
279 float z0 = z1 - r1*tau;
280
281 if(z0 < min_z0 || z0 > max_z0) continue;
282
283 float zouter = z0 + maxOuterRadius*tau;
284
285 if(zouter < cut_zMinU || zouter > cut_zMaxU) continue;
286 }
287
288 float curv = (phi2-phi1)/dr;
289 float abs_curv = std::abs(curv);
290
291 if(ftau < 4.0) {//eta = 2.1
292 if(abs_curv > maxKappa_low_eta) {
293 continue;
294 }
295 }
296 else {
297 if(abs_curv > maxKappa_high_eta) {
298 continue;
299 }
300 }
301
302 float exp_eta = std::sqrt(1.f+tau*tau) - tau;
303
304 if (m_matchBeforeCreate && (lk1 == 80000 || lk1 == 81000) ) {//match edge candidate against edges incoming to n2
305
306 bool isGood = n2_num_edges <= 2;//we must have enough incoming edges to decide
307
308 if(!isGood) {
309
310 float uat_1 = 1.0f/exp_eta;
311
312 for(unsigned int n2_in_idx = n2_first_edge; n2_in_idx < n2_last_edge; n2_in_idx++) {
313
314 float tau2 = edgeStorage.at(n2_in_idx).m_p[0];
315 float tau_ratio = tau2*uat_1 - 1.0f;
316
317 if(std::fabs(tau_ratio) > tau_ratio_precut){//bad match
318 continue;
319 }
320 isGood = true;//good match found
321 break;
322 }
323 }
324
325 if(!isGood) {//no match found, skip creating [n1 <- n2] edge
326 continue;
327 }
328 }
329
330 float dPhi2 = curv*r2;
331 float dPhi1 = curv*r1;
332
333 if(nEdges < m_nMaxEdges) {
334
335 edgeStorage.emplace_back(B1.m_vn[n1Idx], B2.m_vn[n2Idx], exp_eta, curv, phi1 + dPhi1);
336
337 num_created_edges++;
338
339 int outEdgeIdx = nEdges;
340
341 float uat_2 = 1.f/exp_eta;
342 float Phi2 = phi2 + dPhi2;
343 float curv2 = curv;
344
345 for(unsigned int inEdgeIdx = n2_first_edge; inEdgeIdx < n2_last_edge; inEdgeIdx++) {//looking for neighbours of the new edge
346
347 TrigFTF_GNN_Edge* pS = &(edgeStorage.at(inEdgeIdx));
348
349 if(pS->m_nNei >= N_SEG_CONNS) continue;
350
351 float tau_ratio = pS->m_p[0]*uat_2 - 1.0f;
352
353 if(std::abs(tau_ratio) > cut_tau_ratio_max){//bad match
354 continue;
355 }
356
357 float dPhi = Phi2 - pS->m_p[2];
358
359 if(dPhi<-M_PI) dPhi += M_2PI;
360 else if(dPhi>M_PI) dPhi -= M_2PI;
361
362 if(std::abs(dPhi) > cut_dphi_max) {
363 continue;
364 }
365
366 float dcurv = curv2 - pS->m_p[1];
367
368 if(dcurv < -cut_dcurv_max || dcurv > cut_dcurv_max) {
369 continue;
370 }
371
372 pS->m_vNei[pS->m_nNei++] = outEdgeIdx;
373
374 is_connected = true;//there is at least one good match
375
376 nConnections++;
377
378 }
379 nEdges++;
380 }
381 } //loop over n2 (outer) nodes inside a sliding window on n2 bin
382 } //loop over sliding windows associated with n2 bins
383
384 //updating the n1 node attributes
385
386 B1.m_vNumEdges[n1Idx] = num_created_edges;
387 if (is_connected) {
388 B1.m_vIsConnected[n1Idx] = 1;
389 }
390
391 } //loop over n1 (inner) nodes
392 } //loop over bin groups: a single n1 bin and multiple n2 bins
393
394 if(nEdges >= m_nMaxEdges) {
395 ATH_MSG_WARNING("Maximum number of graph edges exceeded - possible efficiency loss "<< nEdges);
396 }
397
398 return std::make_pair(nEdges, nConnections);
399}
#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
std::vector< unsigned short > m_vIsConnected
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

◆ createSeeds() [1/2]

virtual StatusCode ActsTrk::ISeedingTool::createSeeds ( const EventContext & ctx,
const Acts::SpacePointContainer< ActsTrk::SpacePointCollector, Acts::detail::RefHolder > & spContainer,
const Acts::Vector3 & beamSpotPos,
const Acts::Vector3 & bField,
ActsTrk::SeedContainer & seedContainer ) const
inlinevirtualinherited

Definition at line 29 of file ISeedingTool.h.

34 {
35 (void)ctx;
36 (void)spContainer;
37 (void)beamSpotPos;
38 (void)bField;
39 (void)seedContainer;
40 return StatusCode::FAILURE;
41 }

◆ createSeeds() [2/2]

StatusCode Gbts2ActsSeedingTool::createSeeds ( const EventContext & ctx,
const Acts::SpacePointContainer< ActsTrk::SpacePointCollector, Acts::detail::RefHolder > & spContainer,
const Acts::Vector3 & beamSpotPos,
const Acts::Vector3 & bField,
ActsTrk::SeedContainer & seedContainer ) const
overridevirtual

Definition at line 34 of file Gbts2ActsSeedingTool.cxx.

34 {
35
36 seedContainer.spacePoints().reserve(spContainer.size());
37 std::unique_ptr<GNN_DataStorage> storage = std::make_unique<GNN_DataStorage>(*m_geo, m_mlLUT);
38
39 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
40
41 const Amg::Vector3D &vertex = beamSpotHandle->beamPos();
42
43 float shift_x = vertex.x() - beamSpotHandle->beamTilt(0)*vertex.z();
44 float shift_y = vertex.y() - beamSpotHandle->beamTilt(1)*vertex.z();
45
46 std::vector<std::vector<GNN_Node> > node_storage;//layer-based collections
47 node_storage.resize(m_are_pixels.size());
48
49 for(auto& v : node_storage) v.reserve(100000);
50
51 unsigned int nPixelLoaded = 0;
52 unsigned int nStripLoaded = 0;
53
54 for(size_t idx=0; idx<spContainer.size(); idx++){
55 const auto & sp = spContainer.at(idx);
56 const auto & extSP = sp.externalSpacePoint();
57 seedContainer.spacePoints().push_back(&extSP);
58 const std::vector<xAOD::DetectorIDHashType>& elementlist = extSP.elementIdList() ;
59
60 bool isPixel(elementlist.size() == 1);
61
62 short layer = (isPixel ? m_pix_h2l : m_sct_h2l)->at(static_cast<int>(elementlist[0]));
63
64 //convert incoming xaod spacepoints into GNN nodes
65
66 GNN_Node& node = node_storage[layer].emplace_back(layer);
67
68 const auto& pos = extSP.globalPosition();
69
70 node.m_x = pos.x() - shift_x;
71 node.m_y = pos.y() - shift_y;
72 node.m_z = pos.z();
73 node.m_r = std::sqrt(std::pow(node.m_x, 2) + std::pow(node.m_y, 2));
74 node.m_phi = std::atan2(node.m_y, node.m_x);
75 node.m_idx = idx;
76
77 if(isPixel && m_useML){
78 //Check type in debug build otherwise assume it is correct
79 assert(dynamic_cast<const xAOD::PixelCluster*>(extSP.measurements().front())!=nullptr);
80 const xAOD::PixelCluster* pCL = static_cast<const xAOD::PixelCluster*>(extSP.measurements().front());
81 node.m_pcw = pCL->widthInEta();
82 node.m_locPosY = pCL->localPosition<2>().y();
83 }
84 }
85
86 for(size_t l = 0; l < node_storage.size(); l++) {
87
88 const std::vector<GNN_Node>& nodes = node_storage[l];
89
90 if(nodes.size() == 0) continue;
91
92 if(m_are_pixels[l])
93 nPixelLoaded += storage->loadPixelGraphNodes(l, nodes, m_useML);
94 else
95 nStripLoaded += storage->loadStripGraphNodes(l, nodes);
96 }
97
98 ATH_MSG_DEBUG("Loaded "<<nPixelLoaded<<" pixel spacepoints and "<<nStripLoaded<<" strip spacepoints");
99
100 storage->sortByPhi();
101
102 storage->initializeNodes(m_useML);
103
104 storage->generatePhiIndexing(1.5f*m_phiSliceWidth);
105
106 std::vector<GNN_Edge> edgeStorage;
107
108 const TrigRoiDescriptor fakeRoi = TrigRoiDescriptor(0, -4.5, 4.5, 0, -M_PI, M_PI, 0, -150.0, 150.0);
109
110 std::pair<int, int> graphStats = buildTheGraph(fakeRoi, storage, edgeStorage);
111
112 ATH_MSG_DEBUG("Created graph with "<<graphStats.first<<" edges and "<<graphStats.second<< " edge links");
113
114 if (graphStats.first == 0 || graphStats.second == 0) return StatusCode::SUCCESS;
115
116 int maxLevel = runCCA(graphStats.first, edgeStorage);
117
118 ATH_MSG_DEBUG("Reached Level "<<maxLevel<<" after GNN iterations");
119
120 std::vector<std::tuple<float, int, std::vector<unsigned int> > > vSeedCandidates;
121
122 extractSeedsFromTheGraph(maxLevel, graphStats.first, spContainer.size(), edgeStorage, vSeedCandidates);
123
124 if (vSeedCandidates.empty()) return StatusCode::SUCCESS;
125
126 seedContainer.reserve(vSeedCandidates.size(), 7.0f); // 7 SP/seed to optimise allocations (average is 6.1 SP/seed)
127
128 for (const auto& seed : vSeedCandidates) {
129
130 if (std::get<1>(seed) != 0) continue;//identified as a clone of a better candidate
131
132 //add seed to output
133
134 auto newseed = seedContainer.push_back(std::get<2>(seed));
135 newseed.quality() = std::get<0>(seed);
136
137 }
138
139 ATH_MSG_DEBUG("GBTS created "<<seedContainer.size()<<" seeds");
140
141 return StatusCode::SUCCESS;
142}
#define ATH_MSG_DEBUG(x)
static Double_t sp
Athena::TPCnvVers::Current TrigRoiDescriptor
#define y
const std::vector< short > * m_pix_h2l
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
const std::vector< short > * m_sct_h2l
std::vector< bool > m_are_pixels
int runCCA(int, std::vector< GNN_Edge > &) const
std::vector< std::array< float, 5 > > m_mlLUT
std::pair< int, int > buildTheGraph(const IRoiDescriptor &, const std::unique_ptr< GNN_DataStorage > &, std::vector< GNN_Edge > &) const
void extractSeedsFromTheGraph(int, int, int, std::vector< GNN_Edge > &, std::vector< std::tuple< float, int, std::vector< unsigned int > > > &) const
float widthInEta() const
Returns the width of the cluster in phi (x) and eta (y) directions, respectively.
ConstVectorMap< N > localPosition() const
Returns the local position of the measurement.
Eigen::Matrix< double, 3, 1 > Vector3D
l
Printing final latex table to .tex output file.
@ layer
Definition HitInfo.h:79
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
Acts::MutableSeedProxy2 push_back(Acts::SpacePointIndexSubset2 sp)
const SpacePointContainer & spacePoints() const noexcept

◆ createSeeds2()

virtual StatusCode ActsTrk::ISeedingTool::createSeeds2 ( const EventContext & ctx,
const std::vector< const xAOD::SpacePointContainer * > & spacePointCollections,
const Eigen::Vector3f & beamSpotPos,
float bFieldInZ,
ActsTrk::SeedContainer & seedContainer ) const
inlinevirtualinherited

Definition at line 43 of file ISeedingTool.h.

48 {
49 (void)ctx;
50 (void)spacePointCollections;
51 (void)beamSpotPos;
52 (void)bFieldInZ;
53 (void)seedContainer;
54 return StatusCode::FAILURE;
55 }

◆ 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()

ActsTrk::ISeedingTool::DeclareInterfaceID ( ISeedingTool ,
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 469 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.

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

Reimplemented from SeedingToolBase.

Definition at line 30 of file Gbts2ActsSeedingTool.cxx.

◆ initialize()

StatusCode Gbts2ActsSeedingTool::initialize ( )
overridevirtual

Reimplemented from SeedingToolBase.

Definition at line 19 of file Gbts2ActsSeedingTool.cxx.

19 {
21 ATH_CHECK(m_beamSpotKey.initialize());
22 m_sct_h2l = m_layerNumberTool->sctLayers();
23 m_pix_h2l = m_layerNumberTool->pixelLayers();
24 m_are_pixels.resize(m_layerNumberTool->maxNumberOfUniqueLayers(), true);
25 for(const auto& l : *m_sct_h2l) m_are_pixels[l] = false;
26
27 return StatusCode::SUCCESS;
28}
#define ATH_CHECK
Evaluate an expression and check for errors.
ToolHandle< ITrigL2LayerNumberTool > m_layerNumberTool

◆ 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 401 of file TrigInDetPattRecoTools/src/SeedingToolBase.cxx.

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

◆ 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_are_pixels

std::vector<bool> Gbts2ActsSeedingTool::m_are_pixels
protected

Definition at line 38 of file Gbts2ActsSeedingTool.h.

◆ 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> Gbts2ActsSeedingTool::m_beamSpotKey { this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }
protected

Definition at line 34 of file Gbts2ActsSeedingTool.h.

34{ 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_pix_h2l

const std::vector<short>* Gbts2ActsSeedingTool::m_pix_h2l {nullptr}
protected

Definition at line 37 of file Gbts2ActsSeedingTool.h.

37{nullptr};

◆ m_pixelId

const PixelID * SeedingToolBase::m_pixelId = nullptr
protectedinherited

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

◆ m_sct_h2l

const std::vector<short>* Gbts2ActsSeedingTool::m_sct_h2l {nullptr}
protected

Definition at line 36 of file Gbts2ActsSeedingTool.h.

36{nullptr};

◆ m_sctId

const SCT_ID * SeedingToolBase::m_sctId = nullptr
protectedinherited

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

◆ 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_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_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: