Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Private Attributes | List of all members
Trk::BinUtility Class Referencefinal

#include <BinUtility.h>

Collaboration diagram for Trk::BinUtility:

Public Member Functions

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

Private Attributes

std::vector< BinningDatam_binningData
 

Detailed Description

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

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.

43  : m_binningData()
44  {
45  m_binningData.reserve(3);
46  }

◆ 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.

56  : m_binningData()
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  }

◆ 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.

68  : m_binningData()
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  }

◆ 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.

84  : m_binningData()
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  }

◆ 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  }

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  }

◆ 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  }

◆ 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); }

◆ 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  }

◆ 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:
Trk::equidistant
@ equidistant
Definition: BinningType.h:32
make_coralServer_rep.opt
opt
Definition: make_coralServer_rep.py:19
Trk::BinUtility::max
size_t max(size_t ba=0) const
First bin maximal value.
Definition: BinUtility.h:212
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
bin
Definition: BinsDiffFromStripMedian.h:43
PlotCalibFromCool.ib
ib
Definition: PlotCalibFromCool.py:419
Trk::biequidistant
@ biequidistant
Definition: BinningType.h:33
athena.value
value
Definition: athena.py:124
Trk::BinUtility::bins
size_t bins(size_t ba=0) const
Number of bins.
Definition: BinUtility.h:221
Trk::arbitrary
@ arbitrary
Definition: BinningType.h:34
Trk::BinUtility::BinUtility
BinUtility()
Constructor for equidistant.
Definition: BinUtility.h:43
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
dumpTgcDigiJitter.nBins
list nBins
Definition: dumpTgcDigiJitter.py:29
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::open
@ open
Definition: BinningType.h:40
Trk::BinUtility::m_binningData
std::vector< BinningData > m_binningData
Definition: BinUtility.h:295
LArCellBinning.step
step
Definition: LArCellBinning.py:158
Trk::BinUtility::binPosition
float binPosition(size_t bin, float pos, size_t ba=0) const
bin->BinningValue navigation : pos=+-1.
Definition: BinUtility.h:239