BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ConstKBinAxis Class Reference

Axis with fixed bin size in sin(angle) space. More...

Inheritance diagram for ConstKBinAxis:
[legend]
Collaboration diagram for ConstKBinAxis:
[legend]

Public Member Functions

 ConstKBinAxis (const std::string &name, size_t nbins, double start, double end)
 ConstKBinAxis constructor. More...
 
 ~ConstKBinAxis () override
 
Bin1D bin (size_t index) const
 retrieve a 1d bin for the given index More...
 
std::vector< double > binBoundaries () const
 
double binCenter (size_t index) const
 
std::vector< double > binCenters () const
 
double center () const
 Returns midpoint of axis. More...
 
ConstKBinAxisclone () const override
 clone function More...
 
virtual bool contains (double value) const
 Returns true if axis contains given point. More...
 
ConstKBinAxiscreateClippedAxis (double left, double right) const override
 Creates a new clipped axis. More...
 
size_t findClosestIndex (double value) const
 find bin index which is best match for given value More...
 
std::string getName () const
 retrieve the label of the axis More...
 
double lowerBound () const
 Returns value of first point of axis. More...
 
bool operator!= (const IAxis &right) const
 
bool operator== (const IAxis &right) const
 test for equality More...
 
double operator[] (size_t index) const
 indexed accessor retrieves a sample More...
 
void setName (std::string name)
 Sets the axis label. More...
 
size_t size () const
 retrieve the number of bins More...
 
double span () const
 Returns distance from first to last point. More...
 
double upperBound () const
 Returns value of last point of axis. More...
 

Protected Member Functions

 ConstKBinAxis (const std::string &name, size_t nbins)
 
bool equals (const IAxis &other) const override
 
void print (std::ostream &ostr) const override
 
void setBinBoundaries (const std::vector< double > &bin_boundaries)
 

Protected Attributes

double m_end
 
size_t m_nbins
 
double m_start
 

Private Attributes

std::vector< double > m_bin_boundaries
 vector containing the bin limits More...
 
std::string m_name
 axis name More...
 

Detailed Description

Axis with fixed bin size in sin(angle) space.

Definition at line 23 of file ConstKBinAxis.h.

Constructor & Destructor Documentation

◆ ConstKBinAxis() [1/2]

ConstKBinAxis::ConstKBinAxis ( const std::string &  name,
size_t  nbins,
double  start,
double  end 
)

ConstKBinAxis constructor.

Parameters
nameAxis name
nbinsnumber of bins
startlow edge of first bin
endupper edge of last bin

Definition at line 24 of file ConstKBinAxis.cpp.

25  : VariableBinAxis(name, nbins), m_start(start), m_end(end)
26 {
27  if (m_start >= m_end)
28  throw std::runtime_error(
29  "ConstKBinAxis::ConstKBinAxis() -> Error. start >= end is not allowed.");
30 
31  double start_sin = std::sin(m_start);
32  double end_sin = std::sin(m_end);
33  double step = (end_sin - start_sin) / (m_nbins);
34 
35  std::vector<double> bin_boundaries;
36  bin_boundaries.resize(m_nbins + 1, 0.0);
37  for (size_t i = 0; i < bin_boundaries.size(); ++i) {
38  bin_boundaries[i] = std::asin(start_sin + step * i);
39  }
40  setBinBoundaries(bin_boundaries);
41 }
void setBinBoundaries(const std::vector< double > &bin_boundaries)
VariableBinAxis(const std::string &name, size_t nbins, const std::vector< double > &bin_boundaries)
VariableBinAxis constructor.
QString const & name(EShape k)
Definition: particles.cpp:21

References m_end, VariableBinAxis::m_nbins, m_start, and VariableBinAxis::setBinBoundaries().

Referenced by clone(), and createClippedAxis().

Here is the call graph for this function:

◆ ~ConstKBinAxis()

ConstKBinAxis::~ConstKBinAxis ( )
inlineoverride

Definition at line 31 of file ConstKBinAxis.h.

31 {}

◆ ConstKBinAxis() [2/2]

ConstKBinAxis::ConstKBinAxis ( const std::string &  name,
size_t  nbins 
)
protected

Definition at line 19 of file ConstKBinAxis.cpp.

20  : VariableBinAxis(name, nbins), m_start(0), m_end(0)
21 {
22 }

Member Function Documentation

◆ bin()

Bin1D VariableBinAxis::bin ( size_t  index) const
virtualinherited

retrieve a 1d bin for the given index

Implements IAxis.

Definition at line 47 of file VariableBinAxis.cpp.

48 {
49  if (index >= m_nbins)
50  throw std::runtime_error("VariableBinAxis::bin() -> Error. Wrong index.");
51 
52  Bin1D result(m_bin_boundaries[index], m_bin_boundaries[index + 1]);
53  return result;
54 }
std::vector< double > m_bin_boundaries
vector containing the bin limits
Definition: Bin.h:20

References VariableBinAxis::m_bin_boundaries, and VariableBinAxis::m_nbins.

Referenced by VariableBinAxis::binCenter(), VariableBinAxis::binCenters(), VariableBinAxis::createClippedAxis(), createClippedAxis(), and VariableBinAxis::operator[]().

◆ binBoundaries()

std::vector<double> VariableBinAxis::binBoundaries ( ) const
inlinevirtualinherited

Reimplemented from IAxis.

Definition at line 50 of file VariableBinAxis.h.

50 { return m_bin_boundaries; }

References VariableBinAxis::m_bin_boundaries.

Referenced by createClippedAxis().

◆ binCenter()

double VariableBinAxis::binCenter ( size_t  index) const
virtualinherited

Implements IAxis.

Definition at line 66 of file VariableBinAxis.cpp.

67 {
68  return bin(index).center();
69 }
Bin1D bin(size_t index) const
retrieve a 1d bin for the given index
double center() const
Definition: Bin.h:25

References VariableBinAxis::bin(), and Bin1D::center().

Here is the call graph for this function:

◆ binCenters()

std::vector< double > VariableBinAxis::binCenters ( ) const
virtualinherited

Reimplemented from IAxis.

Definition at line 90 of file VariableBinAxis.cpp.

91 {
92  std::vector<double> result;
93  result.resize(size(), 0.0);
94  for (size_t i = 0; i < size(); ++i) {
95  result[i] = bin(i).center();
96  }
97  return result;
98 }
size_t size() const
retrieve the number of bins

References VariableBinAxis::bin(), Bin1D::center(), and VariableBinAxis::size().

Here is the call graph for this function:

◆ center()

double IAxis::center ( ) const
inherited

Returns midpoint of axis.

Definition at line 47 of file IAxis.cpp.

48 {
49  return (upperBound() + lowerBound()) / 2;
50 }
virtual double upperBound() const =0
Returns value of last point of axis.
virtual double lowerBound() const =0
Returns value of first point of axis.

References IAxis::lowerBound(), and IAxis::upperBound().

Here is the call graph for this function:

◆ clone()

ConstKBinAxis * ConstKBinAxis::clone ( ) const
overridevirtual

clone function

Implements IAxis.

Definition at line 43 of file ConstKBinAxis.cpp.

44 {
45  return new ConstKBinAxis(getName(), m_nbins, m_start, m_end);
46 }
ConstKBinAxis(const std::string &name, size_t nbins, double start, double end)
ConstKBinAxis constructor.
std::string getName() const
retrieve the label of the axis
Definition: IAxis.h:40

References ConstKBinAxis(), IAxis::getName(), m_end, VariableBinAxis::m_nbins, and m_start.

Here is the call graph for this function:

◆ contains()

bool IAxis::contains ( double  value) const
virtualinherited

Returns true if axis contains given point.

Definition at line 37 of file IAxis.cpp.

38 {
39  return value >= lowerBound() && value < upperBound();
40 }

References IAxis::lowerBound(), and IAxis::upperBound().

Referenced by Histogram1D::crop(), Histogram2D::crop(), Histogram1D::fill(), RectangularDetector::indexOfSpecular(), and SphericalDetector::indexOfSpecular().

Here is the call graph for this function:

◆ createClippedAxis()

ConstKBinAxis * ConstKBinAxis::createClippedAxis ( double  left,
double  right 
) const
overridevirtual

Creates a new clipped axis.

Reimplemented from VariableBinAxis.

Definition at line 48 of file ConstKBinAxis.cpp.

49 {
50  if (left >= right)
51  throw std::runtime_error(
52  "ConstKBinAxis::createClippedAxis() -> Error. 'left'' should be smaller than 'right'");
53 
54  if (left < lowerBound())
55  left = bin(0).center();
56  if (right >= upperBound())
57  right = bin(size() - 1).center();
58 
59  size_t nbin1 = findClosestIndex(left);
60  size_t nbin2 = findClosestIndex(right);
61 
62  size_t new_nbins = nbin2 - nbin1 + 1;
63  std::vector<double> new_boundaries;
64  std::vector<double> old_boundaries = binBoundaries();
65  for (size_t i = 0; i < new_nbins + 1; ++i) {
66  new_boundaries.push_back(old_boundaries[nbin1 + i]);
67  }
68 
69  ConstKBinAxis* result = new ConstKBinAxis(getName(), new_nbins);
70  result->m_start = new_boundaries.front();
71  result->m_end = new_boundaries.back();
72  result->setBinBoundaries(new_boundaries);
73  return result;
74 }
Axis with fixed bin size in sin(angle) space.
Definition: ConstKBinAxis.h:23
double upperBound() const
Returns value of last point of axis.
std::vector< double > binBoundaries() const
double lowerBound() const
Returns value of first point of axis.
size_t findClosestIndex(double value) const
find bin index which is best match for given value

References ConstKBinAxis(), VariableBinAxis::bin(), VariableBinAxis::binBoundaries(), Bin1D::center(), VariableBinAxis::findClosestIndex(), IAxis::getName(), VariableBinAxis::lowerBound(), m_end, m_start, VariableBinAxis::setBinBoundaries(), VariableBinAxis::size(), and VariableBinAxis::upperBound().

Here is the call graph for this function:

◆ equals()

bool ConstKBinAxis::equals ( const IAxis other) const
overrideprotectedvirtual

Reimplemented from VariableBinAxis.

Definition at line 76 of file ConstKBinAxis.cpp.

77 {
78  if (!IAxis::equals(other))
79  return false;
80  if (const ConstKBinAxis* otherAxis = dynamic_cast<const ConstKBinAxis*>(&other)) {
81  if (size() != otherAxis->size())
82  return false;
83  if (!algo::almostEqual(m_start, otherAxis->m_start))
84  return false;
85  if (!algo::almostEqual(m_end, otherAxis->m_end))
86  return false;
87  return true;
88  }
89  return false;
90 }
virtual bool equals(const IAxis &other) const
Definition: IAxis.cpp:17
bool almostEqual(double a, double b)
Returns true if two doubles agree within machine epsilon.
Definition: Algorithms.h:34

References algo::almostEqual(), IAxis::equals(), m_end, m_start, and VariableBinAxis::size().

Here is the call graph for this function:

◆ findClosestIndex()

size_t VariableBinAxis::findClosestIndex ( double  value) const
virtualinherited

find bin index which is best match for given value

Implements IAxis.

Definition at line 71 of file VariableBinAxis.cpp.

72 {
73  if (m_bin_boundaries.size() < 2)
74  throw std::runtime_error("VariableBinAxis::findClosestIndex() -> Error! "
75  "VariableBinAxis not correctly initialized");
76  if (value < lowerBound()) {
77  return 0;
78  } else if (value >= upperBound()) {
79  return m_nbins - 1;
80  }
81 
82  std::vector<double>::const_iterator top_limit =
83  std::lower_bound(m_bin_boundaries.begin(), m_bin_boundaries.end(), value);
84  if (*top_limit != value)
85  --top_limit;
86  size_t nbin = top_limit - m_bin_boundaries.begin();
87  return nbin;
88 }

References VariableBinAxis::lowerBound(), VariableBinAxis::m_bin_boundaries, VariableBinAxis::m_nbins, and VariableBinAxis::upperBound().

Referenced by VariableBinAxis::createClippedAxis(), and createClippedAxis().

Here is the call graph for this function:

◆ getName()

◆ lowerBound()

double VariableBinAxis::lowerBound ( ) const
virtualinherited

Returns value of first point of axis.

Implements IAxis.

Definition at line 56 of file VariableBinAxis.cpp.

57 {
58  return m_bin_boundaries.front();
59 }

References VariableBinAxis::m_bin_boundaries.

Referenced by VariableBinAxis::createClippedAxis(), createClippedAxis(), and VariableBinAxis::findClosestIndex().

◆ operator!=()

bool IAxis::operator!= ( const IAxis right) const
inlineinherited

Definition at line 70 of file IAxis.h.

70 { return !(*this == right); }

◆ operator==()

bool IAxis::operator== ( const IAxis right) const
inlineinherited

test for equality

Definition at line 69 of file IAxis.h.

69 { return equals(right); }

References IAxis::equals().

Here is the call graph for this function:

◆ operator[]()

double VariableBinAxis::operator[] ( size_t  index) const
virtualinherited

indexed accessor retrieves a sample

Implements IAxis.

Definition at line 42 of file VariableBinAxis.cpp.

43 {
44  return bin(index).center();
45 }

References VariableBinAxis::bin(), and Bin1D::center().

Here is the call graph for this function:

◆ print()

void ConstKBinAxis::print ( std::ostream &  ostr) const
overrideprotectedvirtual

Reimplemented from VariableBinAxis.

Definition at line 92 of file ConstKBinAxis.cpp.

93 {
94  ostr << "ConstKBinAxis(\"" << getName() << "\", " << size() << ", "
95  << std::setprecision(std::numeric_limits<double>::digits10 + 2) << m_start << ", " << m_end
96  << ")";
97 }

References IAxis::getName(), m_end, m_start, and VariableBinAxis::size().

Here is the call graph for this function:

◆ setBinBoundaries()

void VariableBinAxis::setBinBoundaries ( const std::vector< double > &  bin_boundaries)
protectedinherited

Definition at line 152 of file VariableBinAxis.cpp.

153 {
154  // checking that values are sorted
155  std::vector<double> vec_sorted = bin_boundaries;
156  std::sort(vec_sorted.begin(), vec_sorted.end());
157  for (size_t i = 0; i < bin_boundaries.size(); ++i) {
158  if (vec_sorted[i] != bin_boundaries[i])
159  throw std::runtime_error("VariableBinAxis::VariableBinAxis() -> Error. "
160  "Array with bin edges is not sorted.");
161  }
162 
163  std::vector<double> vec = bin_boundaries;
164  vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
165 
166  if (vec.size() != bin_boundaries.size())
167  throw std::runtime_error("VariableBinAxis::VariableBinAxis() -> Error. "
168  "Array with bin edges contains repeating values.");
169 
170  m_bin_boundaries = bin_boundaries;
171 }

References VariableBinAxis::m_bin_boundaries.

Referenced by ConstKBinAxis(), CustomBinAxis::CustomBinAxis(), VariableBinAxis::VariableBinAxis(), and createClippedAxis().

◆ setName()

void IAxis::setName ( std::string  name)
inlineinherited

Sets the axis label.

Definition at line 43 of file IAxis.h.

43 { m_name = name; }

References IAxis::m_name, and RealSpace::Particles::name().

Here is the call graph for this function:

◆ size()

size_t VariableBinAxis::size ( ) const
inlinevirtualinherited

◆ span()

double IAxis::span ( ) const
inherited

Returns distance from first to last point.

Definition at line 42 of file IAxis.cpp.

43 {
44  return upperBound() - lowerBound();
45 }

References IAxis::lowerBound(), and IAxis::upperBound().

Referenced by RectangularDetector::getHeight(), RectangularDetector::getWidth(), and DetectorUtils::isQuadratic().

Here is the call graph for this function:

◆ upperBound()

double VariableBinAxis::upperBound ( ) const
virtualinherited

Returns value of last point of axis.

Implements IAxis.

Definition at line 61 of file VariableBinAxis.cpp.

62 {
63  return m_bin_boundaries.back();
64 }

References VariableBinAxis::m_bin_boundaries.

Referenced by VariableBinAxis::createClippedAxis(), createClippedAxis(), and VariableBinAxis::findClosestIndex().

Member Data Documentation

◆ m_bin_boundaries

◆ m_end

double ConstKBinAxis::m_end
protected

Definition at line 44 of file ConstKBinAxis.h.

Referenced by ConstKBinAxis(), clone(), createClippedAxis(), equals(), and print().

◆ m_name

std::string IAxis::m_name
privateinherited

axis name

Definition at line 96 of file IAxis.h.

Referenced by IAxis::getName(), and IAxis::setName().

◆ m_nbins

◆ m_start

double ConstKBinAxis::m_start
protected

Definition at line 43 of file ConstKBinAxis.h.

Referenced by ConstKBinAxis(), clone(), createClippedAxis(), equals(), and print().


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