Skip to content
Snippets Groups Projects
Commit 8c1acf1e authored by Wuttke, Joachim's avatar Wuttke, Joachim
Browse files

Beam hold parameters directly, not through INode's m_P; add checks

parent 926a0f54
No related branches found
No related tags found
1 merge request!1863make class Beam cloneable, and don't use m_P.
......@@ -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);
}
......@@ -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
......
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