+++
title = "Radial paracrystal"
weight = 40
+++

## Radial paracrystal

The radial paracrystal structure is used to model cumulative disorder of
interparticle distances. It is called radial to stress the fact that it only
takes into account the radial component of the scattering vector.

{{< figscg src="/img/draw/interference_para1d_simple.png" width="800px" class="center">}}

Each circle on the plot above represents the area where the probability to
find a particle, given a particle at the origin, is above some arbitrary
threshold. The growing size of the areas emphasizes the fact the our knowledge
about next neighbor's location decreases with the distance to the origin.

The BornAgain user manual (Chapter 3.5, Paracrystal) details the theoretical
model and gives some links to the literature.

### RadialParacrystal class

The radial paracrystal is parameterized by the position distribution of the
nearest neighbor centered at the peak distance. On the plot below the
half-width of this distribution is marked as $\omega$ and the center is
marked with "Peak Distance". The probability distributions of finding other
particles to the right are deduced from accumulating position uncertanties of
previous particles in the chain.

{{< figscg src="/img/draw/interference_para1d_b.png" width="800px" class="center">}}

To create a radial paracrystal, use the following constructor:

```python
structure = ba.RadialParacrystal(particle, peak_distance, damping_length)
```

Arguments:

```python
particle        # particle or Mixture placed at lattice sites
peak_distance   # average distance to the next neighbor, in nanometers
damping_length  # damping/coherence length, in nanometers
```

The parameter `damping_length` is used to introduce finite size effects by
applying a multiplicative coefficient equal to
$exp \left(-\frac{peak\\_distance}{damping\\_length}\right)$ to the Fourier
transform of the probability density of a nearest neighbor. A value of 0 means
no damping-length correction.

### Probability distribution

To account for next neighbor position uncertainty, assign a probability
distribution to the structure with `setProbabilityDistribution(pdf)`:

```python
structure = ba.RadialParacrystal(particle, 10*nm, 1000*nm)
structure.setProbabilityDistribution(ba.Profile1DCauchy(30*nm))
```

The following distributions are available:

```python
ba.Profile1DCauchy(omega)
ba.Profile1DGauss(omega)
ba.Profile1DGate(omega)
ba.Profile1DTriangle(omega)
ba.Profile1DCosine(omega)
ba.Profile1DVoigt(omega, eta)
```

The parameter `omega` sets the half-width of the distribution in nanometers.
In the case of the pseudo-Voigt distribution, an additional dimensionless
parameter `eta` balances between the Gaussian and Cauchy profiles.

### Domain size

The radial paracrystal provides a way to calculate the scattering from a
finite portion of the paracrystal using the `setDomainSize(nm)` method. The
resulting behaviour is similar to the case when `damping_length` is used.

```python
structure = ba.RadialParacrystal(particle, 10*nm, 0)
structure.setProbabilityDistribution(ba.Profile1DCauchy(30*nm))
structure.setDomainSize(10000*nm)
```

### Particle mixtures

For particle mixtures (DA/SSCA approximations), use the `Mixture` class:

```python
mix = ba.Mixture()
mix.addParticle(particle_1, 0.8)
mix.addParticle(particle_2, 0.2)

structure = ba.RadialParacrystal(mix, 18*nm, 1000*nm)
structure.setProbabilityDistribution(profile)
```

The mixture can be used anywhere a particle is accepted. Its vertical position
is controlled by the layer method (`deposit2D` or `suspend2D`) and by any
translations already applied to the particles.

### Example

The radial paracrystal model is used to demonstrate the differences in
[size-distribution models](approx).
