BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
BeamItems.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/BeamItems.h
6 //! @brief Defines BeamItem hierarchy
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_GUI_COREGUI_MODELS_BEAMITEMS_H
16 #define BORNAGAIN_GUI_COREGUI_MODELS_BEAMITEMS_H
17 
19 
20 class BasicAxisItem;
21 class Beam;
22 class FootprintItem;
23 class GroupItem;
24 class IAxis;
25 
26 class BA_CORE_API_ BeamItem : public SessionItem {
27 public:
28  static const QString P_INTENSITY;
29  static const QString P_WAVELENGTH;
30  static const QString P_INCLINATION_ANGLE;
31  static const QString P_AZIMUTHAL_ANGLE;
32  static const QString P_POLARIZATION;
33 
34  ~BeamItem() override;
35 
36  double intensity() const;
37  void setIntensity(double value);
38 
39  double wavelength() const;
40  void setWavelength(double value);
41 
42  virtual double getInclinationAngle() const = 0;
43  virtual void setInclinationAngle(double value);
44 
45  double getAzimuthalAngle() const;
46  void setAzimuthalAngle(double value);
47 
48  std::unique_ptr<Beam> createBeam() const;
49 
50 protected:
51  explicit BeamItem(const QString& beam_model);
52 };
53 
54 class BA_CORE_API_ SpecularBeamItem : public BeamItem {
55 public:
56  static const QString P_FOOPTPRINT;
57 
59  ~SpecularBeamItem() override;
60 
61  double getInclinationAngle() const override;
62  void setInclinationAngle(double value) override;
63 
64  GroupItem* inclinationAxisGroup();
65  BasicAxisItem* currentInclinationAxisItem();
66  FootprintItem* currentFootprintItem() const;
67 
68  void updateFileName(const QString& filename);
69  void updateToData(const IAxis& axis, QString units);
70 
71 private:
72  void updateWavelength();
73 };
74 
75 class BA_CORE_API_ GISASBeamItem : public BeamItem {
76 public:
77  GISASBeamItem();
78  ~GISASBeamItem() override;
79 
80  double getInclinationAngle() const override;
81 };
82 
83 #endif // BORNAGAIN_GUI_COREGUI_MODELS_BEAMITEMS_H
Defines class SessionItem.
static const QString P_AZIMUTHAL_ANGLE
Definition: BeamItems.h:31
~BeamItem() override
static const QString P_WAVELENGTH
Definition: BeamItems.h:29
static const QString P_INCLINATION_ANGLE
Definition: BeamItems.h:30
virtual double getInclinationAngle() const =0
static const QString P_INTENSITY
Definition: BeamItems.h:28
static const QString P_POLARIZATION
Definition: BeamItems.h:32
An incident neutron or x-ray beam.
Definition: Beam.h:27
~GISASBeamItem() override
Interface for one-dimensional axes.
Definition: IAxis.h:25
static const QString P_FOOPTPRINT
Definition: BeamItems.h:56
~SpecularBeamItem() override
std::string filename(const std::string &path)
Returns path without directory part ("Foo/Bar/Doz.int.gz" -> "Doz.int.gz")