BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Layer.h
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Sample/Multilayer/Layer.h
6 //! @brief Defines class Layer.
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_SAMPLE_MULTILAYER_LAYER_H
16 #define BORNAGAIN_SAMPLE_MULTILAYER_LAYER_H
17 
20 
21 class ParticleLayout;
22 
23 //! A layer in a MultiLayer sample.
24 //! @ingroup samples
25 
26 class Layer : public ISampleNode {
27 public:
28  Layer(Material material, double thickness = 0);
29  ~Layer() override;
30 
31  Layer* clone() const override;
32  std::string className() const final { return "Layer"; }
33  std::vector<ParaMeta> parDefs() const final
34  {
35  return {{"Thickness", "nm", "thickness", 0, +INF, 0}};
36  }
37  std::vector<const INode*> nodeChildren() const override;
38 
39  const Material* material() const override { return &m_material; }
40 
41  double thickness() const { return m_thickness; }
42 
43  void addLayout(const ParticleLayout& layout);
44  size_t numberOfLayouts() const { return m_layouts.size(); }
45  std::vector<const ParticleLayout*> layouts() const;
46 
47  void setNumberOfSlices(unsigned int n_slices) { m_n_slices = n_slices; }
48  unsigned int numberOfSlices() const { return m_n_slices; }
49 
50 private:
51  Material m_material; //!< material
52  R3 m_B_field; //!< cached value of magnetic induction
53  double m_thickness; //!< layer thickness in nanometers
54  std::vector<std::unique_ptr<ParticleLayout>> m_layouts; //!< independent layouts in this layer
55  unsigned int m_n_slices = 1; //!< number of slices to create for graded layer approach
56 };
57 
58 #endif // BORNAGAIN_SAMPLE_MULTILAYER_LAYER_H
const double INF
Definition: INode.h:26
Defines interface class ISampleNode.
Defines and implements class Material.
Abstract base class for sample components and properties related to scattering.
Definition: ISampleNode.h:27
A layer in a MultiLayer sample.
Definition: Layer.h:26
double thickness() const
Definition: Layer.h:41
void setNumberOfSlices(unsigned int n_slices)
Definition: Layer.h:47
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
Definition: Layer.h:33
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Definition: Layer.h:32
std::vector< const ParticleLayout * > layouts() const
Definition: Layer.cpp:54
double m_thickness
layer thickness in nanometers
Definition: Layer.h:53
~Layer() override
void addLayout(const ParticleLayout &layout)
Definition: Layer.cpp:49
size_t numberOfLayouts() const
Definition: Layer.h:44
std::vector< std::unique_ptr< ParticleLayout > > m_layouts
independent layouts in this layer
Definition: Layer.h:54
unsigned int numberOfSlices() const
Definition: Layer.h:48
unsigned int m_n_slices
number of slices to create for graded layer approach
Definition: Layer.h:55
Material m_material
material
Definition: Layer.h:51
Layer(Material material, double thickness=0)
Constructor of a layer with thickness and material.
Definition: Layer.cpp:21
const Material * material() const override
Returns nullptr, unless overwritten to return a specific material.
Definition: Layer.h:39
R3 m_B_field
cached value of magnetic induction
Definition: Layer.h:52
Layer * clone() const override
Returns a clone of this ISampleNode object.
Definition: Layer.cpp:31
std::vector< const INode * > nodeChildren() const override
Returns all children.
Definition: Layer.cpp:41
A wrapper for underlying material implementation.
Definition: Material.h:35
Decorator class that adds particles to ISampleNode objects.