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

megre 2 source pairs to treat DepthProbe on par with other simulations

parent 71475240
No related branches found
No related tags found
1 merge request!51simplify creation of UnitConverter%s
Showing
with 117 additions and 154 deletions
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/coregui/Models/DepthProbeInstrumentItem.cpp
//! @brief Implements DepthProbeInstrumentItem class
//!
//! @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 "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "Base/Const/Units.h"
#include "Core/Simulation/DepthProbeSimulation.h"
#include "GUI/coregui/Models/AxesItems.h"
#include "GUI/coregui/Models/BeamItems.h"
#include "GUI/coregui/Models/BeamWavelengthItem.h"
#include "GUI/coregui/Models/SpecularBeamInclinationItem.h"
#include "GUI/coregui/Models/TransformToDomain.h"
const QString DepthProbeInstrumentItem::P_BEAM = "Beam";
const QString DepthProbeInstrumentItem::P_Z_AXIS = "Z axis";
DepthProbeInstrumentItem::DepthProbeInstrumentItem() : InstrumentItem("DepthProbeInstrument")
{
setItemName("DepthProbeInstrument");
addProperty<SpecularBeamItem>(P_BEAM);
auto axisItem = beamItem()->currentInclinationAxisItem();
axisItem->setLowerBound(0.0);
axisItem->setUpperBound(1.0);
axisItem->setBinCount(500);
auto axis = addProperty<BasicAxisItem>(P_Z_AXIS);
axis->setLowerBound(-100.0);
axis->setUpperBound(100.0);
axis->getItem(BasicAxisItem::P_TITLE)->setVisible(false);
axis->getItem(BasicAxisItem::P_NBINS)
->setToolTip("Number of points in scan across sample bulk");
axis->getItem(BasicAxisItem::P_MIN_DEG)
->setToolTip("Starting value below sample horizont in nm");
axis->getItem(BasicAxisItem::P_MAX_DEG)->setToolTip("Ending value above sample horizont in nm");
}
SpecularBeamItem* DepthProbeInstrumentItem::beamItem() const
{
return item<SpecularBeamItem>(P_BEAM);
}
std::unique_ptr<Instrument> DepthProbeInstrumentItem::createInstrument() const
{
throw std::runtime_error("DepthProbeInstrumentItem::createInstrument()");
}
std::vector<int> DepthProbeInstrumentItem::shape() const
{
return std::vector<int>(); // no certain shape to avoid linking to real data
}
void DepthProbeInstrumentItem::updateToRealData(const RealDataItem*)
{
throw std::runtime_error("DepthProbeInstrumentItem::updateToRealData()");
}
QString DepthProbeInstrumentItem::defaultName() const
{
return "DepthProbe";
}
std::unique_ptr<DepthProbeSimulation> DepthProbeInstrumentItem::createSimulation() const
{
std::unique_ptr<DepthProbeSimulation> simulation = std::make_unique<DepthProbeSimulation>();
const auto axis_item = beamItem()->currentInclinationAxisItem();
auto axis = axis_item->createAxis(Units::deg);
simulation->setBeamParameters(beamItem()->wavelength(), static_cast<int>(axis->size()),
axis->lowerBound(), axis->upperBound());
auto depthAxisItem = dynamic_cast<BasicAxisItem*>(getItem(P_Z_AXIS));
auto depthAxis = depthAxisItem->createAxis(1.0);
simulation->setZSpan(depthAxis->size(), depthAxis->lowerBound(), depthAxis->upperBound());
TransformToDomain::setBeamDistribution(
"Wavelength", *beamItem()->item<BeamWavelengthItem>(SpecularBeamItem::P_WAVELENGTH),
*simulation.get());
TransformToDomain::setBeamDistribution(
"InclinationAngle",
*beamItem()->item<SpecularBeamInclinationItem>(SpecularBeamItem::P_INCLINATION_ANGLE),
*simulation.get());
return simulation;
}
// ************************************************************************************************
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file GUI/coregui/Models/DepthProbeInstrumentItem.h
//! @brief Defines DepthProbeInstrumentItem class
//!
//! @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)
//
// ************************************************************************************************
#ifndef BORNAGAIN_GUI_COREGUI_MODELS_DEPTHPROBEINSTRUMENTITEM_H
#define BORNAGAIN_GUI_COREGUI_MODELS_DEPTHPROBEINSTRUMENTITEM_H
#include "GUI/coregui/Models/InstrumentItems.h"
class DepthProbeSimulation;
//! Depth probe instrument.
class BA_CORE_API_ DepthProbeInstrumentItem : public InstrumentItem {
public:
static const QString P_BEAM;
static const QString P_Z_AXIS;
DepthProbeInstrumentItem();
SpecularBeamItem* beamItem() const override;
std::unique_ptr<Instrument> createInstrument() const override;
std::vector<int> shape() const override;
void updateToRealData(const RealDataItem* item) override;
virtual QString defaultName() const override;
// FIXME switch to base ISimulation class after InstrumentItem refactoring and
// after ISimulation gets createUnitConverter method
std::unique_ptr<DepthProbeSimulation> createSimulation() const;
};
#endif // BORNAGAIN_GUI_COREGUI_MODELS_DEPTHPROBEINSTRUMENTITEM_H
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
#include "Device/Detector/UnitConverter2D.h" #include "Device/Detector/UnitConverter2D.h"
#include "GUI/coregui/Models/AxesItems.h" #include "GUI/coregui/Models/AxesItems.h"
#include "GUI/coregui/Models/ComboProperty.h" #include "GUI/coregui/Models/ComboProperty.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/InterferenceFunctionItems.h" #include "GUI/coregui/Models/InterferenceFunctionItems.h"
#include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/LayerItem.h" #include "GUI/coregui/Models/LayerItem.h"
#include "GUI/coregui/Models/ParticleDistributionItem.h" #include "GUI/coregui/Models/ParticleDistributionItem.h"
#include "GUI/coregui/Models/ParticleLayoutItem.h" #include "GUI/coregui/Models/ParticleLayoutItem.h"
......
...@@ -20,10 +20,10 @@ ...@@ -20,10 +20,10 @@
#include "Device/Beam/IFootprintFactor.h" #include "Device/Beam/IFootprintFactor.h"
#include "GUI/coregui/Models/AxesItems.h" #include "GUI/coregui/Models/AxesItems.h"
#include "GUI/coregui/Models/BackgroundItems.h" #include "GUI/coregui/Models/BackgroundItems.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/DetectorItems.h" #include "GUI/coregui/Models/DetectorItems.h"
#include "GUI/coregui/Models/DomainObjectBuilder.h" #include "GUI/coregui/Models/DomainObjectBuilder.h"
#include "GUI/coregui/Models/FootprintItems.h" #include "GUI/coregui/Models/FootprintItems.h"
#include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/MultiLayerItem.h" #include "GUI/coregui/Models/MultiLayerItem.h"
#include "GUI/coregui/Models/SimulationOptionsItem.h" #include "GUI/coregui/Models/SimulationOptionsItem.h"
#include "GUI/coregui/Models/SpecularBeamInclinationItem.h" #include "GUI/coregui/Models/SpecularBeamInclinationItem.h"
...@@ -115,12 +115,12 @@ createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer, ...@@ -115,12 +115,12 @@ createSpecularSimulation(std::unique_ptr<MultiLayer> P_multilayer,
} }
std::unique_ptr<DepthProbeSimulation> std::unique_ptr<DepthProbeSimulation>
createDepthProbeSimulation(std::unique_ptr<MultiLayer> P_multilayer, createDepthProbeSimulation(std::unique_ptr<MultiLayer> multilayer,
const DepthProbeInstrumentItem* instrument, const DepthProbeInstrumentItem* instrument,
const SimulationOptionsItem* options_item) const SimulationOptionsItem* options_item)
{ {
std::unique_ptr<DepthProbeSimulation> ret = instrument->createSimulation(); std::unique_ptr<DepthProbeSimulation> ret = instrument->createSimulation();
ret->setSample(*P_multilayer); ret->setSample(*multilayer);
if (options_item) if (options_item)
TransformToDomain::setSimulationOptions(ret.get(), *options_item); TransformToDomain::setSimulationOptions(ret.get(), *options_item);
...@@ -130,6 +130,7 @@ createDepthProbeSimulation(std::unique_ptr<MultiLayer> P_multilayer, ...@@ -130,6 +130,7 @@ createDepthProbeSimulation(std::unique_ptr<MultiLayer> P_multilayer,
} // namespace } // namespace
std::unique_ptr<ISimulation> std::unique_ptr<ISimulation>
DomainSimulationBuilder::createSimulation(const MultiLayerItem* sampleItem, DomainSimulationBuilder::createSimulation(const MultiLayerItem* sampleItem,
const InstrumentItem* instrumentItem, const InstrumentItem* instrumentItem,
......
...@@ -13,11 +13,13 @@ ...@@ -13,11 +13,13 @@
// ************************************************************************************************ // ************************************************************************************************
#include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/InstrumentItems.h"
#include "Base/Const/Units.h"
#include "Core/Scan/UnitConverter1D.h" #include "Core/Scan/UnitConverter1D.h"
#include "Core/Simulation/DepthProbeSimulation.h"
#include "Device/Detector/IDetector2D.h" #include "Device/Detector/IDetector2D.h"
#include "Device/Instrument/Instrument.h" #include "Device/Instrument/Instrument.h"
#include "GUI/coregui/Models/BackgroundItems.h" #include "GUI/coregui/Models/BackgroundItems.h"
#include "GUI/coregui/Models/BeamItems.h" #include "GUI/coregui/Models/BeamWavelengthItem.h"
#include "GUI/coregui/Models/DataItem.h" #include "GUI/coregui/Models/DataItem.h"
#include "GUI/coregui/Models/DetectorItems.h" #include "GUI/coregui/Models/DetectorItems.h"
#include "GUI/coregui/Models/GroupItem.h" #include "GUI/coregui/Models/GroupItem.h"
...@@ -27,6 +29,8 @@ ...@@ -27,6 +29,8 @@
#include "GUI/coregui/Models/PointwiseAxisItem.h" #include "GUI/coregui/Models/PointwiseAxisItem.h"
#include "GUI/coregui/Models/RealDataItem.h" #include "GUI/coregui/Models/RealDataItem.h"
#include "GUI/coregui/Models/SessionModel.h" #include "GUI/coregui/Models/SessionModel.h"
#include "GUI/coregui/Models/SpecularBeamInclinationItem.h"
#include "GUI/coregui/Models/TransformToDomain.h"
#include "GUI/coregui/utils/GUIHelpers.h" #include "GUI/coregui/utils/GUIHelpers.h"
namespace { namespace {
...@@ -345,3 +349,86 @@ QString OffSpecularInstrumentItem::defaultName() const ...@@ -345,3 +349,86 @@ QString OffSpecularInstrumentItem::defaultName() const
{ {
return "OffSpecular"; return "OffSpecular";
} }
// ************************************************************************************************
// class DepthProbeInstrumentItem
// ************************************************************************************************
const QString DepthProbeInstrumentItem::P_BEAM = "Beam";
const QString DepthProbeInstrumentItem::P_Z_AXIS = "Z axis";
DepthProbeInstrumentItem::DepthProbeInstrumentItem() : InstrumentItem("DepthProbeInstrument")
{
setItemName("DepthProbeInstrument");
addProperty<SpecularBeamItem>(P_BEAM);
auto axisItem = beamItem()->currentInclinationAxisItem();
axisItem->setLowerBound(0.0);
axisItem->setUpperBound(1.0);
axisItem->setBinCount(500);
auto axis = addProperty<BasicAxisItem>(P_Z_AXIS);
axis->setLowerBound(-100.0);
axis->setUpperBound(100.0);
axis->getItem(BasicAxisItem::P_TITLE)->setVisible(false);
axis->getItem(BasicAxisItem::P_NBINS)
->setToolTip("Number of points in scan across sample bulk");
axis->getItem(BasicAxisItem::P_MIN_DEG)
->setToolTip("Starting value below sample horizont in nm");
axis->getItem(BasicAxisItem::P_MAX_DEG)->setToolTip("Ending value above sample horizont in nm");
}
SpecularBeamItem* DepthProbeInstrumentItem::beamItem() const
{
return item<SpecularBeamItem>(P_BEAM);
}
std::unique_ptr<Instrument> DepthProbeInstrumentItem::createInstrument() const
{
throw std::runtime_error("DepthProbeInstrumentItem::createInstrument()");
}
std::vector<int> DepthProbeInstrumentItem::shape() const
{
return std::vector<int>(); // no certain shape to avoid linking to real data
}
void DepthProbeInstrumentItem::updateToRealData(const RealDataItem*)
{
throw std::runtime_error("DepthProbeInstrumentItem::updateToRealData()");
}
QString DepthProbeInstrumentItem::defaultName() const
{
return "DepthProbe";
}
std::unique_ptr<DepthProbeSimulation> DepthProbeInstrumentItem::createSimulation() const
{
std::unique_ptr<DepthProbeSimulation> simulation = std::make_unique<DepthProbeSimulation>();
const auto axis_item = beamItem()->currentInclinationAxisItem();
auto axis = axis_item->createAxis(Units::deg);
simulation->setBeamParameters(beamItem()->wavelength(), static_cast<int>(axis->size()),
axis->lowerBound(), axis->upperBound());
auto depthAxisItem = dynamic_cast<BasicAxisItem*>(getItem(P_Z_AXIS));
auto depthAxis = depthAxisItem->createAxis(1.0);
simulation->setZSpan(depthAxis->size(), depthAxis->lowerBound(), depthAxis->upperBound());
TransformToDomain::setBeamDistribution(
"Wavelength", *beamItem()->item<BeamWavelengthItem>(SpecularBeamItem::P_WAVELENGTH),
*simulation.get());
TransformToDomain::setBeamDistribution(
"InclinationAngle",
*beamItem()->item<SpecularBeamInclinationItem>(SpecularBeamItem::P_INCLINATION_ANGLE),
*simulation.get());
return simulation;
}
...@@ -15,10 +15,11 @@ ...@@ -15,10 +15,11 @@
#ifndef BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H #ifndef BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H
#define BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H #define BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H
#include "GUI/coregui/Models/BeamItems.h" #include "GUI/coregui/Models/BeamItems.h" // inheritance prevents forward declaration
class BackgroundItem; class BackgroundItem;
class DataItem; class DataItem;
class DepthProbeSimulation;
class DetectorItem; class DetectorItem;
class GroupItem; class GroupItem;
class Instrument; class Instrument;
...@@ -123,4 +124,24 @@ public: ...@@ -123,4 +124,24 @@ public:
virtual QString defaultName() const override; virtual QString defaultName() const override;
}; };
class BA_CORE_API_ DepthProbeInstrumentItem : public InstrumentItem {
public:
static const QString P_BEAM;
static const QString P_Z_AXIS;
DepthProbeInstrumentItem();
SpecularBeamItem* beamItem() const override;
std::unique_ptr<Instrument> createInstrument() const override;
std::vector<int> shape() const override;
void updateToRealData(const RealDataItem* item) override;
virtual QString defaultName() const override;
// FIXME switch to base ISimulation class after InstrumentItem refactoring and
// after ISimulation gets createUnitConverter method
std::unique_ptr<DepthProbeSimulation> createSimulation() const;
};
#endif // BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H #endif // BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include "GUI/coregui/Models/Data1DViewItem.h" #include "GUI/coregui/Models/Data1DViewItem.h"
#include "GUI/coregui/Models/DataProperties.h" #include "GUI/coregui/Models/DataProperties.h"
#include "GUI/coregui/Models/DataPropertyContainer.h" #include "GUI/coregui/Models/DataPropertyContainer.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/FTDecayFunctionItems.h" #include "GUI/coregui/Models/FTDecayFunctionItems.h"
#include "GUI/coregui/Models/FTDistributionItems.h" #include "GUI/coregui/Models/FTDistributionItems.h"
#include "GUI/coregui/Models/FitParameterItems.h" #include "GUI/coregui/Models/FitParameterItems.h"
...@@ -27,6 +26,7 @@ ...@@ -27,6 +26,7 @@
#include "GUI/coregui/Models/FootprintItems.h" #include "GUI/coregui/Models/FootprintItems.h"
#include "GUI/coregui/Models/FormFactorItems.h" #include "GUI/coregui/Models/FormFactorItems.h"
#include "GUI/coregui/Models/GroupItem.h" #include "GUI/coregui/Models/GroupItem.h"
#include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/IntensityDataItem.h" #include "GUI/coregui/Models/IntensityDataItem.h"
#include "GUI/coregui/Models/InterferenceFunctionItems.h" #include "GUI/coregui/Models/InterferenceFunctionItems.h"
#include "GUI/coregui/Models/JobItem.h" #include "GUI/coregui/Models/JobItem.h"
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "Device/Unit/IUnitConverter.h" #include "Device/Unit/IUnitConverter.h"
#include "GUI/coregui/Models/Data1DViewItem.h" #include "GUI/coregui/Models/Data1DViewItem.h"
#include "GUI/coregui/Models/DataPropertyContainer.h" #include "GUI/coregui/Models/DataPropertyContainer.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/DetectorItems.h" #include "GUI/coregui/Models/DetectorItems.h"
#include "GUI/coregui/Models/DomainObjectBuilder.h" #include "GUI/coregui/Models/DomainObjectBuilder.h"
#include "GUI/coregui/Models/FitParameterItems.h" #include "GUI/coregui/Models/FitParameterItems.h"
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
// ************************************************************************************************ // ************************************************************************************************
#include "GUI/coregui/Models/SessionDecorationModel.h" #include "GUI/coregui/Models/SessionDecorationModel.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/MaterialItem.h" #include "GUI/coregui/Models/MaterialItem.h"
#include "GUI/coregui/Models/SessionModel.h" #include "GUI/coregui/Models/SessionModel.h"
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
// ************************************************************************************************ // ************************************************************************************************
#include "GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.h" #include "GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h" #include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/SpecularBeamInclinationItem.h" #include "GUI/coregui/Models/SpecularBeamInclinationItem.h"
#include "GUI/coregui/Views/InfoWidgets/DistributionDialog.h" #include "GUI/coregui/Views/InfoWidgets/DistributionDialog.h"
#include "GUI/coregui/Views/PropertyEditor/ComponentEditor.h" #include "GUI/coregui/Views/PropertyEditor/ComponentEditor.h"
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
// ************************************************************************************************ // ************************************************************************************************
#include "GUI/coregui/Views/InstrumentWidgets/InstrumentPresenter.h" #include "GUI/coregui/Views/InstrumentWidgets/InstrumentPresenter.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/SessionItem.h" #include "GUI/coregui/Models/SessionItem.h"
#include "GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.h" #include "GUI/coregui/Views/InstrumentWidgets/DepthProbeInstrumentEditor.h"
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
// ************************************************************************************************ // ************************************************************************************************
#include "GUI/coregui/Views/InstrumentWidgets/InstrumentViewActions.h" #include "GUI/coregui/Views/InstrumentWidgets/InstrumentViewActions.h"
#include "GUI/coregui/Models/DepthProbeInstrumentItem.h"
#include "GUI/coregui/Models/GroupItem.h" #include "GUI/coregui/Models/GroupItem.h"
#include "GUI/coregui/Models/InstrumentItems.h" #include "GUI/coregui/Models/InstrumentItems.h"
#include "GUI/coregui/Models/ModelUtils.h" #include "GUI/coregui/Models/ModelUtils.h"
......
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