ATLAS Offline Software
Loading...
Searching...
No Matches
SiSpacePointsSeedMakerEventData.h
Go to the documentation of this file.
1// -*- C++ -*-
2
3/*
4 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
5*/
6
8// Header file for struct SiSpacePointsSeedMakerEventData
10
11#ifndef SiSpacePointsSeedMakerEventData_h
12#define SiSpacePointsSeedMakerEventData_h
13
21
22//custom allocator
24
26
27#include <list>
28#include <map>
29#include <vector>
30
31namespace InDet {
32
33 class FloatInt {
34 public:
35 float Fl;
36 int In;
37 };
38
48
50 public:
61
64
65 bool initialized{false};
66 bool trigger{false};
67 bool izvertex{false};
73 bool endlist{true};
74 bool isvertex{false};
75 bool checketa{false};
76
79 int iteration{0};
80 int iteration0{0};
81 int r_first{0};
82 int ns{0};
83 int nsaz{0};
84 int nsazv{0};
85 int nr{0};
86 int nrf{0};
87 int nrfz{0};
88 int nrfzv{0};
89 int state{0};
90 int nspoint{2};
91 int mode{0};
92 int nlist{0};
93 int fNmin{0};
94 int fvNmin{0};
95 int zMin{0};
96 int nOneSeeds{0};
97 int nOneSeedsQ{0};
99 int nprint{0};
100 int nseeds{0};
102
103 float K{0.};
104 float dzdrmin{0.}; //<! store eta cuts interpreted as dz/dr
105 float dzdrmax{0.}; //<! store eta cuts interpreted as dz/dr
106 float ipt2C{0.};
107 float ipt2K{0.};
108 float COFK{0.};
109 float zminU{0.};
110 float zmaxU{0.};
111 float zminB{0.};
112 float zmaxB{0.};
113 float ftrig{0.};
114 float ftrigW{0.};
115 float maxScore{0.};
116 float RTmin{0.};
117 float RTmax{0.};
118
125 float xbeam[4]{0., 1., 0., 0.};
126 float ybeam[4]{0., 0., 1., 0.};
127 float zbeam[4]{0., 0., 0., 1.};
128 float bField[3]{0., 0., 0.};
130
131 std::vector<int> r_index;
132 std::vector<int> r_map;
133 std::vector<int> rf_index;
134 std::vector<int> rf_map;
135 std::vector<int> rfz_index;
136 std::vector<int> rfz_map;
137 std::vector<int> rfzv_index;
138 std::vector<int> rfzv_map;
139
140 std::set<float> l_vertex;
141
147 std::vector<InDet::SiSpacePointForSeed*> SP;
148 std::vector<ITk::SiSpacePointForSeed*> ITkSP;
149
151 std::vector<float> Zo;
152 std::vector<float> Tz;
153 std::vector<float> R;
154 std::vector<float> U;
155 std::vector<float> V;
156 std::vector<float> X;
157 std::vector<float> Y;
158 std::vector<float> Er;
159 std::vector<FloatInt> Tn;
161
163
164 std::vector<InDet::SiSpacePointsSeed> OneSeeds;
165 std::vector<InDet::SiSpacePointsProSeed> OneSeeds_Pro;
166 std::vector<ITk::SiSpacePointsProSeed> ITkOneSeeds;
167 std::vector<ITk::SiSpacePointsProSeed> ITkOneSeedsQ;
168
169 std::vector<std::pair<float,InDet::SiSpacePointForSeed*>> CmSp;
170 std::vector<std::pair<float,ITk::SiSpacePointForSeed*>> ITkCmSp;
171
172 std::vector<std::vector<InDet::SiSpacePointForSeed*>> r_Sorted;
173 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rf_Sorted;
174 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rfz_Sorted;
175 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rfzv_Sorted;
176 std::vector<std::vector<ITk::SiSpacePointForSeed*>> r_ITkSorted;
177 std::vector<std::vector<ITk::SiSpacePointForSeed*>> rfz_ITkSorted;
178 std::vector<std::vector<ITk::SiSpacePointForSeed*>> rfzv_ITkSorted;
179
180 std::vector<InDet::SiSpacePointsSeed> seeds;
181
202
204 std::list<ITk::SiSpacePointForSeed,
206
208 std::list<InDet::SiSpacePointsSeed,
210
214
218
219 // special treatment for cleaning
220 // given PoolStl allocator
221 template <typename T>
222 static void clearPoolList(std::list<T, SG::ArenaPoolSTLAllocator<T>>& poolList){
223 // Can't just use clear() because we want to erase the
224 // pool as well.
225 poolList = std::list<T, SG::ArenaPoolSTLAllocator<T>>();
226 }
227
234 //<! keep track of an iterator over the seed list. Frequently used to keep track of where to add the next SP
235 SiSpacePointForSeedPoolList::iterator i_spforseed{};
236
238 ITkSiSpacePointForSeedPoolList::iterator i_ITkSpacePointForSeed{};
239
240 std::vector<const xAOD::SpacePoint*> v_ActsSpacePointForSeed; //<! list of acts space points considered for seed building.
241 std::vector<std::unique_ptr<InDet::PixelSpacePoint>> v_PixelSpacePointForSeed;
242 std::vector<ITk::SiSpacePointForSeed> v_PixelSiSpacePointForSeed;
243 std::map<std::pair<std::size_t, std::size_t>, std::unique_ptr<InDet::SCT_SpacePoint>> v_StripSpacePointForSeed;
244
246 SiSpacePointsSeedPoolList::iterator i_seed{};
247 SiSpacePointsSeedPoolList::iterator i_seede{};
248 SiSpacePointsProSeedPoolList l_seeds_Pro; //<! lists of output seeds
249 SiSpacePointsProSeedPoolList::iterator i_seed_Pro{}; //<! iterators over the said list
250 SiSpacePointsProSeedPoolList::iterator i_seede_Pro{};
251
253 ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeed{};
254 ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeedEnd{};
255
256 std::vector<InDet::SiSpacePointForSeed*>::iterator rMin{};
257 std::vector<ITk::SiSpacePointForSeed*>::iterator ITk_rMin{};
258
259 std::multimap<float,InDet::SiSpacePointsSeed*> mapOneSeeds;
260 std::multimap<float,InDet::SiSpacePointsSeed*> mapSeeds;
261 std::multimap<float,InDet::SiSpacePointsSeed*> l_seeds_map;
262 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator seed{};
263 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator seede{};
264 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator i_seed_map{};
265 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator i_seede_map{};
266 std::multimap<float,InDet::SiSpacePointsProSeed*> mapOneSeeds_Pro;
267 std::multimap<float,InDet::SiSpacePointsProSeed*> seeds_Pro;
268 std::multimap<float,InDet::SiSpacePointsProSeed*>::iterator seed_Pro{};
269 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkMapOneSeeds;
270 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkMapOneSeedsQ;
271 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkSeeds;
272 std::multimap<float,ITk::SiSpacePointsProSeed*>::iterator ITkSeedIterator{};
273
274
279 void resizeSPCont(size_t increment=50, ToolType type = ToolType::ATLxk){
280 size_t currSizeSP = SP.size();
281 size_t newSizeSP = currSizeSP + increment;
282 if (type == ToolType::ITk) {
283 size_t currSizeITkSP = ITkSP.size();
284 size_t newSizeITkSP = currSizeITkSP + increment;
285 ITkSP.resize(newSizeITkSP, nullptr);
286 X.resize(newSizeITkSP, 0.);
287 Y.resize(newSizeITkSP, 0.);
288 Tn.resize(newSizeITkSP);
289 SP.resize(newSizeSP, nullptr);
290 } else {
291 SP.resize(newSizeSP, nullptr);
292 }
293 R.resize(newSizeSP, 0.);
294 Tz.resize(newSizeSP, 0.);
295 Er.resize(newSizeSP, 0.);
296 U.resize(newSizeSP, 0.);
297 V.resize(newSizeSP, 0.);
298 if (type != ToolType::Cosmic) {
299 Zo.resize(newSizeSP, 0.);
300 }
301 }
302
306 int maxsizeSP,
307 int maxOneSize,
308 int maxsize,
309 int sizeR,
310 int sizeRF,
311 int sizeRFZ,
312 int sizeRFZV,
313 bool checkEta) {
314 if (type==ToolType::ATLxk) {
315 CmSp.reserve(500);
316 } else if (type==ToolType::ITk) {
317 ITkCmSp.reserve(500);
318 }
319 resizeSPCont(maxsizeSP,type);
320 seedPerSpCapacity = maxOneSize;
321 if (type==ToolType::ATLxk) {
322 OneSeeds_Pro.resize(maxOneSize);
324 OneSeeds.resize(maxOneSize);
325 } else if (type==ToolType::ITk) {
326 ITkOneSeeds.resize(maxOneSize);
327 ITkOneSeedsQ.resize(maxOneSize);
328 }
329
330 // Build radius sorted containers
331 r_index.resize(sizeR, 0);
332 r_map.resize(sizeR, 0);
333 if (type==ToolType::ITk) {
334 r_ITkSorted.resize(sizeR);
335 } else {
336 r_Sorted.resize(sizeR);
337 }
338
340 // Build radius-azimuthal sorted containers
341 rf_index.resize(sizeRF, 0);
342 rf_map.resize(sizeRF, 0);
343 rf_Sorted.resize(sizeRF, {});
344 }
345
346 // Build radius-azimuthal-Z sorted containers
347 rfz_index.resize(sizeRFZ, 0);
348 rfz_map.resize(sizeRFZ, 0);
349 if (type==ToolType::ITk) {
350 rfz_ITkSorted.resize(sizeRFZ, {});
351 } else {
352 rfz_Sorted.resize(sizeRFZ, {});
353 }
354
356 // Build radius-azimuthal-Z sorted containers for Z-vertices
357 rfzv_index.resize(sizeRFZV, 0);
358 rfzv_map.resize(sizeRFZV, 0);
359 if (type==ToolType::ITk) {
360 rfzv_ITkSorted.resize(sizeRFZV, {});
361 } else {
362 rfzv_Sorted.resize(sizeRFZV, {});
363 }
364 }
365
366 if (type==ToolType::Cosmic) {
367 seeds.resize(maxsize+5);
368 }
369
370 if (type==ToolType::ATLxk) {
371 i_seed_Pro = l_seeds_Pro.begin();
372 i_seede_Pro = l_seeds_Pro.end();
374 i_seed = l_seeds.begin();
375 i_seede = l_seeds.end();
376 } else if (type==ToolType::ITk) {
377 i_ITkSeed = i_ITkSeeds.begin();
378 i_ITkSeedEnd = i_ITkSeeds.end();
379 }
380
381 if (type==ToolType::Trigger) {
382 seed = mapSeeds.begin();
383 seede = mapSeeds.end();
384 }
385
387 checketa = checkEta;
388 }
389
390 initialized = true;
391 }
392 };
393
394} // end of name space
395
396#endif // SiSpacePointsSeedMakerEventData_h
STL-style allocator wrapper for ArenaPoolAllocator.
InDet::SiSpacePointsSeedMakerEventData holds event dependent data used by ISiSpacePointsSeedMaker.
std::vector< ITk::SiSpacePointsProSeed > ITkOneSeedsQ
std::multimap< float, InDet::SiSpacePointsSeed * > l_seeds_map
ToolType
enums to specify which SiSpacePointsSeedMaker owns the object.
std::vector< std::unique_ptr< InDet::PixelSpacePoint > > v_PixelSpacePointForSeed
void initialize(ToolType type, int maxsizeSP, int maxOneSize, int maxsize, int sizeR, int sizeRF, int sizeRFZ, int sizeRFZV, bool checkEta)
Initialize data members based on ToolType enum.
float ipt2K
1 / (K * 0.9 * pt cut)², allows us to directly apply our pt cut on the (2R)² estimate we obtain from ...
std::vector< ITk::SiSpacePointsProSeed > ITkOneSeeds
SiSpacePointForSeedPoolList::iterator i_spforseed
ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeedEnd
std::vector< const xAOD::SpacePoint * > v_ActsSpacePointForSeed
int nsaz
number of SP in the Phi-Z 2D binning
static void clearPoolList(std::list< T, SG::ArenaPoolSTLAllocator< T > > &poolList)
int r_first
points to the index of the highest occupied radius bin
std::multimap< float, InDet::SiSpacePointsSeed * >::iterator i_seed_map
int nrfz
also number of SP in the phi-Z 2D binning??
std::vector< InDet::SiSpacePointsProSeed > OneSeeds_Pro
std::vector< std::vector< ITk::SiSpacePointForSeed * > > rfz_ITkSorted
int seedPerSpCapacity
capacity for seeds from a single SP in the respective storage vector
float xbeam[4]
x,ax,ay,az - center and x-axis direction
std::vector< ITk::SiSpacePointForSeed * >::iterator ITk_rMin
std::list< InDet::SiSpacePointsProSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointsProSeed > > SiSpacePointsProSeedPoolList
bool keepAllConfirmedSeeds
Do we keep an unlimited number of confirmed seeds per central SP?
ITkSiSpacePointForSeedPoolList::iterator i_ITkSpacePointForSeed
std::vector< std::pair< float, ITk::SiSpacePointForSeed * > > ITkCmSp
std::list< InDet::SiSpacePointsSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointsSeed > > SiSpacePointsSeedPoolList
std::multimap< float, InDet::SiSpacePointsSeed * >::iterator i_seede_map
std::list< ITk::SiSpacePointForSeed, SG::ArenaPoolSTLAllocator< ITk::SiSpacePointForSeed > > ITkSiSpacePointForSeedPoolList
std::map< std::pair< std::size_t, std::size_t >, std::unique_ptr< InDet::SCT_SpacePoint > > v_StripSpacePointForSeed
std::vector< int > rfz_map
number of SP in each bin of the 2D phi-z map
std::vector< InDet::SiSpacePointsSeed > OneSeeds
std::vector< float > Er
error component on 1/tan(theta)==dz/dr from the position errors on the space-points
float ybeam[4]
y,ax,ay,az - center and y-axis direction
std::list< ITk::SiSpacePointsProSeed, SG::ArenaPoolSTLAllocator< ITk::SiSpacePointsProSeed > > ITkSiSpacePointsProSeedPoolList
std::vector< float > U
transformed U coordinate (x/(x²+y²)) in frame around central SP
std::multimap< float, InDet::SiSpacePointsSeed * > mapSeeds
std::multimap< float, InDet::SiSpacePointsProSeed * > mapOneSeeds_Pro
int ns
total number of SP that we sorted into our r-binned vector
SiSpacePointForSeedPoolList l_spforseed
list of all space points considered for seed building.
float ipt2C
inverse of 90% of the pt cut, squared, multiplied by a magic conversion factor
std::vector< std::pair< float, InDet::SiSpacePointForSeed * > > CmSp
std::vector< ITk::SiSpacePointForSeed > v_PixelSiSpacePointForSeed
bool isvertex
whether or not we contain a non-empty vertex list
std::vector< InDet::SiSpacePointForSeed * >::iterator rMin
std::vector< float > V
transformed V coordinate (y/(x²+y²)) in frame around central SP
std::multimap< float, ITk::SiSpacePointsProSeed * > ITkMapOneSeeds
SiSpacePointsProSeedPoolList::iterator i_seede_Pro
float K
conversion from pT in MeV to twice the circle radius in the transverse plane in mm
std::vector< std::vector< InDet::SiSpacePointForSeed * > > rfz_Sorted
vector of space points in each bin of the 2D phi-z binning
std::multimap< float, InDet::SiSpacePointsProSeed * >::iterator seed_Pro
std::vector< float > Zo
The following are parameters characterising individual space points within a seed (relative to the ce...
std::multimap< float, InDet::SiSpacePointsSeed * >::iterator seede
bool endlist
indicate if we are done with the seed search for an event.
int nr
this keeps track of the number of occupied radial bins (so it is typically less than the total number...
std::vector< int > rfz_index
2D index in the 2D phi-z map of each SP in the r-sored vector
bool initialized
has the data object been initialized?
std::vector< ITk::SiSpacePointForSeed * > ITkSP
std::vector< InDet::SiSpacePointsSeed > seeds
std::vector< std::vector< InDet::SiSpacePointForSeed * > > rf_Sorted
std::vector< float > R
inverse distance to the central space point
std::vector< std::vector< InDet::SiSpacePointForSeed * > > r_Sorted
vector of space points in each bin of the 1D radial binning
int state
state info - 0 seems to mean cuts aren ot configured
SiSpacePointsProSeedPoolList::iterator i_seed_Pro
std::vector< std::vector< ITk::SiSpacePointForSeed * > > rfzv_ITkSorted
ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeed
std::vector< std::vector< InDet::SiSpacePointForSeed * > > rfzv_Sorted
int maxSeedsPerSP
Number of Seeds allowed to be built per central Seed.
std::vector< float > Tz
1/tan(theta) == dz/dr estimate from 2 points
std::multimap< float, InDet::SiSpacePointsProSeed * > seeds_Pro
float zbeam[4]
z,ax,ay,az - center and z-axis direction
std::vector< std::vector< ITk::SiSpacePointForSeed * > > r_ITkSorted
std::multimap< float, InDet::SiSpacePointsSeed * >::iterator seed
std::list< InDet::SiSpacePointForSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointForSeed > > SiSpacePointForSeedPoolList
We want to use a pool block allocator.
void resizeSPCont(size_t increment=50, ToolType type=ToolType::ATLxk)
allow to resize the space-point container on-the-fly in case more space is needed.
std::vector< InDet::SiSpacePointForSeed * > SP
space points to consider for the current seed candidate
std::multimap< float, ITk::SiSpacePointsProSeed * > ITkMapOneSeedsQ
std::multimap< float, ITk::SiSpacePointsProSeed * >::iterator ITkSeedIterator
std::multimap< float, InDet::SiSpacePointsSeed * > mapOneSeeds
std::multimap< float, ITk::SiSpacePointsProSeed * > ITkSeeds
STL-style allocator wrapper for ArenaPoolAllocator.
Primary Vertex Finder.