ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::BinUtility Class Referencefinal

A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type. More...

#include <BinUtility.h>

Collaboration diagram for Trk::BinUtility:

Public Member Functions

 BinUtility ()
 Constructor for equidistant.
 BinUtility (const BinUtility &sbu)=default
 BinUtility (BinUtility &&sbu)=default
BinUtilityoperator= (const BinUtility &sbu)=default
BinUtilityoperator= (BinUtility &&sbu)=default
 ~BinUtility ()=default
 BinUtility (size_t bins, float min, float max, BinningOption opt=open, BinningValue value=binR, float sStep=0.)
 Constructor for equidistant - the substep is for phi binning offsets.
 BinUtility (size_t subbins, float substep, float min, float max, BinningOption opt=open, BinningValue value=binR)
 Constructor for bi-equidistant.
 BinUtility (std::vector< float > &bValues, BinningOption opt=closed, BinningValue value=binPhi)
 Constructor for arbitrary.
 BinUtility (float phiRef, std::vector< std::pair< int, float > > &bValues)
 Constructor for binH.
BinUtilityoperator+= (const BinUtility &gbu)
 Operator++ to make multidimensional BinUtility.
BinUtilityclone () const
 Implizit Constructor.
const std::vector< BinningData > & binningData () const
 return the binning data
size_t bin (const Amg::Vector3D &position, size_t ba=0) const
 Bin from a 3D vector (already in binning frame)
size_t entry (const Amg::Vector3D &position, size_t ba=0) const
 Bin from a 3D vector (already in binning frame)
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)
std::pair< size_t, float > distanceToNext (const Amg::Vector3D &position, const Amg::Vector3D &direction, size_t ba=0) const
 Distance estimate to next bin.
LayerOrder orderDirection (const Amg::Vector3D &position, const Amg::Vector3D &direction, size_t ba=0) const
 Return the oder direciton for fast interlinking.
size_t bin (const Amg::Vector2D &lposition, size_t ba=0) const
 Bin from a 2D vector (following local parameters defintitions)
bool inside (const Amg::Vector3D &position) const
 Check if bin is inside from Vector3D.
bool inside (const Amg::Vector2D &lposition) const
 Check if bin is inside from Vector3D.
size_t dimensions () const
 First bin maximal value.
size_t max (size_t ba=0) const
 First bin maximal value.
size_t bins (size_t ba=0) const
 Number of bins.
BinningValue binningValue (size_t ba=0) const
 The type/value of the binning.
float binPosition (size_t bin, float pos, size_t ba=0) const
 bin->BinningValue navigation : pos=+-1.
void clear ()
 Clear the data.
MsgStream & dump (MsgStream &sl) const
 Output Method for MsgStream, to be overloaded by child classes.
std::ostream & dump (std::ostream &sl) const
 Output Method for std::ostream, to be overloaded by child classes.

Private Attributes

std::vector< BinningDatam_binningData

Detailed Description

A generic symmetric BinUtility, for fully symmetric binning in terms of binning grid and binning type.

  • for asymmetric binning in the binning grid use the BinnedArray1D1D
  • building up a multidimensional BinUtility has to be done with the operator +=
Author
Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 38 of file BinUtility.h.

Constructor & Destructor Documentation

◆ BinUtility() [1/7]

Trk::BinUtility::BinUtility ( )
inline

Constructor for equidistant.

Definition at line 43 of file BinUtility.h.

44 {
45 m_binningData.reserve(3);
46 }
std::vector< BinningData > m_binningData
Definition BinUtility.h:295

◆ BinUtility() [2/7]

Trk::BinUtility::BinUtility ( const BinUtility & sbu)
default

◆ BinUtility() [3/7]

Trk::BinUtility::BinUtility ( BinUtility && sbu)
default

◆ ~BinUtility()

Trk::BinUtility::~BinUtility ( )
default

◆ BinUtility() [4/7]

Trk::BinUtility::BinUtility ( size_t bins,
float min,
float max,
BinningOption opt = open,
BinningValue value = binR,
float sStep = 0. )
inline

Constructor for equidistant - the substep is for phi binning offsets.

Definition at line 55 of file BinUtility.h.

57 {
58 m_binningData.reserve(3);
59 std::vector<float> bValues;
60 float step = (max - min) / bins;
61 for (size_t ib = 0; ib <= bins; ++ib)
62 bValues.push_back(min + ib * step);
63 m_binningData.emplace_back(Trk::equidistant, opt, value, bins, min, max, step, sStep, bValues);
64 }
#define min(a, b)
Definition cfImp.cxx:40
size_t bins(size_t ba=0) const
Number of bins.
Definition BinUtility.h:221
size_t max(size_t ba=0) const
First bin maximal value.
Definition BinUtility.h:212
@ equidistant
Definition BinningType.h:32

◆ BinUtility() [5/7]

Trk::BinUtility::BinUtility ( size_t subbins,
float substep,
float min,
float max,
BinningOption opt = open,
BinningValue value = binR )
inline

Constructor for bi-equidistant.

Definition at line 67 of file BinUtility.h.

69 {
70 m_binningData.reserve(3);
71 std::vector<float> bValues;
72 float step = (max - min) / (subbins + 1);
73 bValues.push_back(min);
74 for (size_t isb = 1; isb <= subbins; ++isb) {
75 bValues.push_back(min + isb * step - substep);
76 bValues.push_back(min + isb * step);
77 }
78 bValues.push_back(max);
79 m_binningData.emplace_back(Trk::biequidistant, opt, value, 2 * subbins + 1, min, max, step, substep, bValues);
80 }
@ biequidistant
Definition BinningType.h:33

◆ BinUtility() [6/7]

Trk::BinUtility::BinUtility ( std::vector< float > & bValues,
BinningOption opt = closed,
BinningValue value = binPhi )
inline

Constructor for arbitrary.

Definition at line 83 of file BinUtility.h.

85 {
86 m_binningData.reserve(3);
87 size_t nBins = opt == 0 ? bValues.size() - 1 : bValues.size();
88
89 m_binningData.emplace_back(Trk::arbitrary,
90 opt,
91 value,
92 nBins,
93 bValues[0],
94 bValues.back(),
95 (bValues.back() - bValues[0]) / (nBins),
96 0.,
97 bValues);
98 }
@ arbitrary
Definition BinningType.h:34

◆ BinUtility() [7/7]

Trk::BinUtility::BinUtility ( float phiRef,
std::vector< std::pair< int, float > > & bValues )
inline

Constructor for binH.

Definition at line 101 of file BinUtility.h.

102 : m_binningData()
103 {
104 m_binningData.reserve(3);
105 m_binningData.emplace_back(Trk::open, phiRef, bValues);
106 }
@ open
Definition BinningType.h:40

Member Function Documentation

◆ bin() [1/2]

size_t Trk::BinUtility::bin ( const Amg::Vector2D & lposition,
size_t ba = 0 ) const
inline

Bin from a 2D vector (following local parameters defintitions)

  • USE WITH CARE !! You need to check if your local position is actually in the binning frame of the BinUtility

Definition at line 177 of file BinUtility.h.

178 {
179 if (ba >= m_binningData.size()){
180 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
181 }
182 return m_binningData[ba].searchLocal(lposition);
183 }

◆ bin() [2/2]

size_t Trk::BinUtility::bin ( const Amg::Vector3D & position,
size_t ba = 0 ) const
inline

Bin from a 3D vector (already in binning frame)

Definition at line 126 of file BinUtility.h.

127 {
128 if (ba >= m_binningData.size()){
129 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
130 }
131 size_t bEval = m_binningData[ba].searchGlobal(position);
132 return (bEval > bins(ba) - 1 ? bins(ba) - 1 : bEval); // ST additional protection : DEBUG source
133 }
static const std::vector< std::string > bins

◆ binningData()

const std::vector< BinningData > & Trk::BinUtility::binningData ( ) const
inline

return the binning data

Definition at line 123 of file BinUtility.h.

123{ return m_binningData; }

◆ binningValue()

BinningValue Trk::BinUtility::binningValue ( size_t ba = 0) const
inline

The type/value of the binning.

Definition at line 230 of file BinUtility.h.

231 {
232 if (ba >= m_binningData.size()){
233 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
234 }
235 return (m_binningData[ba].binvalue);
236 }

◆ binPosition()

float Trk::BinUtility::binPosition ( size_t bin,
float pos,
size_t ba = 0 ) const
inline

bin->BinningValue navigation : pos=+-1.

edges/ 0. bin center

Definition at line 239 of file BinUtility.h.

240 {
241 if (ba >= m_binningData.size()){
242 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
243 }
244 return (m_binningData[ba].binPosition(bin, pos));
245 }
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
float binPosition(size_t bin, float pos, size_t ba=0) const
bin->BinningValue navigation : pos=+-1.
Definition BinUtility.h:239

◆ bins()

size_t Trk::BinUtility::bins ( size_t ba = 0) const
inline

Number of bins.

Definition at line 221 of file BinUtility.h.

222 {
223 if (ba >= m_binningData.size()){
224 return 0;
225 }
226 return (m_binningData[ba].bins);
227 }

◆ clear()

void Trk::BinUtility::clear ( )
inline

Clear the data.

Definition at line 248 of file BinUtility.h.

248{ m_binningData.clear(); }

◆ clone()

BinUtility * Trk::BinUtility::clone ( ) const
inline

Implizit Constructor.

Definition at line 120 of file BinUtility.h.

120{ return new BinUtility(*this); }
BinUtility()
Constructor for equidistant.
Definition BinUtility.h:43

◆ dimensions()

size_t Trk::BinUtility::dimensions ( ) const
inline

First bin maximal value.

Definition at line 209 of file BinUtility.h.

209{ return m_binningData.size(); }

◆ distanceToNext()

std::pair< size_t, float > Trk::BinUtility::distanceToNext ( const Amg::Vector3D & position,
const Amg::Vector3D & direction,
size_t ba = 0 ) const
inline

Distance estimate to next bin.

Definition at line 154 of file BinUtility.h.

157 {
158 if (ba >= m_binningData.size()){
159 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
160 }
161 return m_binningData[ba].distanceToNext(position, direction);
162 }

◆ dump() [1/2]

MsgStream & Trk::BinUtility::dump ( MsgStream & sl) const
inline

Output Method for MsgStream, to be overloaded by child classes.

Definition at line 251 of file BinUtility.h.

252 {
253 sl << "BinUtility for " << m_binningData.size() << "-dimensional array:" << endmsg;
254 std::vector<BinningData>::const_iterator bdIter = m_binningData.begin();
255 for (size_t ibd = 0; bdIter != m_binningData.end(); ++bdIter, ++ibd) {
256 sl << "dimension : " << ibd << endmsg << endmsg;
257 sl << " - type : " << size_t((*bdIter).type) << endmsg;
258 sl << " - option : " << size_t((*bdIter).option) << endmsg;
259 sl << " - value : " << size_t((*bdIter).binvalue) << endmsg;
260 sl << " - bins : " << (*bdIter).bins << endmsg;
261 sl << " - min/max : " << (*bdIter).min << " / " << (*bdIter).max << endmsg;
262 sl << " - step/sub : " << (*bdIter).step << " / " << (*bdIter).subStep << endmsg;
263 sl << " - boundaries : | ";
264 std::vector<float>::const_iterator bIter = (*bdIter).boundaries.begin();
265 for (; bIter != (*bdIter).boundaries.end(); ++bIter)
266 sl << (*bIter) << " | ";
267 sl << endmsg;
268 }
269 return sl;
270 }
#define endmsg

◆ dump() [2/2]

std::ostream & Trk::BinUtility::dump ( std::ostream & sl) const
inline

Output Method for std::ostream, to be overloaded by child classes.

Definition at line 273 of file BinUtility.h.

274 {
275 sl << "BinUtility for " << m_binningData.size() << "-dimensional array:" << std::endl;
276 std::vector<BinningData>::const_iterator bdIter = m_binningData.begin();
277 for (size_t ibd = 0; bdIter != m_binningData.end(); ++bdIter, ++ibd) {
278 sl << "dimension : " << ibd << std::endl;
279 sl << " - type : " << size_t((*bdIter).type) << std::endl;
280 sl << " - option : " << size_t((*bdIter).option) << std::endl;
281 sl << " - value : " << size_t((*bdIter).binvalue) << std::endl;
282 sl << " - bins : " << (*bdIter).bins << std::endl;
283 sl << " - min/max : " << (*bdIter).min << " / " << (*bdIter).max << std::endl;
284 sl << " - step/sub : " << (*bdIter).step << " / " << (*bdIter).subStep << std::endl;
285 sl << " - boundaries : | ";
286 std::vector<float>::const_iterator bIter = (*bdIter).boundaries.begin();
287 for (; bIter != (*bdIter).boundaries.end(); ++bIter)
288 sl << (*bIter) << " | ";
289 sl << std::endl;
290 }
291 return sl;
292 }

◆ entry()

size_t Trk::BinUtility::entry ( const Amg::Vector3D & position,
size_t ba = 0 ) const
inline

Bin from a 3D vector (already in binning frame)

Definition at line 136 of file BinUtility.h.

137 {
138 if (ba >= m_binningData.size()){
139 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
140 }
141 return m_binningData[ba].entry(position);
142 }

◆ inside() [1/2]

bool Trk::BinUtility::inside ( const Amg::Vector2D & lposition) const
inline

Check if bin is inside from Vector3D.

Definition at line 197 of file BinUtility.h.

198 {
199 return true;
200 std::vector<BinningData>::const_iterator bdIter = m_binningData.begin();
201 for (; bdIter != m_binningData.end(); ++bdIter)
202 if (!(*bdIter).inside(lposition)){
203 return false;
204 }
205 return true;
206 }

◆ inside() [2/2]

bool Trk::BinUtility::inside ( const Amg::Vector3D & position) const
inline

Check if bin is inside from Vector3D.

Definition at line 186 of file BinUtility.h.

187 {
188 std::vector<BinningData>::const_iterator bdIter = m_binningData.begin();
189 for (; bdIter != m_binningData.end(); ++bdIter) {
190 if (!(*bdIter).inside(position))
191 return false;
192 }
193 return true;
194 }

◆ max()

size_t Trk::BinUtility::max ( size_t ba = 0) const
inline

First bin maximal value.

Definition at line 212 of file BinUtility.h.

213 {
214 if (ba >= m_binningData.size()){
215 return 0;
216 }
217 return (m_binningData[ba].bins - 1);
218 }

◆ next()

size_t Trk::BinUtility::next ( const Amg::Vector3D & position,
const Amg::Vector3D & direction,
size_t ba = 0 ) const
inline

Bin from a 3D vector (already in binning frame)

Definition at line 145 of file BinUtility.h.

146 {
147 if (ba >= m_binningData.size()){
148 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
149 }
150 return m_binningData[ba].next(position, direction);
151 }

◆ operator+=()

BinUtility & Trk::BinUtility::operator+= ( const BinUtility & gbu)
inline

Operator++ to make multidimensional BinUtility.

Definition at line 109 of file BinUtility.h.

110 {
111 const std::vector<BinningData>& bData = gbu.binningData();
112 if (m_binningData.size() + bData.size() > 3){
113 throw GaudiException("BinUtility does not support dim > 3", "FATAL", StatusCode::FAILURE);
114 }
115 m_binningData.insert(m_binningData.end(), bData.begin(), bData.end());
116 return (*this);
117 }

◆ operator=() [1/2]

BinUtility & Trk::BinUtility::operator= ( BinUtility && sbu)
default

◆ operator=() [2/2]

BinUtility & Trk::BinUtility::operator= ( const BinUtility & sbu)
default

◆ orderDirection()

LayerOrder Trk::BinUtility::orderDirection ( const Amg::Vector3D & position,
const Amg::Vector3D & direction,
size_t ba = 0 ) const
inline

Return the oder direciton for fast interlinking.

Definition at line 165 of file BinUtility.h.

166 {
167 if (ba >= m_binningData.size()){
168 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
169 }
170 return m_binningData[ba].orderDirection(position, direction);
171 }

Member Data Documentation

◆ m_binningData

std::vector<BinningData> Trk::BinUtility::m_binningData
private

Definition at line 295 of file BinUtility.h.


The documentation for this class was generated from the following file: