25 InterferenceFunction2DSuperLattice::InterferenceFunction2DSuperLattice(
const Lattice2D& lattice,
 
   31     setName(
"Interference2DSuperLattice");
 
   43 InterferenceFunction2DSuperLattice::InterferenceFunction2DSuperLattice(
 
   44     double length_1, 
double length_2, 
double alpha, 
double xi, 
unsigned size_1, 
unsigned size_2)
 
   50 InterferenceFunction2DSuperLattice::~InterferenceFunction2DSuperLattice() = 
default;
 
   55     ret->setPositionVariance(m_position_var);
 
   56     ret->setSubstructureIFF(*mP_substructure);
 
   57     ret->setIntegrationOverXi(integrationOverXi());
 
   63     mP_substructure.reset(sub_iff.
clone());
 
   64     registerChild(mP_substructure.get());
 
   69     return *mP_substructure;
 
   88                                                     unsigned size_1, 
unsigned size_2)
 
   96     m_outer_iff = outer_iff;
 
  100         return interferenceForXi(mP_lattice->rotationAngle());
 
  101     return RealIntegrator().integrate([&](
double xi) -> 
double { 
return interferenceForXi(xi); },
 
  106 void InterferenceFunction2DSuperLattice::setIntegrationOverXi(
bool integrate_xi)
 
  108     m_integrate_xi = integrate_xi;
 
  109     mP_lattice->setRotationEnabled(!m_integrate_xi); 
 
  112 const Lattice2D& InterferenceFunction2DSuperLattice::lattice()
 const 
  115         throw std::runtime_error(
"InterferenceFunctionFinite2DLattice::lattice() -> Error. " 
  116                                  "No lattice defined.");
 
  122     return std::vector<const INode*>() << mP_lattice << mP_substructure;
 
  125 double InterferenceFunction2DSuperLattice::iff_without_dw(
const kvector_t q)
 const 
  129     const double a = mP_lattice->length1();
 
  130     const double b = mP_lattice->length2();
 
  131     const double xialpha = m_xi + mP_lattice->latticeAngle();
 
  133     const double qadiv2 = (q.
x() * a * std::cos(m_xi) + q.
y() * a * std::sin(m_xi)) / 2.0;
 
  134     const double qbdiv2 = (q.
x() * b * std::cos(xialpha) + q.
y() * b * std::sin(xialpha)) / 2.0;
 
  135     const double ampl = 
Laue(qadiv2, m_size_1) * 
Laue(qbdiv2, m_size_2);
 
  136     return ampl * ampl / (m_size_1 * m_size_2);
 
  139 void InterferenceFunction2DSuperLattice::setLattice(
const Lattice2D& lattice)
 
  141     mP_lattice.reset(lattice.clone());
 
  142     registerChild(mP_lattice.get());
 
  145 double InterferenceFunction2DSuperLattice::interferenceForXi(
double xi)
 const 
  150     const double delta_xi = xi - mP_lattice->rotationAngle();
 
  151     return mP_substructure->evaluate(q.
rotatedZ(-delta_xi), outer_iff);
 
Defines many exception classes in namespace Exceptionss.
 
Defines classes RealIntegrator, ComplexIntegrator.
 
Defines class InterferenceFunction2DSuperLattice.
 
Defines class InterferenceFunctionNone.
 
Defines M_PI and some more mathematical constants.
 
Defines namespace MathFunctions.
 
Defines class RealParameter.
 
BasicVector3D< T > rotatedZ(double a) const
Returns result of rotation around z-axis.
 
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.
 
double iff_no_inner(const kvector_t q, double outer_iff) const
Calculates the structure factor in the absence of extra inner structure.
 
virtual IInterferenceFunction * clone() const =0
Returns a clone of this ISample object.
 
Interference function of a 2D superlattice with a configurable interference function for each lattice...
 
double evaluate(const kvector_t q, double outer_iff=1.0) const override final
Evaluates the interference function for a given wavevector transfer.
 
static InterferenceFunction2DSuperLattice * createHexagonal(double lattice_length, double xi, unsigned size_1, unsigned size_2)
Creates hexagonal lattice.
 
static InterferenceFunction2DSuperLattice * createSquare(double lattice_length, double xi, unsigned size_1, unsigned size_2)
Creates square lattice.
 
InterferenceFunction2DSuperLattice * clone() const override final
Returns a clone of this ISample object.
 
std::vector< const INode * > getChildren() const override final
Returns a vector of children (const).
 
Default interference function (i.e.
 
To integrate a real function of a real variable.
 
double Laue(const double x, size_t N)
Real Laue function: .