diff --git a/Base/Types/Span.h b/Base/Types/Span.h index 30c35d2a69c5ffe49ca97e54ae3eaae53a80d628..5b0c15ccf40053b5d4e9b4a76e0539024cb46422 100644 --- a/Base/Types/Span.h +++ b/Base/Types/Span.h @@ -21,7 +21,6 @@ //! An interval. Limits are of type double, and may be infinite. //! Used for the z-coordinate, especially when slicing form factors. -//! class Span { public: diff --git a/Device/Coord/CoordSystem1D.cpp b/Device/Coord/CoordSystem1D.cpp index 31507318ec2e7863ab76dfc7297e2c5b481383ba..2ab2aa4c359f031593411d0e16762bfb2d802b74 100644 --- a/Device/Coord/CoordSystem1D.cpp +++ b/Device/Coord/CoordSystem1D.cpp @@ -77,18 +77,17 @@ double CoordSystem1D::calculateMin(size_t i_axis, Coords units) const if (units == Coords::NBINS) return 0.0; auto translator = getTraslatorTo(units); - return translator(coordinateAxis()->binCenter(0)); + return translator(m_axes[0]->binCenter(0)); } double CoordSystem1D::calculateMax(size_t i_axis, Coords units) const { ASSERT(i_axis == 0); units = substituteDefaultUnits(units); - const IAxis* const coordinate_axis = coordinateAxis(); if (units == Coords::NBINS) - return static_cast<double>(coordinate_axis->size()); + return static_cast<double>(m_axes[0]->size()); auto translator = getTraslatorTo(units); - return translator(coordinate_axis->binCenter(coordinate_axis->size() - 1)); + return translator(m_axes[0]->binCenter(m_axes[0]->size() - 1)); } IAxis* CoordSystem1D::createConvertedAxis(size_t i_axis, Coords units) const @@ -96,11 +95,11 @@ IAxis* CoordSystem1D::createConvertedAxis(size_t i_axis, Coords units) const ASSERT(i_axis == 0); units = substituteDefaultUnits(units); if (units == Coords::NBINS) - return new FixedBinAxis(nameOfAxis(0, units), coordinateAxis()->size(), - calculateMin(0, units), calculateMax(0, units)); + return new FixedBinAxis(nameOfAxis(0, units), m_axes[0]->size(), calculateMin(0, units), + calculateMax(0, units)); std::function<double(double)> translator = getTraslatorTo(units); - auto coords = coordinateAxis()->binCenters(); + auto coords = m_axes[0]->binCenters(); for (size_t i = 0, size = coords.size(); i < size; ++i) coords[i] = translator(coords[i]); return new PointwiseAxis(nameOfAxis(0, units), coords); @@ -194,7 +193,7 @@ WavenumberReflectometryCoords::WavenumberReflectometryCoords(const IAxis* axis) WavenumberReflectometryCoords::WavenumberReflectometryCoords( const WavenumberReflectometryCoords& other) - : CoordSystem1D(other.coordinateAxis()->clone()) + : CoordSystem1D(other.m_axes[0]->clone()) { } diff --git a/Device/Coord/CoordSystem1D.h b/Device/Coord/CoordSystem1D.h index bb0683573e7229a31a4cd44c742133673f67331c..cf2801ad565a06d6948bee8d7bb58f7802c8c7a2 100644 --- a/Device/Coord/CoordSystem1D.h +++ b/Device/Coord/CoordSystem1D.h @@ -40,11 +40,9 @@ public: //! Calculates maximum on-axis value in given units. double calculateMax(size_t i_axis, Coords units) const override; -protected: +private: //! Returns translating functional (rads --> output units) virtual std::function<double(double)> getTraslatorTo(Coords units) const = 0; - - const IAxis* coordinateAxis() const { return m_axes[0]; } }; @@ -59,13 +57,13 @@ public: AngularReflectometryCoords* clone() const override; static std::vector<Coords> availableUnits0(); - static std::string nameOfAxis0(Coords units = Coords::UNDEFINED); + static std::string nameOfAxis0(Coords units); private: //! Returns the list of all available units std::vector<Coords> availableUnits() const override; - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; //! Returns default units to convert to. Coords defaultUnits() const override { return Coords::DEGREES; } @@ -91,7 +89,7 @@ private: //! Returns the list of all available units std::vector<Coords> availableUnits() const override; - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; //! Returns default units to convert to. Coords defaultUnits() const override { return Coords::QSPACE; } diff --git a/Device/Coord/CoordSystem2D.h b/Device/Coord/CoordSystem2D.h index db54697dee849df1c074041ffb74a591325b5ae7..2efa41ebb96b88bb627b64a163f5a7bc2e5602bf 100644 --- a/Device/Coord/CoordSystem2D.h +++ b/Device/Coord/CoordSystem2D.h @@ -63,7 +63,7 @@ private: Coords defaultUnits() const override { return Coords::DEGREES; } - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; SphericalCoords(const SphericalCoords& other); //!< used by clone() double calculateValue(size_t i_axis, Coords units, double value) const override; @@ -87,7 +87,7 @@ private: Coords defaultUnits() const override { return Coords::MM; } - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; ImageCoords(const ImageCoords& other); //!< used by clone() double calculateValue(size_t i_axis, Coords units, double value) const override; @@ -110,7 +110,7 @@ public: private: Coords defaultUnits() const override { return Coords::DEGREES; } - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; OffspecCoords(const OffspecCoords& other); //!< used by clone() double calculateValue(size_t i_axis, Coords units, double value) const override; @@ -132,7 +132,7 @@ private: Coords defaultUnits() const override { return Coords::DEGREES; } - std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const override; + std::string nameOfAxis(size_t i_axis, Coords units) const override; DepthprobeCoords(const DepthprobeCoords& other); //!< used by clone() double calculateValue(size_t, Coords units, double value) const override; diff --git a/Device/Coord/ICoordSystem.h b/Device/Coord/ICoordSystem.h index faca5fb9f26d2eaa4002458ec9242da6dca3833a..ab60b488088e2b8db7241c19ec24b7ec6155893a 100644 --- a/Device/Coord/ICoordSystem.h +++ b/Device/Coord/ICoordSystem.h @@ -48,7 +48,7 @@ public: virtual double calculateMin(size_t i_axis, Coords units) const = 0; virtual double calculateMax(size_t i_axis, Coords units) const = 0; - virtual std::string nameOfAxis(size_t i_axis, Coords units = Coords::UNDEFINED) const = 0; + virtual std::string nameOfAxis(size_t i_axis, Coords units) const = 0; virtual std::vector<Coords> availableUnits() const = 0; virtual Coords defaultUnits() const = 0; diff --git a/GUI/Model/FromCore/ItemizeSimulation.cpp b/GUI/Model/FromCore/ItemizeSimulation.cpp index 71246653f02c4788d95eaf97deb374c709cbb372..c04bc5520912b981f203362f543ea3c7a404ec23 100644 --- a/GUI/Model/FromCore/ItemizeSimulation.cpp +++ b/GUI/Model/FromCore/ItemizeSimulation.cpp @@ -361,9 +361,8 @@ OffspecInstrumentItem* createOffspecInstrumentItem(const OffspecSimulation& simu { auto* result = new OffspecInstrumentItem(); - ScanItem* scan_item = result->scanItem(); - const IBeamScan* scan = &simulation.scan(); - scan_item->setScan(scan); + const IBeamScan* scan = simulation.scan(); + result->scanItem()->setScan(scan); const OffspecDetector& detector = simulation.detector(); OffspecDetectorItem* detectorItem = result->detectorItem(); @@ -390,15 +389,14 @@ SpecularInstrumentItem* createSpecularInstrumentItem(const SpecularSimulation& s { auto* result = new SpecularInstrumentItem(); - ScanItem* scan_item = result->scanItem(); const IBeamScan* scan = simulation.scan(); - scan_item->setScan(scan); + result->scanItem()->setScan(scan); if (const auto* s2 = dynamic_cast<const AlphaScan*>(scan)) { if (const IDistribution1D* distribution = s2->wavelengthDistribution()) - addDistributionToItem(scan_item->wavelengthItem(), distribution); + addDistributionToItem(result->scanItem()->wavelengthItem(), distribution); if (const IDistribution1D* distribution = s2->angleDistribution()) - addDistributionToItem(scan_item->grazingScanItem(), distribution); + addDistributionToItem(result->scanItem()->grazingScanItem(), distribution); } return result; } diff --git a/Sim/Export/SimulationToPython.cpp b/Sim/Export/SimulationToPython.cpp index 675846b4a55335337af5e2051a16e6ef113aca9f..2a4f93b415814203c6706e0df37aa16f98aabc3c 100644 --- a/Sim/Export/SimulationToPython.cpp +++ b/Sim/Export/SimulationToPython.cpp @@ -366,7 +366,7 @@ std::string defineOffspecSimulation(const OffspecSimulation& simulation) { std::ostringstream result; - result << defineBeamScan(simulation.scan()); + result << defineBeamScan(*simulation.scan()); const OffspecDetector& detector = simulation.detector(); result << std::setprecision(12); diff --git a/Sim/Simulation/DepthprobeSimulation.cpp b/Sim/Simulation/DepthprobeSimulation.cpp index 7698ff4153f9b6cb8bc0f8362a164bdc43e2f9bb..1bff14290a395eeac778ad8eaf94492f105c8ce5 100644 --- a/Sim/Simulation/DepthprobeSimulation.cpp +++ b/Sim/Simulation/DepthprobeSimulation.cpp @@ -94,7 +94,7 @@ void DepthprobeSimulation::runComputation(const ReSample& re_sample, size_t i, d std::valarray<double> intensities; //!< simulated intensity for given z positions intensities.resize(n_z, 0.0); - const double result_angle = m_scan->coordinateAxis()->bin(i).center() + m_scan->alphaOffset(); + const double result_angle = m_scan->coordinateAxis()->binCenter(i) + m_scan->alphaOffset(); if (0 < result_angle && result_angle < M_PI_2) { const size_t n_layers = re_sample.numberOfSlices(); size_t start_z_ind = n_z; diff --git a/Sim/Simulation/DepthprobeSimulation.h b/Sim/Simulation/DepthprobeSimulation.h index 837ebc9eb917132c62fc3d74da65cfb3ddfa7793..01e000ba7039a168a4324375c8b906d8cab80a4b 100644 --- a/Sim/Simulation/DepthprobeSimulation.h +++ b/Sim/Simulation/DepthprobeSimulation.h @@ -46,9 +46,9 @@ public: #ifndef SWIG - const AlphaScan& scan() const + const AlphaScan* scan() const { - return *m_scan; + return m_scan.get(); } const ICoordSystem* simCoordSystem() const override; diff --git a/Sim/Simulation/OffspecSimulation.h b/Sim/Simulation/OffspecSimulation.h index 3f05b11f6c5a1bd83a19e100413f4fbeb67d0548..df59a22297d909f27a28a07887064920f5fdfd0f 100644 --- a/Sim/Simulation/OffspecSimulation.h +++ b/Sim/Simulation/OffspecSimulation.h @@ -36,19 +36,14 @@ public: std::string className() const final { return "OffspecSimulation"; } - OffspecDetector& detector() { return *m_detector; } #ifndef SWIG const ICoordSystem* simCoordSystem() const override; std::vector<const INode*> nodeChildren() const override; - IBeamScan& scan() + const IBeamScan* scan() const { - return *m_scan; - } - const IBeamScan& scan() const - { - return *m_scan; + return m_scan.get(); } const OffspecDetector& detector() const { diff --git a/Tests/Unit/Sim/CoordSystem1DTest.cpp b/Tests/Unit/Sim/CoordSystem1DTest.cpp index bc5e04853e8d8c188390843b1fca590b610bc415..4204d7599cab8c60c714a3a434b51a98d0467c96 100644 --- a/Tests/Unit/Sim/CoordSystem1DTest.cpp +++ b/Tests/Unit/Sim/CoordSystem1DTest.cpp @@ -10,26 +10,17 @@ class CoordSystem1DTest : public ::testing::Test { public: - CoordSystem1DTest(); - double getQ(double angle) { return 4.0 * M_PI * std::sin(angle) / m_wavelength; } protected: void checkConventionalConverter(const CoordSystem1D& test_object); void checkQSpecConverter(const CoordSystem1D& test_object); - FixedBinAxis m_axis; - FixedBinAxis m_q_axis; - QzScan m_qscan; + FixedBinAxis m_axis{"Angles", 5, 0.5, 1.0}; + FixedBinAxis m_q_axis{"Q values", 5, 0.0, 1.0}; + QzScan m_qscan{m_q_axis}; double m_wavelength{1.}; }; -CoordSystem1DTest::CoordSystem1DTest() - : m_axis("Angles", 5, 0.5, 1.0) // angles in radians - , m_q_axis("Q values", 5, 0.0, 1.0) // q axis in inv. nm - , m_qscan(m_q_axis) -{ -} - void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_object) { double expected_min = m_axis.binCenter(0); diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py index f7ef1cb82c46ef9ecf961c6e94d7655b34599948..54c85365fb217f6650866d3316ffc9c92c291361 100644 --- a/auto/Wrap/libBornAgainSim.py +++ b/auto/Wrap/libBornAgainSim.py @@ -2775,10 +2775,6 @@ class OffspecSimulation(ISimulation): r"""className(OffspecSimulation self) -> std::string""" return _libBornAgainSim.OffspecSimulation_className(self) - def detector(self): - r"""detector(OffspecSimulation self) -> OffspecDetector &""" - return _libBornAgainSim.OffspecSimulation_detector(self) - # Register OffspecSimulation in _libBornAgainSim: _libBornAgainSim.OffspecSimulation_swigregister(OffspecSimulation) class IBackground(libBornAgainBase.ICloneable, libBornAgainParam.INode): diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp index d78f0377b60edc47576c7094789d26edf9941c03..b00b37eca663d70430db79cd403dbe4bed977376 100644 --- a/auto/Wrap/libBornAgainSim_wrap.cpp +++ b/auto/Wrap/libBornAgainSim_wrap.cpp @@ -33875,29 +33875,6 @@ fail: } -SWIGINTERN PyObject *_wrap_OffspecSimulation_detector(PyObject *self, PyObject *args) { - PyObject *resultobj = 0; - OffspecSimulation *arg1 = (OffspecSimulation *) 0 ; - void *argp1 = 0 ; - int res1 = 0 ; - PyObject *swig_obj[1] ; - OffspecDetector *result = 0 ; - - if (!args) SWIG_fail; - swig_obj[0] = args; - res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_OffspecSimulation, 0 | 0 ); - if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "OffspecSimulation_detector" "', argument " "1"" of type '" "OffspecSimulation *""'"); - } - arg1 = reinterpret_cast< OffspecSimulation * >(argp1); - result = (OffspecDetector *) &(arg1)->detector(); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_OffspecDetector, 0 | 0 ); - return resultobj; -fail: - return NULL; -} - - SWIGINTERN PyObject *OffspecSimulation_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *obj; if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL; @@ -36362,7 +36339,6 @@ static PyMethodDef SwigMethods[] = { { "new_OffspecSimulation", _wrap_new_OffspecSimulation, METH_VARARGS, "new_OffspecSimulation(IBeamScan scan, MultiLayer const & sample, OffspecDetector const & detector) -> OffspecSimulation"}, { "delete_OffspecSimulation", _wrap_delete_OffspecSimulation, METH_O, "delete_OffspecSimulation(OffspecSimulation self)"}, { "OffspecSimulation_className", _wrap_OffspecSimulation_className, METH_O, "OffspecSimulation_className(OffspecSimulation self) -> std::string"}, - { "OffspecSimulation_detector", _wrap_OffspecSimulation_detector, METH_O, "OffspecSimulation_detector(OffspecSimulation self) -> OffspecDetector &"}, { "OffspecSimulation_swigregister", OffspecSimulation_swigregister, METH_O, NULL}, { "OffspecSimulation_swiginit", OffspecSimulation_swiginit, METH_VARARGS, NULL}, { "delete_IBackground", _wrap_delete_IBackground, METH_O, "delete_IBackground(IBackground self)"},