BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
Finite2DLatticePositionBuilder Class Reference
Inheritance diagram for Finite2DLatticePositionBuilder:
[legend]
Collaboration diagram for Finite2DLatticePositionBuilder:
[legend]

Public Member Functions

 Finite2DLatticePositionBuilder (const InterferenceFunctionFinite2DLattice *p_iff)
 
 ~Finite2DLatticePositionBuilder () override
 
std::vector< std::vector< double > > generatePositions (double layer_size, double density=0.0) const
 

Private Member Functions

std::vector< std::vector< double > > generatePositionsImpl (double layer_size, double density=0.0) const override
 
double positionVariance () const override
 

Private Attributes

std::unique_ptr< InterferenceFunctionFinite2DLatticem_iff
 

Detailed Description

Definition at line 102 of file IPositionBuilder.h.

Constructor & Destructor Documentation

◆ Finite2DLatticePositionBuilder()

Finite2DLatticePositionBuilder::Finite2DLatticePositionBuilder ( const InterferenceFunctionFinite2DLattice p_iff)

Definition at line 177 of file IPositionBuilder.cpp.

179  : m_iff(p_iff->clone())
180 {
181 }
std::unique_ptr< InterferenceFunctionFinite2DLattice > m_iff
InterferenceFunctionFinite2DLattice * clone() const override
Returns a clone of this ISampleNode object.

◆ ~Finite2DLatticePositionBuilder()

Finite2DLatticePositionBuilder::~Finite2DLatticePositionBuilder ( )
overridedefault

Member Function Documentation

◆ generatePositions()

std::vector< std::vector< double > > IPositionBuilder::generatePositions ( double  layer_size,
double  density = 0.0 
) const
inherited

Definition at line 28 of file IPositionBuilder.cpp.

30 {
31  std::vector<std::vector<double>> positions = generatePositionsImpl(layer_size, density);
32  double pos_var = positionVariance();
33  if (pos_var > 0.0) {
34  // random generator and distribution
35  std::random_device rd; // Will be used to obtain a seed for the random number engine
36  std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd()
37  std::normal_distribution<double> dis(0.0, std::sqrt(pos_var));
38  for (auto& position : positions) {
39  for (auto& coordinate : position)
40  coordinate += dis(gen);
41  }
42  }
43  return positions;
44 }
virtual std::vector< std::vector< double > > generatePositionsImpl(double layer_size, double density=0.0) const =0
virtual double positionVariance() const =0

References IPositionBuilder::generatePositionsImpl(), and IPositionBuilder::positionVariance().

Here is the call graph for this function:

◆ generatePositionsImpl()

std::vector< std::vector< double > > Finite2DLatticePositionBuilder::generatePositionsImpl ( double  layer_size,
double  density = 0.0 
) const
overrideprivatevirtual

Implements IPositionBuilder.

Definition at line 186 of file IPositionBuilder.cpp.

187 {
188  auto& lattice = m_iff->lattice();
189  double l1 = lattice.length1();
190  double l2 = lattice.length2();
191  double alpha = lattice.latticeAngle();
192  double xi = lattice.rotationAngle();
193 
194  unsigned n1, n2;
195  double sina = std::abs(std::sin(alpha));
196  if (sina <= 1e-4) {
197  n1 = l1 == 0.0 ? 2 : static_cast<unsigned>(2.0 * layer_size * std::sqrt(2.0) / l1);
198  n2 = l2 == 0.0 ? 2 : static_cast<unsigned>(2.0 * layer_size * std::sqrt(2.0) / l2);
199  } else {
200  n1 = l1 == 0.0 ? 2 : static_cast<unsigned>(2.0 * layer_size * std::sqrt(2.0) / l1 / sina);
201  n2 = l2 == 0.0 ? 2 : static_cast<unsigned>(2.0 * layer_size * std::sqrt(2.0) / l2 / sina);
202  }
203  n1 = std::min(n1, m_iff->numberUnitCells1());
204  n2 = std::min(n2, m_iff->numberUnitCells2());
205 
206  return Generate2DLatticePoints(l1, l2, alpha, xi, n1, n2);
207 }

References m_iff.

◆ positionVariance()

double Finite2DLatticePositionBuilder::positionVariance ( ) const
overrideprivatevirtual

Implements IPositionBuilder.

Definition at line 209 of file IPositionBuilder.cpp.

210 {
211  return m_iff->positionVariance();
212 }

References m_iff.

Member Data Documentation

◆ m_iff

std::unique_ptr<InterferenceFunctionFinite2DLattice> Finite2DLatticePositionBuilder::m_iff
private

Definition at line 111 of file IPositionBuilder.h.

Referenced by generatePositionsImpl(), and positionVariance().


The documentation for this class was generated from the following files: