20 IInterferenceFunction::IInterferenceFunction(
const NodeMeta& meta,
21 const std::vector<double>& PValues)
24 registerParameter(
"PositionVariance", &m_position_var).setUnit(
"nm^2").setNonnegative();
27 IInterferenceFunction::IInterferenceFunction(
double position_var) : m_position_var(position_var)
29 registerParameter(
"PositionVariance", &m_position_var).setUnit(
"nm^2").setNonnegative();
43 throw std::runtime_error(
"IInterferenceFunction::setPositionVariance: "
44 "variance should be positive.");
53 return std::exp(-q.
mag2() * m_position_var);
Defines and implements the interface class IInterferenceFunction.
Defines class RealParameter.
double mag2() const
Returns magnitude squared of the vector.
void setZ(const T &a)
Sets z-component in cartesian coordinate system.
double DWfactor(kvector_t q) const
Evaluates the Debye-Waller factor for a given wavevector transfer.
virtual bool supportsMultilayer() const
Indicates if this interference function can be used with a multilayer (DWBA mode)
void setPositionVariance(double var)
Sets the variance of the position for the calculation of the DW factor It is defined as the variance ...
double iff_no_inner(const kvector_t q, double outer_iff) const
Calculates the structure factor in the absence of extra inner structure.
virtual double evaluate(const kvector_t q, double outer_iff=1.0) const
Evaluates the interference function for a given wavevector transfer.
virtual double iff_without_dw(const kvector_t q) const =0
Calculates the structure factor without Debye-Waller factor.
Pure virtual base class for sample components and properties related to scattering.