diff --git a/Core/Simulation/SpecularSimulation.cpp b/Core/Simulation/SpecularSimulation.cpp index 03120ead958c379c7001bbaa6f793b8a9067b17d..6750e588e4e517d1dea9ac0b0d5dcd538874fa22 100644 --- a/Core/Simulation/SpecularSimulation.cpp +++ b/Core/Simulation/SpecularSimulation.cpp @@ -71,9 +71,18 @@ size_t SpecularSimulation::numberOfSimulationElements() const void SpecularSimulation::setBeamParameters(double lambda, const IAxis& alpha_axis, const IFootprintFactor* beam_shape) { + if (lambda <= 0.0) + throw std::runtime_error( + "Error in SpecularSimulation::setBeamParameters: wavelength must be positive."); if (alpha_axis.getMin() < 0.0) throw std::runtime_error( "Error in SpecularSimulation::setBeamParameters: minimum value on angle axis is negative."); + if (alpha_axis.getMin() >= alpha_axis.getMax()) + throw std::runtime_error("Error in SpecularSimulation::setBeamParameters: maximal value on " + "angle axis is less or equal to the minimal one."); + if (alpha_axis.size() == 0) + throw std::runtime_error( + "Error in SpecularSimulation::setBeamParameters: angle axis is empty"); SpecularDetector1D detector(alpha_axis); m_instrument.setDetector(detector); diff --git a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.h b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.h index 5a0418aa28ce8beddc0f269fc57f79d4ac4bd58f..12a042d3f339cf314a101fd53443e7e8f68fbb02 100644 --- a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.h +++ b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.h @@ -64,17 +64,44 @@ TEST_F(SpecularSimulationTest, SetBeamParameters) VariableBinAxis axis("axis", 2, std::vector<double>{1.0, 2.0, 3.0}); sim.setBeamParameters(1.0, axis); + const auto& beam = sim.getInstrument().getBeam(); + EXPECT_EQ(2u, sim.getAlphaAxis()->size()); EXPECT_EQ(1.0, sim.getAlphaAxis()->getMin()); EXPECT_EQ(3.0, sim.getAlphaAxis()->getMax()); + EXPECT_EQ(1.0, beam.getIntensity()); + EXPECT_EQ(1.0, beam.getWavelength()); + EXPECT_EQ(0.0, beam.getAlpha()); + EXPECT_EQ(0.0, beam.getPhi()); + + sim.setBeamIntensity(2.0); + EXPECT_EQ(2.0, beam.getIntensity()); sim.setBeamParameters(1.0, 10, 1.0 * Units::degree, 10.0 * Units::degree); EXPECT_EQ(10u, sim.getAlphaAxis()->size()); EXPECT_EQ(1.0 * Units::degree, sim.getAlphaAxis()->getMin()); EXPECT_EQ(10.0 * Units::degree, sim.getAlphaAxis()->getMax()); + EXPECT_EQ(2.0, beam.getIntensity()); + EXPECT_EQ(1.0, beam.getWavelength()); + EXPECT_EQ(0.0, beam.getAlpha()); + EXPECT_EQ(0.0, beam.getPhi()); EXPECT_THROW(sim.setBeamParameters(1.0, 10, -2.0, 3.0), std::runtime_error); + EXPECT_THROW(sim.setBeamParameters(1.0, 10, 2.0, 1.0), + std::runtime_error); + EXPECT_THROW(sim.setBeamParameters(1.0, 0, 1.0, 2.0), + std::runtime_error); + EXPECT_THROW(sim.setBeamParameters(-1.0, 1, 1.0, 2.0), + std::runtime_error); + + EXPECT_EQ(10u, sim.getAlphaAxis()->size()); + EXPECT_EQ(1.0 * Units::degree, sim.getAlphaAxis()->getMin()); + EXPECT_EQ(10.0 * Units::degree, sim.getAlphaAxis()->getMax()); + EXPECT_EQ(2.0, beam.getIntensity()); + EXPECT_EQ(1.0, beam.getWavelength()); + EXPECT_EQ(0.0, beam.getAlpha()); + EXPECT_EQ(0.0, beam.getPhi()); } TEST_F(SpecularSimulationTest, ConstructSimulation)