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

Description

DepthProbeCoordinates class handles the unit translations for depth probe simulations Its default units are radians for x-axis and nm for y-axis.

Definition at line 133 of file CoordSystem2D.h.

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

Public Member Functions

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

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

Constructor & Destructor Documentation

◆ DepthProbeCoordinates() [1/2]

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

Definition at line 302 of file CoordSystem2D.cpp.

304  : CoordSystem2D(axes, direction, wavelength)
305 {
306 }
CoordSystem2D(const Direction &direction, double wavelength=0)

Referenced by clone().

◆ ~DepthProbeCoordinates()

DepthProbeCoordinates::~DepthProbeCoordinates ( )
overridedefault

◆ DepthProbeCoordinates() [2/2]

DepthProbeCoordinates::DepthProbeCoordinates ( const DepthProbeCoordinates other)
private

used by clone()

Definition at line 308 of file CoordSystem2D.cpp.

309  : CoordSystem2D(other)
310 {
311 }

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 > DepthProbeCoordinates::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 320 of file CoordSystem2D.cpp.

321 {
322  auto result = CoordSystem2D::availableUnits();
323  result.push_back(Coords::QSPACE);
324  return result;
325 }
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.

Referenced by calculateValue().

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

Implements CoordSystem2D.

Definition at line 327 of file CoordSystem2D.cpp.

328 {
329  const auto& available_units = availableUnits();
330  if (std::find(available_units.begin(), available_units.end(), units) == available_units.cend())
331  ASSERT(0);
332 
333  if (i_axis == 1)
334  return value; // unit conversions are not applied to sample position axis
335  switch (units) {
336  case Coords::DEGREES:
337  return Units::rad2deg(value);
338  case Coords::QSPACE:
339  return getQ(m_wavelength, value);
340  default:
341  return value;
342  }
343 }
double m_wavelength
Definition: CoordSystem2D.h:57
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...
double rad2deg(double angle)
Definition: Units.h:54

References ASSERT, availableUnits(), DEGREES, CoordSystem2D::m_wavelength, QSPACE, and Units::rad2deg().

Here is the call graph for this function:

◆ clone()

DepthProbeCoordinates * DepthProbeCoordinates::clone ( ) const
overridevirtual

Implements ICoordSystem.

Definition at line 315 of file CoordSystem2D.cpp.

316 {
317  return new DepthProbeCoordinates(*this);
318 }
DepthProbeCoordinates(const OwningVector< IAxis > &axes, const Direction &direction, double wavelength)

References DepthProbeCoordinates().

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

Implements ICoordSystem.

Definition at line 345 of file CoordSystem2D.cpp.

346 {
348 }
BA_DEVICE_API_ const std::map< Coords, std::string > specAxis
Definition: AxisNames.cpp:55
BA_DEVICE_API_ const std::map< Coords, std::string > sampleDepthAxis
Definition: AxisNames.cpp:71

References DataUtils::AxisNames::sampleDepthAxis, and DataUtils::AxisNames::specAxis.

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

Implements ICoordSystem.

Definition at line 143 of file CoordSystem2D.h.

143 { 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: