Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 18 additions & 82 deletions autogalaxy/analysis/plotter.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
from __future__ import annotations
import csv
import matplotlib.pyplot as plt
import numpy as np
import os
from typing import List, Union, TYPE_CHECKING

if TYPE_CHECKING:
from pathlib import Path

from autoconf import conf
from autoconf.fitsable import hdu_list_for_output_from

import autoarray as aa
import autoarray.plot as aplt
Expand Down Expand Up @@ -115,18 +111,10 @@ def should_plot(name):
)

if should_plot("fits_galaxy_images"):
image_list = [
galaxy.image_2d_from(grid=grid).native_for_fits for galaxy in galaxies
]

hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=["mask"] + [f"galaxy_{i}" for i in range(len(galaxies))],
header_dict=grid.mask.header_dict,
galaxies_plots.save_galaxy_images_fits(
galaxies=galaxies, grid=grid, output_path=self.image_path
)

hdu_list.writeto(self.image_path / "galaxy_images.fits", overwrite=True)

def inversion(self, inversion: aa.Inversion):
"""
Output visualization of an ``Inversion``.
Expand All @@ -146,48 +134,23 @@ def should_plot(name):
output = self.output_from()

if should_plot("subplot_inversion"):
from autogalaxy.plot.plot_utils import _save_subplot
from autoarray.inversion.plot.inversion_plots import subplot_of_mapper

mapper_list = inversion.cls_list_from(cls=aa.Mapper)

for i, mapper in enumerate(mapper_list):
suffix = f"_{i}"
reconstruction = inversion.reconstruction_dict[mapper]
grid = np.array(mapper.source_plane_mesh_grid)

fig, ax = plt.subplots(1, 1, figsize=(7, 7))
sc = ax.scatter(grid[:, 1], grid[:, 0], c=reconstruction, s=10)
plt.colorbar(sc, ax=ax)
ax.set_title("Reconstruction")
ax.set_aspect("equal")
_save_subplot(fig, output.path, f"subplot_inversion{suffix}", output.format_list[0] if output.format_list else "png")
fmt = output.format_list[0] if output.format_list else "png"

for i in range(len(mapper_list)):
subplot_of_mapper(
inversion=inversion,
mapper_index=i,
output_path=output.path,
output_filename=f"subplot_inversion_{i}",
output_format=fmt,
)

if should_plot("csv_reconstruction"):
mapper_list = inversion.cls_list_from(cls=aa.Mapper)

for i, mapper in enumerate(mapper_list):
y = mapper.source_plane_mesh_grid[:, 0]
x = mapper.source_plane_mesh_grid[:, 1]
reconstruction = inversion.reconstruction_dict[mapper]
noise_map = inversion.reconstruction_noise_map_dict[mapper]

with open(
self.image_path / f"source_plane_reconstruction_{i}.csv",
mode="w",
newline="",
) as file:
writer = csv.writer(file)
writer.writerow(["y", "x", "reconstruction", "noise_map"])

for i in range(len(x)):
writer.writerow(
[
float(y[i]),
float(x[i]),
float(reconstruction[i]),
float(noise_map[i]),
]
)
from autoarray.inversion.plot.inversion_plots import save_reconstruction_csv
save_reconstruction_csv(inversion=inversion, output_path=self.image_path)

def adapt_images(self, adapt_images: AdaptImages):
"""
Expand Down Expand Up @@ -215,33 +178,6 @@ def should_plot(name):
)

if should_plot("fits_adapt_images"):
if adapt_images.galaxy_name_image_dict is not None:
image_list = [
adapt_images.galaxy_name_image_dict[name].native_for_fits
for name in adapt_images.galaxy_name_image_dict.keys()
]

hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=["mask"] + list(adapt_images.galaxy_name_image_dict.keys()),
header_dict=adapt_images.mask.header_dict,
)

hdu_list.writeto(self.image_path / "adapt_images.fits", overwrite=True)

if adapt_images.galaxy_name_image_plane_mesh_grid_dict is not None:
image_plane_mesh_grid_list = [
adapt_images.galaxy_name_image_plane_mesh_grid_dict[name].native
for name in adapt_images.galaxy_name_image_plane_mesh_grid_dict.keys()
]

hdu_list = hdu_list_for_output_from(
values_list=[np.array([1])] + image_plane_mesh_grid_list,
ext_name_list=[""]
+ list(adapt_images.galaxy_name_image_plane_mesh_grid_dict.keys()),
)

hdu_list.writeto(
self.image_path / "adapt_image_plane_mesh_grids.fits",
overwrite=True,
)
adapt_plots.save_adapt_images_fits(
adapt_images=adapt_images, output_path=self.image_path
)
12 changes: 11 additions & 1 deletion autogalaxy/config/visualize/general.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,14 @@ inversion:
reconstruction_vmax_factor: 0.5
zoom:
plane_percent: 0.01
inversion_percent: 0.01
inversion_percent: 0.01
colormap: autoarray
ticks:
extent_factor_2d: 0.75
number_of_ticks_2d: 3
colorbar:
fraction: 0.047
pad: 0.01
labelrotation: 90
labelsize: 22
labelsize_subplot: 18
4 changes: 2 additions & 2 deletions autogalaxy/ellipse/model/plotter.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import autoarray as aa

from autoarray.dataset.plot.imaging_plots import subplot_imaging
from autoarray.dataset.plot.imaging_plots import subplot_imaging_dataset

from autogalaxy.ellipse.fit_ellipse import FitEllipse
from autogalaxy.ellipse.plot import fit_ellipse_plots
Expand All @@ -29,7 +29,7 @@ def should_plot(name):
return plot_setting(section=["dataset", "imaging"], name=name)

if should_plot("subplot_dataset"):
subplot_imaging(
subplot_imaging_dataset(
dataset,
output_path=self.image_path,
output_format=self.fmt,
Expand Down
51 changes: 51 additions & 0 deletions autogalaxy/galaxy/plot/adapt_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,54 @@ def subplot_adapt_images(

plt.tight_layout()
_save_subplot(fig, output_path, "subplot_adapt_images", output_format)


def save_adapt_images_fits(adapt_images, output_path) -> None:
"""Write FITS files for the adapt images and image-plane mesh grids.

Writes up to two FITS files into *output_path*:

* ``adapt_images.fits`` — one HDU per galaxy adapt image, plus a
``mask`` extension, written when
``adapt_images.galaxy_name_image_dict`` is not ``None``.
* ``adapt_image_plane_mesh_grids.fits`` — one HDU per galaxy
image-plane mesh grid, written when
``adapt_images.galaxy_name_image_plane_mesh_grid_dict`` is not
``None``.

Parameters
----------
adapt_images : AdaptImages
The adapt images container holding per-galaxy image and mesh-grid
dictionaries.
output_path : str or Path
Directory in which to write the FITS files.
"""
import numpy as np
from pathlib import Path
from autoconf.fitsable import hdu_list_for_output_from

output_path = Path(output_path)

if adapt_images.galaxy_name_image_dict is not None:
image_list = [
adapt_images.galaxy_name_image_dict[name].native_for_fits
for name in adapt_images.galaxy_name_image_dict
]
hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=["mask"] + list(adapt_images.galaxy_name_image_dict.keys()),
header_dict=adapt_images.mask.header_dict,
)
hdu_list.writeto(output_path / "adapt_images.fits", overwrite=True)

if adapt_images.galaxy_name_image_plane_mesh_grid_dict is not None:
mesh_grid_list = [
adapt_images.galaxy_name_image_plane_mesh_grid_dict[name].native
for name in adapt_images.galaxy_name_image_plane_mesh_grid_dict
]
hdu_list = hdu_list_for_output_from(
values_list=[np.array([1])] + mesh_grid_list,
ext_name_list=[""] + list(adapt_images.galaxy_name_image_plane_mesh_grid_dict.keys()),
)
hdu_list.writeto(output_path / "adapt_image_plane_mesh_grids.fits", overwrite=True)
35 changes: 35 additions & 0 deletions autogalaxy/galaxy/plot/galaxies_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from autogalaxy.galaxy.galaxies import Galaxies
from autogalaxy.plot.plot_utils import _to_lines, _to_positions, plot_array, plot_grid, _save_subplot, _critical_curves_from
from autoarray.plot.utils import hide_unused_axes
from autogalaxy import exc


Expand Down Expand Up @@ -154,6 +155,7 @@ def _defl_x():
ax=axes_flat[i],
)

hide_unused_axes(axes_flat)
plt.tight_layout()
_save_subplot(fig, output_path, auto_filename, output_format)

Expand Down Expand Up @@ -213,3 +215,36 @@ def subplot_galaxy_images(

plt.tight_layout()
_save_subplot(fig, output_path, "subplot_galaxy_images", output_format)


def save_galaxy_images_fits(
galaxies,
grid: aa.type.Grid1D2DLike,
output_path,
) -> None:
"""Write a FITS file containing the 2D image of every galaxy.

Produces ``galaxy_images.fits`` in *output_path*. The file contains one
HDU per galaxy, named ``galaxy_0``, ``galaxy_1``, …, plus a ``mask``
extension as the first extension.

Parameters
----------
galaxies : Galaxies
The galaxies whose images are evaluated. Must not contain
:class:`~autogalaxy.profiles.light.linear.LightProfileLinear` profiles.
grid : aa.type.Grid1D2DLike
The grid on which each galaxy image is evaluated.
output_path : str or Path
Directory in which to write ``galaxy_images.fits``.
"""
from pathlib import Path
from autoconf.fitsable import hdu_list_for_output_from

image_list = [galaxy.image_2d_from(grid=grid).native_for_fits for galaxy in galaxies]
hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=["mask"] + [f"galaxy_{i}" for i in range(len(galaxies))],
header_dict=grid.mask.header_dict,
)
hdu_list.writeto(Path(output_path) / "galaxy_images.fits", overwrite=True)
4 changes: 2 additions & 2 deletions autogalaxy/imaging/model/plotter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import autoarray as aa

from autoarray.dataset.plot.imaging_plots import subplot_imaging, subplot_imaging_dataset_list
from autoarray.dataset.plot.imaging_plots import subplot_imaging_dataset, subplot_imaging_dataset_list

from autogalaxy.imaging.fit_imaging import FitImaging
from autogalaxy.imaging.plot import fit_imaging_plots
Expand Down Expand Up @@ -91,7 +91,7 @@ def should_plot(name):
return plot_setting(section=["dataset", "imaging"], name=name)

if should_plot("subplot_dataset"):
subplot_imaging(
subplot_imaging_dataset(
dataset,
output_path=self.image_path,
output_format=self.fmt,
Expand Down
2 changes: 1 addition & 1 deletion autogalaxy/plot/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from autogalaxy.plot.plot_utils import plot_array, plot_grid

from autoarray.dataset.plot.imaging_plots import (
subplot_imaging,
subplot_imaging_dataset,
subplot_imaging_dataset_list,
)
from autoarray.dataset.plot.interferometer_plots import subplot_interferometer_dirty_images
Expand Down
7 changes: 4 additions & 3 deletions autogalaxy/plot/plot_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,10 @@ def _save_subplot(fig, output_path, output_filename, output_format="png",


def _resolve_colormap(colormap):
"""Resolve 'default' to the autoarray default colormap."""
if colormap == "default":
return "jet"
"""Resolve 'default' or None to the autoarray default colormap."""
if colormap in ("default", None):
from autoarray.plot.utils import _default_colormap
return _default_colormap()
return colormap


Expand Down
2 changes: 1 addition & 1 deletion docs/general/workspace.rst
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,5 @@ The **HowToGalaxy** lecture series are a collection of Jupyter notebooks describ
fitting project and giving illustrations of different statistical methods and techniques.

Checkout the
`tutorials section <file:///Users/Jammy/Code/PyAuto/PyAutoGalaxy/docs/_build/howtogalaxy/howtogalaxy.html>`_ for a
`tutorials section <file:///Users/Jammy/Code/PyAutoJAX/PyAutoGalaxy/docs/_build/howtogalaxy/howtogalaxy.html>`_ for a
full description of the lectures and online examples of every notebook.
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ and `PyNUFFT` [@pynufft].
We can use the grid and galaxies to perform many calculations, for example
plotting the image of the galaxies.
"""
galaxies_plotter = aplt.GalaxiesPlotter(galaxies=[galaxy], grid=grid)
galaxies_plotter = aplt.Galaxies(galaxies=[galaxy], grid=grid)
galaxies_plotter.figures_2d(image=True)


Expand Down
Loading
Loading