BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
SphericalPixel.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Device/Detector/SphericalPixel.cpp
6 //! @brief Implements class SphericalPixel.
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
16 #include "Base/Axis/Bin.h"
17 #include "Base/Vector/Direction.h"
18 
19 SphericalPixel::SphericalPixel(const Bin1D& alpha_bin, const Bin1D& phi_bin)
20  : m_alpha(alpha_bin.m_lower)
21  , m_phi(phi_bin.m_lower)
22  , m_dalpha(alpha_bin.binSize())
23  , m_dphi(phi_bin.binSize())
24 {
25  auto solid_angle_value = std::abs(m_dphi * (std::sin(m_alpha + m_dalpha) - std::sin(m_alpha)));
26  m_solid_angle = solid_angle_value <= 0.0 ? 1.0 : solid_angle_value;
27 }
28 
30 {
31  return new SphericalPixel(*this);
32 }
33 
35 {
36  double phi = m_phi + x * m_dphi;
37  double alpha = m_alpha + y * m_dalpha;
38  Bin1D alpha_bin(alpha, alpha);
39  Bin1D phi_bin(phi, phi);
40  return new SphericalPixel(alpha_bin, phi_bin);
41 }
42 
43 kvector_t SphericalPixel::getK(double x, double y, double wavelength) const
44 {
45  double phi = m_phi + x * m_dphi;
46  double alpha = m_alpha + y * m_dalpha;
47  return vecOfLambdaAlphaPhi(wavelength, alpha, phi);
48 }
49 
50 double SphericalPixel::integrationFactor(double /* x */, double y) const
51 {
52  if (m_dalpha == 0.0)
53  return 1.0;
54  double alpha = m_alpha + y * m_dalpha;
55  return std::cos(alpha) * m_dalpha / (std::sin(m_alpha + m_dalpha) - std::sin(m_alpha));
56 }
57 
59 {
60  return m_solid_angle;
61 }
Defines structs Bin1D, Bin1DCVector.
kvector_t vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi)
Definition: Direction.cpp:19
Defines class Direction.
Defines class SphericalPixel.
A pixel in a SphericalDetector.
const double m_dalpha
double solidAngle() const override
const double m_dphi
SphericalPixel * createZeroSizePixel(double x, double y) const override
SphericalPixel * clone() const override
double m_solid_angle
const double m_alpha
SphericalPixel(const Bin1D &alpha_bin, const Bin1D &phi_bin)
double integrationFactor(double x, double y) const override
kvector_t getK(double x, double y, double wavelength) const override
const double m_phi
Definition: Bin.h:20