ATLAS Offline Software
Loading...
Searching...
No Matches
SiSpacePointsSeedMakerEventData.h
Go to the documentation of this file.
1// -*- C++ -*-
2
3/*
4 Copyright (C) 2002-2024 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
62 bool initialized{false};
63 bool trigger{false};
64 bool izvertex{false};
70 bool endlist{true};
71 bool isvertex{false};
72 bool checketa{false};
73
76 int iteration{0};
77 int iteration0{0};
78 int r_first{0};
79 int ns{0};
80 int nsaz{0};
81 int nsazv{0};
82 int nr{0};
83 int nrf{0};
84 int nrfz{0};
85 int nrfzv{0};
86 int state{0};
87 int nspoint{2};
88 int mode{0};
89 int nlist{0};
90 int fNmin{0};
91 int fvNmin{0};
92 int zMin{0};
93 int nOneSeeds{0};
94 int nOneSeedsQ{0};
96 int nprint{0};
97 int nseeds{0};
99
100 float K{0.};
101 float dzdrmin{0.}; //<! store eta cuts interpreted as dz/dr
102 float dzdrmax{0.}; //<! store eta cuts interpreted as dz/dr
103 float ipt2C{0.};
104 float ipt2K{0.};
105 float COFK{0.};
106 float zminU{0.};
107 float zmaxU{0.};
108 float zminB{0.};
109 float zmaxB{0.};
110 float ftrig{0.};
111 float ftrigW{0.};
112 float maxScore{0.};
113 float RTmin{0.};
114 float RTmax{0.};
115
122 float xbeam[4]{0., 1., 0., 0.};
123 float ybeam[4]{0., 0., 1., 0.};
124 float zbeam[4]{0., 0., 0., 1.};
125 float bField[3]{0., 0., 0.};
127
128 std::vector<int> r_index;
129 std::vector<int> r_map;
130 std::vector<int> rf_index;
131 std::vector<int> rf_map;
132 std::vector<int> rfz_index;
133 std::vector<int> rfz_map;
134 std::vector<int> rfzv_index;
135 std::vector<int> rfzv_map;
136
137 std::set<float> l_vertex;
138
144 std::vector<InDet::SiSpacePointForSeed*> SP;
145 std::vector<ITk::SiSpacePointForSeed*> ITkSP;
146
148 std::vector<float> Zo;
149 std::vector<float> Tz;
150 std::vector<float> R;
151 std::vector<float> U;
152 std::vector<float> V;
153 std::vector<float> X;
154 std::vector<float> Y;
155 std::vector<float> Er;
156 std::vector<FloatInt> Tn;
158
160
161 std::vector<InDet::SiSpacePointsSeed> OneSeeds;
162 std::vector<InDet::SiSpacePointsProSeed> OneSeeds_Pro;
163 std::vector<ITk::SiSpacePointsProSeed> ITkOneSeeds;
164 std::vector<ITk::SiSpacePointsProSeed> ITkOneSeedsQ;
165
166 std::vector<std::pair<float,InDet::SiSpacePointForSeed*>> CmSp;
167 std::vector<std::pair<float,ITk::SiSpacePointForSeed*>> ITkCmSp;
168
169 std::vector<std::vector<InDet::SiSpacePointForSeed*>> r_Sorted;
170 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rf_Sorted;
171 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rfz_Sorted;
172 std::vector<std::vector<InDet::SiSpacePointForSeed*>> rfzv_Sorted;
173 std::vector<std::vector<ITk::SiSpacePointForSeed*>> r_ITkSorted;
174 std::vector<std::vector<ITk::SiSpacePointForSeed*>> rfz_ITkSorted;
175 std::vector<std::vector<ITk::SiSpacePointForSeed*>> rfzv_ITkSorted;
176
177 std::vector<InDet::SiSpacePointsSeed> seeds;
178
199
201 std::list<ITk::SiSpacePointForSeed,
203
205 std::list<InDet::SiSpacePointsSeed,
207
211
215
216 // special treatment for cleaning
217 // given PoolStl allocator
218 template <typename T>
219 static void clearPoolList(std::list<T, SG::ArenaPoolSTLAllocator<T>>& poolList){
220 // Can't just use clear() because we want to erase the
221 // pool as well.
222 poolList = std::list<T, SG::ArenaPoolSTLAllocator<T>>();
223 }
224
231 //<! keep track of an iterator over the seed list. Frequently used to keep track of where to add the next SP
232 SiSpacePointForSeedPoolList::iterator i_spforseed;
233
235 ITkSiSpacePointForSeedPoolList::iterator i_ITkSpacePointForSeed;
236
237 std::vector<const xAOD::SpacePoint*> v_ActsSpacePointForSeed; //<! list of acts space points considered for seed building.
238 std::vector<std::unique_ptr<InDet::PixelSpacePoint>> v_PixelSpacePointForSeed;
239 std::vector<ITk::SiSpacePointForSeed> v_PixelSiSpacePointForSeed;
240 std::map<std::pair<std::size_t, std::size_t>, std::unique_ptr<InDet::SCT_SpacePoint>> v_StripSpacePointForSeed;
241
243 SiSpacePointsSeedPoolList::iterator i_seed;
244 SiSpacePointsSeedPoolList::iterator i_seede;
245 SiSpacePointsProSeedPoolList l_seeds_Pro; //<! lists of output seeds
246 SiSpacePointsProSeedPoolList::iterator i_seed_Pro; //<! iterators over the said list
247 SiSpacePointsProSeedPoolList::iterator i_seede_Pro;
248
250 ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeed;
251 ITkSiSpacePointsProSeedPoolList::iterator i_ITkSeedEnd;
252
253 std::vector<InDet::SiSpacePointForSeed*>::iterator rMin;
254 std::vector<ITk::SiSpacePointForSeed*>::iterator ITk_rMin;
255
256 std::multimap<float,InDet::SiSpacePointsSeed*> mapOneSeeds;
257 std::multimap<float,InDet::SiSpacePointsSeed*> mapSeeds;
258 std::multimap<float,InDet::SiSpacePointsSeed*> l_seeds_map;
259 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator seed;
260 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator seede;
261 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator i_seed_map;
262 std::multimap<float,InDet::SiSpacePointsSeed*>::iterator i_seede_map;
263 std::multimap<float,InDet::SiSpacePointsProSeed*> mapOneSeeds_Pro;
264 std::multimap<float,InDet::SiSpacePointsProSeed*> seeds_Pro;
265 std::multimap<float,InDet::SiSpacePointsProSeed*>::iterator seed_Pro;
266 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkMapOneSeeds;
267 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkMapOneSeedsQ;
268 std::multimap<float,ITk::SiSpacePointsProSeed*> ITkSeeds;
269 std::multimap<float,ITk::SiSpacePointsProSeed*>::iterator ITkSeedIterator;
270
271
276 void resizeSPCont(size_t increment=50, ToolType type = ToolType::ATLxk){
277 size_t currSizeSP = SP.size();
278 size_t newSizeSP = currSizeSP + increment;
279 if (type == ToolType::ITk) {
280 size_t currSizeITkSP = ITkSP.size();
281 size_t newSizeITkSP = currSizeITkSP + increment;
282 ITkSP.resize(newSizeITkSP, nullptr);
283 X.resize(newSizeITkSP, 0.);
284 Y.resize(newSizeITkSP, 0.);
285 Tn.resize(newSizeITkSP);
286 SP.resize(newSizeSP, nullptr);
287 } else {
288 SP.resize(newSizeSP, nullptr);
289 }
290 R.resize(newSizeSP, 0.);
291 Tz.resize(newSizeSP, 0.);
292 Er.resize(newSizeSP, 0.);
293 U.resize(newSizeSP, 0.);
294 V.resize(newSizeSP, 0.);
295 if (type != ToolType::Cosmic) {
296 Zo.resize(newSizeSP, 0.);
297 }
298 }
299
303 int maxsizeSP,
304 int maxOneSize,
305 int maxsize,
306 int sizeR,
307 int sizeRF,
308 int sizeRFZ,
309 int sizeRFZV,
310 bool checkEta) {
311 if (type==ToolType::ATLxk) {
312 CmSp.reserve(500);
313 } else if (type==ToolType::ITk) {
314 ITkCmSp.reserve(500);
315 }
316 resizeSPCont(maxsizeSP,type);
317 seedPerSpCapacity = maxOneSize;
318 if (type==ToolType::ATLxk) {
319 OneSeeds_Pro.resize(maxOneSize);
321 OneSeeds.resize(maxOneSize);
322 } else if (type==ToolType::ITk) {
323 ITkOneSeeds.resize(maxOneSize);
324 ITkOneSeedsQ.resize(maxOneSize);
325 }
326
327 // Build radius sorted containers
328 r_index.resize(sizeR, 0);
329 r_map.resize(sizeR, 0);
330 if (type==ToolType::ITk) {
331 r_ITkSorted.resize(sizeR);
332 } else {
333 r_Sorted.resize(sizeR);
334 }
335
337 // Build radius-azimuthal sorted containers
338 rf_index.resize(sizeRF, 0);
339 rf_map.resize(sizeRF, 0);
340 rf_Sorted.resize(sizeRF, {});
341 }
342
343 // Build radius-azimuthal-Z sorted containers
344 rfz_index.resize(sizeRFZ, 0);
345 rfz_map.resize(sizeRFZ, 0);
346 if (type==ToolType::ITk) {
347 rfz_ITkSorted.resize(sizeRFZ, {});
348 } else {
349 rfz_Sorted.resize(sizeRFZ, {});
350 }
351
353 // Build radius-azimuthal-Z sorted containers for Z-vertices
354 rfzv_index.resize(sizeRFZV, 0);
355 rfzv_map.resize(sizeRFZV, 0);
356 if (type==ToolType::ITk) {
357 rfzv_ITkSorted.resize(sizeRFZV, {});
358 } else {
359 rfzv_Sorted.resize(sizeRFZV, {});
360 }
361 }
362
363 if (type==ToolType::Cosmic) {
364 seeds.resize(maxsize+5);
365 }
366
367 if (type==ToolType::ATLxk) {
368 i_seed_Pro = l_seeds_Pro.begin();
369 i_seede_Pro = l_seeds_Pro.end();
371 i_seed = l_seeds.begin();
372 i_seede = l_seeds.end();
373 } else if (type==ToolType::ITk) {
374 i_ITkSeed = i_ITkSeeds.begin();
375 i_ITkSeedEnd = i_ITkSeeds.end();
376 }
377
378 if (type==ToolType::Trigger) {
379 seed = mapSeeds.begin();
380 seede = mapSeeds.end();
381 }
382
384 checketa = checkEta;
385 }
386
387 initialized = true;
388 }
389 };
390
391} // end of name space
392
393#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
bool keepAllConfirmedSeeds
Do we keep an unlimited number of confirmed seeds per central SP?
std::list< InDet::SiSpacePointsProSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointsProSeed > > SiSpacePointsProSeedPoolList
ITkSiSpacePointForSeedPoolList::iterator i_ITkSpacePointForSeed
std::vector< std::pair< float, ITk::SiSpacePointForSeed * > > ITkCmSp
std::multimap< float, InDet::SiSpacePointsSeed * >::iterator i_seede_map
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::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.
std::list< ITk::SiSpacePointForSeed, SG::ArenaPoolSTLAllocator< ITk::SiSpacePointForSeed > > ITkSiSpacePointForSeedPoolList
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::list< ITk::SiSpacePointsProSeed, SG::ArenaPoolSTLAllocator< ITk::SiSpacePointsProSeed > > ITkSiSpacePointsProSeedPoolList
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
std::list< InDet::SiSpacePointForSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointForSeed > > SiSpacePointForSeedPoolList
We want to use a pool block allocator.
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
std::list< InDet::SiSpacePointsSeed, SG::ArenaPoolSTLAllocator< InDet::SiSpacePointsSeed > > SiSpacePointsSeedPoolList
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
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.