Automated Strong Gravitational Lens Modeling
Project description
PyAutoLens
When two or more galaxies are aligned perfectly down our line-of-sight, the background galaxy appears multiple times. This is called strong gravitational lensing, & PyAutoLens makes it simple to model strong gravitational lenses, like this one:
PyAutoLens is based on the following papers:
Adaptive Semi-linear Inversion of Strong Gravitational Lens Imaging
AutoLens: Automated Modeling of a Strong Lens's Light, Mass & Source
Python Example
With PyAutoLens, you can begin modeling a lens in just a couple of minutes. The example below demonstrates a simple analysis which fits the foreground lens galaxy's mass & the background source galaxy's light.
import autofit as af
from autolens.pipeline.phase import phase_imaging, phase_hyper
from autolens.data.array import mask as msk
from autolens.model.galaxy import galaxy_model as gm
from autolens.data.instrument import abstract_data
from autolens.data.instrument import ccd
from autolens.model.profiles import light_profiles as lp
from autolens.model.profiles import mass_profiles as mp
from autolens.lens.plotters import lens_fit_plotters
import os
# In this example, we'll fit a simple lens galaxy + source galaxy system.
instrument
path = '{}/../'.format(os.path.dirname(os.path.realpath(__file__)))
lens_name = 'example_lens'
ccd_data = ccd.load_ccd_data_from_fits(
image_path=path + instrument + lens_name + '/image.fits',
psf_path=path+instrument+lens_name+'/psf.fits',
noise_map_path=path+instrument+lens_name+'/noise_map.fits',
pixel_scale=0.1)
instrument
mask = msk.Mask.circular(
shape=ccd_data.shape, pixel_scale=ccd_data.pixel_scale, radius_arcsec=3.0)
# We model our lens galaxy using a mass profile (a singular isothermal ellipsoid) & our source galaxy
# a light profile (an elliptical Sersic). We load these profiles from the 'light_profiles (lp)' &
# 'mass_profiles (mp)' modules.
lens_mass_profile = mp.EllipticalIsothermal
source_light_profile = lp.EllipticalSersic
# To setup our model galaxies, we use the GalaxyModel class, which represents a galaxy whose parameters
# are variable & fitted for by PyAutoLens. The galaxies are also assigned redshifts.
lens_galaxy_model = gm.GalaxyModel(redshift=0.5, mass=lens_mass_profile)
source_galaxy_model = gm.GalaxyModel(redshsift=1.0, light=source_light_profile)
# To perform the analysis, we set up a phase using the 'phase' module (imported as 'ph').
# A phase takes our galaxy models & fits their parameters using a non-linear search
# (in this case, MultiNest).
phase = phase_imaging.PhaseImaging(
galaxies=dict(lens=lens_galaxy_model, source=source_galaxy_model),
phase_name='example/phase_example', optimizer_class=af.MultiNest)
instrument
result = phase.run(data=ccd_data)
lens_fit_plotters.plot_fit_subplot(fit=result.most_likely_fit)
Slack
We're building a PyAutoLens community on Slack, so you should contact us on our Slack channel before getting started. Here, I will give you the latest updates on the software & discuss how best to use PyAutoLens for your science case.
Unfortunately, Slack is invitation-only, so first send me an email requesting an invite.
Features
PyAutoLens's advanced modeling features include:
- Galaxies - Use light & mass profiles to make galaxies & perform lensing calculations.
- Pipelines - Write automated analysis pipelines to fit complex lens models to large samples of strong lenses.
- Extended Sources - Reconstruct complex source galaxy morphologies on a variety of pixel-grids.
- Adaption - Adapt the lensing analysis to the features of the observed strong lens imaging.
- Multi-Plane - Perform multi-plane ray-tracing & model multi-plane lens systems.
- Visualization - Custom visualization libraries for plotting physical lensing quantities & modeling results.
HowToLens
Included with PyAutoLens is the HowToLens lecture series, which provides an introduction to strong gravitational lens modeling with PyAutoLens. It can be found in the workspace & consists of 4 chapters:
- Introduction - An introduction to strong gravitational lensing & PyAutolens.
- Lens Modeling - How to model strong lenses, including a primer on Bayesian non-linear analysis.
- Pipelines - How to build pipelines & tailor them to your own science case.
- Inversions - How to perform pixelized reconstructions of the source-galaxy.
Workspace
PyAutoLens comes with a workspace, which can be found here & which includes:
- Config - Configuration files which customize the PyAutoLens analysis.
- Data - Your data folder, including example data-sets distributed with PyAutoLens.
- HowToLens - The HowToLens lecture series.
- Output - Where the PyAutoLens analysis & visualization are output.
- Pipelines - Example pipelines for modeling strong lenses or to use a template for your own pipeline.
- Plotting - Scripts enabling customized figures & images.
- Runners - Scripts for running a PyAutoLens pipeline.
- Tools - Tools for simulating strong lens data, creating masks & using many other PyAutoLens features.
If you install PyAutoLens with conda or pip, you will need to download the workspace from the autolens_workspace repository, which is described in the installation instructions below.
Depedencies
PyAutoLens requires PyMultiNest & Numba.
Installation with conda
We recommend installation using a conda environment as this circumvents a number of compatibility issues when installing PyMultiNest.
First, install conda.
Create a conda environment:
conda create -n autolens python=3.7 anaconda
Activate the conda environment:
conda activate autolens
Install multinest:
conda install -c conda-forge multinest
Install autolens:
pip install autolens
Clone autolens workspace & set WORKSPACE enviroment variable:
cd /path/where/you/want/autolens_workspace
git clone https://github.com/Jammy2211/autolens_workspace
export WORKSPACE=/path/to/autolens_workspace/
Set PYTHONPATH to include the autolens_workspace directory:
export PYTHONPATH=/path/to/autolens_workspace/
You can test everything is working by running the example pipeline runner in the autolens_workspace
python3 /path/to/autolens_workspace/runners/simple/runner__lens_sie__source_inversion.py
Installation with pip
Installation is also available via pip, however there are reported issues with installing PyMultiNest that can make installation difficult, see the file INSTALL.notes
$ pip install autolens
Clone autolens workspace & set WORKSPACE enviroment variable:
cd /path/where/you/want/autolens_workspace
git clone https://github.com/Jammy2211/autolens_workspace
export WORKSPACE=/path/to/autolens_workspace/
Set PYTHONPATH to include the autolens_workspace directory:
export PYTHONPATH=/path/to/autolens_workspace/
You can test everything is working by running the example pipeline runner in the autolens_workspace
python3 /path/to/autolens_workspace/runners/simple/runner_lens_mass_&_source.py
Support & Discussion
If you're having difficulty with installation, lens modeling, or just want a chat, feel free to message us on our Slack channel.
Contributing
If you have any suggestions or would like to contribute please get in touch.
Publications
The following papers use PyAutoLens:
The molecular-gas properties in the gravitationally lensed merger HATLAS J142935.3-002836
Novel Substructure & Superfluid Dark Matter
Credits
Developers
James Nightingale - Lead developer & PyAutoLens guru.
Richard Hayes - Lead developer & PyAutoFit guru.
Ashley Kelly - Developer of pyquad for fast deflections computations.
Amy Etherington - Magnification, Critical Curves and Caustic Calculations.
Xiaoyue Cao - Analytic Ellipitcal Power-Law Deflection Angle Calculations.
Nan Li - Docker integration & support.
Code Donors
Andrew Robertson - Critical curve & caustic calculations.
Andrea Enia - Voronoi source-plane plotting tools.
Aristeidis Amvrosiadis - ALMA imaging data loading.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for autolens-0.27.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2a85a4c60b3bbf89e7a646b2926cee734f9c3071763a3813e7612fe6a41e76bb |
|
MD5 | caabc6b1fb4ebdd1963f856e0900ce6e |
|
BLAKE2b-256 | 2907cb129f4911287754e6b10ffd7aa17089cfcb4c4c4a98e2b350d99a507ac8 |