From 8547b8c90837233501b053a42743c2c11f5fcedf Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Fri, 27 May 2022 20:41:53 +0200 Subject: [PATCH] mv m_beam, m_detector down to ISimulation2D --- Sim/Simulation/ISimulation.cpp | 22 +--------------------- Sim/Simulation/ISimulation.h | 5 ----- Sim/Simulation/ISimulation2D.cpp | 17 ++++++++++++++++- Sim/Simulation/ISimulation2D.h | 6 ++++++ auto/Wrap/doxygenSim.i | 6 +++--- auto/Wrap/libBornAgainSim.py | 8 ++++++++ auto/Wrap/libBornAgainSim_wrap.cpp | 28 ++++++++++++++++++++++++++++ 7 files changed, 62 insertions(+), 30 deletions(-) diff --git a/Sim/Simulation/ISimulation.cpp b/Sim/Simulation/ISimulation.cpp index e75d809865c..4577d9386b3 100644 --- a/Sim/Simulation/ISimulation.cpp +++ b/Sim/Simulation/ISimulation.cpp @@ -16,9 +16,6 @@ #include "Base/Progress/ProgressHandler.h" #include "Base/Util/Assert.h" #include "Base/Util/StringUtils.h" -#include "Device/Beam/Beam.h" -#include "Device/Detector/IDetector.h" -#include "Device/Detector/SphericalDetector.h" #include "Device/Histo/SimulationResult.h" #include "Resample/Options/SimulationOptions.h" #include "Resample/Processed/ReSample.h" @@ -108,20 +105,8 @@ void runComputations(const std::vector<std::unique_ptr<IComputation>>& computati // class implementation // ************************************************************************************************ -ISimulation::ISimulation(const Beam& beam, const MultiLayer& sample, const IDetector& detector) - : m_beam(beam.clone()) - , m_detector(detector.clone()) - , m_sample(sample.clone()) - , m_options(std::make_unique<SimulationOptions>()) - , m_progress(std::make_unique<ProgressHandler>()) -{ - m_detector->setDetectorNormal(m_beam->direction().zReflected()); -} - ISimulation::ISimulation(const MultiLayer& sample) - : m_beam(Beam::horizontalBeam().clone()) - , m_detector(new SphericalDetector()) - , m_sample(sample.clone()) + : m_sample(sample.clone()) , m_options(std::make_unique<SimulationOptions>()) , m_progress(std::make_unique<ProgressHandler>()) { @@ -216,11 +201,6 @@ void ISimulation::setBackground(const IBackground& bg) std::vector<const INode*> ISimulation::nodeChildren() const { std::vector<const INode*> result; - result.push_back(m_beam.get()); - if (m_detector) - result.push_back(m_detector.get()); - if (m_background) - result << m_background.get(); if (m_sample) result << m_sample.get(); return result; diff --git a/Sim/Simulation/ISimulation.h b/Sim/Simulation/ISimulation.h index b15bc8b288d..0aee457f56c 100644 --- a/Sim/Simulation/ISimulation.h +++ b/Sim/Simulation/ISimulation.h @@ -22,8 +22,6 @@ template <class T> class Powerfield; -class Beam; -class IDetector; class IBackground; class IComputation; class ICoordSystem; @@ -45,7 +43,6 @@ class SimulationResult; class ISimulation : public INode { public: - ISimulation(const Beam& beam, const MultiLayer& sample, const IDetector& detector); ISimulation(const MultiLayer& sample); ~ISimulation() override; @@ -106,8 +103,6 @@ protected: ProgressHandler& progress(); - std::unique_ptr<Beam> m_beam; - std::unique_ptr<IDetector> m_detector; DistributionHandler m_distribution_handler; virtual void initDistributionHandler() {} diff --git a/Sim/Simulation/ISimulation2D.cpp b/Sim/Simulation/ISimulation2D.cpp index fd24ea1a986..f98ee1b2e75 100644 --- a/Sim/Simulation/ISimulation2D.cpp +++ b/Sim/Simulation/ISimulation2D.cpp @@ -16,18 +16,24 @@ #include "Base/Util/Assert.h" #include "Device/Beam/Beam.h" #include "Device/Detector/DetectorContext.h" +#include "Device/Detector/SphericalDetector.h" #include "Device/Detector/IDetector2D.h" #include "Resample/Element/DiffuseElement.h" #include "Sim/Background/IBackground.h" #include "Sim/Computation/DWBAComputation.h" ISimulation2D::ISimulation2D(const Beam& beam, const MultiLayer& sample, const IDetector& detector) - : ISimulation(beam, sample, detector) + : ISimulation(sample) + , m_beam(beam.clone()) + , m_detector(detector.clone()) { + m_detector->setDetectorNormal(m_beam->direction().zReflected()); } ISimulation2D::ISimulation2D(const MultiLayer& sample) : ISimulation(sample) + , m_beam(Beam::horizontalBeam().clone()) + , m_detector(new SphericalDetector()) { } @@ -47,6 +53,15 @@ const IDetector2D& ISimulation2D::detector2D() const return *p; } +std::vector<const INode*> ISimulation2D::nodeChildren() const +{ + std::vector<const INode*> result = ISimulation::nodeChildren(); + result.push_back(m_beam.get()); + if (m_detector) + result.push_back(m_detector.get()); + return result; +} + void ISimulation2D::prepareSimulation() { m_detector_context = detector2D().createContext(); diff --git a/Sim/Simulation/ISimulation2D.h b/Sim/Simulation/ISimulation2D.h index eb209f1cf09..3768c9ec326 100644 --- a/Sim/Simulation/ISimulation2D.h +++ b/Sim/Simulation/ISimulation2D.h @@ -18,6 +18,8 @@ #include "Sim/Simulation/ISimulation.h" #include <memory> +class Beam; +class IDetector; class DetectorContext; class DiffuseElement; class IDetector2D; @@ -35,6 +37,8 @@ public: ISimulation2D(const MultiLayer& sample); ~ISimulation2D() override; + std::vector<const INode*> nodeChildren() const override; + //! Sets spherical detector parameters using angle ranges //! @param n_x number of phi-axis bins //! @param x_min low edge of first phi-bin @@ -104,6 +108,8 @@ protected: void moveDataFromCache() override; + std::unique_ptr<Beam> m_beam; + std::unique_ptr<IDetector> m_detector; std::vector<std::unique_ptr<DiffuseElement>> m_eles; std::vector<double> m_cache; diff --git a/auto/Wrap/doxygenSim.i b/auto/Wrap/doxygenSim.i index 673af2e0614..c1a6544bf15 100644 --- a/auto/Wrap/doxygenSim.i +++ b/auto/Wrap/doxygenSim.i @@ -862,9 +862,6 @@ Simulations are run, and results returned, by the function ISimulation::simulat C++ includes: ISimulation.h "; -%feature("docstring") ISimulation::ISimulation "ISimulation::ISimulation(const Beam &beam, const MultiLayer &sample, const IDetector &detector) -"; - %feature("docstring") ISimulation::ISimulation "ISimulation::ISimulation(const MultiLayer &sample) "; @@ -957,6 +954,9 @@ C++ includes: ISimulation2D.h %feature("docstring") ISimulation2D::~ISimulation2D "ISimulation2D::~ISimulation2D() override "; +%feature("docstring") ISimulation2D::nodeChildren "std::vector< const INode * > ISimulation2D::nodeChildren() const override +"; + %feature("docstring") ISimulation2D::setDetectorParameters "void ISimulation2D::setDetectorParameters(size_t n_x, double x_min, double x_max, size_t n_y, double y_min, double y_max) Sets spherical detector parameters using angle ranges diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py index fac963de747..88fcbda622d 100644 --- a/auto/Wrap/libBornAgainSim.py +++ b/auto/Wrap/libBornAgainSim.py @@ -3510,6 +3510,14 @@ class ISimulation2D(ISimulation): __repr__ = _swig_repr __swig_destroy__ = _libBornAgainSim.delete_ISimulation2D + def nodeChildren(self): + r""" + nodeChildren(ISimulation2D self) -> swig_dummy_type_const_inode_vector + std::vector< const INode * > ISimulation2D::nodeChildren() const override + + """ + return _libBornAgainSim.ISimulation2D_nodeChildren(self) + def setDetectorParameters(self, n_x, x_min, x_max, n_y, y_min, y_max): r""" setDetectorParameters(ISimulation2D self, size_t n_x, double x_min, double x_max, size_t n_y, double y_min, double y_max) diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp index 532cd2e417f..3d0d4b65f11 100644 --- a/auto/Wrap/libBornAgainSim_wrap.cpp +++ b/auto/Wrap/libBornAgainSim_wrap.cpp @@ -37916,6 +37916,29 @@ fail: } +SWIGINTERN PyObject *_wrap_ISimulation2D_nodeChildren(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + ISimulation2D *arg1 = (ISimulation2D *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject *swig_obj[1] ; + std::vector< INode const *,std::allocator< INode const * > > result; + + if (!args) SWIG_fail; + swig_obj[0] = args; + res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISimulation2D, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISimulation2D_nodeChildren" "', argument " "1"" of type '" "ISimulation2D const *""'"); + } + arg1 = reinterpret_cast< ISimulation2D * >(argp1); + result = ((ISimulation2D const *)arg1)->nodeChildren(); + resultobj = swig::from(static_cast< std::vector< INode const*,std::allocator< INode const * > > >(result)); + return resultobj; +fail: + return NULL; +} + + SWIGINTERN PyObject *_wrap_ISimulation2D_setDetectorParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; ISimulation2D *arg1 = (ISimulation2D *) 0 ; @@ -42214,6 +42237,11 @@ static PyMethodDef SwigMethods[] = { "ISimulation2D::~ISimulation2D() override\n" "\n" ""}, + { "ISimulation2D_nodeChildren", _wrap_ISimulation2D_nodeChildren, METH_O, "\n" + "ISimulation2D_nodeChildren(ISimulation2D self) -> swig_dummy_type_const_inode_vector\n" + "std::vector< const INode * > ISimulation2D::nodeChildren() const override\n" + "\n" + ""}, { "ISimulation2D_setDetectorParameters", _wrap_ISimulation2D_setDetectorParameters, METH_VARARGS, "\n" "ISimulation2D_setDetectorParameters(ISimulation2D self, size_t n_x, double x_min, double x_max, size_t n_y, double y_min, double y_max)\n" "void ISimulation2D::setDetectorParameters(size_t n_x, double x_min, double x_max, size_t n_y, double y_min, double y_max)\n" -- GitLab