19 InterferenceFunctionTwin::InterferenceFunctionTwin(
const kvector_t& direction,
double mean_distance,
24 setName(
"InterferenceTwin");
25 if (m_direction.mag2() <= 0.0 || m_distance < 0.0 || m_std_dev < 0.0)
26 throw std::runtime_error(
27 "InterferenceFunctionTwin::validateParameters: mean distance, standard deviation and "
28 "length of direction vector should be positive");
29 registerVector(
"Direction", &m_direction,
"");
30 registerParameter(
"Mean", &m_distance).setUnit(
"nm").setNonnegative();
31 registerParameter(
"StdDev", &m_std_dev).setUnit(
"nm").setNonnegative();
37 ret->setPositionVariance(m_position_var);
41 kvector_t InterferenceFunctionTwin::direction()
const
46 double InterferenceFunctionTwin::meanDistance()
const
51 double InterferenceFunctionTwin::stdDev()
const
56 double InterferenceFunctionTwin::iff_without_dw(
const kvector_t q)
const
58 double q_proj = q.
dot(m_direction.
unit());
60 + std::exp(-q_proj * q_proj * m_std_dev * m_std_dev / 2.0)
61 * std::cos(q_proj * m_distance);
Defines class InterferenceFunctionTwin.
Defines class RealParameter.
auto dot(const BasicVector3D< U > &v) const
Returns dot product of vectors (antilinear in the first [=self] argument).
BasicVector3D< T > unit() const
Returns unit vector in direction of this. Throws for null vector.
Pure virtual base class of interference functions.
Interference function for two particles at a mean distance and given standard deviation from each oth...
InterferenceFunctionTwin * clone() const override final
Returns a clone of this ISample object.