Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
BinnedArray1D.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 // BinnedArray1D.h, (c) ATLAS Detector software
8 
9 #ifndef TRKDETDESCRUTILS_BINNEDARRAY1D_H
10 #define TRKDETDESCRUTILS_BINNEDARRAY1D_H
11 
14 
15 // STL
16 #include <vector>
17 #include <memory>
18 
20 
21 
22 namespace Trk {
23 
33 template<class T>
34 class BinnedArray1D final : public BinnedArray<T>
35 {
36 
37 public:
38  //defaults, copy assignment can not be defaulted (CachedPtr)
39  BinnedArray1D() = default;
42  ~BinnedArray1D() = default;
45  const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector,
46  const BinUtility& bingen)
47  : BinnedArray<T>(),
48  m_array{},
49  m_arrayObjects(nullptr),
50  m_binUtility(bingen) {
51  initialize(tclassvector);
52  }
54  const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector,
55  BinUtility&& bingen)
56  : BinnedArray<T>()
57  , m_array{}
58  , m_arrayObjects(nullptr)
59  , m_binUtility(std::move(bingen))
60  {
61  initialize(tclassvector);
62  }
65  : BinnedArray<T>()
66  , m_array{barr.m_array}
67  , m_arrayObjects(nullptr)
68  , m_binUtility(barr.m_binUtility)
69  {
70  }
73  {
74  if (this != &barr) {
76  m_array.clear();
77  m_arrayObjects.release();
78  m_array = barr.m_array;
79  }
80  return *this;
81  }
83  BinnedArray1D* clone() const { return new BinnedArray1D(*this); }
84 
88  T* object(const Amg::Vector2D& lp) const
89  {
90  if (m_binUtility.inside(lp)) {
91  return (m_array[m_binUtility.bin(lp, 0)]).get();
92  }
93  return nullptr;
94  }
95 
99  T* object(const Amg::Vector3D& gp) const
100  {
101  return (m_array[m_binUtility.bin(gp, 0)]).get();
102  }
103 
106  T* entryObject(const Amg::Vector3D& gp) const
107  {
108  return (m_array[m_binUtility.entry(gp, 0)]).get();
109  }
110 
113  T* nextObject(const Amg::Vector3D& gp,
114  const Amg::Vector3D& mom,
115  bool associatedResult = true) const
116  {
117  // the bins
118  size_t bin = associatedResult ? m_binUtility.bin(gp, 0)
119  : m_binUtility.next(gp, mom, 0);
120  return (m_array[bin]).get();
121  }
122 
125  {
127  return Trk::BinnedArraySpan<T* const>(&*(m_arrayObjects->begin()), &*(m_arrayObjects->end()));
128  }
129 
132  {
134  return Trk::BinnedArraySpan<const T* const>(&*(m_arrayObjects->begin()), &*(m_arrayObjects->end()));
135  }
136 
138  unsigned int arrayObjectsNumber() const { return arrayObjects().size(); }
139 
141  const BinUtility* binUtility() const { return &m_binUtility; }
142 
143 private:
144  void createArrayCache() const
145  {
146  if (!m_arrayObjects) {
147  std::unique_ptr<std::vector<T*>> arrayObjects = std::make_unique<std::vector<T*>>();
148  auto bins = m_binUtility.bins(0);
149  arrayObjects->reserve(bins);
150  for (size_t ill = 0; ill < bins; ++ill) {
151  arrayObjects->push_back((m_array[ill]).get());
152  }
153  m_arrayObjects.set(std::move(arrayObjects));
154  }
155  }
156 
157  void initialize(const std::vector<std::pair<std::shared_ptr<T>, Amg::Vector3D>>& tclassvector) {
158  // prepare the binned Array
159  size_t vecsize = tclassvector.size();
160  m_array = std::vector<std::shared_ptr<T>>(vecsize);
161  for (size_t ivec = 0; ivec < vecsize; ++ivec) {
162  const Amg::Vector3D currentGlobal(((tclassvector[ivec]).second));
163  if (m_binUtility.inside(currentGlobal)) {
164  m_array[m_binUtility.bin(currentGlobal, 0)] =
165  ((tclassvector)[ivec]).first;
166  } else
167  throw GaudiException("BinnedArray1D constructor",
168  "Object outside bounds", StatusCode::FAILURE);
169  }
170  }
172  std::vector<std::shared_ptr<T>> m_array{};
177 };
178 
179 } // end of namespace Trk
180 
181 #endif // TRKSURFACES_BINNEDARRAY1D_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::BinnedArray1D::m_array
std::vector< std::shared_ptr< T > > m_array
1D vector of cached not owning pointers to class T
Definition: BinnedArray1D.h:172
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
BinnedArray.h
CxxUtils::CachedUniquePtrT
Cached pointer with atomic update.
Definition: CachedUniquePtr.h:54
Trk::BinnedArray1D::operator=
BinnedArray1D & operator=(BinnedArray1D &&)=default
BinUtility.h
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:134
bin
Definition: BinsDiffFromStripMedian.h:43
Trk::BinnedArray1D::BinnedArray1D
BinnedArray1D(BinnedArray1D &&)=default
Trk::BinnedArray1D::arrayObjects
BinnedArraySpan< T *const > arrayObjects()
Return all objects of the Array non-const T.
Definition: BinnedArray1D.h:124
Trk::BinnedArray1D::clone
BinnedArray1D * clone() const
Implicit Constructor.
Definition: BinnedArray1D.h:83
Trk::BinUtility::bins
size_t bins(size_t ba=0) const
Number of bins.
Definition: BinUtility.h:221
Trk::BinnedArray1D::BinnedArray1D
BinnedArray1D()=default
Trk::BinnedArray1D::BinnedArray1D
BinnedArray1D(const BinnedArray1D &barr)
Copy.
Definition: BinnedArray1D.h:64
Trk::BinnedArray1D::~BinnedArray1D
~BinnedArray1D()=default
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
Trk::BinnedArray1D::entryObject
T * entryObject(const Amg::Vector3D &gp) const
Returns the pointer to the templated class object from the BinnedArray - entry point.
Definition: BinnedArray1D.h:106
Trk::BinnedArray1D::binUtility
const BinUtility * binUtility() const
Return the BinUtility.
Definition: BinnedArray1D.h:141
Trk::BinnedArray1D::operator=
BinnedArray1D & operator=(const BinnedArray1D &barr)
Assignment.
Definition: BinnedArray1D.h:72
Trk::BinnedArray1D::createArrayCache
void createArrayCache() const
Definition: BinnedArray1D.h:144
CachedUniquePtr.h
Cached unique_ptr with atomic update.
Trk::BinnedArray1D::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: BinnedArray1D.h:113
plotting.yearwise_luminosity_vs_mu.bins
bins
Definition: yearwise_luminosity_vs_mu.py:30
Trk::BinnedArray1D::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: BinnedArray1D.h:88
Trk::BinnedArray1D::arrayObjects
BinnedArraySpan< T const *const > arrayObjects() const
Return all objects of the Array const T.
Definition: BinnedArray1D.h:131
Trk::BinUtility
Definition: BinUtility.h:39
Trk::BinnedArray1D::BinnedArray1D
BinnedArray1D(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector, const BinUtility &bingen)
ctors with arguments
Definition: BinnedArray1D.h:44
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
columnar::final
CM final
Definition: ColumnAccessor.h:106
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::BinnedArray1D::m_binUtility
BinUtility m_binUtility
Definition: BinnedArray1D.h:176
Trk::BinnedArray1D::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: BinnedArray1D.h:99
Trk::BinnedArray1D::m_arrayObjects
CxxUtils::CachedUniquePtr< std::vector< T * > > m_arrayObjects
binUtility for retrieving and filling the Array
Definition: BinnedArray1D.h:174
Trk::BinnedArray1D::arrayObjectsNumber
unsigned int arrayObjectsNumber() const
Number of Entries in the Array.
Definition: BinnedArray1D.h:138
Trk::BinnedArray1D::initialize
void initialize(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector)
vector of pointers to the class T
Definition: BinnedArray1D.h:157
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
Trk::BinnedArray1D::BinnedArray1D
BinnedArray1D(const std::vector< std::pair< std::shared_ptr< T >, Amg::Vector3D >> &tclassvector, BinUtility &&bingen)
Definition: BinnedArray1D.h:53
CxxUtils::ivec
vec_fb< typename boost::int_t< sizeof(T) *8 >::exact, N > ivec
Definition: vec_fb.h:53
Trk::BinnedArraySpan
std::span< T > BinnedArraySpan
Definition: BinnedArray.h:34
Trk::BinnedArray1D
Definition: BinnedArray1D.h:35
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