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

Description

ICoordSystem class that handles the unit translations for spherical detectors Its default units are radians for both axes.

Definition at line 69 of file CoordSystem2D.h.

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

Public Member Functions

 SphericalCoords (const OwningVector< IAxis > &axes, const Direction &direction, double wavelength)
 
 ~SphericalCoords () override
 
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
 
SphericalCoordsclone () 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

 SphericalCoords (const SphericalCoords &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

◆ SphericalCoords() [1/2]

SphericalCoords::SphericalCoords ( const OwningVector< IAxis > &  axes,
const Direction direction,
double  wavelength 
)

Definition at line 117 of file CoordSystem2D.cpp.

119  : CoordSystem2D(axes, direction, wavelength)
120 {
121  ASSERT(axes.size() == 2);
122 }
#define ASSERT(condition)
Definition: Assert.h:45
CoordSystem2D(const Direction &direction, double wavelength=0)
size_t size() const
Definition: OwningVector.h:70

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

Referenced by clone().

Here is the call graph for this function:

◆ ~SphericalCoords()

SphericalCoords::~SphericalCoords ( )
overridedefault

◆ SphericalCoords() [2/2]

SphericalCoords::SphericalCoords ( const SphericalCoords other)
private

used by clone()

Definition at line 124 of file CoordSystem2D.cpp.

125  : CoordSystem2D(other)
126 {
127 }

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 > SphericalCoords::availableUnits ( ) const
overridevirtual

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

Reimplemented from CoordSystem2D.

Definition at line 136 of file CoordSystem2D.cpp.

137 {
138  auto result = CoordSystem2D::availableUnits();
139  result.push_back(Coords::QSPACE);
140  return result;
141 }
std::vector< Coords > availableUnits() const override
Returns list of units that are available for all 2D detectors. Further units may be added by child cl...

References CoordSystem2D::availableUnits(), and QSPACE.

Here is the call graph for this function:

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

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 SphericalCoords::calculateValue ( size_t  i_axis,
Coords  units,
double  value 
) const
overrideprivatevirtual

Implements CoordSystem2D.

Definition at line 143 of file CoordSystem2D.cpp.

144 {
145  switch (units) {
146  case Coords::RADIANS:
147  return value;
148  case Coords::DEGREES:
149  return Units::rad2deg(value);
150  case Coords::QSPACE: {
152  if (i_axis == 0) {
153  const R3 k_f = vecOfLambdaAlphaPhi(m_wavelength, 0.0, value);
154  return (k_i - k_f).y();
155  }
156  if (i_axis == 1) {
157  const R3 k_f = vecOfLambdaAlphaPhi(m_wavelength, value, 0.0);
158  return (k_f - k_i).z();
159  }
160  ASSERT(0);
161  }
162  case Coords::QXQY: {
164  if (i_axis == 0) {
165  const R3 k_f = vecOfLambdaAlphaPhi(m_wavelength, 0.0, value);
166  return (k_i - k_f).y();
167  }
168  if (i_axis == 1) {
169  const R3 k_f = vecOfLambdaAlphaPhi(m_wavelength, value, 0.0);
170  return (k_f - k_i).x();
171  }
172  ASSERT(0);
173  }
174  default:
175  ASSERT(0);
176  }
177 }
R3 vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi)
Definition: Direction.cpp:19
double m_wavelength
Definition: CoordSystem2D.h:57
double m_alpha_i
Definition: CoordSystem2D.h:58
double rad2deg(double angle)
Definition: Units.h:54

References ASSERT, DEGREES, CoordSystem2D::m_alpha_i, CoordSystem2D::m_phi_i, CoordSystem2D::m_wavelength, QSPACE, QXQY, Units::rad2deg(), RADIANS, and vecOfLambdaAlphaPhi().

Here is the call graph for this function:

◆ clone()

SphericalCoords * SphericalCoords::clone ( ) const
overridevirtual

Implements ICoordSystem.

Definition at line 131 of file CoordSystem2D.cpp.

132 {
133  return new SphericalCoords(*this);
134 }
SphericalCoords(const OwningVector< IAxis > &axes, const Direction &direction, double wavelength)

References SphericalCoords().

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 > > SphericalCoords::createNameMaps ( ) const
overrideprivatevirtual

Implements ICoordSystem.

Definition at line 179 of file CoordSystem2D.cpp.

180 {
182 }
BA_DEVICE_API_ const std::map< Coords, std::string > sphericalAxis1
Definition: AxisNames.cpp:27
BA_DEVICE_API_ const std::map< Coords, std::string > sphericalAxis0
Definition: AxisNames.cpp:21

References DataUtils::AxisNames::sphericalAxis0, and DataUtils::AxisNames::sphericalAxis1.

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

Implements ICoordSystem.

Definition at line 78 of file CoordSystem2D.h.

78 { 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 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 calculateValue(), and ImageCoords::calculateValue().

◆ m_wavelength

double CoordSystem2D::m_wavelength
protectedinherited

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