31                                                                          unsigned N_1, 
unsigned N_2)
 
   34     setName(
"InterferenceFinite2DLattice");
 
   47                                                                          double alpha, 
double xi,
 
   48                                                                          unsigned N_1, 
unsigned N_2)
 
   53 InterferenceFunctionFinite2DLattice::~InterferenceFunctionFinite2DLattice() = 
default;
 
   58     ret->setPositionVariance(m_position_var);
 
   59     ret->setIntegrationOverXi(integrationOverXi());
 
   87 void InterferenceFunctionFinite2DLattice::setIntegrationOverXi(
bool integrate_xi)
 
   89     m_integrate_xi = integrate_xi;
 
   90     mP_lattice->setRotationEnabled(!m_integrate_xi); 
 
   93 const Lattice2D& InterferenceFunctionFinite2DLattice::lattice()
 const 
   96         throw std::runtime_error(
"InterferenceFunctionFinite2DLattice::lattice() -> Error. " 
   97                                  "No lattice defined.");
 
  103     double area = mP_lattice->unitCellArea();
 
  104     return area == 0.0 ? 0.0 : 1.0 / area;
 
  109     return std::vector<const INode*>() << mP_lattice;
 
  112 double InterferenceFunctionFinite2DLattice::iff_without_dw(
const kvector_t q)
 const 
  117         return interferenceForXi(mP_lattice->rotationAngle());
 
  118     return RealIntegrator().integrate([&](
double xi) -> 
double { 
return interferenceForXi(xi); },
 
  123 void InterferenceFunctionFinite2DLattice::setLattice(
const Lattice2D& lattice)
 
  125     mP_lattice.reset(lattice.clone());
 
  126     registerChild(mP_lattice.get());
 
  129 double InterferenceFunctionFinite2DLattice::interferenceForXi(
double xi)
 const 
  131     double a = mP_lattice->length1();
 
  132     double b = mP_lattice->length2();
 
  133     double xialpha = xi + mP_lattice->latticeAngle();
 
  135     double qadiv2 = (m_qx * a * std::cos(xi) + m_qy * a * std::sin(xi)) / 2.0;
 
  136     double qbdiv2 = (m_qx * b * std::cos(xialpha) + m_qy * b * std::sin(xialpha)) / 2.0;
 
  137     double ampl = 
Laue(qadiv2, m_N_1) * 
Laue(qbdiv2, m_N_2);
 
  138     double lattice_factor = ampl * ampl / (m_N_1 * m_N_2);
 
  140     return lattice_factor;
 
Defines many exception classes in namespace Exceptionss.
 
Defines classes RealIntegrator, ComplexIntegrator.
 
Defines class InterferenceFunctionFinite2DLattice.
 
Defines M_PI and some more mathematical constants.
 
Defines namespace MathFunctions.
 
Defines class RealParameter.
 
T y() const
Returns y-component in cartesian coordinate system.
 
T x() const
Returns x-component in cartesian coordinate system.
 
Pure virtual base class of interference functions.
 
Interference function of a finite 2D lattice.
 
InterferenceFunctionFinite2DLattice(const Lattice2D &lattice, unsigned N_1, unsigned N_2)
Constructor of two-dimensional finite lattice interference function.
 
InterferenceFunctionFinite2DLattice * clone() const override final
Returns a clone of this ISample object.
 
double getParticleDensity() const override final
Returns the particle density associated with this 2d lattice.
 
static InterferenceFunctionFinite2DLattice * createSquare(double lattice_length, double xi, unsigned N_1, unsigned N_2)
Creates square lattice.
 
static InterferenceFunctionFinite2DLattice * createHexagonal(double lattice_length, double xi, unsigned N_1, unsigned N_2)
Creates hexagonal lattice.
 
std::vector< const INode * > getChildren() const override final
Returns a vector of children (const).
 
To integrate a real function of a real variable.
 
double Laue(const double x, size_t N)
Real Laue function: .