Skip to content
Snippets Groups Projects
Commit 6ac48f0b authored by Pospelov, Gennady's avatar Pospelov, Gennady
Browse files

Methods to retrieve and print beam axis from OffSpecSimulation.

parent 2f4da880
No related branches found
No related tags found
No related merge requests found
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "Rectangle.h" #include "Rectangle.h"
#include "StringUtils.h" #include "StringUtils.h"
#include "Units.h" #include "Units.h"
#include "FixedBinAxis.h"
#include <iomanip> #include <iomanip>
namespace PythonFormatting namespace PythonFormatting
...@@ -278,4 +279,21 @@ std::string printParameterDistribution(const ParameterDistribution& par_distr, ...@@ -278,4 +279,21 @@ std::string printParameterDistribution(const ParameterDistribution& par_distr,
return result.str(); 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 } // namespace PythonFormatting
...@@ -25,6 +25,7 @@ class IShape2D; ...@@ -25,6 +25,7 @@ class IShape2D;
class RealParameter; class RealParameter;
class ParameterDistribution; class ParameterDistribution;
class RealLimits; class RealLimits;
class IAxis;
//! Utility functions for writing Python code snippets. //! Utility functions for writing Python code snippets.
...@@ -34,6 +35,8 @@ namespace PythonFormatting ...@@ -34,6 +35,8 @@ namespace PythonFormatting
BA_CORE_API_ std::string representShape2D(const std::string& indent, const IShape2D* ishape, BA_CORE_API_ std::string representShape2D(const std::string& indent, const IShape2D* ishape,
bool mask_value, bool mask_value,
std::function<std::string(double)> printValueFunc); 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 printBool(double value);
BA_CORE_API_ std::string printDouble(double input); BA_CORE_API_ std::string printDouble(double input);
BA_CORE_API_ std::string printNm(double input); BA_CORE_API_ std::string printNm(double input);
...@@ -58,6 +61,8 @@ BA_CORE_API_ std::string printRealLimitsArg(const RealLimits& limits, ...@@ -58,6 +61,8 @@ BA_CORE_API_ std::string printRealLimitsArg(const RealLimits& limits,
BA_CORE_API_ std::string printParameterDistribution(const ParameterDistribution& par_distr, BA_CORE_API_ std::string printParameterDistribution(const ParameterDistribution& par_distr,
const std::string& distVarName, const std::string& distVarName,
const std::string& units = ""); const std::string& units = "");
BA_CORE_API_ std::string printAxis(const IAxis& axis, const std::string& units = "");
} }
#endif // PYTHONFORMATTING_H #endif // PYTHONFORMATTING_H
...@@ -73,6 +73,11 @@ void OffSpecSimulation::setBeamParameters(double wavelength, const IAxis& alpha_ ...@@ -73,6 +73,11 @@ void OffSpecSimulation::setBeamParameters(double wavelength, const IAxis& alpha_
updateIntensityMap(); updateIntensityMap();
} }
const IAxis* OffSpecSimulation::beamAxis() const
{
return mP_alpha_i_axis.get();
}
OffSpecSimulation::OffSpecSimulation(const OffSpecSimulation& other) OffSpecSimulation::OffSpecSimulation(const OffSpecSimulation& other)
: Simulation2D(other) : Simulation2D(other)
{ {
......
...@@ -49,6 +49,9 @@ public: ...@@ -49,6 +49,9 @@ public:
//! Sets beam parameters from here (forwarded to Instrument) //! Sets beam parameters from here (forwarded to Instrument)
void setBeamParameters(double wavelength, const IAxis& alpha_axis, double phi_i); void setBeamParameters(double wavelength, const IAxis& alpha_axis, double phi_i);
//! Returns axis of the beam.
const IAxis* beamAxis() const;
private: private:
OffSpecSimulation(const OffSpecSimulation& other); OffSpecSimulation(const OffSpecSimulation& other);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "PythonFormatting.h" #include "PythonFormatting.h"
#include "RealLimits.h" #include "RealLimits.h"
#include "Units.h" #include "Units.h"
#include "FixedBinAxis.h"
class PythonFormattingTest : public ::testing::Test class PythonFormattingTest : public ::testing::Test
{ {
...@@ -106,3 +107,13 @@ TEST_F(PythonFormattingTest, printParameterDistribution) ...@@ -106,3 +107,13 @@ TEST_F(PythonFormattingTest, printParameterDistribution)
"ba.ParameterDistribution(\"/Particle/ZRotation/Angle\", " "ba.ParameterDistribution(\"/Particle/ZRotation/Angle\", "
"distr_1, 5, 2.0, ba.RealLimits.limited(1.0*deg, 2.0*deg))"); "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)");
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment