From 6ac48f0b630a1680b6d99f8390b650c7b422c3e6 Mon Sep 17 00:00:00 2001 From: Gennady Pospelov <g.pospelov@fz-juelich.de> Date: Thu, 8 Feb 2018 11:52:04 +0100 Subject: [PATCH] Methods to retrieve and print beam axis from OffSpecSimulation. --- Core/Export/PythonFormatting.cpp | 18 ++++++++++++++++++ Core/Export/PythonFormatting.h | 5 +++++ Core/Simulation/OffSpecSimulation.cpp | 5 +++++ Core/Simulation/OffSpecSimulation.h | 3 +++ .../Core/ExportToPython/PythonFormattingTest.h | 11 +++++++++++ 5 files changed, 42 insertions(+) diff --git a/Core/Export/PythonFormatting.cpp b/Core/Export/PythonFormatting.cpp index c3bb6dea7d3..31f7c3c0c65 100644 --- a/Core/Export/PythonFormatting.cpp +++ b/Core/Export/PythonFormatting.cpp @@ -28,6 +28,7 @@ #include "Rectangle.h" #include "StringUtils.h" #include "Units.h" +#include "FixedBinAxis.h" #include <iomanip> namespace PythonFormatting @@ -278,4 +279,21 @@ std::string printParameterDistribution(const ParameterDistribution& par_distr, return result.str(); } +std::string printAxis(const IAxis& axis, const std::string& units) +{ + std::ostringstream result; + + if (auto fixedAxis = dynamic_cast<const FixedBinAxis*>(&axis)) { + result << "ba.FixedBinAxis(" + << fixedAxis->size() << ", " + << printValue(fixedAxis->getMin(), units) << ", " + << printValue(fixedAxis->getMax(), units) << ")"; + + } else { + throw std::runtime_error("PythonFormatting::printAxis() -> Error. Unsupported axis"); + } + + return result.str(); + } + } // namespace PythonFormatting diff --git a/Core/Export/PythonFormatting.h b/Core/Export/PythonFormatting.h index 5c5fcfdfbed..ed45d92bb30 100644 --- a/Core/Export/PythonFormatting.h +++ b/Core/Export/PythonFormatting.h @@ -25,6 +25,7 @@ class IShape2D; class RealParameter; class ParameterDistribution; class RealLimits; +class IAxis; //! Utility functions for writing Python code snippets. @@ -34,6 +35,8 @@ namespace PythonFormatting BA_CORE_API_ std::string representShape2D(const std::string& indent, const IShape2D* ishape, bool mask_value, std::function<std::string(double)> printValueFunc); + +BA_CORE_API_ std::string printInt(int value); BA_CORE_API_ std::string printBool(double value); BA_CORE_API_ std::string printDouble(double input); BA_CORE_API_ std::string printNm(double input); @@ -58,6 +61,8 @@ BA_CORE_API_ std::string printRealLimitsArg(const RealLimits& limits, BA_CORE_API_ std::string printParameterDistribution(const ParameterDistribution& par_distr, const std::string& distVarName, const std::string& units = ""); + +BA_CORE_API_ std::string printAxis(const IAxis& axis, const std::string& units = ""); } #endif // PYTHONFORMATTING_H diff --git a/Core/Simulation/OffSpecSimulation.cpp b/Core/Simulation/OffSpecSimulation.cpp index f92a247382e..c5a6e697a73 100644 --- a/Core/Simulation/OffSpecSimulation.cpp +++ b/Core/Simulation/OffSpecSimulation.cpp @@ -73,6 +73,11 @@ void OffSpecSimulation::setBeamParameters(double wavelength, const IAxis& alpha_ updateIntensityMap(); } +const IAxis* OffSpecSimulation::beamAxis() const +{ + return mP_alpha_i_axis.get(); +} + OffSpecSimulation::OffSpecSimulation(const OffSpecSimulation& other) : Simulation2D(other) { diff --git a/Core/Simulation/OffSpecSimulation.h b/Core/Simulation/OffSpecSimulation.h index 61e17033b93..86a7c9b7ab0 100644 --- a/Core/Simulation/OffSpecSimulation.h +++ b/Core/Simulation/OffSpecSimulation.h @@ -49,6 +49,9 @@ public: //! Sets beam parameters from here (forwarded to Instrument) void setBeamParameters(double wavelength, const IAxis& alpha_axis, double phi_i); + //! Returns axis of the beam. + const IAxis* beamAxis() const; + private: OffSpecSimulation(const OffSpecSimulation& other); diff --git a/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.h b/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.h index 6571aef8fc6..826d0840585 100644 --- a/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.h +++ b/Tests/UnitTests/Core/ExportToPython/PythonFormattingTest.h @@ -5,6 +5,7 @@ #include "PythonFormatting.h" #include "RealLimits.h" #include "Units.h" +#include "FixedBinAxis.h" class PythonFormattingTest : public ::testing::Test { @@ -106,3 +107,13 @@ TEST_F(PythonFormattingTest, printParameterDistribution) "ba.ParameterDistribution(\"/Particle/ZRotation/Angle\", " "distr_1, 5, 2.0, ba.RealLimits.limited(1.0*deg, 2.0*deg))"); } + +TEST_F(PythonFormattingTest, printAxis) +{ + FixedBinAxis axis1("axis0", 10, -1.0, 2.0); + EXPECT_EQ(PythonFormatting::printAxis(axis1), "ba.FixedBinAxis(10, -1.0, 2.0)"); + + FixedBinAxis axis2("axis0", 10, -1.0*Units::deg, 2.0*Units::deg); + EXPECT_EQ(PythonFormatting::printAxis(axis2, BornAgain::UnitsRad), + "ba.FixedBinAxis(10, -1.0*deg, 2.0*deg)"); +} -- GitLab