Skip to main content

Open Source Galaxy Model-Fitting

Project description

PyAutoGalaxy: Open-Source Multi Wavelength Galaxy Structure & Morphology

.. |nbsp| unicode:: 0xA0 :trim:

.. |binder| image:: https://mybinder.org/badge_logo.svg :target: https://mybinder.org/v2/gh/Jammy2211/autogalaxy_workspace/HEAD

.. |code-style| image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/psf/black

|binder| |code-style|

Installation Guide <https://pyautogalaxy.readthedocs.io/en/latest/installation/overview.html>_ | readthedocs <https://pyautogalaxy.readthedocs.io/en/latest/index.html>_ | Introduction on Binder <https://mybinder.org/v2/gh/Jammy2211/autogalaxy_workspace/release?filepath=introduction.ipynb>_ | HowToGalaxy <https://pyautogalaxy.readthedocs.io/en/latest/howtogalaxy/howtogalaxy.html>_

The study of a galaxy's structure and morphology is at the heart of modern day Astrophysical research.

PyAutoGalaxy makes it simple to model galaxies, for example this Hubble Space Telescope imaging of a spiral galaxy:

|pic1|

.. |pic1| image:: https://github.com/Jammy2211/PyAutoGalaxy/blob/master/paper/hstcombined.png

PyAutoGalaxy also fits interferometer data from observatories such as ALMA:

|pic2|

.. |pic2| image:: https://github.com/Jammy2211/PyAutoGalaxy/blob/master/paper/almacombined.png

Getting Started

The following links are useful for new starters:

  • The introduction Jupyter Notebook on Binder <https://mybinder.org/v2/gh/Jammy2211/autogalaxy_workspace/release?filepath=introduction.ipynb>_, where you can try PyAutoGalaxy in a web browser (without installation).

  • The PyAutoGalaxy readthedocs <https://pyautogalaxy.readthedocs.io/en/latest>, which includes an installation guide <https://pyautogalaxy.readthedocs.io/en/latest/installation/overview.html> and an overview of PyAutoGalaxy's core features.

  • The autogalaxy_workspace GitHub repository <https://github.com/Jammy2211/autogalaxy_workspace>, which includes example scripts and the HowToGalaxy Jupyter notebook tutorials <https://github.com/Jammy2211/autogalaxy_workspace/tree/master/notebooks/howtogalaxy> which give new users a step-by-step introduction to PyAutoGalaxy.

API Overview

Galaxy morphology calculations are performed in PyAutoGalaaxy by building a Plane object from LightProfile and Galaxy objects. Below, we create a simple galaxy system where a redshift 0.5 Galaxy with an EllSersic LightProfile representing a bulge and an EllExponential LightProfile representing a disk.

.. code-block:: python

import autogalaxy as ag
import autogalaxy.plot as aplt

"""
To describe the galaxy emission two-dimensional grids of (y,x) Cartesian
coordinates are used.
"""
grid = ag.Grid2D.uniform(
    shape_native=(50, 50),
    pixel_scales=0.05,  # <- Conversion from pixel units to arc-seconds.
)

"""
The galaxy has an elliptical sersic light profile representing its bulge.
"""
bulge=ag.lp.EllSersic(
    centre=(0.0, 0.0),
    elliptical_comps=ag.convert.elliptical_comps_from(axis_ratio=0.9, angle=45.0),
    intensity=1.0,
    effective_radius=0.6,
    sersic_index=3.0,
)

"""
The galaxy also has an elliptical exponential disk
"""
disk = ag.lp.EllExponential(
    centre=(0.0, 0.0),
    elliptical_comps=ag.convert.elliptical_comps_from(axis_ratio=0.7, angle=30.0),
    intensity=0.5,
    effective_radius=1.6,
)

"""
We combine the above light profiles to compose a galaxy at redshift 1.0.
"""
galaxy = ag.Galaxy(redshift=1.0, bulge=bulge, disk=disk)

"""
We create a Plane, which in this example has just one galaxy but can
be extended for datasets with many galaxies.
"""
plane = ag.Plane(
    galaxies=[galaxy],
)

"""
We can use the Grid2D and Plane to perform many calculations, for example
plotting the image of the galaxyed source.
"""
plane_plotter = aplt.PlanePlotter(plane=plane, grid=grid)
plane_plotter.figures_2d(image=True)

With PyAutoGalaxy, you can begin modeling a galaxy in just a couple of minutes. The example below demonstrates a simple analysis which fits a galaxy's light.

.. code-block:: python

import autofit as af
import autogalaxy as ag

import os

"""
Load Imaging data of the strong galaxy from the dataset folder of the workspace.
"""
imaging = ag.Imaging.from_fits(
    image_path="/path/to/dataset/image.fits",
    noise_map_path="/path/to/dataset/noise_map.fits",
    psf_path="/path/to/dataset/psf.fits",
    pixel_scales=0.1,
)

"""
Create a mask for the data, which we setup as a 3.0" circle.
"""
mask = ag.Mask2D.circular(
    shape_native=imaging.shape_native, pixel_scales=imaging.pixel_scales, radius=3.0
)

"""
We model the galaxy using an EllSersic LightProfile.
"""
light_profile = ag.lp.EllSersic

"""
We next setup this profile as model components whose parameters are free & fitted for
by setting up a Galaxy as a Model.
"""
galaxy_model = af.Model(ag.Galaxy, redshift=1.0, light=light_profile)
model = af.Collection(galaxy=galaxy_model)

"""
We define the non-linear search used to fit the model to the data (in this case, Dynesty).
"""
search = af.DynestyStatic(name="search[example]", nlive=50)

"""
We next set up the `Analysis`, which contains the `log likelihood function` that the
non-linear search calls to fit the galaxy model to the data.
"""
analysis = ag.AnalysisImaging(dataset=masked_imaging)

"""
To perform the model-fit we pass the model and analysis to the search's fit method. This will
output results (e.g., dynesty samples, model parameters, visualization) to hard-disk.
"""
result = search.fit(model=model, analysis=analysis)

"""
The results contain information on the fit, for example the maximum likelihood
model from the Dynesty parameter space search.
"""
print(result.samples.max_log_likelihood_instance)

Support

Support for installation issues, help with galaxy modeling and using PyAutoGalaxy is available by raising an issue on the GitHub issues page <https://github.com/Jammy2211/PyAutoGalaxy/issues>_.

We also offer support on the PyAutoGalaxy Slack channel <https://pyautogalaxy.slack.com/>, where we also provide the latest updates on PyAutoGalaxy. Slack is invitation-only, so if you'd like to join send an email <https://github.com/Jammy2211> requesting an invite.

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

autogalaxy-2022.7.11.1.tar.gz (5.3 MB view details)

Uploaded Source

Built Distribution

autogalaxy-2022.7.11.1-py3-none-any.whl (207.5 kB view details)

Uploaded Python 3

File details

Details for the file autogalaxy-2022.7.11.1.tar.gz.

File metadata

  • Download URL: autogalaxy-2022.7.11.1.tar.gz
  • Upload date:
  • Size: 5.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

File hashes

Hashes for autogalaxy-2022.7.11.1.tar.gz
Algorithm Hash digest
SHA256 233e4a882b8b52d6e82201d796792811871c82c7e007dbe3dbefea237bffbbf5
MD5 4392d9e06d54c14df3a597715f57a852
BLAKE2b-256 1925d6821d75410962371c8bacccaa20d2c43790f79fec3b8855e61c15d01006

See more details on using hashes here.

File details

Details for the file autogalaxy-2022.7.11.1-py3-none-any.whl.

File metadata

  • Download URL: autogalaxy-2022.7.11.1-py3-none-any.whl
  • Upload date:
  • Size: 207.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.5

File hashes

Hashes for autogalaxy-2022.7.11.1-py3-none-any.whl
Algorithm Hash digest
SHA256 19017e24b174bfb0f0ad879689a7b2ce6acbfa303370bdc3d6b7b6081e42fdb2
MD5 4a7a29f24e4428748ad309b3c1f454f8
BLAKE2b-256 36dd9392d508784efe1ff739b0c74615a8f91075681e8d0e3ea37d4fc06f65e4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page