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
 Implicit 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 &) 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:293

◆ 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:219
size_t max(size_t ba=0) const
First bin maximal value.
Definition BinUtility.h:210
@ 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 181 of file BinUtility.h.

182 {
183 if (ba >= m_binningData.size()){
184 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
185 }
186 return m_binningData[ba].searchLocal(lposition);
187 }

◆ 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 const std::size_t b = bins(ba); //can be zero, and is unsigned
133 if (b == 0){ //avoid integer overflow with b - 1
134 throw GaudiException("BinUtility", "integer overflow", StatusCode::FAILURE);
135 }
136 return (bEval > b - 1 ? b - 1 : bEval); // ST additional protection : DEBUG source
137 }
static const std::vector< std::string > bins
const Amg::Vector3D & position() const
Method to retrieve the position of the Intersection.

◆ 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 228 of file BinUtility.h.

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

◆ 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 237 of file BinUtility.h.

238 {
239 if (ba >= m_binningData.size()){
240 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
241 }
242 return (m_binningData[ba].binPosition(bin, pos));
243 }
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:237

◆ bins()

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

Number of bins.

Definition at line 219 of file BinUtility.h.

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

◆ clear()

void Trk::BinUtility::clear ( )
inline

Clear the data.

Definition at line 246 of file BinUtility.h.

246{ m_binningData.clear(); }

◆ clone()

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

Implicit 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 207 of file BinUtility.h.

207{ 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 158 of file BinUtility.h.

161 {
162 if (ba >= m_binningData.size()){
163 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
164 }
165 return m_binningData[ba].distanceToNext(position, direction);
166 }
const Amg::Vector3D & direction() const
Method to retrieve the direction at the Intersection.

◆ dump() [1/2]

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

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

Definition at line 249 of file BinUtility.h.

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

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

◆ 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 140 of file BinUtility.h.

141 {
142 if (ba >= m_binningData.size()){
143 throw GaudiException("BinUtility", "dimension out of bounds", StatusCode::FAILURE);
144 }
145 return m_binningData[ba].entry(position);
146 }

◆ inside() [1/2]

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

Check if bin is inside from Vector3D.

Definition at line 201 of file BinUtility.h.

202 {
203 return true;
204 }

◆ inside() [2/2]

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

Check if bin is inside from Vector3D.

Definition at line 190 of file BinUtility.h.

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

◆ max()

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

First bin maximal value.

Definition at line 210 of file BinUtility.h.

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

◆ 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 149 of file BinUtility.h.

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

◆ 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 169 of file BinUtility.h.

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

Member Data Documentation

◆ m_binningData

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

Definition at line 293 of file BinUtility.h.


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