BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
CoordSystem1D Class Referenceabstract

Description

Abstract base class to support coordinate transforms and axis labels for 1D scans. Inherited by AngularReflectometryCoordinates and WavenumberReflectometryCoordinates.

Definition at line 33 of file CoordSystem1D.h.

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

Public Member Functions

 CoordSystem1D (const IAxis *&&axis)
 Takes ownership of axis. More...
 
 ~CoordSystem1D () override=default
 
virtual std::vector< CoordsavailableUnits () const =0
 
std::string axisName (size_t i_axis, Coords units=Coords::UNDEFINED) const
 
size_t axisSize (size_t i_axis) const override
 Returns the size of underlying axis. More...
 
double calculateMax (size_t i_axis, Coords units) const override
 Calculates maximum on-axis value in given units. More...
 
double calculateMin (size_t i_axis, Coords units) const override
 Calculates minimum on-axis value in given units. More...
 
CoordSystem1Dclone () const override=0
 
std::vector< IAxis * > convertedAxes (Coords units) const
 
IAxiscreateConvertedAxis (size_t i_axis, Coords units) const override
 Creates axis in converted units. More...
 
DatafieldcreateConvertedData (const Datafield &data, Coords units) const override
 Creates Datafield array in converter units. More...
 
std::vector< IAxis * > defaultAxes () const
 
virtual Coords defaultUnits () const =0
 
size_t rank () const override
 Returns dimensionality of converted canvas. More...
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

const IAxiscoordinateAxis () const
 
virtual std::function< double(double)> getTraslatorTo (Coords units) const =0
 Returns translating functional (rads --> output units) More...
 
Coords substituteDefaultUnits (Coords units) const
 
void throwUnitsError (std::string method, std::vector< Coords > available) const
 

Protected Attributes

std::unique_ptr< const IAxism_axis
 semantics depends on subclass More...
 

Private Member Functions

virtual std::vector< std::map< Coords, std::string > > createNameMaps () const =0
 

Constructor & Destructor Documentation

◆ CoordSystem1D()

CoordSystem1D::CoordSystem1D ( const IAxis *&&  axis)

Takes ownership of axis.

Definition at line 77 of file CoordSystem1D.cpp.

78  : m_axis(axis)
79 {
80 }
std::unique_ptr< const IAxis > m_axis
semantics depends on subclass
Definition: CoordSystem1D.h:64

◆ ~CoordSystem1D()

CoordSystem1D::~CoordSystem1D ( )
overridedefault

Member Function Documentation

◆ availableUnits()

virtual std::vector<Coords> ICoordSystem::availableUnits ( ) const
pure virtualinherited

◆ axisName()

std::string ICoordSystem::axisName ( size_t  i_axis,
Coords  units = Coords::UNDEFINED 
) const
inherited

Definition at line 36 of file ICoordSystem.cpp.

37 {
38  const auto& name_maps = createNameMaps();
39  ASSERT(i_axis < name_maps.size());
40  const auto& name_map = name_maps[i_axis];
41  const auto& it = name_map.find(units == Coords::UNDEFINED ? defaultUnits() : units);
42  ASSERT(it != name_map.cend());
43  return it->second;
44 }
#define ASSERT(condition)
Definition: Assert.h:45
virtual std::vector< std::map< Coords, std::string > > createNameMaps() const =0
virtual Coords defaultUnits() const =0

References ASSERT, ICoordSystem::createNameMaps(), ICoordSystem::defaultUnits(), and UNDEFINED.

Referenced by createConvertedAxis(), and CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ axisSize()

size_t CoordSystem1D::axisSize ( size_t  i_axis) const
overridevirtual

Returns the size of underlying axis.

Implements ICoordSystem.

Definition at line 83 of file CoordSystem1D.cpp.

84 {
85  ASSERT(i_axis == 0);
86  return coordinateAxis()->size();
87 }
const IAxis * coordinateAxis() const
Definition: CoordSystem1D.h:62
virtual size_t size() const =0
Returns the number of bins.

References ASSERT, coordinateAxis(), and IAxis::size().

Here is the call graph for this function:

◆ calculateMax()

double CoordSystem1D::calculateMax ( size_t  i_axis,
Coords  units 
) const
overridevirtual

Calculates maximum on-axis value in given units.

Implements ICoordSystem.

Definition at line 99 of file CoordSystem1D.cpp.

100 {
101  ASSERT(i_axis == 0);
102  units = substituteDefaultUnits(units);
103  const IAxis* const coordinate_axis = coordinateAxis();
104  if (units == Coords::NBINS)
105  return static_cast<double>(coordinate_axis->size());
106  auto translator = getTraslatorTo(units);
107  return translator(coordinate_axis->binCenter(coordinate_axis->size() - 1));
108 }
virtual std::function< double(double)> getTraslatorTo(Coords units) const =0
Returns translating functional (rads --> output units)
Abstract base class for one-dimensional axes.
Definition: IAxis.h:27
virtual double binCenter(size_t index) const =0
Coords substituteDefaultUnits(Coords units) const

References ASSERT, IAxis::binCenter(), coordinateAxis(), getTraslatorTo(), NBINS, IAxis::size(), and ICoordSystem::substituteDefaultUnits().

Referenced by createConvertedAxis().

Here is the call graph for this function:

◆ calculateMin()

double CoordSystem1D::calculateMin ( size_t  i_axis,
Coords  units 
) const
overridevirtual

Calculates minimum on-axis value in given units.

Implements ICoordSystem.

Definition at line 89 of file CoordSystem1D.cpp.

90 {
91  ASSERT(i_axis == 0);
92  units = substituteDefaultUnits(units);
93  if (units == Coords::NBINS)
94  return 0.0;
95  auto translator = getTraslatorTo(units);
96  return translator(coordinateAxis()->binCenter(0));
97 }

References ASSERT, coordinateAxis(), getTraslatorTo(), NBINS, and ICoordSystem::substituteDefaultUnits().

Referenced by createConvertedAxis().

Here is the call graph for this function:

◆ clone()

CoordSystem1D* CoordSystem1D::clone ( ) const
overridepure virtual

◆ convertedAxes()

std::vector< IAxis * > ICoordSystem::convertedAxes ( Coords  units) const
inherited

Definition at line 28 of file ICoordSystem.cpp.

29 {
30  std::vector<IAxis*> result;
31  for (size_t i = 0; i < rank(); ++i)
32  result.emplace_back(createConvertedAxis(i, units));
33  return result;
34 }
virtual IAxis * createConvertedAxis(size_t i_axis, Coords units) const =0
virtual size_t rank() const =0

References ICoordSystem::createConvertedAxis(), and ICoordSystem::rank().

Referenced by ICoordSystem::defaultAxes().

Here is the call graph for this function:

◆ coordinateAxis()

const IAxis* CoordSystem1D::coordinateAxis ( ) const
inlineprotected

Definition at line 62 of file CoordSystem1D.h.

62 { return m_axis.get(); }

References m_axis.

Referenced by axisSize(), calculateMax(), calculateMin(), and createConvertedAxis().

◆ createConvertedAxis()

IAxis * CoordSystem1D::createConvertedAxis ( size_t  i_axis,
Coords  units 
) const
overridevirtual

Creates axis in converted units.

Implements ICoordSystem.

Definition at line 110 of file CoordSystem1D.cpp.

111 {
112  ASSERT(i_axis == 0);
113  units = substituteDefaultUnits(units);
114  if (units == Coords::NBINS)
115  return new FixedBinAxis(axisName(0, units), coordinateAxis()->size(),
116  calculateMin(0, units), calculateMax(0, units));
117 
118  std::function<double(double)> translator = getTraslatorTo(units);
119  auto coords = coordinateAxis()->binCenters();
120  for (size_t i = 0, size = coords.size(); i < size; ++i)
121  coords[i] = translator(coords[i]);
122  return new PointwiseAxis(axisName(0, units), coords);
123 }
double calculateMax(size_t i_axis, Coords units) const override
Calculates maximum on-axis value in given units.
double calculateMin(size_t i_axis, Coords units) const override
Calculates minimum on-axis value in given units.
Axis with fixed bin size.
Definition: FixedBinAxis.h:23
virtual std::vector< double > binCenters() const
Definition: IAxis.cpp:25
std::string axisName(size_t i_axis, Coords units=Coords::UNDEFINED) const
Axis containing arbitrary (non-equidistant) coordinate values. Lower boundary of the first bin and up...
Definition: PointwiseAxis.h:33

References ASSERT, ICoordSystem::axisName(), IAxis::binCenters(), calculateMax(), calculateMin(), coordinateAxis(), getTraslatorTo(), NBINS, and ICoordSystem::substituteDefaultUnits().

Referenced by createConvertedData().

Here is the call graph for this function:

◆ createConvertedData()

Datafield * CoordSystem1D::createConvertedData ( const Datafield data,
Coords  units 
) const
overridevirtual

Creates Datafield array in converter units.

Reimplemented from ICoordSystem.

Definition at line 125 of file CoordSystem1D.cpp.

126 {
127  ASSERT(data.rank() == 1);
128 
129  auto q_axis = createConvertedAxis(0, units);
130  Datafield* result = new Datafield({q_axis});
131 
132  if (units != Coords::RQ4) {
133  result->setVector(data.flatVector());
134  return result;
135  }
136 
137  for (size_t i = 0, size = result->size(); i < size; ++i)
138  (*result)[i] = data[i] * std::pow((*q_axis)[i], 4);
139  return result;
140 }
IAxis * createConvertedAxis(size_t i_axis, Coords units) const override
Creates axis in converted units.
Stores radiation power per bin.
Definition: Datafield.h:30
void setVector(const std::vector< double > &data_vector)
Sets new values to raw data vector.
Definition: Datafield.cpp:69
std::vector< double > flatVector() const
Returns copy of raw data vector.
Definition: Datafield.cpp:119
size_t rank() const
Definition: Datafield.cpp:75
size_t size() const
Returns total size of data buffer (product of bin number in every dimension).
Definition: Datafield.cpp:80

References ASSERT, createConvertedAxis(), Datafield::flatVector(), Datafield::rank(), RQ4, Datafield::setVector(), and Datafield::size().

Here is the call graph for this function:

◆ createNameMaps()

virtual std::vector<std::map<Coords, std::string> > ICoordSystem::createNameMaps ( ) const
privatepure virtualinherited

◆ defaultAxes()

std::vector< IAxis * > ICoordSystem::defaultAxes ( ) const
inherited

Definition at line 23 of file ICoordSystem.cpp.

24 {
25  return convertedAxes(defaultUnits());
26 }
std::vector< IAxis * > convertedAxes(Coords units) const

References ICoordSystem::convertedAxes(), and ICoordSystem::defaultUnits().

Referenced by SimDataPair::execSimulation().

Here is the call graph for this function:

◆ defaultUnits()

◆ getTraslatorTo()

virtual std::function<double(double)> CoordSystem1D::getTraslatorTo ( Coords  units) const
protectedpure virtual

Returns translating functional (rads --> output units)

Implemented in WavenumberReflectometryCoordinates, and AngularReflectometryCoordinates.

Referenced by calculateMax(), calculateMin(), and createConvertedAxis().

◆ rank()

size_t CoordSystem1D::rank ( ) const
inlineoverridevirtual

Returns dimensionality of converted canvas.

Implements ICoordSystem.

Definition at line 41 of file CoordSystem1D.h.

41 { return 1u; }

◆ substituteDefaultUnits()

Coords ICoordSystem::substituteDefaultUnits ( Coords  units) const
protectedinherited

Definition at line 69 of file ICoordSystem.cpp.

70 {
71  return units == Coords::UNDEFINED ? defaultUnits() : units;
72 }

References ICoordSystem::defaultUnits(), and UNDEFINED.

Referenced by calculateMax(), CoordSystem2D::calculateMax(), calculateMin(), CoordSystem2D::calculateMin(), and createConvertedAxis().

Here is the call graph for this function:

◆ throwUnitsError()

void ICoordSystem::throwUnitsError ( std::string  method,
std::vector< Coords available 
) const
protectedinherited

Definition at line 58 of file ICoordSystem.cpp.

59 {
60  std::stringstream ss;
61  ss << "Unit type error in " << method
62  << ": unknown or unsupported unit type. Available units "
63  "are:\n";
64  for (auto unit : available)
65  ss << axisUnitLabel.at(unit) << "\n";
66  throw std::runtime_error(ss.str());
67 }
const std::map< Coords, const char * > axisUnitLabel
Definition: AxisNames.h:28

References axisUnitLabel.

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 32 of file ICloneable.h.

Member Data Documentation

◆ m_axis

std::unique_ptr<const IAxis> CoordSystem1D::m_axis
protected

semantics depends on subclass

Definition at line 64 of file CoordSystem1D.h.

Referenced by AngularReflectometryCoordinates::AngularReflectometryCoordinates(), and coordinateAxis().


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