20 : m_corner_pos(
std::move(corner_pos))
21 , m_width(
std::move(width))
22 , m_height(
std::move(height))
23 , m_normal(width.
cross(height))
27 m_solid_angle = solid_angle_value <= 0.0 ? 1.0 : solid_angle_value;
43 double length =
M_TWOPI / wavelength;
57 double length = position.
mag();
68 return direction.
unit() * length;
74 double length = position.
mag();
75 return std::abs(position.
dot(
m_normal)) / std::pow(length, 3);
Defines M_PI and some more mathematical constants.
Defines class RectangularPixel.
BasicVector3D< double > kvector_t
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.
double mag() const
Returns magnitude of the vector.
A pixel in a RectangularDetector.
kvector_t getK(double x, double y, double wavelength) const override
double solidAngle() const override
double integrationFactor(double x, double y) const override
kvector_t getPosition(double x, double y) const
const kvector_t m_corner_pos
kvector_t normalizeLength(const kvector_t direction, double length) const
RectangularPixel(const kvector_t &corner_pos, const kvector_t &width, const kvector_t &height)
RectangularPixel * clone() const override
double calculateSolidAngle() const
RectangularPixel * createZeroSizePixel(double x, double y) const override
Vector3D cross(const Vector3D &v1, const Vector3D &v2)