Skip to content
Snippets Groups Projects
Commit 453625d5 authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

rm UnitConverterUtils; last fct made static member

parent f0a64aec
No related branches found
No related tags found
1 merge request!50copy edits in converter context
......@@ -15,7 +15,7 @@
#include "Core/Fitting/SimDataPair.h"
#include "Base/Math/Numeric.h"
#include "Core/Scan/UnitConverter1D.h"
#include "Core/Simulation/UnitConverterUtils.h"
#include "Device/Detector/SimpleUnitConverters.h"
#include "Core/Simulation/includeSimulations.h"
#include "Device/Data/DataUtils.h"
......@@ -51,7 +51,7 @@ bool detHasSameDimensions(const IDetector& detector, const OutputData<double>& d
std::unique_ptr<IUnitConverter> createConverter(const ISimulation& simulation)
{
if (auto gisas = dynamic_cast<const GISASSimulation*>(&simulation))
return UnitConverterUtils::createConverterForGISAS(gisas->instrument());
return UnitConverterSimple::createConverterForGISAS(gisas->instrument());
if (auto spec = dynamic_cast<const SpecularSimulation*>(&simulation))
return UnitConverter1D::createUnitConverter(*spec->dataHandler());
......@@ -62,8 +62,7 @@ std::unique_ptr<IUnitConverter> createConverter(const ISimulation& simulation)
if (auto off_spec = dynamic_cast<const OffSpecularSimulation*>(&simulation))
return off_spec->createUnitConverter();
throw std::runtime_error("UnitConverterUtils::createConverter -> "
"Not implemented simulation.");
ASSERT(0);
}
//! Convert user data to SimulationResult object for later drawing in various axes units.
......
......@@ -13,7 +13,7 @@
// ************************************************************************************************
#include "Core/Simulation/GISASSimulation.h"
#include "Core/Simulation/UnitConverterUtils.h"
#include "Device/Detector/SimpleUnitConverters.h"
#include "Sample/SampleBuilderEngine/ISampleBuilder.h"
GISASSimulation::GISASSimulation(const Beam& beam, const MultiLayer& sample,
......@@ -57,7 +57,7 @@ void GISASSimulation::prepareSimulation()
SimulationResult GISASSimulation::result() const
{
const auto converter = UnitConverterUtils::createConverterForGISAS(instrument());
const auto converter = UnitConverterSimple::createConverterForGISAS(instrument());
const std::unique_ptr<OutputData<double>> data(
detector().createDetectorIntensity(m_sim_elements));
return SimulationResult(*data, *converter);
......
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Core/Simulation/UnitConverterUtils.cpp
//! @brief Implements utilities for unit convertion.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#include "Core/Simulation/UnitConverterUtils.h"
#include "Device/Detector/RectangularDetector.h"
#include "Device/Detector/SimpleUnitConverters.h"
#include "Device/Detector/SphericalDetector.h"
#include "Device/Instrument/Instrument.h"
std::unique_ptr<IUnitConverter>
UnitConverterUtils::createConverterForGISAS(const Instrument& instrument)
{
const IDetector* const detector = instrument.getDetector();
if (const auto* const det = dynamic_cast<const SphericalDetector*>(detector))
return std::make_unique<SphericalConverter>(*det, instrument.beam());
if (const auto* const det = dynamic_cast<const RectangularDetector*>(detector))
return std::make_unique<RectangularConverter>(*det, instrument.beam());
throw std::runtime_error("Error in createConverterForGISAS: wrong or absent detector type");
}
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Core/Simulation/UnitConverterUtils.h
//! @brief Declares utilities for unit converters.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************************************
#ifdef SWIG
#error no need to expose this header to Swig
#endif
#ifndef USER_API
#ifndef BORNAGAIN_CORE_SIMULATION_UNITCONVERTERUTILS_H
#define BORNAGAIN_CORE_SIMULATION_UNITCONVERTERUTILS_H
#include "Device/Unit/IUnitConverter.h"
class Instrument;
template <class T> class OutputData;
//! Namespace enclosing a number of utilities/helpers for unit converters
namespace UnitConverterUtils {
//! Helper factory function to use in GISASSimulation. Depending on the type of detector,
//! returns either RectangularConverter or SphericalConverter.
std::unique_ptr<IUnitConverter> createConverterForGISAS(const Instrument& instrument);
} // namespace UnitConverterUtils
#endif // BORNAGAIN_CORE_SIMULATION_UNITCONVERTERUTILS_H
#endif // USER_API
......@@ -16,7 +16,7 @@
#include "Base/Const/Units.h"
#include "Base/Math/Constants.h"
#include "Base/Pixel/RectangularPixel.h"
#include "Device/Beam/Beam.h"
#include "Device/Instrument/Instrument.h"
#include "Device/Detector/RectangularDetector.h"
#include "Device/Detector/SphericalDetector.h"
#include "Device/ProDetector/RegionOfInterest.h"
......@@ -117,6 +117,20 @@ void UnitConverterSimple::addDetectorAxis(const IDetector& detector, size_t i_ax
P_roi_axis->size());
}
std::unique_ptr<UnitConverterSimple>
UnitConverterSimple::createConverterForGISAS(const Instrument& instrument)
{
const IDetector* const detector = instrument.getDetector();
if (const auto* const det = dynamic_cast<const SphericalDetector*>(detector))
return std::make_unique<SphericalConverter>(*det, instrument.beam());
if (const auto* const det = dynamic_cast<const RectangularDetector*>(detector))
return std::make_unique<RectangularConverter>(*det, instrument.beam());
throw std::runtime_error("Error in createConverterForGISAS: wrong or absent detector type");
}
// ************************************************************************************************
// class SphericalConverter
// ************************************************************************************************
......
......@@ -26,6 +26,7 @@
class Beam;
class IDetector;
class IDetector2D;
class Instrument;
class RectangularDetector;
class RectangularPixel;
class SphericalDetector;
......@@ -49,6 +50,11 @@ public:
std::unique_ptr<IAxis> createConvertedAxis(size_t i_axis, Axes::Units units) const override;
//! Helper factory function to use in GISASSimulation. Depending on the type of detector,
//! returns either RectangularConverter or SphericalConverter.
static std::unique_ptr<UnitConverterSimple> createConverterForGISAS(
const Instrument& instrument);
protected:
UnitConverterSimple(const UnitConverterSimple& other);
void addDetectorAxis(const IDetector& detector, size_t i_axis);
......
......@@ -15,7 +15,6 @@
#include "GUI/coregui/Models/DomainObjectBuilder.h"
#include "Base/Const/Units.h"
#include "Core/Scan/UnitConverter1D.h"
#include "Core/Simulation/UnitConverterUtils.h"
#include "Device/Detector/IDetector2D.h"
#include "Device/Detector/SimpleUnitConverters.h"
#include "GUI/coregui/Models/AxesItems.h"
......@@ -40,11 +39,10 @@ std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(const SessionIt
ASSERT(roughnessItem);
auto P_roughness = TransformToDomain::createLayerRoughness(*roughnessItem);
if (P_layer) {
if (P_roughness) {
if (P_roughness)
P_multilayer->addLayerWithTopRoughness(*P_layer, *P_roughness);
} else {
else
P_multilayer->addLayer(*P_layer);
}
}
}
}
......@@ -58,9 +56,8 @@ std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item)
for (int i = 0; i < children.size(); ++i) {
if (children[i]->modelType() == "ParticleLayout") {
auto P_layout = buildParticleLayout(*children[i]);
if (P_layout) {
if (P_layout)
P_layer->addLayout(*P_layout);
}
}
}
return P_layer;
......@@ -109,9 +106,8 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(const S
QVector<SessionItem*> interferences = item.getItems(ParticleLayoutItem::T_INTERFERENCE);
for (int i = 0; i < interferences.size(); i++) {
auto P_interference = buildInterferenceFunction(*interferences[i]);
if (P_interference) {
if (P_interference)
P_layout->setInterferenceFunction(*P_interference);
}
}
return P_layout;
}
......@@ -143,7 +139,7 @@ DomainObjectBuilder::createUnitConverter(const InstrumentItem* instrumentItem)
instrument->initDetector();
if (instrumentItem->is<GISASInstrumentItem>())
return UnitConverterUtils::createConverterForGISAS(*instrument);
return UnitConverterSimple::createConverterForGISAS(*instrument);
if (instrumentItem->is<OffSpecularInstrumentItem>()) {
auto axis_item =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment