BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
DistributionItems.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/DistributionItems.h
6 //! @brief Defines class DistributionItem and several subclasses
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_DISTRIBUTIONITEMS_H
16 #define BORNAGAIN_GUI_COREGUI_MODELS_DISTRIBUTIONITEMS_H
17 
19 
20 class IDistribution1D;
22 
23 class BA_CORE_API_ DistributionItem : public SessionItem {
24 public:
25  static const QString P_NUMBER_OF_SAMPLES;
26  static const QString P_SIGMA_FACTOR;
27  static const QString P_IS_INITIALIZED;
28  static const QString P_LIMITS;
29  explicit DistributionItem(const QString& name);
30 
31  virtual std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const = 0;
32  void init_parameters(double value, const RealLimits& limits = RealLimits::limitless());
33  void init_limits_group(const RealLimits& limits, double factor = 1.0);
34  virtual void showMean(bool) = 0;
35 
36 protected:
37  virtual void init_distribution(double) {}
38  void register_number_of_samples();
39  void register_sigma_factor();
40  void register_limits();
41 };
42 
43 class BA_CORE_API_ SymmetricDistributionItem : public DistributionItem {
44 public:
45  static const QString P_MEAN;
46 
47  explicit SymmetricDistributionItem(const QString& name);
48  void showMean(bool flag) override;
49 
50  virtual std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const = 0;
51  virtual double deviation(double scale) const = 0;
52 };
53 
54 class BA_CORE_API_ DistributionNoneItem : public SymmetricDistributionItem {
55 
56 public:
58 
59  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
60  std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override;
61  double deviation(double scale) const override;
62  void init_distribution(double value) override;
63 };
64 
65 class BA_CORE_API_ DistributionGateItem : public DistributionItem {
66 public:
67  static const QString P_MIN;
68  static const QString P_MAX;
70 
71  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
72  void init_distribution(double value) override;
73  void showMean(bool) override {}
74 };
75 
77 public:
78  static const QString P_HWHM;
80 
81  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
82  std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override;
83  double deviation(double scale) const override;
84  void init_distribution(double value) override;
85 };
86 
88 public:
89  static const QString P_STD_DEV;
91 
92  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
93  std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override;
94  double deviation(double scale) const override;
95  void init_distribution(double value) override;
96 };
97 
98 class BA_CORE_API_ DistributionLogNormalItem : public DistributionItem {
99 
100 public:
101  static const QString P_MEDIAN;
102  static const QString P_SCALE_PAR;
104 
105  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
106  void init_distribution(double value) override;
107  void showMean(bool flag) override;
108 };
109 
111 public:
112  static const QString P_SIGMA;
114 
115  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
116  std::unique_ptr<IRangedDistribution> createIRangedDistribution(double scale) const override;
117  double deviation(double scale) const override;
118  void init_distribution(double value) override;
119 };
120 
121 class BA_CORE_API_ DistributionTrapezoidItem : public DistributionItem {
122 public:
123  static const QString P_CENTER;
124  static const QString P_LEFTWIDTH;
125  static const QString P_MIDDLEWIDTH;
126  static const QString P_RIGHTWIDTH;
128 
129  std::unique_ptr<IDistribution1D> createDistribution(double scale = 1.0) const override;
130  void init_distribution(double value) override;
131  void showMean(bool flag) override;
132 };
133 
134 #endif // BORNAGAIN_GUI_COREGUI_MODELS_DISTRIBUTIONITEMS_H
Defines class SessionItem.
static const QString P_SIGMA
static const QString P_MAX
void showMean(bool) override
static const QString P_MIN
static const QString P_STD_DEV
virtual std::unique_ptr< IDistribution1D > createDistribution(double scale=1.0) const =0
virtual void init_distribution(double)
static const QString P_LIMITS
virtual void showMean(bool)=0
static const QString P_IS_INITIALIZED
static const QString P_NUMBER_OF_SAMPLES
static const QString P_SIGMA_FACTOR
static const QString P_MEDIAN
static const QString P_SCALE_PAR
static const QString P_HWHM
static const QString P_LEFTWIDTH
static const QString P_RIGHTWIDTH
static const QString P_MIDDLEWIDTH
static const QString P_CENTER
Interface for one-dimensional distributions.
Definition: Distributions.h:34
Interface for one-dimensional ranged distributions.
Limits for a real fit parameter.
Definition: RealLimits.h:24
static RealLimits limitless()
Creates an object withoud bounds (default)
Definition: RealLimits.cpp:130
virtual double deviation(double scale) const =0
static const QString P_MEAN
virtual std::unique_ptr< IRangedDistribution > createIRangedDistribution(double scale) const =0
QString const & name(EShape k)
Definition: particles.cpp:21