31 setName(
"Interference2DSuperLattice");
44 double length_1,
double length_2,
double alpha,
double xi,
unsigned size_1,
unsigned size_2)
88 unsigned size_1,
unsigned size_2)
115 throw std::runtime_error(
"InterferenceFunctionFinite2DLattice::lattice() -> Error. "
116 "No lattice defined.");
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;
150 const double delta_xi = xi -
mP_lattice->rotationAngle();
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< double > kvector_t
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.
void registerChild(INode *node)
void setName(const std::string &name)
Interference function of a 2D superlattice with a configurable interference function for each lattice...
void setLattice(const Lattice2D &lattice)
const Lattice2D & lattice() const
bool integrationOverXi() const
std::unique_ptr< Lattice2D > mP_lattice
unsigned m_size_2
Size of the finite lattice in lattice units.
InterferenceFunction2DSuperLattice(const Lattice2D &lattice, unsigned size_1, unsigned size_2)
std::unique_ptr< IInterferenceFunction > mP_substructure
IFF of substructure.
void setSubstructureIFF(const IInterferenceFunction &sub_iff)
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.
double interferenceForXi(double xi) const
bool m_integrate_xi
Integrate over the orientation xi.
double iff_without_dw(const kvector_t q) const override final
Calculates the structure factor without Debye-Waller factor.
void setIntegrationOverXi(bool integrate_xi)
InterferenceFunction2DSuperLattice * clone() const override final
Returns a clone of this ISample object.
~InterferenceFunction2DSuperLattice() final
const IInterferenceFunction & substructureIFF() const
std::vector< const INode * > getChildren() const override final
Returns a vector of children (const).
Default interference function (i.e.
virtual Lattice2D * clone() const =0
To integrate a real function of a real variable.
double integrate(const std::function< double(double)> &f, double lmin, double lmax)
double Laue(const double x, size_t N)
Real Laue function: .