# Presentation

The ARES3 framework is divided into a main library (libLSS) and a core program (ares3).

The LibLSS library is itself divided in several big branches:

- data: holds the framework data model, it holds the description of galaxy surveys into its individual components
- mcmc: Holds the abstract description of elements that can be serialized into a MCMC file or the restart file. There is no specific implementation here, only definition of what is an array, a random number generator, etc.
- physics: it contains modules for handling more specific physics computations likes cosmology or dynamics.
- samplers: generic branch that holds the different samplers of libLSS
- tools: a mixed bag of tools that have different use in libLSS

Two presentations linked to building and presenting the overall structure of ARES3 was given in an internal workshop. I am publishing the slides here in PDF form:

# Code units

The units of the code are whenever possible in "physical" units (i.e. velocities often in km/s, density contrasts, ...). The rational being that theory papers are often expressed, or easily expressable, in those units while it kind be hard to follow all the required steps to make the units work in the global numerical schemes of ARES. So the equations are more easily readable and matchable to equations. As an example, the Fourier transform of density contrast must have the unit of a volume. The density fluctuation power spectrum is also a volume.

That can also however introduce some unexpected complexity.

# Architecture

*data* branch

- spectro_gals.hpp: Abstract definition of a galaxy survey (spectroscopic, but also photo-z possible).
- window3d.hpp: Algorithm to compute the selection in 3d volume from 2d+1d information.
- galaxies.hpp: Define structure that describe a galaxy in a survey.
- projection.hpp: Nearest grid point projection of galaxies from a survey to a 3d grid.
- linear_selection.hpp: Implements a radial selection function defined piecewise, with linear interpolation
- schechter_completeness.hpp: A

*mcmc* branch

*physics* branch

This branch implements the most physics aspect of the algorithm. Notably the density estimation from the particle distribution, the background expansion for a given cosmology, the link to power spectrum of density fluctuations, etc.

*samplers* branch

## the *tools* branch

In this branch, there is mostly technical and algorithmic aspects of the code.
Notably the following subsystems are implemented there: