BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
UnitConverterUtils Namespace Reference

Functions

std::unique_ptr< OutputData< double > > createOutputData (const IUnitConverter &converter, Axes::Units units)
 
std::unique_ptr< IUnitConvertercreateConverterForGISAS (const Instrument &instrument)
 
std::unique_ptr< IUnitConvertercreateConverter (const Simulation &simulation)
 

Detailed Description

Namespace enclosing a number of utilities/helpers for unit converters.

Function Documentation

◆ createOutputData()

std::unique_ptr< OutputData< double > > UnitConverterUtils::createOutputData ( const IUnitConverter converter,
Axes::Units  units 
)

Returns zero-valued output data array in specified units.

Definition at line 26 of file UnitConverterUtils.cpp.

27 {
28  std::unique_ptr<OutputData<double>> result = std::make_unique<OutputData<double>>();
29  for (size_t i = 0; i < converter.dimension(); ++i)
30  result->addAxis(*converter.createConvertedAxis(i, units));
31  result->setAllTo(0.0);
32  return result;
33 }
virtual size_t dimension() const =0
virtual std::unique_ptr< IAxis > createConvertedAxis(size_t i_axis, Axes::Units units) const =0

References IUnitConverter::createConvertedAxis(), and IUnitConverter::dimension().

Referenced by Simulation::convertData(), and SimDataPair::initResultArrays().

Here is the call graph for this function:

◆ createConverterForGISAS()

std::unique_ptr< IUnitConverter > UnitConverterUtils::createConverterForGISAS ( const Instrument instrument)

Helper factory function to use in GISASSimulation.

Depending on the type of detector, returns either RectangularConverter or SphericalConverter.

Definition at line 36 of file UnitConverterUtils.cpp.

37 {
38  const IDetector* const detector = instrument.getDetector();
39 
40  if (const auto* const det = dynamic_cast<const SphericalDetector*>(detector))
41  return std::make_unique<SphericalConverter>(*det, instrument.getBeam());
42  else if (const auto* const det = dynamic_cast<const RectangularDetector*>(detector))
43  return std::make_unique<RectangularConverter>(*det, instrument.getBeam());
44 
45  throw std::runtime_error("Error in createConverterForGISAS: wrong or absent detector type");
46 }
Abstract detector interface.
Definition: IDetector.h:36
Beam & getBeam()
Definition: Instrument.h:44
const IDetector * getDetector() const
Definition: Instrument.cpp:121
A flat rectangular detector with axes and resolution function.
A spherical detector with axes and resolution function.

References Instrument::getBeam(), and Instrument::getDetector().

Referenced by createConverter(), and GISASSimulation::result().

Here is the call graph for this function:

◆ createConverter()

std::unique_ptr< IUnitConverter > UnitConverterUtils::createConverter ( const Simulation simulation)

Definition at line 48 of file UnitConverterUtils.cpp.

49 {
50  if (auto gisas = dynamic_cast<const GISASSimulation*>(&simulation)) {
51  return createConverterForGISAS(gisas->instrument());
52 
53  } else if (auto spec = dynamic_cast<const SpecularSimulation*>(&simulation)) {
54  return UnitConverter1D::createUnitConverter(*spec->dataHandler());
55 
56  } else if (auto probe = dynamic_cast<const DepthProbeSimulation*>(&simulation)) {
57  return probe->createUnitConverter();
58 
59  } else if (auto off_spec = dynamic_cast<const OffSpecSimulation*>(&simulation)) {
60  return off_spec->createUnitConverter();
61 
62  } else {
63  throw std::runtime_error("UnitConverterUtils::createConverter -> "
64  "Not implemented simulation.");
65  }
66 }
Main class to run a Grazing-Incidence Small-Angle Scattering simulation.
Main class to run an off-specular simulation.
Main class to run a specular simulation.
static std::unique_ptr< UnitConverter1D > createUnitConverter(const ISpecularScan &handler)
Factory function to create unit converter for particular type of specular data.
std::unique_ptr< IUnitConverter > createConverterForGISAS(const Instrument &instrument)
Helper factory function to use in GISASSimulation.

References createConverterForGISAS(), and UnitConverter1D::createUnitConverter().

Referenced by Simulation::convertData().

Here is the call graph for this function: