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
4 changes: 2 additions & 2 deletions autogalaxy/analysis/plotter.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def should_plot(name):
)

if should_plot("fits_galaxy_images"):
galaxies_plots.save_galaxy_images_fits(
galaxies_plots.fits_galaxy_images(
galaxies=galaxies, grid=grid, output_path=self.image_path
)

Expand Down Expand Up @@ -181,6 +181,6 @@ def should_plot(name):
)

if should_plot("fits_adapt_images"):
adapt_plots.save_adapt_images_fits(
adapt_plots.fits_adapt_images(
adapt_images=adapt_images, output_path=self.image_path
)
4 changes: 2 additions & 2 deletions autogalaxy/ellipse/plot/fit_ellipse_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ def subplot_fit_ellipse(
_plot_ellipse_residuals(fit_list=fit_list, for_subplot=True, ax=axes[1])

plt.tight_layout()
_save_subplot(fig, output_path, "subplot_fit_ellipse", output_format)
_save_subplot(fig, output_path, "fit_ellipse", output_format)


def subplot_ellipse_errors(
Expand Down Expand Up @@ -243,4 +243,4 @@ def subplot_ellipse_errors(
)

plt.tight_layout()
_save_subplot(fig, output_path, "subplot_ellipse_errors", output_format)
_save_subplot(fig, output_path, "ellipse_errors", output_format)
4 changes: 2 additions & 2 deletions autogalaxy/galaxy/plot/adapt_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ def subplot_adapt_images(
)

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


def save_adapt_images_fits(adapt_images, output_path) -> None:
def fits_adapt_images(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*:
Expand Down
4 changes: 2 additions & 2 deletions autogalaxy/galaxy/plot/galaxies_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,10 +214,10 @@ def subplot_galaxy_images(
)

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


def save_galaxy_images_fits(
def fits_galaxy_images(
galaxies,
grid: aa.type.Grid1D2DLike,
output_path,
Expand Down
2 changes: 1 addition & 1 deletion autogalaxy/galaxy/plot/galaxy_plots.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def subplot_of_light_profiles(
)

plt.tight_layout()
_save_subplot(fig, output_path, "subplot_image", output_format)
_save_subplot(fig, output_path, "image", output_format)


def subplot_of_mass_profiles(
Expand Down
76 changes: 14 additions & 62 deletions autogalaxy/imaging/model/plotter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from pathlib import Path
from typing import List

from autoconf.fitsable import hdu_list_for_output_from
Expand All @@ -9,69 +8,15 @@

from autogalaxy.imaging.fit_imaging import FitImaging
from autogalaxy.imaging.plot import fit_imaging_plots
from autogalaxy.imaging.plot.fit_imaging_plots import subplot_fit_imaging_list
from autogalaxy.imaging.plot.fit_imaging_plots import (
subplot_fit_imaging_list,
fits_fit,
fits_galaxy_images,
fits_model_galaxy_images,
)
from autogalaxy.analysis.plotter import Plotter, plot_setting


def fits_to_fits(should_plot, image_path: Path, fit: FitImaging):
"""
Write fit residuals and galaxy images from a ``FitImaging`` to FITS files.

Controlled by the ``fits_fit``, ``fits_galaxy_images``, and
``fits_model_galaxy_images`` toggles in ``config/visualize/plots.yaml``.

Parameters
----------
should_plot
A callable that accepts a plot-name string and returns ``True`` when
that plot is enabled in the config.
image_path
Directory where the FITS files are written.
fit
The imaging fit whose arrays are saved to FITS.
"""
if should_plot("fits_fit"):
image_list = [
fit.model_data.native_for_fits,
fit.residual_map.native_for_fits,
fit.normalized_residual_map.native_for_fits,
fit.chi_squared_map.native_for_fits,
]

hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=[
"mask",
"model_data",
"residual_map",
"normalized_residual_map",
"chi_squared_map",
],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(image_path / "fit.fits", overwrite=True)

if should_plot("fits_galaxy_images"):
number_plots = len(fit.galaxy_image_dict.keys()) + 1
image_list = [image.native_for_fits for image in fit.galaxy_image_dict.values()]
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(number_plots)],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(image_path / "galaxy_images.fits", overwrite=True)

if should_plot("fits_model_galaxy_images"):
number_plots = len(fit.galaxy_model_image_dict.keys()) + 1
image_list = [image.native_for_fits for image in fit.galaxy_model_image_dict.values()]
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(number_plots)],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(image_path / "model_galaxy_images.fits", overwrite=True)


class PlotterImaging(Plotter):
def imaging(self, dataset: aa.Imaging):
"""
Expand Down Expand Up @@ -153,7 +98,14 @@ def should_plot(name):
output_format=self.fmt,
)

fits_to_fits(should_plot=should_plot, image_path=self.image_path, fit=fit)
if should_plot("fits_fit"):
fits_fit(fit=fit, output_path=self.image_path)

if should_plot("fits_galaxy_images"):
fits_galaxy_images(fit=fit, output_path=self.image_path)

if should_plot("fits_model_galaxy_images"):
fits_model_galaxy_images(fit=fit, output_path=self.image_path)

def imaging_combined(self, dataset_list: List[aa.Imaging]):
"""
Expand Down
77 changes: 77 additions & 0 deletions autogalaxy/imaging/plot/fit_imaging_plots.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import matplotlib.pyplot as plt
from pathlib import Path

import autoarray as aa
from autoconf.fitsable import hdu_list_for_output_from
from autoarray.plot.utils import conf_subplot_figsize

from autogalaxy.imaging.fit_imaging import FitImaging
Expand Down Expand Up @@ -165,3 +167,78 @@ def subplot_fit_imaging_list(
plot_array(array=fit.chi_squared_map, title="Chi-Squared Map", cb_unit=r"$\chi^2$", ax=axes[i][4])
plt.tight_layout()
_save_subplot(fig, output_path, output_filename, output_format)


def fits_fit(fit: FitImaging, output_path) -> None:
"""Write fit residual maps from a ``FitImaging`` to ``fit.fits``.

Extensions: ``mask``, ``model_data``, ``residual_map``,
``normalized_residual_map``, ``chi_squared_map``.

Parameters
----------
fit
The imaging fit whose residual arrays are saved.
output_path
Directory in which to write ``fit.fits``.
"""
image_list = [
fit.model_data.native_for_fits,
fit.residual_map.native_for_fits,
fit.normalized_residual_map.native_for_fits,
fit.chi_squared_map.native_for_fits,
]
hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=[
"mask",
"model_data",
"residual_map",
"normalized_residual_map",
"chi_squared_map",
],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(Path(output_path) / "fit.fits", overwrite=True)


def fits_galaxy_images(fit: FitImaging, output_path) -> None:
"""Write per-galaxy images from a ``FitImaging`` to ``galaxy_images.fits``.

Extensions: ``mask``, ``galaxy_0``, ``galaxy_1``, …

Parameters
----------
fit
The imaging fit whose per-galaxy images are saved.
output_path
Directory in which to write ``galaxy_images.fits``.
"""
image_list = [image.native_for_fits for image in fit.galaxy_image_dict.values()]
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(image_list))],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(Path(output_path) / "galaxy_images.fits", overwrite=True)


def fits_model_galaxy_images(fit: FitImaging, output_path) -> None:
"""Write per-galaxy model images from a ``FitImaging`` to ``model_galaxy_images.fits``.

Extensions: ``mask``, ``galaxy_0``, ``galaxy_1``, …

Parameters
----------
fit
The imaging fit whose per-galaxy model images are saved.
output_path
Directory in which to write ``model_galaxy_images.fits``.
"""
image_list = [image.native_for_fits for image in fit.galaxy_model_image_dict.values()]
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(image_list))],
header_dict=fit.mask.header_dict,
)
hdu_list.writeto(Path(output_path) / "model_galaxy_images.fits", overwrite=True)
82 changes: 11 additions & 71 deletions autogalaxy/interferometer/model/plotter.py
Original file line number Diff line number Diff line change
@@ -1,78 +1,18 @@
from pathlib import Path

from autoconf.fitsable import hdu_list_for_output_from

import autoarray as aa

from autoarray.dataset.plot.interferometer_plots import subplot_interferometer_dirty_images

from autoconf.fitsable import hdu_list_for_output_from

from autogalaxy.interferometer.fit_interferometer import FitInterferometer
from autogalaxy.interferometer.plot import fit_interferometer_plots
from autogalaxy.interferometer.plot.fit_interferometer_plots import (
fits_galaxy_images,
fits_dirty_images,
)
from autogalaxy.analysis.plotter import Plotter, plot_setting


def fits_to_fits(
should_plot: bool,
image_path: Path,
fit: FitInterferometer,
):
"""
Write galaxy images and dirty-image residuals from a ``FitInterferometer`` to FITS files.

Controlled by the ``fits_galaxy_images`` and ``fits_dirty_images`` toggles in
``config/visualize/plots.yaml``.

Parameters
----------
should_plot
A callable that accepts a plot-name string and returns ``True`` when
that plot is enabled in the config.
image_path
Directory where the FITS files are written.
fit
The interferometer fit whose arrays are saved to FITS.
"""
if should_plot("fits_galaxy_images"):

image_list = [image.native_for_fits for image in fit.galaxy_image_dict.values()]

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(fit.galaxy_image_dict.values()))],
header_dict=fit.dataset.real_space_mask.header_dict,
)

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

if should_plot("fits_dirty_images"):

image_list = [
fit.dirty_image.native_for_fits,
fit.dirty_noise_map.native_for_fits,
fit.dirty_model_image.native_for_fits,
fit.dirty_residual_map.native_for_fits,
fit.dirty_normalized_residual_map.native_for_fits,
fit.dirty_chi_squared_map.native_for_fits,
]

hdu_list = hdu_list_for_output_from(
values_list=[image_list[0].mask.astype("float")] + image_list,
ext_name_list=["mask"]
+ [
"dirty_image",
"dirty_noise_map",
"dirty_model_image",
"dirty_residual_map",
"dirty_normalized_residual_map",
"dirty_chi_squared_map",
],
header_dict=fit.dataset.real_space_mask.header_dict,
)

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


class PlotterInterferometer(Plotter):
def interferometer(self, dataset: aa.Interferometer):
"""
Expand Down Expand Up @@ -162,8 +102,8 @@ def should_plot(name):
output_format=self.fmt,
)

fits_to_fits(
should_plot=should_plot,
image_path=self.image_path,
fit=fit,
)
if should_plot("fits_galaxy_images"):
fits_galaxy_images(fit=fit, output_path=self.image_path)

if should_plot("fits_dirty_images"):
fits_dirty_images(fit=fit, output_path=self.image_path)
Loading
Loading