From 3f9226bee819103669faffb147fff94924573039 Mon Sep 17 00:00:00 2001
From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de>
Date: Mon, 21 Dec 2020 12:48:37 +0100
Subject: [PATCH] 2-arg simulation c'tor for use with registry

---
 Core/Simulation/GISASSimulation.cpp           |  7 ++++
 Core/Simulation/GISASSimulation.h             |  3 ++
 Core/Simulation/ISimulation.cpp               | 21 ++++++++---
 Core/Simulation/ISimulation.h                 |  6 ++-
 Core/Simulation/ISimulation2D.cpp             |  7 ++++
 Core/Simulation/ISimulation2D.h               |  3 ++
 .../GUI/Translate/GUITranslationTest.cpp      |  8 ++--
 auto/Wrap/doxygenCore.i                       | 15 ++++++--
 auto/Wrap/libBornAgainCore.py                 |  8 ----
 auto/Wrap/libBornAgainCore_wrap.cpp           | 37 -------------------
 10 files changed, 56 insertions(+), 59 deletions(-)

diff --git a/Core/Simulation/GISASSimulation.cpp b/Core/Simulation/GISASSimulation.cpp
index e818abb6d01..ec4a277f073 100644
--- a/Core/Simulation/GISASSimulation.cpp
+++ b/Core/Simulation/GISASSimulation.cpp
@@ -26,6 +26,13 @@ GISASSimulation::GISASSimulation(const Beam& beam, const MultiLayer& sample,
 {
 }
 
+#ifndef SWIG
+GISASSimulation::GISASSimulation(const Beam& beam, const IDetector& detector)
+    : ISimulation2D(beam, detector)
+{
+}
+#endif // SWIG
+
 GISASSimulation::GISASSimulation()
 {
     initialize();
diff --git a/Core/Simulation/GISASSimulation.h b/Core/Simulation/GISASSimulation.h
index cbecdcd7877..071df23111a 100644
--- a/Core/Simulation/GISASSimulation.h
+++ b/Core/Simulation/GISASSimulation.h
@@ -27,6 +27,9 @@ class ISampleBuilder;
 class GISASSimulation : public ISimulation2D {
 public:
     GISASSimulation(const Beam& beam, const MultiLayer& sample, const IDetector& detector);
+#ifndef SWIG
+    GISASSimulation(const Beam& beam, const IDetector& detector);
+#endif // SWIG
     GISASSimulation();
     ~GISASSimulation() {}
 
diff --git a/Core/Simulation/ISimulation.cpp b/Core/Simulation/ISimulation.cpp
index 618b5874d9a..8dbc85d37bb 100644
--- a/Core/Simulation/ISimulation.cpp
+++ b/Core/Simulation/ISimulation.cpp
@@ -123,6 +123,13 @@ ISimulation::ISimulation(const Beam& beam, const MultiLayer& sample, const IDete
     initialize();
 }
 
+#ifndef SWIG
+ISimulation::ISimulation(const Beam& beam, const IDetector& detector) : m_instrument(beam, detector)
+{
+    initialize();
+}
+#endif // SWIG
+
 ISimulation::ISimulation()
 {
     initialize();
@@ -150,6 +157,14 @@ void ISimulation::initialize()
     registerChild(&m_sample_provider);
 }
 
+#ifndef SWIG
+void ISimulation::setInstrument(const Instrument& instrument_)
+{
+    m_instrument = instrument_;
+    updateIntensityMap();
+}
+#endif // SWIG
+
 //! Initializes a progress monitor that prints to stdout.
 void ISimulation::setTerminalProgressMonitor()
 {
@@ -220,12 +235,6 @@ void ISimulation::runMPISimulation()
     ompi.runSimulation(this);
 }
 
-void ISimulation::setInstrument(const Instrument& instrument_)
-{
-    m_instrument = instrument_;
-    updateIntensityMap();
-}
-
 //! The MultiLayer object will not be owned by the ISimulation object
 void ISimulation::setSample(const MultiLayer& sample)
 {
diff --git a/Core/Simulation/ISimulation.h b/Core/Simulation/ISimulation.h
index 8b278a04c82..b7f314ed781 100644
--- a/Core/Simulation/ISimulation.h
+++ b/Core/Simulation/ISimulation.h
@@ -52,7 +52,6 @@ public:
     //! Run a simulation in a MPI environment
     void runMPISimulation();
 
-    void setInstrument(const Instrument& instrument_);
     const Instrument& instrument() const { return m_instrument; }
     Instrument& instrument() { return m_instrument; }
 
@@ -103,6 +102,11 @@ public:
 
     friend class MPISimulation;
 
+#ifndef SWIG
+    ISimulation(const Beam& beam, const IDetector& detector);
+    void setInstrument(const Instrument& instrument_);
+#endif // SWIG
+
 protected:
     ISimulation(const ISimulation& other);
 
diff --git a/Core/Simulation/ISimulation2D.cpp b/Core/Simulation/ISimulation2D.cpp
index 322ba8668c3..44f6bbc62b4 100644
--- a/Core/Simulation/ISimulation2D.cpp
+++ b/Core/Simulation/ISimulation2D.cpp
@@ -24,6 +24,13 @@ ISimulation2D::ISimulation2D(const Beam& beam, const MultiLayer& sample, const I
 {
 }
 
+#ifndef SWIG
+ISimulation2D::ISimulation2D(const Beam& beam, const IDetector& detector)
+    : ISimulation(beam, detector)
+{
+}
+#endif // SWIG
+
 ISimulation2D::ISimulation2D() = default;
 
 ISimulation2D::~ISimulation2D() = default;
diff --git a/Core/Simulation/ISimulation2D.h b/Core/Simulation/ISimulation2D.h
index 3b2b1bbca01..0d9531aacf4 100644
--- a/Core/Simulation/ISimulation2D.h
+++ b/Core/Simulation/ISimulation2D.h
@@ -27,6 +27,9 @@ class DetectorContext;
 class ISimulation2D : public ISimulation {
 public:
     ISimulation2D(const Beam& beam, const MultiLayer& sample, const IDetector& detector);
+#ifndef SWIG
+    ISimulation2D(const Beam& beam, const IDetector& detector);
+#endif // SWIG
     ISimulation2D();
     ~ISimulation2D() override;
 
diff --git a/Tests/Functional/GUI/Translate/GUITranslationTest.cpp b/Tests/Functional/GUI/Translate/GUITranslationTest.cpp
index 08ccaed8c43..0dbd2307e59 100644
--- a/Tests/Functional/GUI/Translate/GUITranslationTest.cpp
+++ b/Tests/Functional/GUI/Translate/GUITranslationTest.cpp
@@ -126,13 +126,13 @@ bool GUITranslationTest::runTest()
     std::cout << translationResultsToString() << std::endl;
 
     if (!checkExistingTranslations()) {
-        std::cout << "GUITranslationTest::checkExistingTranslations failed: "
-                  << m_simulationName << " " << m_sampleName << std::endl;
+        std::cout << "GUITranslationTest::checkExistingTranslations failed: " << m_simulationName
+                  << " " << m_sampleName << std::endl;
         return false;
     }
     if (!checkMissedTranslations()) {
-        std::cout << "GUITranslationTest::checkMissedTranslations failed: "
-                  << m_simulationName << " " << m_sampleName << std::endl;
+        std::cout << "GUITranslationTest::checkMissedTranslations failed: " << m_simulationName
+                  << " " << m_sampleName << std::endl;
         return false;
     }
     return true;
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 2a2f3c967da..57fb95c8e18 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -771,6 +771,9 @@ C++ includes: GISASSimulation.h
 %feature("docstring")  GISASSimulation::GISASSimulation "GISASSimulation::GISASSimulation(const Beam &beam, const MultiLayer &sample, const IDetector &detector)
 ";
 
+%feature("docstring")  GISASSimulation::GISASSimulation "GISASSimulation::GISASSimulation(const Beam &beam, const IDetector &detector)
+";
+
 %feature("docstring")  GISASSimulation::GISASSimulation "GISASSimulation::GISASSimulation()
 ";
 
@@ -1004,9 +1007,6 @@ Run simulation with possible averaging over parameter distributions.
 Run a simulation in a MPI environment. 
 ";
 
-%feature("docstring")  ISimulation::setInstrument "void ISimulation::setInstrument(const Instrument &instrument_)
-";
-
 %feature("docstring")  ISimulation::instrument "const Instrument& ISimulation::instrument() const
 ";
 
@@ -1094,6 +1094,12 @@ Initializes a progress monitor that prints to stdout.
 Convert user data to SimulationResult object for later drawing in various axes units. User data will be cropped to the ROI defined in the simulation, amplitudes in areas corresponding to the masked areas of the detector will be set to zero. 
 ";
 
+%feature("docstring")  ISimulation::ISimulation "ISimulation::ISimulation(const Beam &beam, const IDetector &detector)
+";
+
+%feature("docstring")  ISimulation::setInstrument "void ISimulation::setInstrument(const Instrument &instrument_)
+";
+
 
 // File: classISimulation2D.xml
 %feature("docstring") ISimulation2D "
@@ -1106,6 +1112,9 @@ C++ includes: ISimulation2D.h
 %feature("docstring")  ISimulation2D::ISimulation2D "ISimulation2D::ISimulation2D(const Beam &beam, const MultiLayer &sample, const IDetector &detector)
 ";
 
+%feature("docstring")  ISimulation2D::ISimulation2D "ISimulation2D::ISimulation2D(const Beam &beam, const IDetector &detector)
+";
+
 %feature("docstring")  ISimulation2D::ISimulation2D "ISimulation2D::ISimulation2D()
 ";
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index d3a58baa64b..5ca93f77cbd 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -3519,14 +3519,6 @@ class ISimulation(libBornAgainBase.ICloneable, libBornAgainParam.INode):
         """
         return _libBornAgainCore.ISimulation_runMPISimulation(self)
 
-    def setInstrument(self, instrument_):
-        r"""
-        setInstrument(ISimulation self, Instrument const & instrument_)
-        void ISimulation::setInstrument(const Instrument &instrument_)
-
-        """
-        return _libBornAgainCore.ISimulation_setInstrument(self, instrument_)
-
     def instrument(self, *args):
         r"""
         instrument(ISimulation self) -> Instrument const
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index ae87a6c4ce4..ac0b1ad27f4 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -38864,38 +38864,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_ISimulation_setInstrument(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISimulation *arg1 = (ISimulation *) 0 ;
-  Instrument *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject *swig_obj[2] ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "ISimulation_setInstrument", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISimulation, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISimulation_setInstrument" "', argument " "1"" of type '" "ISimulation *""'"); 
-  }
-  arg1 = reinterpret_cast< ISimulation * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Instrument,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ISimulation_setInstrument" "', argument " "2"" of type '" "Instrument const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ISimulation_setInstrument" "', argument " "2"" of type '" "Instrument const &""'"); 
-  }
-  arg2 = reinterpret_cast< Instrument * >(argp2);
-  (arg1)->setInstrument((Instrument const &)*arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_ISimulation_instrument__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   ISimulation *arg1 = (ISimulation *) 0 ;
@@ -44647,11 +44615,6 @@ static PyMethodDef SwigMethods[] = {
 		"Run a simulation in a MPI environment. \n"
 		"\n"
 		""},
-	 { "ISimulation_setInstrument", _wrap_ISimulation_setInstrument, METH_VARARGS, "\n"
-		"ISimulation_setInstrument(ISimulation self, Instrument const & instrument_)\n"
-		"void ISimulation::setInstrument(const Instrument &instrument_)\n"
-		"\n"
-		""},
 	 { "ISimulation_instrument", _wrap_ISimulation_instrument, METH_VARARGS, "\n"
 		"ISimulation_instrument(ISimulation self) -> Instrument const\n"
 		"ISimulation_instrument(ISimulation self) -> Instrument &\n"
-- 
GitLab