15 #ifndef BORNAGAIN_SAMPLE_AGGREGATE_INTERFERENCE2DPARACRYSTAL_H
16 #define BORNAGAIN_SAMPLE_AGGREGATE_INTERFERENCE2DPARACRYSTAL_H
21 #include <heinz/Complex.h>
32 double domain_size_2);
37 std::string
className() const final {
return "Interference2DParaCrystal"; }
38 std::vector<ParaMeta>
parDefs() const final
40 return {{
"DampingLength",
"nm",
"damping length Lambda", 0, +
INF, 0},
41 {
"DomainSize 1",
"nm",
"domain size in lattice direction 1", 0, +
INF, 0},
42 {
"DomainSize 2",
"nm",
"domain size in lattice direction 2", 0, +
INF, 0}};
71 double interference1D(
double qx,
double qy,
double xi,
size_t index)
const;
72 complex_t
FTPDF(
double qx,
double qy,
double xi,
size_t index)
const;
74 double& q_pa_2)
const;
Defines and implements the interface class IInterference.
Defines classes of Lattice2D family.
Defines interface class IProfile2D, and children thereof.
Abstract base class of interference functions.
Interface for two-dimensional distributions in Fourier space.
Interference function of a 2D paracrystal.
~Interference2DParaCrystal() override
double interferenceForXi(double xi, double qx, double qy) const
Returns interference function for fixed angle xi.
Interference2DParaCrystal * clone() const override
bool m_integrate_xi
Integrate over the orientation xi.
std::unique_ptr< Lattice2D > m_lattice
const IProfile2D * pdf1() const
double iff_without_dw(R3 q) const override
Calculates the structure factor without Debye-Waller factor.
const Lattice2D & lattice() const
double interference1D(double qx, double qy, double xi, size_t index) const
Returns interference function for fixed xi in the dimension determined by the given index.
std::vector< const INode * > nodeChildren() const override
Returns all children.
void setDampingLength(double damping_length)
Sets the damping length.
double m_domain_sizes[2]
Coherence domain sizes.
complex_t FTPDF(double qx, double qy, double xi, size_t index) const
double dampingLength() const
double particleDensity() const override
If defined by this interference function's parameters, returns the particle density (per area)....
void transformToPrincipalAxes(double qx, double qy, double gamma, double delta, double &q_pa_1, double &q_pa_2) const
void setProbabilityDistributions(const IProfile2D &pdf_1, const IProfile2D &pdf_2)
Sets the probability distributions (Fourier transformed) for the two lattice directions.
bool integrationOverXi() const
Interference2DParaCrystal(const Lattice2D &lattice, double damping_length, double domain_size_1, double domain_size_2)
std::unique_ptr< IProfile2D > m_pdf1
const IProfile2D * pdf2() const
std::unique_ptr< IProfile2D > m_pdf2
std::string className() const final
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
void setDomainSizes(double size_1, double size_2)
Sets the sizes of coherence domains.
double m_damping_length
Damping length for removing delta function singularity at q=0.
void setIntegrationOverXi(bool integrate_xi)
Enables/disables averaging over the lattice rotation angle.
std::vector< double > domainSizes() const
std::vector< ParaMeta > parDefs() const final
Returns the parameter definitions, to be hard-coded in each leaf class.
A two-dimensional Bravais lattice.