From 169871abf3743309ebf2635f8d6003f0921d7236 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Wed, 21 Feb 2018 09:58:17 +0100 Subject: [PATCH] GUIObjectBuilder now is able to create OffSpecInstrumentItem --- GUI/coregui/Models/GUIObjectBuilder.cpp | 25 ++++++++++++++++++++++ GUI/coregui/Models/TransformFromDomain.cpp | 14 +++++++++++- GUI/coregui/Models/TransformFromDomain.h | 5 ++++- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp index 59f25dffe86..a9009c62846 100644 --- a/GUI/coregui/Models/GUIObjectBuilder.cpp +++ b/GUI/coregui/Models/GUIObjectBuilder.cpp @@ -25,12 +25,18 @@ #include "Simulation.h" #include "SimulationOptionsItem.h" #include "TransformFromDomain.h" +#include "OffSpecSimulation.h" namespace { GISASInstrumentItem* createGISASInstrumentItem(InstrumentModel* model, const GISASSimulation& simulation, const QString& name); + +OffSpecInstrumentItem* createOffSpecInstrumentItem(InstrumentModel* model, + const OffSpecSimulation& simulation, + const QString& name); + } SessionItem* GUIObjectBuilder::populateSampleModelFromSim(SampleModel* sampleModel, @@ -66,6 +72,10 @@ SessionItem* GUIObjectBuilder::populateInstrumentModel(InstrumentModel* p_instru return createGISASInstrumentItem(p_instrument_model, *gisasSimulation, name); } + else if(auto offSpecSimulation = dynamic_cast<const OffSpecSimulation*>(&simulation)) { + return createOffSpecInstrumentItem(p_instrument_model, *offSpecSimulation, name); + } + throw GUIHelpers::Error("GUIObjectBuilder::populateInstrumentModel() -> Error. Simulation is " "not yet supported"); } @@ -106,4 +116,19 @@ GISASInstrumentItem* createGISASInstrumentItem(InstrumentModel* model, return result; } + +OffSpecInstrumentItem* createOffSpecInstrumentItem(InstrumentModel* model, + const OffSpecSimulation& simulation, + const QString& name) +{ + auto result = dynamic_cast<OffSpecInstrumentItem*>(model->insertNewItem(Constants::OffSpecInstrumentType)); + + result->setItemName(name); + TransformFromDomain::setOffSpecBeamItem(result->beamItem(), simulation); + TransformFromDomain::setDetector(result, simulation); + TransformFromDomain::setBackground(result, simulation); + + return result; +} + } diff --git a/GUI/coregui/Models/TransformFromDomain.cpp b/GUI/coregui/Models/TransformFromDomain.cpp index ae66c0e0fc3..e9401017ec3 100644 --- a/GUI/coregui/Models/TransformFromDomain.cpp +++ b/GUI/coregui/Models/TransformFromDomain.cpp @@ -59,6 +59,7 @@ #include "SphericalDetector.h" #include "SphericalDetectorItem.h" #include "Units.h" +#include "OffSpecSimulation.h" using namespace INodeUtils; using SessionItemUtils::SetVectorItem; @@ -238,6 +239,17 @@ void TransformFromDomain::setGISASBeamItem(BeamItem* beam_item, const GISASSimul SetVectorItem(*beam_item, BeamItem::P_POLARIZATION, beam.getBlochVector()); } +void TransformFromDomain::setOffSpecBeamItem(BeamItem* beam_item, const OffSpecSimulation& simulation) +{ + Beam beam = simulation.getInstrument().getBeam(); + + beam_item->setIntensity(beam.getIntensity()); + beam_item->setWavelength(beam.getWavelength()); + beam_item->setInclinationAngle(Units::rad2deg(beam.getAlpha())); + beam_item->setAzimuthalAngle(Units::rad2deg(beam.getPhi())); + // TODO implement beam divergence +} + void TransformFromDomain::setDetector(Instrument2DItem* instrument_item, const Simulation2D& simulation) { @@ -522,7 +534,7 @@ void TransformFromDomain::setItemFromSample(BeamDistributionItem* beam_distribut setDistribution(beam_distribution_item, parameter_distribution, group_name, unit_factor); } -void TransformFromDomain::setBackground(GISASInstrumentItem* instrument_item, +void TransformFromDomain::setBackground(Instrument2DItem* instrument_item, const Simulation& simulation) { auto p_bg = simulation.background(); diff --git a/GUI/coregui/Models/TransformFromDomain.h b/GUI/coregui/Models/TransformFromDomain.h index ca85e78890d..ef1326c1d5b 100644 --- a/GUI/coregui/Models/TransformFromDomain.h +++ b/GUI/coregui/Models/TransformFromDomain.h @@ -42,6 +42,7 @@ class IDetector; class GISASInstrumentItem; class Instrument2DItem; class Simulation2D; +class OffSpecSimulation; namespace TransformFromDomain { @@ -67,6 +68,8 @@ BA_CORE_API_ bool isValidRoughness(const LayerRoughness* roughness); BA_CORE_API_ void setGISASBeamItem(BeamItem* beam_item, const GISASSimulation& simulation); +BA_CORE_API_ void setOffSpecBeamItem(BeamItem* beam_item, const OffSpecSimulation& simulation); + BA_CORE_API_ void setDetector(Instrument2DItem* instrument_item, const Simulation2D& simulation); BA_CORE_API_ void setDetectorGeometry(Instrument2DItem* instrument_item, const IDetector& detector); @@ -89,7 +92,7 @@ BA_CORE_API_ void setMaskContainer(MaskContainerItem* container_item, const IDet BA_CORE_API_ void setItemFromSample(BeamDistributionItem* beam_distribution_item, const ParameterDistribution& parameter_distribution); -BA_CORE_API_ void setBackground(GISASInstrumentItem* instrument_item, const Simulation& simulation); +BA_CORE_API_ void setBackground(Instrument2DItem* instrument_item, const Simulation& simulation); } #endif // TRANSFORMFROMDOMAIN_H -- GitLab