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

Description

ICoordSystem class that handles the unit translations for off-specular simulations with a spherical detector Its default units are radians for both axes.

Definition at line 115 of file CoordSystem2D.h.

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

Public Member Functions

 OffspecCoordinates (const OwningVector< IAxis > &axes, const Direction &direction)
 
std::vector< CoordsavailableUnits () const override
 Returns list of units that are available for all 2D detectors. Further units may be added by child classes. More...
 
std::string axisName (size_t i_axis, Coords units=Coords::UNDEFINED) const
 
size_t axisSize (size_t i_axis) const override
 
double calculateMax (size_t i_axis, Coords units) const override
 
double calculateMin (size_t i_axis, Coords units) const override
 
OffspecCoordinatesclone () const override
 
std::vector< IAxis * > convertedAxes (Coords units) const
 
IAxiscreateConvertedAxis (size_t i_axis, Coords units) const override
 
virtual DatafieldcreateConvertedData (const Datafield &data, Coords units) const
 Creates Datafield array in converter units. More...
 
std::vector< IAxis * > defaultAxes () const
 
Coords defaultUnits () const override
 
size_t rank () const override
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

void addAxisData (std::string name, double min, double max, size_t nbins)
 
Coords substituteDefaultUnits (Coords units) const
 
void throwUnitsError (std::string method, std::vector< Coords > available) const
 

Protected Attributes

double m_alpha_i
 
OwningVector< IAxism_axes
 
double m_phi_i
 
double m_wavelength
 

Private Member Functions

 OffspecCoordinates (const OffspecCoordinates &other)
 used by clone() More...
 
double calculateValue (size_t i_axis, Coords units, double value) const override
 
std::vector< std::map< Coords, std::string > > createNameMaps () const override
 

Constructor & Destructor Documentation

◆ OffspecCoordinates() [1/2]

OffspecCoordinates::OffspecCoordinates ( const OwningVector< IAxis > &  axes,
const Direction direction 
)

Definition at line 264 of file CoordSystem2D.cpp.

265  : CoordSystem2D(axes, direction)
266 {
267 }
CoordSystem2D(const Direction &direction, double wavelength=0)

Referenced by clone().

◆ OffspecCoordinates() [2/2]

OffspecCoordinates::OffspecCoordinates ( const OffspecCoordinates other)
private

used by clone()

Definition at line 269 of file CoordSystem2D.cpp.

270  : CoordSystem2D(other)
271 {
272 }

Member Function Documentation

◆ addAxisData()

void CoordSystem2D::addAxisData ( std::string  name,
double  min,
double  max,
size_t  nbins 
)
protectedinherited

Definition at line 70 of file CoordSystem2D.cpp.

71 {
72  m_axes.emplace_back(new FixedBinAxis(name, min, max, nbins));
73 }
OwningVector< IAxis > m_axes
Definition: CoordSystem2D.h:56
Axis with fixed bin size.
Definition: FixedBinAxis.h:23
void emplace_back(T *e)
Definition: OwningVector.h:62

References OwningVector< T >::emplace_back(), and CoordSystem2D::m_axes.

Here is the call graph for this function:

◆ availableUnits()

std::vector< Coords > CoordSystem2D::availableUnits ( ) const
overridevirtualinherited

Returns list of units that are available for all 2D detectors. Further units may be added by child classes.

Implements ICoordSystem.

Reimplemented in DepthProbeCoordinates, ImageCoords, and SphericalCoords.

Definition at line 99 of file CoordSystem2D.cpp.

100 {
102 }

References DEGREES, NBINS, and RADIANS.

Referenced by SphericalCoords::availableUnits(), ImageCoords::availableUnits(), and DepthProbeCoordinates::availableUnits().

◆ 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 CoordSystem2D::axisSize ( size_t  i_axis) const
overridevirtualinherited

Implements ICoordSystem.

Definition at line 93 of file CoordSystem2D.cpp.

94 {
95  ASSERT(i_axis < rank());
96  return m_axes[i_axis]->size();
97 }
size_t rank() const override
Definition: CoordSystem2D.h:39
size_t size() const
Definition: OwningVector.h:70

References ASSERT, CoordSystem2D::m_axes, CoordSystem2D::rank(), and OwningVector< T >::size().

Referenced by CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ calculateMax()

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

Implements ICoordSystem.

Definition at line 84 of file CoordSystem2D.cpp.

85 {
86  ASSERT(i_axis < rank());
87  units = substituteDefaultUnits(units);
88  if (units == Coords::NBINS)
89  return m_axes[i_axis]->size();
90  return calculateValue(i_axis, units, m_axes[i_axis]->max());
91 }
virtual double calculateValue(size_t i_axis, Coords units, double value) const =0
Coords substituteDefaultUnits(Coords units) const

References ASSERT, CoordSystem2D::calculateValue(), CoordSystem2D::m_axes, NBINS, CoordSystem2D::rank(), OwningVector< T >::size(), and ICoordSystem::substituteDefaultUnits().

Referenced by CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ calculateMin()

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

Implements ICoordSystem.

Definition at line 75 of file CoordSystem2D.cpp.

76 {
77  ASSERT(i_axis < rank());
78  units = substituteDefaultUnits(units);
79  if (units == Coords::NBINS)
80  return 0.0;
81  return calculateValue(i_axis, units, m_axes[i_axis]->min());
82 }

References ASSERT, CoordSystem2D::calculateValue(), CoordSystem2D::m_axes, NBINS, CoordSystem2D::rank(), and ICoordSystem::substituteDefaultUnits().

Referenced by CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ calculateValue()

double OffspecCoordinates::calculateValue ( size_t  i_axis,
Coords  units,
double  value 
) const
overrideprivatevirtual

Implements CoordSystem2D.

Definition at line 279 of file CoordSystem2D.cpp.

280 {
281  switch (units) {
282  case Coords::RADIANS:
283  return value;
284  case Coords::DEGREES:
285  return Units::rad2deg(value);
286  default:
287  ASSERT(0);
288  }
289 }
double rad2deg(double angle)
Definition: Units.h:54

References ASSERT, DEGREES, Units::rad2deg(), and RADIANS.

Here is the call graph for this function:

◆ clone()

OffspecCoordinates * OffspecCoordinates::clone ( ) const
overridevirtual

Implements ICoordSystem.

Definition at line 274 of file CoordSystem2D.cpp.

275 {
276  return new OffspecCoordinates(*this);
277 }
OffspecCoordinates(const OwningVector< IAxis > &axes, const Direction &direction)

References OffspecCoordinates().

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:

◆ createConvertedAxis()

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

Implements ICoordSystem.

Definition at line 104 of file CoordSystem2D.cpp.

105 {
106  const double min = calculateMin(i_axis, units);
107  const double max = calculateMax(i_axis, units);
108  const auto& axis_name = axisName(i_axis, units);
109  const auto axis_size = axisSize(i_axis);
110  return new FixedBinAxis(axis_name, axis_size, min, max);
111 }
size_t axisSize(size_t i_axis) const override
double calculateMin(size_t i_axis, Coords units) const override
double calculateMax(size_t i_axis, Coords units) const override
std::string axisName(size_t i_axis, Coords units=Coords::UNDEFINED) const

References ICoordSystem::axisName(), CoordSystem2D::axisSize(), CoordSystem2D::calculateMax(), and CoordSystem2D::calculateMin().

Here is the call graph for this function:

◆ createConvertedData()

Datafield * ICoordSystem::createConvertedData ( const Datafield data,
Coords  units 
) const
virtualinherited

Creates Datafield array in converter units.

Reimplemented in CoordSystem1D.

Definition at line 46 of file ICoordSystem.cpp.

47 {
48  std::vector<IAxis*> axes;
49  for (size_t i = 0; i < rank(); ++i)
50  axes.emplace_back(createConvertedAxis(i, units));
51 
52  Datafield* result = new Datafield(axes);
53 
54  result->setVector(data.flatVector());
55  return result;
56 }
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

References ICoordSystem::createConvertedAxis(), Datafield::flatVector(), ICoordSystem::rank(), and Datafield::setVector().

Here is the call graph for this function:

◆ createNameMaps()

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

Implements ICoordSystem.

Definition at line 291 of file CoordSystem2D.cpp.

292 {
294 }
BA_DEVICE_API_ const std::map< Coords, std::string > offspecAxis0
Definition: AxisNames.cpp:46
BA_DEVICE_API_ const std::map< Coords, std::string > offspecAxis1
Definition: AxisNames.cpp:50

References DataUtils::AxisNames::offspecAxis0, and DataUtils::AxisNames::offspecAxis1.

◆ 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 OffspecCoordinates::defaultUnits ( ) const
inlineoverridevirtual

Implements ICoordSystem.

Definition at line 121 of file CoordSystem2D.h.

121 { return Coords::DEGREES; }

References DEGREES.

◆ rank()

size_t CoordSystem2D::rank ( ) const
inlineoverridevirtualinherited

Implements ICoordSystem.

Definition at line 39 of file CoordSystem2D.h.

39 { return m_axes.size(); }

References CoordSystem2D::m_axes, and OwningVector< T >::size().

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

Here is the call graph for this function:

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

double CoordSystem2D::m_alpha_i
protectedinherited

Definition at line 58 of file CoordSystem2D.h.

Referenced by SphericalCoords::calculateValue(), and ImageCoords::calculateValue().

◆ m_axes

◆ m_phi_i

double CoordSystem2D::m_phi_i
protectedinherited

Definition at line 59 of file CoordSystem2D.h.

Referenced by SphericalCoords::calculateValue(), and ImageCoords::calculateValue().

◆ m_wavelength

double CoordSystem2D::m_wavelength
protectedinherited

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