BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
ScanResolution.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Device/Resolution/ScanResolution.h
6 //! @brief Defines scan resolution class.
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_RESOLUTION_SCANRESOLUTION_H
16 #define BORNAGAIN_DEVICE_RESOLUTION_SCANRESOLUTION_H
17 
18 #include "Base/Types/ICloneable.h"
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
25 class RealLimits;
26 
27 //! Container for reflectivity resolution data.
28 class ScanResolution : public ICloneable {
29 protected:
30  using DistrOutput = std::vector<std::vector<ParameterSample>>;
31 
32 public:
33  ~ScanResolution() override;
34  static ScanResolution* scanRelativeResolution(const IRangedDistribution& distr, double stddev);
36  const std::vector<double>& stddevs);
37  static ScanResolution* scanAbsoluteResolution(const IRangedDistribution& distr, double stddev);
39  const std::vector<double>& stddevs);
40 #ifndef SWIG
42 
43  ScanResolution* clone() const override = 0;
44  const IRangedDistribution* distribution() const { return m_distr.get(); }
45  size_t nSamples() const;
46 
47  virtual DistrOutput generateSamples(double mean, size_t n_times) const = 0;
48  virtual DistrOutput generateSamples(const std::vector<double>& mean) const = 0;
49  virtual std::vector<double> stdDevs(double mean, size_t n_times) const = 0;
50  virtual std::vector<double> stdDevs(const std::vector<double>& mean) const = 0;
51  bool empty() const { return !m_distr; }
52 
53  virtual std::string name() const = 0;
54  virtual double delta() const = 0;
55 
56 #endif // USER_API
57 protected:
59  ScanResolution(const IRangedDistribution& distr);
60 
61 private:
62  std::unique_ptr<IRangedDistribution> m_distr; //!< basic distribution function
63 };
64 
65 #endif // BORNAGAIN_DEVICE_RESOLUTION_SCANRESOLUTION_H
Defines and implements the standard mix-in ICloneable.
Defines class ParameterSample.
Interface for polymorphic classes that should not be copied, except by explicit cloning.
Definition: ICloneable.h:25
Interface for one-dimensional ranged distributions.
Limits for a real fit parameter.
Definition: RealLimits.h:24
Container for reflectivity resolution data.
static ScanResolution * scanAbsoluteResolution(const IRangedDistribution &distr, double stddev)
virtual double delta() const =0
std::vector< std::vector< ParameterSample > > DistrOutput
bool empty() const
std::unique_ptr< IRangedDistribution > m_distr
basic distribution function
ScanResolution * clone() const override=0
size_t nSamples() const
~ScanResolution() override
static ScanResolution * scanEmptyResolution()
virtual std::string name() const =0
static ScanResolution * scanRelativeResolution(const IRangedDistribution &distr, double stddev)
const IRangedDistribution * distribution() const
virtual std::vector< double > stdDevs(double mean, size_t n_times) const =0
virtual DistrOutput generateSamples(const std::vector< double > &mean) const =0
virtual DistrOutput generateSamples(double mean, size_t n_times) const =0
virtual std::vector< double > stdDevs(const std::vector< double > &mean) const =0