BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
DepthProbeElement.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file Core/Element/DepthProbeElement.cpp
6 //! @brief Implements class DepthProbeElement.
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 
16 #include "Base/Axis/IAxis.h"
17 #include "Base/Vector/Direction.h"
18 
19 const double phi_i_0 = 0.0;
20 
21 DepthProbeElement::DepthProbeElement(double wavelength, double alpha_i, const IAxis* z_positions)
22  : m_wavelength(wavelength)
23  , m_alpha_i(alpha_i)
24  , m_z_positions(z_positions)
25  , m_calculation_flag(true)
26 {
27  if (!z_positions)
28  throw std::runtime_error(
29  "Error in DepthProbeElement::DepthProbeElement: z positions are not specified");
30  m_intensities.resize(z_positions->size(), 0.0);
31 }
32 
34  : m_wavelength(other.m_wavelength)
35  , m_alpha_i(other.m_alpha_i)
36  , m_intensities(other.m_intensities)
37  , m_z_positions(other.m_z_positions)
38  , m_calculation_flag(other.m_calculation_flag)
39 {
40 }
41 
43  : m_wavelength(other.m_wavelength)
44  , m_alpha_i(other.m_alpha_i)
45  , m_intensities(std::move(other.m_intensities))
46  , m_z_positions(other.m_z_positions)
47  , m_calculation_flag(other.m_calculation_flag)
48 {
49 }
50 
52 
54 {
55  if (this != &other) {
56  DepthProbeElement tmp(other);
57  tmp.swapContent(*this);
58  }
59  return *this;
60 }
61 
63 {
65 }
66 
68 {
71  m_intensities.swap(other.m_intensities);
74 }
const double phi_i_0
Defines class DepthProbeElement.
kvector_t vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi)
Definition: Direction.cpp:19
Defines class Direction.
Defines interface IAxis.
void swap(OutputDataIterator< TValue, TContainer > &left, OutputDataIterator< TValue, TContainer > &right)
make Swappable
const IAxis * m_z_positions
positions (lower z corresponds to a greater depth)
void swapContent(DepthProbeElement &other)
double m_alpha_i
the wavelength and the incident angle of the beam
DepthProbeElement(double wavelength, double alpha_i, const IAxis *z_positions)
std::valarray< double > m_intensities
simulated intensity for the set of z positions
DepthProbeElement & operator=(const DepthProbeElement &other)
kvector_t getKi() const
Interface for one-dimensional axes.
Definition: IAxis.h:25
virtual size_t size() const =0
retrieve the number of bins