Mesocrystal particle

A mesocrystal combines a three-dimensional crystal with a finite outer shape. The crystal defines the lattice and its basis particle; the outer shape selects the lattice sites that belong to the mesocrystal.

# Particle at each lattice site
inner_shape = ba.Sphere(3*nm)
basis = ba.Particle(material, inner_shape)

# Three-dimensional lattice
lattice = ba.Lattice3D(
    ba.R3(8*nm, 0, 0),
    ba.R3(0, 8*nm, 0),
    ba.R3(0, 0, 8*nm),
)

# Lattice and basis
crystal = ba.Crystal(basis, lattice)

# Finite mesocrystal
outer_shape = ba.Cylinder(20*nm, 50*nm)
mesocrystal = ba.Mesocrystal(crystal, outer_shape)

The basis can be a simple Particle or a composite particle. The Mesocrystal with basis example uses a Compound as the basis.

The outer shape must be a closed hard form factor. It selects complete lattice sites and does not clip basis particles at the surface.

By default, BornAgain sums the selected lattice sites exactly. An approximate reciprocal-space algorithm is available for large mesocrystals; see Mesocrystal summation.

Three-dimensional lattice

ba.Lattice3D(a, b, c) takes three linearly independent R3 vectors in nm. They define the real-space unit cell. ba.CubicLattice(a) is a shortcut for a cubic cell with edge length a.

Method Result
lattice.basisVectorA() First real-space basis vector, in nm.
lattice.basisVectorB() Second real-space basis vector, in nm.
lattice.basisVectorC() Third real-space basis vector, in nm.
lattice.unitCellVolume() Cell volume, in nm³.

The volume is the absolute scalar triple product of the basis vectors. For the 8 nm cubic lattice above, it is 512*ba.nm3.

Reciprocal basis and Miller planes

reciprocalLatticeBasis fills three supplied vectors in place:

a_star, b_star, c_star = ba.R3(), ba.R3(), ba.R3()
lattice.reciprocalLatticeBasis(a_star, b_star, c_star)

These reciprocal vectors have units of nm⁻¹ and include the factor 2π. The dot product with the matching real-space basis vector is 2π; with the other real-space basis vectors it is zero.

normal = lattice.millerDirection(1, 1, 0)

millerDirection(h, k, l) returns a dimensionless unit vector normal to the (hkl) planes, parallel to h*a_star + k*b_star + l*c_star. The indices must not all be zero.

Examples

  • Mesocrystal compares exact and reciprocal-space summation.