BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
Interference2DParaCrystal Class Reference

Description

Interference function of a 2D paracrystal.

Definition at line 29 of file Interference2DParaCrystal.h.

Inheritance diagram for Interference2DParaCrystal:
[legend]
Collaboration diagram for Interference2DParaCrystal:
[legend]

Public Member Functions

 Interference2DParaCrystal (const Lattice2D &lattice, double damping_length, double domain_size_1, double domain_size_2)
 
 ~Interference2DParaCrystal () override
 
void checkNodeArgs () const
 Raises exception if a parameter value is invalid. More...
 
std::string className () const final
 Returns the class name, to be hard-coded in each leaf class that inherits from INode. More...
 
Interference2DParaCrystalclone () const override
 
double dampingLength () const
 
std::vector< double > domainSizes () const
 
double DWfactor (R3 q) const
 structureFactors the Debye-Waller factor for a given wavevector transfer More...
 
bool integrationOverXi () const
 
const Lattice2Dlattice () const
 
std::vector< const INode * > nodeChildren () const override
 Returns all children. More...
 
std::vector< const INode * > nodeOffspring () const
 Returns all descendants. More...
 
std::vector< ParaMetaparDefs () const final
 Returns the parameter definitions, to be hard-coded in each leaf class. More...
 
double particleDensity () const override
 If defined by this interference function's parameters, returns the particle density (per area). Otherwise, returns zero or a user-defined value. More...
 
const IProfile2Dpdf1 () const
 
const IProfile2Dpdf2 () const
 
double positionVariance () const
 Returns the position variance. More...
 
void setDampingLength (double damping_length)
 Sets the damping length. More...
 
void setDomainSizes (double size_1, double size_2)
 Sets the sizes of coherence domains. More...
 
void setIntegrationOverXi (bool integrate_xi)
 Enables/disables averaging over the lattice rotation angle. More...
 
void setPositionVariance (double var)
 Sets the variance of the position for the calculation of the DW factor It is defined as the variance in each relevant dimension. More...
 
void setProbabilityDistributions (const IProfile2D &pdf_1, const IProfile2D &pdf_2)
 Sets the probability distributions (Fourier transformed) for the two lattice directions. More...
 
virtual double structureFactor (R3 q, double outer_iff=1.0) const
 The interference function for a given wavevector transfer. More...
 
virtual bool supportsMultilayer () const
 Indicates if this interference function can be used with a sample (DWBA mode) More...
 
virtual void transferToCPP ()
 Used for Python overriding of clone (see swig/tweaks.py) More...
 

Protected Member Functions

double iff_no_inner (R3 q, double outer_iff) const
 Calculates the structure factor in the absence of extra inner structure. More...
 

Protected Attributes

std::vector< double > m_P
 
double m_position_var
 

Private Member Functions

complex_t FTPDF (double qx, double qy, double xi, size_t index) const
 
double iff_without_dw (R3 q) const override
 Calculates the structure factor without Debye-Waller factor. More...
 
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. More...
 
double interferenceForXi (double xi, double qx, double qy) const
 Returns interference function for fixed angle xi. More...
 
void transformToPrincipalAxes (double qx, double qy, double gamma, double delta, double &q_pa_1, double &q_pa_2) const
 

Private Attributes

double m_damping_length
 Damping length for removing delta function singularity at q=0. More...
 
double m_domain_sizes [2]
 Coherence domain sizes. More...
 
bool m_integrate_xi
 Integrate over the orientation xi. More...
 
std::unique_ptr< Lattice2Dm_lattice
 
std::unique_ptr< IProfile2Dm_pdf1
 
std::unique_ptr< IProfile2Dm_pdf2
 

Constructor & Destructor Documentation

◆ Interference2DParaCrystal()

Interference2DParaCrystal::Interference2DParaCrystal ( const Lattice2D lattice,
double  damping_length,
double  domain_size_1,
double  domain_size_2 
)

Definition at line 20 of file Interference2DParaCrystal.cpp.

23  : IInterference(0)
24  , m_integrate_xi(false)
25  , m_damping_length(damping_length)
26 {
27  m_lattice.reset(lattice.clone());
28  setDomainSizes(domain_size_1, domain_size_2);
30  RealLimits::nonnegative().check("DomainSize1", m_domain_sizes[0]);
31  RealLimits::nonnegative().check("DomainSize2", m_domain_sizes[1]);
32 }
IInterference(const std::vector< double > &PValues)
bool m_integrate_xi
Integrate over the orientation xi.
std::unique_ptr< Lattice2D > m_lattice
const Lattice2D & lattice() const
double m_domain_sizes[2]
Coherence domain sizes.
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.
Lattice2D * clone() const override=0
void check(const std::string &name, double value) const
Throws if value is outside limits. Parameter 'name' is for exception message.
Definition: RealLimits.cpp:170
static RealLimits nonnegative()
Creates an object which can have only positive values with 0. included.
Definition: RealLimits.cpp:124

References RealLimits::check(), Lattice2D::clone(), lattice(), m_damping_length, m_domain_sizes, m_lattice, RealLimits::nonnegative(), and setDomainSizes().

Referenced by clone().

Here is the call graph for this function:

◆ ~Interference2DParaCrystal()

Interference2DParaCrystal::~Interference2DParaCrystal ( )
overridedefault

Member Function Documentation

◆ checkNodeArgs()

void INode::checkNodeArgs ( ) const
inherited

Raises exception if a parameter value is invalid.

Definition at line 27 of file INode.cpp.

28 {
29  size_t nP = m_P.size();
30  if (parDefs().size() != nP) {
31  std::cerr << "BUG in class " << className() << std::endl;
32  std::cerr << "#m_P = " << nP << std::endl;
33  std::cerr << "#PDf = " << parDefs().size() << std::endl;
34  for (const ParaMeta& pm : parDefs())
35  std::cerr << " PDf: " << pm.name << std::endl;
36  ASSERT(0);
37  }
38  ASSERT(parDefs().size() == nP);
39  for (size_t i = 0; i < nP; ++i) {
40  const ParaMeta pm = parDefs()[i];
41 
43  if (pm.vMin == -INF) {
44  ASSERT(pm.vMax == +INF);
45  // nothing to do
46  } else if (pm.vMax == +INF) {
47  ASSERT(pm.vMin == 0);
48  limits = RealLimits::nonnegative();
49  } else {
50  limits = RealLimits::limited(pm.vMin, pm.vMax);
51  }
52  limits.check(pm.name, m_P[i]);
53  }
54 }
#define ASSERT(condition)
Definition: Assert.h:45
const double INF
Definition: INode.h:26
virtual std::vector< ParaMeta > parDefs() const
Returns the parameter definitions, to be hard-coded in each leaf class.
Definition: INode.h:51
std::vector< double > m_P
Definition: INode.h:63
virtual std::string className() const =0
Returns the class name, to be hard-coded in each leaf class that inherits from INode.
Limits for a real fit parameter.
Definition: RealLimits.h:24
static RealLimits limitless()
Creates an object without bounds (default)
Definition: RealLimits.cpp:139
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:134
Metadata of one model parameter.
Definition: INode.h:29
double vMin
Definition: INode.h:33
double vMax
Definition: INode.h:34
std::string name
Definition: INode.h:30

References ASSERT, RealLimits::check(), INode::className(), INF, RealLimits::limited(), RealLimits::limitless(), INode::m_P, ParaMeta::name, RealLimits::nonnegative(), INode::parDefs(), ParaMeta::vMax, and ParaMeta::vMin.

Referenced by BarGauss::BarGauss(), BarLorentz::BarLorentz(), Bipyramid4::Bipyramid4(), Box::Box(), CantellatedCube::CantellatedCube(), Cone::Cone(), ConstantBackground::ConstantBackground(), CosineRippleBox::CosineRippleBox(), CosineRippleGauss::CosineRippleGauss(), CosineRippleLorentz::CosineRippleLorentz(), Cylinder::Cylinder(), DistributionCosine::DistributionCosine(), DistributionGate::DistributionGate(), DistributionGaussian::DistributionGaussian(), DistributionLogNormal::DistributionLogNormal(), DistributionLorentz::DistributionLorentz(), DistributionTrapezoid::DistributionTrapezoid(), Dodecahedron::Dodecahedron(), EllipsoidalCylinder::EllipsoidalCylinder(), FootprintGauss::FootprintGauss(), FootprintSquare::FootprintSquare(), FuzzySphere::FuzzySphere(), GaussSphere::GaussSphere(), HemiEllipsoid::HemiEllipsoid(), HollowSphere::HollowSphere(), HorizontalCylinder::HorizontalCylinder(), Icosahedron::Icosahedron(), LongBoxGauss::LongBoxGauss(), LongBoxLorentz::LongBoxLorentz(), PlatonicOctahedron::PlatonicOctahedron(), PlatonicTetrahedron::PlatonicTetrahedron(), Prism3::Prism3(), Prism6::Prism6(), Profile1DCauchy::Profile1DCauchy(), Profile1DCosine::Profile1DCosine(), Profile1DGate::Profile1DGate(), Profile1DGauss::Profile1DGauss(), Profile1DTriangle::Profile1DTriangle(), Profile1DVoigt::Profile1DVoigt(), Profile2DCauchy::Profile2DCauchy(), Profile2DCone::Profile2DCone(), Profile2DGate::Profile2DGate(), Profile2DGauss::Profile2DGauss(), Profile2DVoigt::Profile2DVoigt(), Pyramid2::Pyramid2(), Pyramid3::Pyramid3(), Pyramid4::Pyramid4(), Pyramid6::Pyramid6(), RotationEuler::RotationEuler(), RotationX::RotationX(), RotationY::RotationY(), RotationZ::RotationZ(), SawtoothRippleBox::SawtoothRippleBox(), SawtoothRippleGauss::SawtoothRippleGauss(), SawtoothRippleLorentz::SawtoothRippleLorentz(), Sphere::Sphere(), Spheroid::Spheroid(), TruncatedCube::TruncatedCube(), TruncatedSphere::TruncatedSphere(), and TruncatedSpheroid::TruncatedSpheroid().

Here is the call graph for this function:

◆ className()

std::string Interference2DParaCrystal::className ( ) const
inlinefinalvirtual

Returns the class name, to be hard-coded in each leaf class that inherits from INode.

Implements INode.

Definition at line 37 of file Interference2DParaCrystal.h.

37 { return "Interference2DParaCrystal"; }

◆ clone()

Interference2DParaCrystal * Interference2DParaCrystal::clone ( ) const
overridevirtual

Implements IInterference.

Definition at line 36 of file Interference2DParaCrystal.cpp.

37 {
39  m_domain_sizes[1]);
40  result->setPositionVariance(m_position_var);
41  if (m_pdf1 && m_pdf2)
42  result->setProbabilityDistributions(*m_pdf1, *m_pdf2);
43  result->setIntegrationOverXi(m_integrate_xi);
44  return result;
45 }
double m_position_var
Definition: IInterference.h:53
Interference2DParaCrystal(const Lattice2D &lattice, double damping_length, double domain_size_1, double domain_size_2)
std::unique_ptr< IProfile2D > m_pdf1
std::unique_ptr< IProfile2D > m_pdf2

References Interference2DParaCrystal(), m_damping_length, m_domain_sizes, m_integrate_xi, m_lattice, m_pdf1, m_pdf2, and IInterference::m_position_var.

Here is the call graph for this function:

◆ dampingLength()

double Interference2DParaCrystal::dampingLength ( ) const
inline

Definition at line 55 of file Interference2DParaCrystal.h.

55 { return m_damping_length; }

References m_damping_length.

◆ domainSizes()

std::vector< double > Interference2DParaCrystal::domainSizes ( ) const

Definition at line 171 of file Interference2DParaCrystal.cpp.

172 {
173  return {m_domain_sizes[0], m_domain_sizes[1]};
174 }

References m_domain_sizes.

◆ DWfactor()

double IInterference::DWfactor ( R3  q) const
inherited

structureFactors the Debye-Waller factor for a given wavevector transfer

Definition at line 48 of file IInterference.cpp.

49 {
50  // remove z component for two-dimensional interference functions:
51  if (supportsMultilayer())
52  q.setZ(0.0);
53  return std::exp(-q.mag2() * m_position_var);
54 }
virtual bool supportsMultilayer() const
Indicates if this interference function can be used with a sample (DWBA mode)
Definition: IInterference.h:47

References IInterference::m_position_var, and IInterference::supportsMultilayer().

Referenced by IInterference::iff_no_inner(), and Interference2DSuperLattice::interferenceForXi().

Here is the call graph for this function:

◆ FTPDF()

complex_t Interference2DParaCrystal::FTPDF ( double  qx,
double  qy,
double  xi,
size_t  index 
) const
private

Definition at line 152 of file Interference2DParaCrystal.cpp.

153 {
154  double length = (index ? m_lattice->length2() : m_lattice->length1());
155 
156  const IProfile2D* pdf = (index ? m_pdf2.get() : m_pdf1.get());
157  double qa = qx * length * std::cos(xi) + qy * length * std::sin(xi);
158  complex_t phase = exp_I(qa);
159  // transform q to principal axes:
160  double qp1, qp2;
161  double gamma = xi + pdf->gamma();
162  double delta = pdf->delta();
163  transformToPrincipalAxes(qx, qy, gamma, delta, qp1, qp2);
164  double amplitude = pdf->standardizedFT2D(qp1, qp2);
165  complex_t result = phase * amplitude;
166  if (m_damping_length != 0.0)
167  result *= std::exp(-length / m_damping_length);
168  return result;
169 }
Interface for two-dimensional distributions in Fourier space.
Definition: Profiles2D.h:29
double delta() const
Angle in direct space between X- and Y-axis of distribution.
Definition: Profiles2D.h:42
double gamma() const
Definition: Profiles2D.h:39
virtual double standardizedFT2D(double qx, double qy) const =0
Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) i...
void transformToPrincipalAxes(double qx, double qy, double gamma, double delta, double &q_pa_1, double &q_pa_2) const
double gamma(double x)

References IProfile2D::delta(), IProfile2D::gamma(), ROOT::Math::Cephes::gamma(), m_damping_length, m_lattice, m_pdf1, m_pdf2, IProfile2D::standardizedFT2D(), and transformToPrincipalAxes().

Referenced by interference1D().

Here is the call graph for this function:

◆ iff_no_inner()

double IInterference::iff_no_inner ( R3  q,
double  outer_iff 
) const
protectedinherited

Calculates the structure factor in the absence of extra inner structure.

Definition at line 56 of file IInterference.cpp.

57 {
58  return DWfactor(q) * (iff_without_dw(q) * outer_iff - 1.0) + 1.0;
59 }
double DWfactor(R3 q) const
structureFactors the Debye-Waller factor for a given wavevector transfer
virtual double iff_without_dw(R3 q) const =0
Calculates the structure factor without Debye-Waller factor.

References IInterference::DWfactor(), and IInterference::iff_without_dw().

Referenced by IInterference::structureFactor().

Here is the call graph for this function:

◆ iff_without_dw()

double Interference2DParaCrystal::iff_without_dw ( R3  q) const
overrideprivatevirtual

Calculates the structure factor without Debye-Waller factor.

Implements IInterference.

Definition at line 77 of file Interference2DParaCrystal.cpp.

78 {
79  if (!m_integrate_xi)
80  return interferenceForXi(m_lattice->rotationAngle(), q.x(), q.y());
81  return RealIntegrator().integrate(
82  [&](double xi) -> double { return interferenceForXi(xi, q.x(), q.y()); }, 0.0,
83  M_TWOPI)
84  / M_TWOPI;
85 }
#define M_TWOPI
Definition: Constants.h:54
double interferenceForXi(double xi, double qx, double qy) const
Returns interference function for fixed angle xi.
To integrate a real function of a real variable.
Definition: IntegratorGK.h:28
double integrate(const std::function< double(double)> &f, double lmin, double lmax)

References RealIntegrator::integrate(), interferenceForXi(), m_integrate_xi, m_lattice, and M_TWOPI.

Here is the call graph for this function:

◆ integrationOverXi()

bool Interference2DParaCrystal::integrationOverXi ( ) const
inline

Definition at line 54 of file Interference2DParaCrystal.h.

54 { return m_integrate_xi; }

References m_integrate_xi.

◆ interference1D()

double Interference2DParaCrystal::interference1D ( double  qx,
double  qy,
double  xi,
size_t  index 
) const
private

Returns interference function for fixed xi in the dimension determined by the given index.

Definition at line 115 of file Interference2DParaCrystal.cpp.

117 {
118  if (index > 1)
119  throw std::runtime_error("Interference2DParaCrystal::"
120  "interference1D() -> Error! Index of interference function "
121  "probability must be < 2");
122  if (!m_pdf1 || !m_pdf2)
123  throw std::runtime_error("Interference2DParaCrystal::"
124  "interference1D() -> Error! Probability distributions for "
125  "interference function not properly initialized");
126 
127  double length = index ? m_lattice->length2() : m_lattice->length1();
128  int n = static_cast<int>(std::abs(m_domain_sizes[index] / length));
129  auto nd = static_cast<double>(n);
130  complex_t fp = FTPDF(qx, qy, xi, index);
131  if (n < 1)
132  return ((1.0 + fp) / (1.0 - fp)).real();
133  if (std::norm(1.0 - fp) < std::numeric_limits<double>::epsilon())
134  return nd;
135  // for (1-fp)*nd small, take the series expansion to second order in nd*(1-fp)
136  if (std::abs(1.0 - fp) * nd < 2e-4) {
137  complex_t intermediate =
138  (nd - 1.0) / 2.0 + (nd * nd - 1.0) * (fp - 1.0) / 6.0
139  + (nd * nd * nd - 2.0 * nd * nd - nd + 2.0) * (fp - 1.0) * (fp - 1.0) / 24.0;
140  return 1.0 + 2.0 * intermediate.real();
141  }
142  complex_t tmp;
143  if (std::abs(fp) == 0.0
144  || std::log(std::abs(fp)) * nd < std::log(std::numeric_limits<double>::min()))
145  tmp = 0.0;
146  else
147  tmp = std::pow(fp, n);
148  complex_t intermediate = fp / (1.0 - fp) - fp * (1.0 - tmp) / nd / (1.0 - fp) / (1.0 - fp);
149  return 1.0 + 2.0 * intermediate.real();
150 }
complex_t FTPDF(double qx, double qy, double xi, size_t index) const

References FTPDF(), m_domain_sizes, m_lattice, m_pdf1, and m_pdf2.

Referenced by interferenceForXi().

Here is the call graph for this function:

◆ interferenceForXi()

double Interference2DParaCrystal::interferenceForXi ( double  xi,
double  qx,
double  qy 
) const
private

Returns interference function for fixed angle xi.

Definition at line 106 of file Interference2DParaCrystal.cpp.

107 {
108  // don't touch order of computation; problems under Windows
109  double rx = interference1D(qx, qy, xi, 0);
110  double ry = interference1D(qx, qy, xi + m_lattice->latticeAngle(), 1);
111  return rx * ry;
112 }
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.

References interference1D(), and m_lattice.

Referenced by iff_without_dw().

Here is the call graph for this function:

◆ lattice()

const Lattice2D & Interference2DParaCrystal::lattice ( ) const

Definition at line 185 of file Interference2DParaCrystal.cpp.

186 {
187  if (!m_lattice)
188  throw std::runtime_error("Interference2DParaCrystal::lattice() -> Error. "
189  "No lattice defined.");
190  return *m_lattice;
191 }

References m_lattice.

Referenced by Interference2DParaCrystal().

◆ nodeChildren()

std::vector< const INode * > Interference2DParaCrystal::nodeChildren ( ) const
overridevirtual

Returns all children.

Reimplemented from INode.

Definition at line 72 of file Interference2DParaCrystal.cpp.

73 {
74  return std::vector<const INode*>() << m_pdf1 << m_pdf2 << m_lattice;
75 }

References m_lattice, m_pdf1, and m_pdf2.

◆ nodeOffspring()

std::vector< const INode * > INode::nodeOffspring ( ) const
inherited

Returns all descendants.

Definition at line 61 of file INode.cpp.

62 {
63  std::vector<const INode*> result;
64  result.push_back(this);
65  for (const auto* child : nodeChildren()) {
66  for (const auto* p : child->nodeOffspring())
67  result.push_back(p);
68  }
69  return result;
70 }
virtual std::vector< const INode * > nodeChildren() const
Returns all children.
Definition: INode.cpp:56

References INode::nodeChildren().

Here is the call graph for this function:

◆ parDefs()

std::vector<ParaMeta> Interference2DParaCrystal::parDefs ( ) const
inlinefinalvirtual

Returns the parameter definitions, to be hard-coded in each leaf class.

Reimplemented from INode.

Definition at line 38 of file Interference2DParaCrystal.h.

39  {
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}};
43  }

References INF.

◆ particleDensity()

double Interference2DParaCrystal::particleDensity ( ) const
overridevirtual

If defined by this interference function's parameters, returns the particle density (per area). Otherwise, returns zero or a user-defined value.

Reimplemented from IInterference.

Definition at line 66 of file Interference2DParaCrystal.cpp.

67 {
68  double area = m_lattice->unitCellArea();
69  return area == 0.0 ? 0.0 : 1.0 / area;
70 }

References m_lattice.

◆ pdf1()

const IProfile2D* Interference2DParaCrystal::pdf1 ( ) const
inline

Definition at line 63 of file Interference2DParaCrystal.h.

63 { return m_pdf1.get(); }

References m_pdf1.

◆ pdf2()

const IProfile2D* Interference2DParaCrystal::pdf2 ( ) const
inline

Definition at line 65 of file Interference2DParaCrystal.h.

65 { return m_pdf2.get(); }

References m_pdf2.

◆ positionVariance()

double IInterference::positionVariance ( ) const
inlineinherited

Returns the position variance.

Definition at line 40 of file IInterference.h.

40 { return m_position_var; }

References IInterference::m_position_var.

◆ setDampingLength()

void Interference2DParaCrystal::setDampingLength ( double  damping_length)

Sets the damping length.

Parameters
damping_lengththe damping (coherence) length of the paracrystal in nanometers

Definition at line 61 of file Interference2DParaCrystal.cpp.

62 {
63  m_damping_length = damping_length;
64 }

References m_damping_length.

◆ setDomainSizes()

void Interference2DParaCrystal::setDomainSizes ( double  size_1,
double  size_2 
)

Sets the sizes of coherence domains.

Parameters
size_1coherence domain size along the first basis vector in nanometers
size_2coherence domain size along the second basis vector in nanometers

Definition at line 91 of file Interference2DParaCrystal.cpp.

92 {
93  m_domain_sizes[0] = size_1;
94  m_domain_sizes[1] = size_2;
95 }

References m_domain_sizes.

Referenced by Interference2DParaCrystal(), and ExemplarySamples::createRectParaCrystal().

◆ setIntegrationOverXi()

void Interference2DParaCrystal::setIntegrationOverXi ( bool  integrate_xi)

Enables/disables averaging over the lattice rotation angle.

Parameters
integrate_xiintegration flag

Definition at line 179 of file Interference2DParaCrystal.cpp.

180 {
181  m_integrate_xi = integrate_xi;
182  m_lattice->setRotationEnabled(!m_integrate_xi); // deregister Xi in the case of integration
183 }

References m_integrate_xi, and m_lattice.

Referenced by ExemplarySamples::createHexParaCrystal(), and ExemplarySamples::createRectParaCrystal().

◆ setPositionVariance()

void IInterference::setPositionVariance ( double  var)
inherited

Sets the variance of the position for the calculation of the DW factor It is defined as the variance in each relevant dimension.

Definition at line 40 of file IInterference.cpp.

41 {
42  if (var < 0.0)
43  throw std::runtime_error("IInterference::setPositionVariance: "
44  "variance should be positive.");
45  m_position_var = var;
46 }

References IInterference::m_position_var.

Referenced by ExemplarySamples::createFiniteSquareLattice2D(), and ExemplarySamples::createSuperLattice().

◆ setProbabilityDistributions()

void Interference2DParaCrystal::setProbabilityDistributions ( const IProfile2D pdf_1,
const IProfile2D pdf_2 
)

Sets the probability distributions (Fourier transformed) for the two lattice directions.

Parameters
pdf_1probability distribution in first lattice direction
pdf_2probability distribution in second lattice direction

Definition at line 51 of file Interference2DParaCrystal.cpp.

53 {
54  m_pdf1.reset(pdf_1.clone());
55  m_pdf2.reset(pdf_2.clone());
56 }
IProfile2D * clone() const override=0

References IProfile2D::clone(), m_pdf1, and m_pdf2.

Referenced by ExemplarySamples::createBasic2DParaCrystalWithFTDis(), ExemplarySamples::createHexParaCrystal(), and ExemplarySamples::createRectParaCrystal().

Here is the call graph for this function:

◆ structureFactor()

double IInterference::structureFactor ( R3  q,
double  outer_iff = 1.0 
) const
virtualinherited

The interference function for a given wavevector transfer.

Reimplemented in Interference2DSuperLattice.

Definition at line 35 of file IInterference.cpp.

36 {
37  return iff_no_inner(q, outer_iff);
38 }
double iff_no_inner(R3 q, double outer_iff) const
Calculates the structure factor in the absence of extra inner structure.

References IInterference::iff_no_inner().

Here is the call graph for this function:

◆ supportsMultilayer()

virtual bool IInterference::supportsMultilayer ( ) const
inlinevirtualinherited

Indicates if this interference function can be used with a sample (DWBA mode)

Reimplemented in InterferenceFinite3DLattice, and Interference3DLattice.

Definition at line 47 of file IInterference.h.

47 { return true; }

Referenced by IInterference::DWfactor().

◆ transferToCPP()

virtual void ICloneable::transferToCPP ( )
inlinevirtualinherited

Used for Python overriding of clone (see swig/tweaks.py)

Definition at line 32 of file ICloneable.h.

◆ transformToPrincipalAxes()

void Interference2DParaCrystal::transformToPrincipalAxes ( double  qx,
double  qy,
double  gamma,
double  delta,
double &  q_pa_1,
double &  q_pa_2 
) const
private

Definition at line 97 of file Interference2DParaCrystal.cpp.

100 {
101  q_pa_1 = qx * std::cos(gamma) + qy * std::sin(gamma);
102  q_pa_2 = qx * std::cos(gamma + delta) + qy * std::sin(gamma + delta);
103 }

References ROOT::Math::Cephes::gamma().

Referenced by FTPDF().

Here is the call graph for this function:

Member Data Documentation

◆ m_damping_length

double Interference2DParaCrystal::m_damping_length
private

Damping length for removing delta function singularity at q=0.

Definition at line 79 of file Interference2DParaCrystal.h.

Referenced by Interference2DParaCrystal(), clone(), dampingLength(), FTPDF(), and setDampingLength().

◆ m_domain_sizes

double Interference2DParaCrystal::m_domain_sizes[2]
private

Coherence domain sizes.

Definition at line 80 of file Interference2DParaCrystal.h.

Referenced by Interference2DParaCrystal(), clone(), domainSizes(), interference1D(), and setDomainSizes().

◆ m_integrate_xi

bool Interference2DParaCrystal::m_integrate_xi
private

Integrate over the orientation xi.

Definition at line 76 of file Interference2DParaCrystal.h.

Referenced by clone(), iff_without_dw(), integrationOverXi(), and setIntegrationOverXi().

◆ m_lattice

std::unique_ptr<Lattice2D> Interference2DParaCrystal::m_lattice
private

◆ m_P

◆ m_pdf1

std::unique_ptr<IProfile2D> Interference2DParaCrystal::m_pdf1
private

◆ m_pdf2

std::unique_ptr<IProfile2D> Interference2DParaCrystal::m_pdf2
private

◆ m_position_var


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