ATLAS Offline Software
CompactBinnedArray2D.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CompactBinnedArray2D.h, (c) ATLAS Detector software
8 
9 #ifndef TRKDETDESCRUTILS_COMPACTBINNEDARRAY2D_H
10 #define TRKDETDESCRUTILS_COMPACTBINNEDARRAY2D_H
11 
14 
15 // STL
16 #include <vector>
17 
18 class MsgStream;
19 
20 namespace Trk {
21 
30 template<class T>
32 {
33 
34 public:
35 
36  //Rule of 0 for default ctors
37 
39  CompactBinnedArray2D(const std::vector<T*>& tclassvector,
40  const std::vector<std::vector<size_t>>& indexarray,
41  const BinUtility& bingen,
42  const std::vector<Trk::BinUtility>& bVec)
43  : CompactBinnedArray<T>(),
44  m_array(indexarray),
45  m_arrayObjects(tclassvector),
46  m_binUtility(bingen),
47  m_buVec(bVec) {}
48 
49  CompactBinnedArray2D(const std::vector<T*>& tclassvector,
50  std::vector<std::vector<size_t>>&& indexarray,
51  BinUtility&& bingen, std::vector<Trk::BinUtility>&& bVec)
52  : CompactBinnedArray<T>(),
53  m_array(std::move(indexarray)),
54  m_arrayObjects(tclassvector),
55  m_binUtility(std::move(bingen)),
56  m_buVec(std::move(bVec)) {}
57 
58 
61  {
63  }
64 
65  CompactBinnedArray2D* clone(const std::vector<T*>& ptrs) const
66  {
67  assert(ptrs.size() == m_arrayObjects.size());
69  }
70 
74  T* object(const Amg::Vector2D& lp) const
75  {
76  if (m_binUtility.inside(lp)) {
77  size_t bin = m_binUtility.bin(lp, 0);
78  if (m_buVec[bin].inside(lp))
79  return m_arrayObjects[m_array[bin][m_buVec[bin].bin(lp, 0)]];
80  }
81  return nullptr;
82  }
83 
87  T* object(const Amg::Vector3D& gp) const
88  {
89  size_t bin = m_binUtility.bin(gp);
90  size_t index = m_array[bin][m_buVec[bin].bin(gp, 0)];
91  return m_arrayObjects[index];
92  }
93 
96  T* entryObject(const Amg::Vector3D& gp) const
97  {
98  size_t bin = m_binUtility.bin(gp);
99  size_t biNext = m_binUtility.entry(gp, 0);
100  return (m_arrayObjects[m_array[biNext][m_buVec[bin].entry(gp, 0)]]);
101  }
102 
105  T* nextObject(const Amg::Vector3D& gp,
106  const Amg::Vector3D& mom,
107  bool associatedResult = true) const
108  {
109  // search in layer utility only
110  size_t bin = m_binUtility.bin(gp, 0);
111  size_t binSub = m_buVec[bin].next(gp, mom, 0);
112  if (associatedResult) {
113  return m_arrayObjects[m_array[bin][binSub]];
114  }
115  // evaluate distance
116  std::pair<int, float> ds = m_binUtility.distanceToNext(gp, mom, 0);
117  std::pair<int, float> dl = m_buVec[bin].distanceToNext(gp, mom, 0);
118  // the bins
119  if (dl.second < ds.second){
120  return m_arrayObjects[m_array[bin][binSub]];
121  }
122  bin = m_binUtility.next(gp, mom, 0);
123  Amg::Vector3D probe = gp + (ds.second) * mom.normalized();
124  binSub = m_buVec[bin].bin(probe, 0);
125  return m_arrayObjects[m_array[bin][binSub]];
126  }
127 
129  std::span<T* const> arrayObjects()
130  {
131  return std::span<T* const>(m_arrayObjects.begin(), m_arrayObjects.end());
132  }
133 
134 
136  std::span<T const * const> arrayObjects() const
137  {
138  return std::span<const T* const>(m_arrayObjects.begin(), m_arrayObjects.end());
139  }
140 
142  unsigned int arrayObjectsNumber() const { return m_arrayObjects.size(); }
143 
145  const BinUtility* binUtility() const { return &m_binUtility; }
146 
149  {
150  return &(m_buVec[m_binUtility.bin(pos)]);
151  }
152 
154  size_t layerBin(const Amg::Vector3D& pos) const
155  {
156  return (layerBinUtility(pos)->bin(pos));
157  }
158 
159 private:
160  std::vector<std::vector<size_t>> m_array{};
161  std::vector<T*> m_arrayObjects{};
163  std::vector<BinUtility> m_buVec{};
164 };
165 
166 } // end of namespace Trk
167 
168 #endif // TRKDETDESCRUTILS_COMPACTBINNEDARRAY2D_H
Trk::CompactBinnedArray2D::object
T * object(const Amg::Vector2D &lp) const
Returns the pointer to the templated class object from the BinnedArray, it returns nullptr if not def...
Definition: CompactBinnedArray2D.h:74
Trk::CompactBinnedArray2D::binUtility
const BinUtility * binUtility() const
Return the BinUtility.
Definition: CompactBinnedArray2D.h:145
Trk::BinUtility::entry
size_t entry(const Amg::Vector3D &position, size_t ba=0) const
Bin from a 3D vector (already in binning frame)
Definition: BinUtility.h:136
checkxAOD.ds
ds
Definition: Tools/PyUtils/bin/checkxAOD.py:260
TestSUSYToolsAlg.dl
dl
Definition: TestSUSYToolsAlg.py:81
Trk::CompactBinnedArray2D::m_binUtility
BinUtility m_binUtility
binUtility
Definition: CompactBinnedArray2D.h:162
Trk::CompactBinnedArray2D::object
T * object(const Amg::Vector3D &gp) const
Returns the pointer to the templated class object from the BinnedArray it returns nullptr if not defi...
Definition: CompactBinnedArray2D.h:87
Trk::CompactBinnedArray2D::nextObject
T * nextObject(const Amg::Vector3D &gp, const Amg::Vector3D &mom, bool associatedResult=true) const
Returns the pointer to the templated class object from the BinnedArray.
Definition: CompactBinnedArray2D.h:105
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
index
Definition: index.py:1
BinnedArray.h
BinUtility.h
Trk::BinUtility::distanceToNext
std::pair< size_t, float > distanceToNext(const Amg::Vector3D &position, const Amg::Vector3D &direction, size_t ba=0) const
Distance estimate to next bin
Definition: BinUtility.h:154
bin
Definition: BinsDiffFromStripMedian.h:43
Trk::CompactBinnedArray2D::arrayObjects
std::span< T *const > arrayObjects()
Return all objects of the Array.
Definition: CompactBinnedArray2D.h:129
Trk::CompactBinnedArray2D::clone
CompactBinnedArray2D * clone(const std::vector< T * > &ptrs) const
Definition: CompactBinnedArray2D.h:65
Trk::CompactBinnedArray2D::clone
CompactBinnedArray2D * clone() const
Implicit Constructor.
Definition: CompactBinnedArray2D.h:60
Trk::CompactBinnedArray
Definition: CompactBinnedArray.h:31
Trk::CompactBinnedArray2D::CompactBinnedArray2D
CompactBinnedArray2D(const std::vector< T * > &tclassvector, std::vector< std::vector< size_t >> &&indexarray, BinUtility &&bingen, std::vector< Trk::BinUtility > &&bVec)
Definition: CompactBinnedArray2D.h:49
Trk::CompactBinnedArray2D
Definition: CompactBinnedArray2D.h:32
Trk::CompactBinnedArray2D::entryObject
T * entryObject(const Amg::Vector3D &gp) const
Returns the pointer to the templated class object from the BinnedArray - entry point.
Definition: CompactBinnedArray2D.h:96
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
Trk::CompactBinnedArray2D::m_buVec
std::vector< BinUtility > m_buVec
vector of bin utilities for 2nd dim
Definition: CompactBinnedArray2D.h:163
Trk::CompactBinnedArray2D::layerBinUtility
const BinUtility * layerBinUtility(const Amg::Vector3D &pos) const
Return the BinUtility.
Definition: CompactBinnedArray2D.h:148
Trk::CompactBinnedArray2D::m_arrayObjects
std::vector< T * > m_arrayObjects
objects
Definition: CompactBinnedArray2D.h:161
columnar::final
CM final
Definition: ColumnAccessor.h:106
Trk::CompactBinnedArray2D::arrayObjectsNumber
unsigned int arrayObjectsNumber() const
Number of Entries in the Array.
Definition: CompactBinnedArray2D.h:142
Trk::BinUtility
Definition: BinUtility.h:39
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::BinUtility::inside
bool inside(const Amg::Vector3D &position) const
Check if bin is inside from Vector3D.
Definition: BinUtility.h:186
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
Trk::inside
@ inside
Definition: PropDirection.h:29
Trk::CompactBinnedArray2D::CompactBinnedArray2D
CompactBinnedArray2D(const std::vector< T * > &tclassvector, const std::vector< std::vector< size_t >> &indexarray, const BinUtility &bingen, const std::vector< Trk::BinUtility > &bVec)
Constructor with arguments.
Definition: CompactBinnedArray2D.h:39
Trk::CompactBinnedArray2D::layerBin
size_t layerBin(const Amg::Vector3D &pos) const
Return the layer bin.
Definition: CompactBinnedArray2D.h:154
DeMoScan.index
string index
Definition: DeMoScan.py:362
Trk::CompactBinnedArray2D::arrayObjects
std::span< T const *const > arrayObjects() const
Return all objects of the Array const T.
Definition: CompactBinnedArray2D.h:136
Trk::CompactBinnedArray2D::m_array
std::vector< std::vector< size_t > > m_array
vector of indices to objects
Definition: CompactBinnedArray2D.h:160
Trk::BinUtility::bin
size_t bin(const Amg::Vector3D &position, size_t ba=0) const
Bin from a 3D vector (already in binning frame)
Definition: BinUtility.h:126
Trk::BinUtility::next
size_t next(const Amg::Vector3D &position, const Amg::Vector3D &direction, size_t ba=0) const
Bin from a 3D vector (already in binning frame)
Definition: BinUtility.h:145