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

Description

Interface for objects that provide axis translations to different units for IDetector objects.

Definition at line 32 of file CoordSystem2D.h.

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

Public Member Functions

 CoordSystem2D (const Direction &direction, double wavelength=0)
 
 CoordSystem2D (const OwningVector< IAxis > &axes, const Direction &direction, double wavelength=0)
 
 ~CoordSystem2D () override=default
 
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
 
ICoordSystemclone () const override=0
 
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
 
virtual Coords defaultUnits () const =0
 
size_t rank () const override
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

 CoordSystem2D (const CoordSystem2D &other)
 
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

virtual double calculateValue (size_t i_axis, Coords units, double value) const =0
 
virtual std::vector< std::map< Coords, std::string > > createNameMaps () const =0
 

Constructor & Destructor Documentation

◆ CoordSystem2D() [1/3]

CoordSystem2D::CoordSystem2D ( const Direction direction,
double  wavelength = 0 
)

Definition at line 48 of file CoordSystem2D.cpp.

49  : CoordSystem2D({}, direction, wavelength)
50 {
51 }
CoordSystem2D(const Direction &direction, double wavelength=0)

◆ CoordSystem2D() [2/3]

CoordSystem2D::CoordSystem2D ( const OwningVector< IAxis > &  axes,
const Direction direction,
double  wavelength = 0 
)

Definition at line 53 of file CoordSystem2D.cpp.

55  : m_axes(axes)
56  , m_wavelength(wavelength)
57  , m_alpha_i(-direction.alpha())
58  , m_phi_i(direction.phi())
59 {
60 }
OwningVector< IAxis > m_axes
Definition: CoordSystem2D.h:56
double m_wavelength
Definition: CoordSystem2D.h:57
double m_alpha_i
Definition: CoordSystem2D.h:58
double phi() const
Definition: Direction.h:37
double alpha() const
Definition: Direction.h:36

◆ ~CoordSystem2D()

CoordSystem2D::~CoordSystem2D ( )
overridedefault

◆ CoordSystem2D() [3/3]

CoordSystem2D::CoordSystem2D ( const CoordSystem2D other)
protected

Definition at line 62 of file CoordSystem2D.cpp.

63  : m_axes(other.m_axes)
64  , m_wavelength(other.m_wavelength)
65  , m_alpha_i(other.m_alpha_i)
66  , m_phi_i(other.m_phi_i)
67 {
68 }

Member Function Documentation

◆ addAxisData()

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

Definition at line 70 of file CoordSystem2D.cpp.

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

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

Here is the call graph for this function:

◆ availableUnits()

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

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 createConvertedAxis().

Here is the call graph for this function:

◆ axisSize()

size_t CoordSystem2D::axisSize ( size_t  i_axis) const
overridevirtual

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, m_axes, rank(), and OwningVector< T >::size().

Referenced by createConvertedAxis().

Here is the call graph for this function:

◆ calculateMax()

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

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, calculateValue(), m_axes, NBINS, rank(), OwningVector< T >::size(), and ICoordSystem::substituteDefaultUnits().

Referenced by createConvertedAxis().

Here is the call graph for this function:

◆ calculateMin()

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

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, calculateValue(), m_axes, NBINS, rank(), and ICoordSystem::substituteDefaultUnits().

Referenced by createConvertedAxis().

Here is the call graph for this function:

◆ calculateValue()

virtual double CoordSystem2D::calculateValue ( size_t  i_axis,
Coords  units,
double  value 
) const
privatepure virtual

◆ clone()

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

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(), axisSize(), calculateMax(), and 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()

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

◆ rank()

size_t CoordSystem2D::rank ( ) const
inlineoverridevirtual

Implements ICoordSystem.

Definition at line 39 of file CoordSystem2D.h.

39 { return m_axes.size(); }

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

Referenced by axisSize(), calculateMax(), and 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(), calculateMax(), CoordSystem1D::calculateMin(), 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
protected

Definition at line 58 of file CoordSystem2D.h.

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

◆ m_axes

OwningVector<IAxis> CoordSystem2D::m_axes
protected

◆ m_phi_i

double CoordSystem2D::m_phi_i
protected

Definition at line 59 of file CoordSystem2D.h.

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

◆ m_wavelength

double CoordSystem2D::m_wavelength
protected

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