On this page... (hide)

  1.   1.  Generic bias concepts
  2.   2.  Code organization

A lot of bias functions can be designed that can be used on observations. Similarly, a lot of voxel-based likelihood can also be built. Given that we do not yet know the best model (and that other observables may have different constraint), we have developped a framework that allows for an optimised and efficient way of extensing biases. This framework relies heavily on the Fused Array framework  Δ. Hereafter, we give a description of the concepts, the organization and finally the implementation of a new bias and likelihood pairs in BORG3.

1.  Generic bias concepts

The generic bias framework is used in conjunction with the generic likelihood class template. This one is defined in libLSS/samplers/generic/generic_hmc_likelihood.hpp as:

namespace LibLSS {
    template<class AbstractBiasType, class VoxelLikelihoodType>
    class GenericHMCLikelihood: public HMCDensitySampler
    {
    public:
        typedef AbstractBiasType bias_t;
        typedef VoxelLikelihoodType likelihood_t;
    /* More code */
   };
}

The generic HMC likelihood implements the following abstract model:

  • start from a Gaussian random field,
  • evolve these fluctuations with a forward model,
  • apply redshift space distortion (only peculiar velocities at the moment),
  • apply a bias operator defined through AbstractBiasType,
  • apply a selection operator, derived from the bias operator,
  • compute the likelihood of the obtained density mesh to observed galaxy data (through VoxelLikelihoodType).

The abstract bias allows the use of lazy expressions if needed to further optimize the code. The entirety of the chain is also differentiable to allow for the computation of the force in the HMC.

2.  Code organization

The source codes are stored in libLSS/physics/bias (for the bias model) and libLSS/physics for the statistical model (to be update later). The currently available module for bias are the following:

  • libLSS/physics/bias/noop.hpp: a noop bias, with name LibLSS::Noop. It does not do anything and just provide an adequate selection operator.
  • libLSS/physics/bias/power_law.hpp: This implements a pure power law bias of the form {$ N_g = \bar{N} (1+\delta)^\alpha $}.
  • libLSS/physics/bias/double_power_law.hpp: A double power law as given in Mo, van den Bosch & White. The form is as follow
  • libLSS/physics/bias/broken_power_law.hpp: {$ N_g = \bar{N} ((1+\delta)/L0)^\alpha / (1 + ((1+\delta)/L0)^{(\beta-\gamma)} $}
  • libLSS/physics/bias/2nd_order_bias.hpp: This is a second order bias model as described in Desjacques & Schmidt.
  • libLSS/physics/bias/many_power.hpp: A bias model guaranteed for positivity and some flexibility. It is based on the positivity properties of the quadratic form.