diff --git a/Core/Export/PythonFormatting.cpp b/Core/Export/PythonFormatting.cpp index c3bb6dea7d3894ae08f4e70386ddfbed3a21fe3a..31f7c3c0c65fa9bc081e4a6e38d263e38660abf7 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 5c5fcfdfbed65cffa3e24b30789abe51d5b164b2..ed45d92bb3077fcdb89da218ddb6b9c91ec12f57 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 f92a247382e0bb91c6f16c3f1ee0430c0e60b38c..c5a6e697a73d972f8e37bc6ab03c6c2b34e0d36b 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 61e17033b9305676c4911a8a5668d2869cf05ec0..86a7c9b7ab0c1418ea293736f7a561ccf165fc0e 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 6571aef8fc6259ce2af5ba9b7957bba94efee882..826d08405856116e370091e269d24d6de6a2897b 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)"); +}