28 MultiLayer* RadialParaCrystalBuilder::buildSample()
 const 
   30     const double m_corr_peak_distance(20.0 * Units::nanometer);
 
   31     const double m_corr_width(7 * Units::nanometer);
 
   32     const double m_corr_length(1e3 * Units::nanometer);
 
   33     const double m_cylinder_height(5 * Units::nanometer);
 
   34     const double m_cylinder_radius(5 * Units::nanometer);
 
   36     Layer vacuum_layer(refMat::Vacuum);
 
   37     Layer substrate_layer(refMat::Substrate);
 
   42     interference_function.setProbabilityDistribution(pdf);
 
   45     Particle particle(refMat::Particle, ff_cylinder);
 
   47     particle_layout.setInterferenceFunction(interference_function);
 
   49     vacuum_layer.addLayout(particle_layout);
 
   53     multi_layer->
addLayer(substrate_layer);
 
   61 Basic2DParaCrystalBuilder::Basic2DParaCrystalBuilder()
 
   67 Basic2DParaCrystalBuilder::~Basic2DParaCrystalBuilder() = 
default;
 
   69 MultiLayer* Basic2DParaCrystalBuilder::buildSample()
 const 
   71     Layer vacuum_layer(refMat::Vacuum);
 
   72     Layer substrate_layer(refMat::Substrate);
 
   75         10.0 * Units::nanometer, 20.0 * Units::nanometer, 30.0 * Units::degree,
 
   76         45.0 * Units::degree, 1000.0 * Units::nanometer);
 
   78     interference_function.setDomainSizes(20.0 * Units::micrometer, 40.0 * Units::micrometer);
 
   80     interference_function.setProbabilityDistributions(*m_pdf1, *m_pdf2);
 
   84     Particle particle(refMat::Particle, ff_cylinder);
 
   86     particle_layout.setInterferenceFunction(interference_function);
 
   88     vacuum_layer.addLayout(particle_layout);
 
   92     multi_layer->
addLayer(substrate_layer);
 
   96 MultiLayer* Basic2DParaCrystalBuilder::createSampleByIndex(
size_t index)
 
  103     setName(names.at(index));
 
  105     return buildSample();
 
  112 MultiLayer* HexParaCrystalBuilder::buildSample()
 const 
  114     const double m_peak_distance(20.0 * Units::nanometer);
 
  115     const double m_corr_length(0.0);
 
  116     const double m_domain_size_1(20.0 * Units::micrometer);
 
  117     const double m_domain_size_2(20.0 * Units::micrometer);
 
  118     const double m_cylinder_height(5 * Units::nanometer);
 
  119     const double m_cylinder_radius(5 * Units::nanometer);
 
  121     Layer vacuum_layer(refMat::Vacuum);
 
  122     Layer substrate_layer(refMat::Substrate);
 
  124     std::unique_ptr<InterferenceFunction2DParaCrystal> P_interference_function{
 
  126                                                            m_domain_size_1, m_domain_size_2)};
 
  128     P_interference_function->setProbabilityDistributions(pdf, pdf);
 
  131     Particle cylinder(refMat::Particle, ff_cylinder);
 
  134     particle_layout.setInterferenceFunction(*P_interference_function);
 
  136     vacuum_layer.addLayout(particle_layout);
 
  139     multi_layer->
addLayer(vacuum_layer);
 
  140     multi_layer->
addLayer(substrate_layer);
 
  148 MultiLayer* RectParaCrystalBuilder::buildSample()
 const 
  150     Layer vacuum_layer(refMat::Vacuum);
 
  151     Layer substrate_layer(refMat::Substrate);
 
  153     std::unique_ptr<InterferenceFunction2DParaCrystal> P_interference_function{
 
  157     P_interference_function->
setDomainSizes(20.0 * Units::micrometer, 20.0 * Units::micrometer);
 
  160     P_interference_function->setProbabilityDistributions(pdf1, pdf2);
 
  164     Particle particle(refMat::Particle, ff_cylinder);
 
  166     particle_layout.setInterferenceFunction(*P_interference_function);
 
  168     vacuum_layer.addLayout(particle_layout);
 
  171     multi_layer->
addLayer(vacuum_layer);
 
  172     multi_layer->
addLayer(substrate_layer);
 
Defines the macro ASSERT.
 
Defines class InterferenceFunction2DParaCrystal.
 
Defines class InterferenceFunctionRadialParaCrystal.
 
Defines class MultiLayer.
 
Defines classes of ParaCrystalBuilder family.
 
Defines class ParticleLayout.
 
Defines materials in namespace refMat.
 
Defines sample components for complex sample builders.
 
Defines some unit conversion factors and other constants in namespace Units.
 
Gaussian IFTDistribution1D; its Fourier transform evaluate(q) is a Gaussian starting at evaluate(0)=1...
 
Two-dimensional Cauchy distribution in Fourier space; corresponds to a normalized exp(-r) in real spa...
 
Predefined Fourier transformed distributions for functional tests.
 
Interference function of a 2D paracrystal.
 
static InterferenceFunction2DParaCrystal * createHexagonal(double lattice_length, double damping_length, double domain_size_1, double domain_size_2)
Creates hexagonal lattice.
 
static InterferenceFunction2DParaCrystal * createSquare(double lattice_length, double damping_length, double domain_size_1, double domain_size_2)
Creates square lattice.
 
void setDomainSizes(double size_1, double size_2)
Sets the sizes of coherence domains.
 
Interference function of radial paracrystal.
 
A layer, with thickness (in nanometer) and material.
 
Our sample model: a stack of layers one below the other.
 
void addLayer(const Layer &layer)
Adds object to multilayer.
 
Decorator class that adds particles to ISample objects.
 
A particle with a form factor and refractive index.
 
Constants and functions for physical unit conversions.