Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
BinnedArray1D1D.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 // BinnedArray1D1D.h, (c) ATLAS Detector software
8 
9 #ifndef TRKDETDESCRUTILS_BINNEDARRAY1D1D_H
10 #define TRKDETDESCRUTILS_BINNEDARRAY1D1D_H
11 
14 
16 #include <vector>
17 #include <utility>
18 #include <memory>
19 
20 namespace Trk {
21 
32 template<class T>
34 {
35 
36 public:
37  // defaults, copy assignment can not be defaulted (CachedPtr)
38  BinnedArray1D1D() = default;
41  ~BinnedArray1D1D() = default;
45  const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector,
46  const BinUtility& steeringBinGen1D,
47  const std::vector<BinUtility>& singleBinGen)
48  : BinnedArray<T>(),
49  m_array{},
50  m_arrayObjects(nullptr),
51  m_steeringBinUtility(steeringBinGen1D),
52  m_singleBinUtilities(singleBinGen) {
53  initialize(tclassvector);
54  }
56  const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector,
57  BinUtility&& steeringBinGen1D,
58  std::vector<BinUtility>&& singleBinGen)
59  : BinnedArray<T>(),
60  m_array{},
61  m_arrayObjects(nullptr),
62  m_steeringBinUtility(std::move(steeringBinGen1D)),
63  m_singleBinUtilities(std::move(singleBinGen)) {
64  initialize(tclassvector);
65  }
66 
69  : BinnedArray<T>(),
70  m_array{barr.m_array},
71  m_arrayObjects(nullptr),
72  m_steeringBinUtility(barr.m_steeringBinUtility),
73  m_singleBinUtilities(barr.m_singleBinUtilities) {}
74 
77  if (this != &barr) {
78  m_arrayObjects.release();
81  m_array = barr.m_array;
82  }
83  return *this;
84  }
85 
87  BinnedArray1D1D* clone() const { return new BinnedArray1D1D(*this); }
88 
92  T* object(const Amg::Vector2D& lp) const
93  {
94  int steerBin = m_steeringBinUtility.bin(lp, 0);
95  int singleBin = std::as_const(m_singleBinUtilities)[steerBin].bin(lp, 0);
96  return (m_array[steerBin][singleBin]).get();
97  }
98 
102  T* object(const Amg::Vector3D& gp) const
103  {
104  int steerBin = m_steeringBinUtility.bin(gp, 0);
105  int singleBin = std::as_const(m_singleBinUtilities)[steerBin].bin(gp, 0);
106  return (m_array[steerBin][singleBin]).get();
107  }
108 
111  T* entryObject(const Amg::Vector3D& gp) const
112  {
113  int steerBin = m_steeringBinUtility.entry(gp, 0);
114  int singleBin = std::as_const(m_singleBinUtilities)[steerBin].entry(gp, 0);
115  return (m_array[steerBin][singleBin]).get();
116  }
117 
119  T* nextObject(const Amg::Vector3D&, const Amg::Vector3D&, bool) const
120  {
121  return nullptr;
122  }
123 
126  {
128  return Trk::BinnedArraySpan<T* const>(&*(m_arrayObjects->begin()), &*(m_arrayObjects->end()));
129  }
130 
133  {
135  return BinnedArraySpan<const T* const>(&*(m_arrayObjects->begin()), &*(m_arrayObjects->end()));
136  }
137 
139  unsigned int arrayObjectsNumber() const { return arrayObjects().size(); }
140 
142  const BinUtility* binUtility() const { return &m_steeringBinUtility; }
143 
144 private:
145  void createArrayCache() const
146  {
147  if (!m_arrayObjects) {
148  std::unique_ptr<std::vector<T*>> arrayObjects = std::make_unique<std::vector<T*>>();
149  for (size_t isteer = 0; isteer < m_steeringBinUtility.bins(); ++isteer) {
150  for (size_t isingle = 0;
151  isingle < std::as_const(m_singleBinUtilities)[isteer].bins(); ++isingle) {
152  arrayObjects->push_back((m_array[isteer][isingle]).get());
153  }
154  }
155  m_arrayObjects.set(std::move(arrayObjects));
156  }
157  }
158 
159  void initialize(const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector) {
160  m_array = std::vector<std::vector<std::shared_ptr<T>>>(m_steeringBinUtility.bins());
161  for (size_t i = 0; i < m_steeringBinUtility.bins(); ++i) {
162  size_t sizeOfSubBin = ((m_singleBinUtilities)[i]).bins();
163  m_array[i] = std::vector<std::shared_ptr<T>>(sizeOfSubBin);
164  }
165  // fill the Volume vector into the array
166  int vecsize(tclassvector.size());
167  for (int ivec = 0; ivec < vecsize; ++ivec) {
168  const Amg::Vector3D currentGlobal((tclassvector[ivec]).second);
169  if (m_steeringBinUtility.inside(currentGlobal)) {
170  int steeringBin = m_steeringBinUtility.bin(currentGlobal, 0);
171  int singleBin = (m_singleBinUtilities[steeringBin]).bin(currentGlobal, 0);
172  std::vector<std::shared_ptr<T>>& curVec = m_array[steeringBin];
173  curVec[singleBin] = ((tclassvector)[ivec]).first;
174  } else {
175  throw GaudiException("BinnedArray1D1D", "Object outside bounds",
176  StatusCode::FAILURE);
177  }
178  }
179  }
180 
182  std::vector<std::vector<std::shared_ptr<T>>> m_array{};
187  std::vector<BinUtility> m_singleBinUtilities{};
188 };
189 } // end of namespace Trk
190 
191 #endif // TRKSURFACES_BINNEDARRAY1D1D_H
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
Trk::BinnedArray1D1D::BinnedArray1D1D
BinnedArray1D1D(const BinnedArray1D1D &barr)
Copy Constructor.
Definition: BinnedArray1D1D.h:68
Trk::BinnedArray1D1D::entryObject
T * entryObject(const Amg::Vector3D &gp) const
Returns the pointer to the templated class object from the BinnedArray - entry point.
Definition: BinnedArray1D1D.h:111
Trk::BinnedArray1D1D::BinnedArray1D1D
BinnedArray1D1D(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector, BinUtility &&steeringBinGen1D, std::vector< BinUtility > &&singleBinGen)
Definition: BinnedArray1D1D.h:55
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
BinnedArray.h
Trk::BinnedArray1D1D::operator=
BinnedArray1D1D & operator=(const BinnedArray1D1D &barr)
Assignment operator.
Definition: BinnedArray1D1D.h:76
CxxUtils::CachedUniquePtrT
Cached pointer with atomic update.
Definition: CachedUniquePtr.h:54
BinUtility.h
Trk::BinnedArray1D1D::operator=
BinnedArray1D1D & operator=(BinnedArray1D1D &&)=default
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:134
Trk::BinnedArray1D1D::m_arrayObjects
CxxUtils::CachedUniquePtr< std::vector< T * > > m_arrayObjects
binUtility for retrieving and filling the Array
Definition: BinnedArray1D1D.h:184
Trk::BinnedArray1D1D::BinnedArray1D1D
BinnedArray1D1D(BinnedArray1D1D &&)=default
Trk::BinnedArray1D1D::initialize
void initialize(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector)
vector of pointers to the class T
Definition: BinnedArray1D1D.h:159
Trk::BinUtility::bins
size_t bins(size_t ba=0) const
Number of bins.
Definition: BinUtility.h:221
Trk::BinnedArray1D1D::arrayObjects
BinnedArraySpan< T *const > arrayObjects()
Return all objects of the Array non-const T.
Definition: BinnedArray1D1D.h:125
lumiFormat.i
int i
Definition: lumiFormat.py:85
Trk::BinnedArray1D1D::arrayObjectsNumber
unsigned int arrayObjectsNumber() const
Number of Entries in the Array.
Definition: BinnedArray1D1D.h:139
Trk::BinnedArray1D1D::createArrayCache
void createArrayCache() const
Definition: BinnedArray1D1D.h:145
Trk::BinnedArray1D1D::clone
BinnedArray1D1D * clone() const
Implicit Constructor.
Definition: BinnedArray1D1D.h:87
Trk::BinnedArray1D1D::binUtility
const BinUtility * binUtility() const
Return the BinUtility - returns the steering binUtility in this case.
Definition: BinnedArray1D1D.h:142
Trk::BinnedArray1D1D::nextObject
T * nextObject(const Amg::Vector3D &, const Amg::Vector3D &, bool) const
Returns the pointer to the templated class object from the BinnedArray.
Definition: BinnedArray1D1D.h:119
CachedUniquePtr.h
Cached unique_ptr with atomic update.
Trk::BinnedArray1D1D
Definition: BinnedArray1D1D.h:34
Trk::BinnedArray1D1D::object
T * object(const Amg::Vector2D &lp) const
Returns the pointer to the templated class object from the BinnedArray, it returns 0 if not defined.
Definition: BinnedArray1D1D.h:92
columnar::final
CM final
Definition: ColumnAccessor.h:106
Trk::BinUtility
Definition: BinUtility.h:39
Trk::BinnedArray1D1D::m_singleBinUtilities
std::vector< BinUtility > m_singleBinUtilities
single bin utilities
Definition: BinnedArray1D1D.h:187
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
Trk::BinnedArray1D1D::arrayObjects
BinnedArraySpan< T const *const > arrayObjects() const
Return all objects of the Array const T.
Definition: BinnedArray1D1D.h:132
Trk::BinnedArray1D1D::m_steeringBinUtility
BinUtility m_steeringBinUtility
Definition: BinnedArray1D1D.h:186
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:83
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::BinnedArray1D1D::object
T * object(const Amg::Vector3D &gp) const
Returns the pointer to the templated class object from the BinnedArray, it returns 0 if not defined.
Definition: BinnedArray1D1D.h:102
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::BinnedArray
Definition: BinnedArray.h:38
CxxUtils::ivec
vec_fb< typename boost::int_t< sizeof(T) *8 >::exact, N > ivec
Definition: vec_fb.h:53
Trk::BinnedArray1D1D::BinnedArray1D1D
BinnedArray1D1D(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector, const BinUtility &steeringBinGen1D, const std::vector< BinUtility > &singleBinGen)
ctors with arguments
Definition: BinnedArray1D1D.h:44
Trk::BinnedArraySpan
std::span< T > BinnedArraySpan
Definition: BinnedArray.h:34
Trk::BinnedArray1D1D::~BinnedArray1D1D
~BinnedArray1D1D()=default
Trk::BinnedArray1D1D::m_array
std::vector< std::vector< std::shared_ptr< T > > > m_array
forced 1D vector of pointers to class T
Definition: BinnedArray1D1D.h:182
Trk::BinnedArray1D1D::BinnedArray1D1D
BinnedArray1D1D()=default