BornAgain  1.19.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 reflection and scattering
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_DEVICE_BEAM_BEAM_H
16 #define BORNAGAIN_DEVICE_BEAM_BEAM_H
17 
18 #include "Base/Vector/Direction.h"
19 #include "Base/Vector/EigenCore.h"
20 #include "Param/Node/INode.h"
21 
22 class IFootprintFactor;
23 
24 //! An incident neutron or x-ray beam.
25 //! @ingroup beam
26 
27 class Beam : public INode {
28 public:
29  Beam(double intensity, double wavelength, const Direction& direction);
30 
31  Beam(const Beam& other);
32  Beam& operator=(const Beam& other);
33 
34  virtual ~Beam();
35 
36  static Beam horizontalBeam();
37 
38  void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
39  std::vector<const INode*> getChildren() const override;
40 
41  //! Returns the beam intensity in neutrons/sec
42  double intensity() const { return m_intensity; }
43  double wavelength() const { return m_wavelength; }
44  // Direction& direction() { return m_direction; }
45  Direction direction() const { return {m_alpha, m_phi}; } // TODO -> const .. &
46  //! Returns the wavevector
47  kvector_t getCentralK() const;
48 
49  kvector_t getBlochVector() const;
50  //! Returns footprint factor.
51  const IFootprintFactor* footprintFactor() const;
52 #ifndef SWIG
53  //! Returns the polarization density matrix (in spin basis along z-axis)
54  Eigen::Matrix2cd getPolarization() const;
55 #endif
56 
57  void setWavelength(double wavelength);
58  void setDirection(const Direction& direction);
59  void setInclination(const double alpha);
60  //! Sets the beam intensity in neutrons/sec
62  //! Sets footprint factor to the beam.
63  void setFootprintFactor(const IFootprintFactor& shape_factor);
64  //! Sets the polarization density matrix according to the given Bloch vector
65  void setPolarization(const kvector_t bloch_vector);
66 
67 private:
68  Beam(); // needed by Swig
69  double m_intensity; //!< beam intensity (neutrons/sec)
70  double m_wavelength;
71  // Direction m_direction; TODO
72  double m_alpha;
73  double m_phi;
74  std::unique_ptr<IFootprintFactor> m_shape_factor; //!< footprint correction handler
75  kvector_t m_bloch_vector; //!< Bloch vector encoding the beam's polarization
76 };
77 
78 #endif // BORNAGAIN_DEVICE_BEAM_BEAM_H
Defines class Direction.
Include to deal with Eigen alignment centrally.
Defines interface INode.
An incident neutron or x-ray beam.
Definition: Beam.h:27
double m_alpha
Definition: Beam.h:72
Direction direction() const
Definition: Beam.h:45
static Beam horizontalBeam()
Definition: Beam.cpp:39
void setDirection(const Direction &direction)
Definition: Beam.cpp:86
double m_wavelength
Definition: Beam.h:70
void setPolarization(const kvector_t bloch_vector)
Sets the polarization density matrix according to the given Bloch vector.
Definition: Beam.cpp:112
kvector_t m_bloch_vector
Bloch vector encoding the beam's polarization.
Definition: Beam.h:75
Eigen::Matrix2cd getPolarization() const
Returns the polarization density matrix (in spin basis along z-axis)
Definition: Beam.cpp:127
void setIntensity(double intensity)
Sets the beam intensity in neutrons/sec.
Definition: Beam.h:61
double m_phi
Definition: Beam.h:73
double intensity() const
Returns the beam intensity in neutrons/sec.
Definition: Beam.h:42
double wavelength() const
Definition: Beam.h:43
Beam & operator=(const Beam &other)
Definition: Beam.cpp:54
void accept(INodeVisitor *visitor) const override
Calls the INodeVisitor's visit method.
Definition: Beam.h:38
const IFootprintFactor * footprintFactor() const
Returns footprint factor.
Definition: Beam.cpp:101
void setFootprintFactor(const IFootprintFactor &shape_factor)
Sets footprint factor to the beam.
Definition: Beam.cpp:106
kvector_t getCentralK() const
Returns the wavevector.
Definition: Beam.cpp:73
void setInclination(const double alpha)
Definition: Beam.cpp:96
std::vector< const INode * > getChildren() const override
Returns a vector of children.
Definition: Beam.cpp:140
std::unique_ptr< IFootprintFactor > m_shape_factor
footprint correction handler
Definition: Beam.h:74
kvector_t getBlochVector() const
Definition: Beam.cpp:122
virtual ~Beam()
void setWavelength(double wavelength)
Definition: Beam.cpp:78
double m_intensity
beam intensity (neutrons/sec)
Definition: Beam.h:69
A direction in three-dimensional space.
Definition: Direction.h:24
Abstract base for classes that calculate the beam footprint factor.
Visitor interface to visit ISampleNode objects.
Definition: INodeVisitor.h:146
virtual void visit(const BasicLattice2D *)
Definition: INodeVisitor.h:151
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:49