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

Description

Conversion of axis units for the case of q-defined reflectometry.

Definition at line 99 of file CoordSystem1D.h.

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

Public Member Functions

 WavenumberReflectometryCoordinates (const IAxis *&&axis)
 
 ~WavenumberReflectometryCoordinates () override
 
std::vector< CoordsavailableUnits () const override
 Returns the list of all available units. More...
 
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...
 
WavenumberReflectometryCoordinatesclone () const override
 
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
 
Coords defaultUnits () const override
 Returns default units to convert to. More...
 
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
 
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

 WavenumberReflectometryCoordinates (const WavenumberReflectometryCoordinates &other)
 
std::vector< std::map< Coords, std::string > > createNameMaps () const override
 Creates name map for axis in various units. More...
 
std::function< double(double)> getTraslatorTo (Coords units) const override
 Returns translating functional (inv. nm --> desired units) More...
 

Constructor & Destructor Documentation

◆ WavenumberReflectometryCoordinates() [1/2]

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

Definition at line 202 of file CoordSystem1D.cpp.

203  : CoordSystem1D(std::move(axis))
204 {
205 }
CoordSystem1D(const IAxis *&&axis)
Takes ownership of axis.

Referenced by clone().

◆ ~WavenumberReflectometryCoordinates()

WavenumberReflectometryCoordinates::~WavenumberReflectometryCoordinates ( )
overridedefault

◆ WavenumberReflectometryCoordinates() [2/2]

WavenumberReflectometryCoordinates::WavenumberReflectometryCoordinates ( const WavenumberReflectometryCoordinates other)
private

Definition at line 207 of file CoordSystem1D.cpp.

209  : CoordSystem1D(other.coordinateAxis()->clone())
210 {
211 }
const IAxis * coordinateAxis() const
Definition: CoordSystem1D.h:62
virtual IAxis * clone() const =0

Member Function Documentation

◆ availableUnits()

std::vector< Coords > WavenumberReflectometryCoordinates::availableUnits ( ) const
overridevirtual

Returns the list of all available units.

Implements ICoordSystem.

Definition at line 221 of file CoordSystem1D.cpp.

222 {
224 }

References NBINS, QSPACE, and RQ4.

◆ 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 CoordSystem1D::createConvertedAxis(), and CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ axisSize()

size_t CoordSystem1D::axisSize ( size_t  i_axis) const
overridevirtualinherited

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 }
virtual size_t size() const =0
Returns the number of bins.

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

Here is the call graph for this function:

◆ calculateMax()

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

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(), CoordSystem1D::coordinateAxis(), CoordSystem1D::getTraslatorTo(), NBINS, IAxis::size(), and ICoordSystem::substituteDefaultUnits().

Referenced by CoordSystem1D::createConvertedAxis().

Here is the call graph for this function:

◆ calculateMin()

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

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, CoordSystem1D::coordinateAxis(), CoordSystem1D::getTraslatorTo(), NBINS, and ICoordSystem::substituteDefaultUnits().

Referenced by CoordSystem1D::createConvertedAxis().

Here is the call graph for this function:

◆ clone()

WavenumberReflectometryCoordinates * WavenumberReflectometryCoordinates::clone ( ) const
overridevirtual

Implements CoordSystem1D.

Definition at line 215 of file CoordSystem1D.cpp.

216 {
217  return new WavenumberReflectometryCoordinates(*this);
218 }
WavenumberReflectometryCoordinates(const IAxis *&&axis)

References WavenumberReflectometryCoordinates().

Here is the call graph for this function:

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

Definition at line 62 of file CoordSystem1D.h.

62 { return m_axis.get(); }
std::unique_ptr< const IAxis > m_axis
semantics depends on subclass
Definition: CoordSystem1D.h:64

References CoordSystem1D::m_axis.

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

◆ createConvertedAxis()

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

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(), CoordSystem1D::calculateMax(), CoordSystem1D::calculateMin(), CoordSystem1D::coordinateAxis(), CoordSystem1D::getTraslatorTo(), NBINS, and ICoordSystem::substituteDefaultUnits().

Referenced by CoordSystem1D::createConvertedData().

Here is the call graph for this function:

◆ createConvertedData()

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

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, CoordSystem1D::createConvertedAxis(), Datafield::flatVector(), Datafield::rank(), RQ4, Datafield::setVector(), and Datafield::size().

Here is the call graph for this function:

◆ createNameMaps()

std::vector< std::map< Coords, std::string > > WavenumberReflectometryCoordinates::createNameMaps ( ) const
overrideprivatevirtual

Creates name map for axis in various units.

Implements ICoordSystem.

Definition at line 228 of file CoordSystem1D.cpp.

229 {
231 }
BA_DEVICE_API_ const std::map< Coords, std::string > specAxisQ
Definition: AxisNames.cpp:61

References DataUtils::AxisNames::specAxisQ.

◆ 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()

Coords WavenumberReflectometryCoordinates::defaultUnits ( ) const
inlineoverridevirtual

Returns default units to convert to.

Implements ICoordSystem.

Definition at line 110 of file CoordSystem1D.h.

110 { return Coords::QSPACE; }

References QSPACE.

◆ getTraslatorTo()

std::function< double(double)> WavenumberReflectometryCoordinates::getTraslatorTo ( Coords  units) const
overrideprivatevirtual

Returns translating functional (inv. nm --> desired units)

Implements CoordSystem1D.

Definition at line 234 of file CoordSystem1D.cpp.

235 {
236  switch (units) {
237  case Coords::QSPACE:
238  return [](double value) { return value; };
239  case Coords::RQ4:
240  return [](double value) { return value; };
241  default:
242  ASSERT(0);
243  }
244 }

References ASSERT, QSPACE, and RQ4.

◆ rank()

size_t CoordSystem1D::rank ( ) const
inlineoverridevirtualinherited

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 CoordSystem1D::calculateMax(), CoordSystem2D::calculateMax(), CoordSystem1D::calculateMin(), CoordSystem2D::calculateMin(), and CoordSystem1D::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
protectedinherited

semantics depends on subclass

Definition at line 64 of file CoordSystem1D.h.

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


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