diff --git a/Device/Beam/Beam.cpp b/Device/Beam/Beam.cpp index 8dd9605cf36efbecca0a72d54f7ca5c53d981c6b..3ae08c2d94d46fcb04e5f7e075d7d78a263e543a 100644 --- a/Device/Beam/Beam.cpp +++ b/Device/Beam/Beam.cpp @@ -22,28 +22,21 @@ using std::numbers::pi; //... Constructors, destructors: -Beam::Beam(std::vector<double> P) - : INode(P) - , m_intensity(m_P[0]) - , m_wavelength(m_P[1]) - , m_alpha(m_P[2]) - , m_phi(m_P[3]) -{ - ASSERT(m_intensity > 0); - ASSERT(m_alpha >= 0); - precompute(); -} - Beam::Beam(double intensity, double wavelength, double alpha, double phi) - : Beam(std::vector<double>{intensity, wavelength, alpha, phi}) + : INode() + , m_intensity(intensity) + , m_wavelength(wavelength) + , m_alpha(alpha) + , m_phi(phi) { + precompute(); } Beam::~Beam() = default; Beam* Beam::clone() const { - Beam* result = new Beam(m_P); + Beam* result = new Beam(m_intensity, m_wavelength, m_alpha, m_phi); result->m_shape_factor = m_shape_factor; result->m_polarization = m_polarization; return result; @@ -89,6 +82,7 @@ const IFootprint* Beam::footprint() const void Beam::setIntensity(double intensity) { m_intensity = intensity; + precompute(); } void Beam::setWavelength(double wavelength) @@ -129,6 +123,9 @@ void Beam::setPolarization(const R3 polarization) //! To be called whenever wavelength or alpha or phi has changed. void Beam::precompute() { + ASSERT(m_intensity > 0); + ASSERT(m_wavelength >= 0); + ASSERT(m_alpha >= 0); m_wavenumber = (2 * pi) / m_wavelength; m_k = vecOfKAlphaPhi(m_wavenumber, -m_alpha, -m_phi); } diff --git a/Device/Beam/Beam.h b/Device/Beam/Beam.h index e4334f02cc7ec635b1eb49652e2379edd187b387..c18442f7f9a92e8c44a1d018ce5aaaa0f00cc5c4 100644 --- a/Device/Beam/Beam.h +++ b/Device/Beam/Beam.h @@ -82,14 +82,13 @@ public: private: Beam(); // needed by Swig #ifndef SWIG - Beam(std::vector<double> P); void precompute(); - double& m_intensity; //!< beam intensity (neutrons/sec) - double& m_wavelength; - double& m_alpha; - double& m_phi; + double m_intensity; //!< beam intensity (neutrons/sec) + double m_wavelength; + double m_alpha; + double m_phi; std::shared_ptr<IFootprint> m_shape_factor; //!< footprint correction handler R3 m_polarization; //!< Bloch vector encoding the beam's polarization