BornAgain  1.18.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 scattering at grazing incidence
4 //
5 //! @file Core/Computation/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 
18 const double phi_i_0 = 0.0;
19 
20 DepthProbeElement::DepthProbeElement(double wavelength, double alpha_i, const IAxis* z_positions)
21  : m_wavelength(wavelength), m_alpha_i(alpha_i), m_z_positions(z_positions),
22  m_calculation_flag(true)
23 {
24  if (!z_positions)
25  throw std::runtime_error(
26  "Error in DepthProbeElement::DepthProbeElement: z positions are not specified");
27  m_intensities.resize(z_positions->size(), 0.0);
28 }
29 
31  : m_wavelength(other.m_wavelength), m_alpha_i(other.m_alpha_i),
32  m_intensities(other.m_intensities), m_z_positions(other.m_z_positions),
33  m_calculation_flag(other.m_calculation_flag)
34 {
35 }
36 
38  : m_wavelength(other.m_wavelength), m_alpha_i(other.m_alpha_i),
39  m_intensities(std::move(other.m_intensities)), m_z_positions(other.m_z_positions),
40  m_calculation_flag(other.m_calculation_flag)
41 {
42 }
43 
45 
47 {
48  if (this != &other) {
49  DepthProbeElement tmp(other);
50  tmp.swapContent(*this);
51  }
52  return *this;
53 }
54 
56 {
58 }
59 
61 {
64  m_intensities.swap(other.m_intensities);
67 }
BasicVector3D< double > vecOfLambdaAlphaPhi(double _lambda, double _alpha, double _phi)
Creates a vector<double> as a wavevector with given wavelength and angles.
const double phi_i_0
Defines class DepthProbeElement.
Defines class 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