BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
VariableBinAxis.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Base/Axis/VariableBinAxis.h
6 //! @brief Defines class VariableBinAxis.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************** //
14 
15 #ifndef BORNAGAIN_CORE_AXIS_VARIABLEBINAXIS_H
16 #define BORNAGAIN_CORE_AXIS_VARIABLEBINAXIS_H
17 
18 #include "Base/Axis/IAxis.h"
19 
20 //! Axis with variable bin size.
21 //! @ingroup tools
22 
23 class VariableBinAxis : public IAxis
24 {
25 public:
26  //! VariableBinAxis constructor.
27  //! @param name Axis name
28  //! @param nbins number of bins
29  //! @param bin_boundaries Array of size nbins+1 containing low-edges for each
30  //! bin and upper edge of last bin.
31  VariableBinAxis(const std::string& name, size_t nbins,
32  const std::vector<double>& bin_boundaries);
33  virtual ~VariableBinAxis() {}
34 
35  VariableBinAxis* clone() const;
36 
37  size_t size() const { return m_nbins; }
38 
39  double operator[](size_t index) const;
40 
41  Bin1D getBin(size_t index) const;
42 
43  double getMin() const;
44  double getMax() const;
45 
46  double getBinCenter(size_t index) const;
47 
48  size_t findClosestIndex(double value) const;
49 
50  std::vector<double> getBinCenters() const;
51  std::vector<double> getBinBoundaries() const { return m_bin_boundaries; }
52 
53  virtual VariableBinAxis* createClippedAxis(double left, double right) const;
54 
55  std::string pyString(const std::string& units, size_t offset) const final;
56 
57 protected:
58  VariableBinAxis(const std::string& name, size_t nbins = 0);
59  void setBinBoundaries(const std::vector<double>& bin_boundaries);
60 
61  virtual void print(std::ostream& ostr) const;
62  virtual bool equals(const IAxis& other) const;
63  size_t m_nbins;
64 
65 private:
66  std::vector<double> m_bin_boundaries; //!< vector containing the bin limits
67 };
68 
69 #endif // BORNAGAIN_CORE_AXIS_VARIABLEBINAXIS_H
Defines class IAxis.
Interface for one-dimensional axes.
Definition: IAxis.h:25
Axis with variable bin size.
double getMax() const
Returns value of last point of axis.
double getBinCenter(size_t index) const
size_t size() const
retrieve the number of bins
void setBinBoundaries(const std::vector< double > &bin_boundaries)
double operator[](size_t index) const
indexed accessor retrieves a sample
std::vector< double > getBinCenters() const
virtual bool equals(const IAxis &other) const
Bin1D getBin(size_t index) const
retrieve a 1d bin for the given index
double getMin() const
Returns value of first point of axis.
VariableBinAxis(const std::string &name, size_t nbins, const std::vector< double > &bin_boundaries)
VariableBinAxis constructor.
std::vector< double > m_bin_boundaries
vector containing the bin limits
virtual ~VariableBinAxis()
virtual VariableBinAxis * createClippedAxis(double left, double right) const
Creates a new clipped axis.
std::vector< double > getBinBoundaries() const
size_t findClosestIndex(double value) const
find bin index which is best match for given value
virtual void print(std::ostream &ostr) const
std::string pyString(const std::string &units, size_t offset) const final
VariableBinAxis * clone() const
clone function
Definition: Bin.h:20