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

Description

Interface to provide axis translations to different units for simulation output.

Child classes are currently declared in

  • Device/Detector/CoordSystem2D.h,
  • Core/Scan/CoordSystem1D.h.

Definition at line 40 of file ICoordSystem.h.

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

Public Member Functions

 ~ICoordSystem () override
 
virtual std::vector< CoordsavailableUnits () const =0
 
std::string axisName (size_t i_axis, Coords units=Coords::UNDEFINED) const
 
virtual size_t axisSize (size_t i_axis) const =0
 
virtual double calculateMax (size_t i_axis, Coords units) const =0
 
virtual double calculateMin (size_t i_axis, Coords units) const =0
 
ICoordSystemclone () const override=0
 
std::vector< IAxis * > convertedAxes (Coords units) const
 
virtual IAxiscreateConvertedAxis (size_t i_axis, Coords units) const =0
 
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
 
virtual size_t rank () const =0
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

Coords substituteDefaultUnits (Coords units) const
 
void throwUnitsError (std::string method, std::vector< Coords > available) const
 

Private Member Functions

virtual std::vector< std::map< Coords, std::string > > createNameMaps () const =0
 

Constructor & Destructor Documentation

◆ ~ICoordSystem()

ICoordSystem::~ICoordSystem ( )
overridedefault

Member Function Documentation

◆ availableUnits()

virtual std::vector<Coords> ICoordSystem::availableUnits ( ) const
pure virtual

◆ axisName()

std::string ICoordSystem::axisName ( size_t  i_axis,
Coords  units = Coords::UNDEFINED 
) const

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, createNameMaps(), defaultUnits(), and UNDEFINED.

Referenced by CoordSystem1D::createConvertedAxis(), and CoordSystem2D::createConvertedAxis().

Here is the call graph for this function:

◆ axisSize()

virtual size_t ICoordSystem::axisSize ( size_t  i_axis) const
pure virtual

Implemented in CoordSystem2D, and CoordSystem1D.

◆ calculateMax()

virtual double ICoordSystem::calculateMax ( size_t  i_axis,
Coords  units 
) const
pure virtual

Implemented in CoordSystem2D, and CoordSystem1D.

◆ calculateMin()

virtual double ICoordSystem::calculateMin ( size_t  i_axis,
Coords  units 
) const
pure virtual

Implemented in CoordSystem2D, and CoordSystem1D.

◆ clone()

◆ convertedAxes()

std::vector< IAxis * > ICoordSystem::convertedAxes ( Coords  units) const

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

Referenced by defaultAxes().

Here is the call graph for this function:

◆ createConvertedAxis()

virtual IAxis* ICoordSystem::createConvertedAxis ( size_t  i_axis,
Coords  units 
) const
pure virtual

Implemented in CoordSystem2D, and CoordSystem1D.

Referenced by convertedAxes(), and createConvertedData().

◆ createConvertedData()

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

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 createConvertedAxis(), Datafield::flatVector(), 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 virtual

◆ defaultAxes()

std::vector< IAxis * > ICoordSystem::defaultAxes ( ) const

Definition at line 23 of file ICoordSystem.cpp.

24 {
25  return convertedAxes(defaultUnits());
26 }
std::vector< IAxis * > convertedAxes(Coords units) const

References convertedAxes(), and defaultUnits().

Referenced by SimDataPair::execSimulation().

Here is the call graph for this function:

◆ defaultUnits()

◆ rank()

virtual size_t ICoordSystem::rank ( ) const
pure virtual

Implemented in CoordSystem2D, and CoordSystem1D.

Referenced by convertedAxes(), and createConvertedData().

◆ substituteDefaultUnits()

Coords ICoordSystem::substituteDefaultUnits ( Coords  units) const
protected

Definition at line 69 of file ICoordSystem.cpp.

70 {
71  return units == Coords::UNDEFINED ? defaultUnits() : units;
72 }

References 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
protected

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.


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