A differentiable cosmological code in Julia.
- Modularity: each main function within 
LimberJack.jlhas its own module. New functions can be added by including extra modules.LimberJack.jlhas the following modules: 
| Module | function | 
|---|---|
boltzmann.jl | 
Performs the computation of primordial power spectrum | 
core.jl | 
Defines the structures where the theoretical predictions are stored and computes the background quantities | 
data_utils.jl | 
Manages sacc files for large data vectors | 
growth.jl | 
Computes the growth factor | 
halofit.jl | 
Computes the non-linear matter power spectrum as given by the Halofit fitting formula | 
spectra.jl | 
Computes the power spectra of any two tracers | 
theory.jl | 
Computes large data vectors that combine many spectra | 
tracers.jl | 
Computes the kernels associated with each type of kernel | 
- Object-oriented: 
LimberJack.jlmimicsCCL.pyclass structure by usingJulia'sstructures. - Transparency: 
LimberJack.jlis fully written inJuliawithout needing to inerface to any other programming language (C,Python...) to compute thoretical predictions. This allows the user full access to the code from input to output. 
- Gradients: one order of magnitude faster gradients than finite differences.
 - Precision: sub-percentage error with respect to 
CCL. - Speed: 
C-like performance. 
In order to run LimberJack.jl you will need Julia-1.7.0 or newer installed in your system.
Older versions of Julia might be compatible but haven't been tested.
You can find instructions on how to install Julia here: https://julialang.org/downloads/.
Once you have installed Julia you can install LimberJack.jl following these steps:
    using Pkg
    Pkg.add("LimberJack")    using Pkg
    Pkg.add("CondaPkg")
    CondaPkg.add("sacc")    # Import
    using LimberJack
    
    # create LimberJack.jl Cosmology instance
    cosmology = Cosmology(Ωm=0.30, Ωb=0.05, h=0.70, ns=0.96, s8=0.81;
                          tk_mode="EisHu",
                          Pk_mode="Halofit")
    
    z = Vector(range(0., stop=2., length=256))
    nz = @. exp(-0.5*((z-0.5)/0.05)^2)
    tracer = NumberCountsTracer(cosmology, zs, nz; b=1.0)
    ls = [10.0, 30.0, 100.0, 300.0]
    cls = angularCℓs(cosmology, tracer, tracer, ls)- 
Parallelization: the current threading parallelization of 
LimberJack.jlis far away from the optimal one over number of threads scaling. Future works could study alternative parallalization schemes or possible inneficiencies in the code. - 
GPU's: 
LimberJack.jlcurrently cannot run on GPU's which are known to significantly speed-up cosmological inference. Future works could study implementingJuliaGPU libraries such asCUDA.jl. - 
Backwards-AD: currently 
LimberJack.jl's preferred AD mode is forward-AD. However, the key computation of cosmological inference, obtaining the$\chi^2$ , is a map from N parameters to a scalar. For a large number of parameters, backwards-AD is in theory the preferred AD mode and should significantly speed up the computation of the gradient. Future works could look into makingLimberJack.jlcompatible with the latestJuliaAD libraries such asZygote.jlto implement efficient backwards-AD. 
![]()  | 
![]()  | 
![]()  | 
![]()  | 
![]()  | 
![]()  | 
![]()  | 
| Jaime Ruiz-Zapatero | Andrina Nicola | Carlos Garcia-garcia | David Alonso | Arrykrishna Mootoovaloo | Jamie Sullivan | Marco Bonici | 
| Lead | Halofit | Validation | Tracers | EmuPk | Bolt.jl | Benchmarks | 
@ARTICLE{2023arXiv231008306R,
       author = {{Ruiz-Zapatero}, J. and {Alonso}, D. and {Garc{\'\i}a-Garc{\'\i}a}, C. and {Nicola}, A. and {Mootoovaloo}, A. and {Sullivan}, J.~M. and {Bonici}, M. and {Ferreira}, P.~G.},
        title = "{LimberJack.jl: auto-differentiable methods for angular power spectra analyses}",
      journal = {arXiv e-prints},
     keywords = {Astrophysics - Cosmology and Nongalactic Astrophysics, Astrophysics - Instrumentation and Methods for Astrophysics},
         year = 2023,
        month = oct,
          eid = {arXiv:2310.08306},
        pages = {arXiv:2310.08306},
          doi = {10.48550/arXiv.2310.08306},
archivePrefix = {arXiv},
       eprint = {2310.08306},
 primaryClass = {astro-ph.CO},
       adsurl = {https://ui.adsabs.harvard.edu/abs/2023arXiv231008306R},
      adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}









