# Conventions

## Code design and conventions

From a user's perspective the code provides 2 high-level functions to perform calculations of:

1. Fixed orientation far-field cross-sections (extinction, absorption and scattering), for multiple wavelengths and incidence directions
2. Orientation-averaged cross-sections (extinction, absorption and scattering) and associated circular dichroism spectra, using numerical cubature over the full solid angle

The high-level functions require at least 2 inputs:

• A Cluster object, describing the geometry of the particle cluster
• A Material object, describing the wavelength-dependent optical properties of the various media

### Geometry description

Cluster is a structure comprising 4 fields,

• positions, a vector of N particle positions stored as 3-vectors storing cartesian coordinates x,y,z

• orientations, a vector of N particle orientations stored as quaternions (4 components, $\cos\phi/2; \sin\phi/2 \mathbf{v}$ with $\mathbf{v}$ the rotation axis). The quaternions are automatically converted into rotation matrices with the Rotations.jl package.

• material, a string referencing the material for each particle; the corresponding dielectric functions are stored as a dictionary in the Material object

• type, a string indicating whether the polarisability corresponds to a point dipole, or to a particle. For the former, a local-field correction needs to be applied to convert the polarisability into an effective one responding to macroscopic fields.

### Material description

The Material structure contains two fields:

• wavelengths, array-like wavelengths to use in the calculations
• media, a dictionary containing:
• the different dielectric functions, such as "Au" => epsAu
• the refractive index of the embedding medium, stored under the name "medium" => (x -> 1.33)
• for point dipoles, a wavelength-dependent polarisability function "alpha" => alpha_dye