BornAgain  1.18.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Beam.h
Go to the documentation of this file.
1 // ************************************************************************** //
2 //
3 // BornAgain: simulate and fit scattering at grazing incidence
4 //
5 //! @file Device/Beam/Beam.h
6 //! @brief Defines class Beam.
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 
15 #ifndef BORNAGAIN_CORE_BEAM_BEAM_H
16 #define BORNAGAIN_CORE_BEAM_BEAM_H
17 
18 #include "Base/Vector/EigenCore.h"
19 #include "Param/Node/INode.h"
20 
21 class IFootprintFactor;
22 
23 //! Beam defined by wavelength, direction and intensity.
24 //! @ingroup beam
25 
26 class Beam : public INode
27 {
28 public:
29  Beam(double wavelength, double alpha, double phi, double intensity);
30 
31  Beam(const Beam& other);
32  Beam& operator=(const Beam& other);
33 
34  virtual ~Beam();
35 
36  static Beam horizontalBeam();
37 
38  //! Returns the wavevector
39  kvector_t getCentralK() const;
40 
41  //! Sets the wavevector in terms of wavelength and incoming angles
42  void setCentralK(double wavelength, double alpha_i, double phi_i);
43 
44  //! Returns the beam intensity in neutrons/sec
45  double getIntensity() const { return m_intensity; }
46 
47  //! Sets the beam intensity in neutrons/sec
48  void setIntensity(double intensity) { m_intensity = intensity; }
49 
50  //! Returns footprint factor.
51  const IFootprintFactor* footprintFactor() const;
52 
53  //! Sets footprint factor to the beam.
54  void setFootprintFactor(const IFootprintFactor& shape_factor);
55 
56  //! Sets beam to sample width ratio in footprint factor.
57  void setWidthRatio(double width_ratio);
58 
59  //! Sets the polarization density matrix according to the given Bloch vector
60  void setPolarization(const kvector_t bloch_vector);
61 
62  kvector_t getBlochVector() const;
63 
64 #ifndef SWIG
65  //! Returns the polarization density matrix (in spin basis along z-axis)
66  Eigen::Matrix2cd getPolarization() const;
67 #endif
68 
69  double getWavelength() const { return m_wavelength; }
70  double getAlpha() const { return m_alpha; }
71  double getPhi() const { return m_phi; }
72 
73  void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
74  std::vector<const INode*> getChildren() const override;
75 
76 private:
77  double m_wavelength;
78  double m_alpha;
79  double m_phi;
80  double m_intensity; //!< beam intensity (neutrons/sec)
81  std::unique_ptr<IFootprintFactor> m_shape_factor; //!< footprint correction handler
82  kvector_t m_bloch_vector; //!< Bloch vector encoding the beam's polarization
83 };
84 
85 #endif // BORNAGAIN_CORE_BEAM_BEAM_H
Include to deal with Eigen alignment centrally.
Defines class INode.
Beam defined by wavelength, direction and intensity.
Definition: Beam.h:27
double m_alpha
Definition: Beam.h:78
Beam(double wavelength, double alpha, double phi, double intensity)
Definition: Beam.cpp:26
static Beam horizontalBeam()
Definition: Beam.cpp:37
void setWidthRatio(double width_ratio)
Sets beam to sample width ratio in footprint factor.
Definition: Beam.cpp:100
double getWavelength() const
Definition: Beam.h:69
double m_wavelength
Definition: Beam.h:77
void setPolarization(const kvector_t bloch_vector)
Sets the polarization density matrix according to the given Bloch vector.
Definition: Beam.cpp:108
kvector_t m_bloch_vector
Bloch vector encoding the beam's polarization.
Definition: Beam.h:82
Eigen::Matrix2cd getPolarization() const
Returns the polarization density matrix (in spin basis along z-axis)
Definition: Beam.cpp:123
double getAlpha() const
Definition: Beam.h:70
void setIntensity(double intensity)
Sets the beam intensity in neutrons/sec.
Definition: Beam.h:48
double m_phi
Definition: Beam.h:79
Beam & operator=(const Beam &other)
Definition: Beam.cpp:53
void accept(INodeVisitor *visitor) const override
Calls the INodeVisitor's visit method.
Definition: Beam.h:73
double getIntensity() const
Returns the beam intensity in neutrons/sec.
Definition: Beam.h:45
const IFootprintFactor * footprintFactor() const
Returns footprint factor.
Definition: Beam.cpp:89
void setFootprintFactor(const IFootprintFactor &shape_factor)
Sets footprint factor to the beam.
Definition: Beam.cpp:94
kvector_t getCentralK() const
Returns the wavevector.
Definition: Beam.cpp:71
std::vector< const INode * > getChildren() const override
Returns a vector of children (const).
Definition: Beam.cpp:136
std::unique_ptr< IFootprintFactor > m_shape_factor
footprint correction handler
Definition: Beam.h:81
kvector_t getBlochVector() const
Definition: Beam.cpp:118
virtual ~Beam()
void setCentralK(double wavelength, double alpha_i, double phi_i)
Sets the wavevector in terms of wavelength and incoming angles.
Definition: Beam.cpp:76
double getPhi() const
Definition: Beam.h:71
double m_intensity
beam intensity (neutrons/sec)
Definition: Beam.h:80
Abstract base for classes that calculate the beam footprint factor.
Visitor interface to visit ISample objects.
Definition: INodeVisitor.h:149
virtual void visit(const BasicLattice *)
Definition: INodeVisitor.h:154
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49