From d05ce966a888e2ea2860e387ff041895b8ae160b Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:30:50 -0400 Subject: [PATCH 01/34] Added a README and an empty overview file --- docs/overview.md | 0 docs/readme.md | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 docs/overview.md create mode 100644 docs/readme.md diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/readme.md b/docs/readme.md new file mode 100644 index 0000000..54802fa --- /dev/null +++ b/docs/readme.md @@ -0,0 +1,3 @@ +# Software release for *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc* + +This is a respository containing the underlying analytical software used to create the results in the journal article *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc*, led by [M. Riley Owens](https://mrileyowens.github.io) and submitted to *The Astrophysical Journal*. \ No newline at end of file From d96f619bff2f870dcd891cc7e1e24baa2a398cdc Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:33:52 -0400 Subject: [PATCH 02/34] Added a contact line for questions or issues --- docs/readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/readme.md b/docs/readme.md index 54802fa..5380776 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,3 +1,5 @@ # Software release for *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc* -This is a respository containing the underlying analytical software used to create the results in the journal article *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc*, led by [M. Riley Owens](https://mrileyowens.github.io) and submitted to *The Astrophysical Journal*. \ No newline at end of file +This is a respository containing the underlying analytical software used to create the results in the journal article *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc*, led by [M. Riley Owens](https://mrileyowens.github.io) and submitted to *The Astrophysical Journal*. + +For questions or issues, please contact [M. Riley Owens](https://mrileyowens.github.io) at m.riley.owens@gmail.com. \ No newline at end of file From 787b6118f5c0c3cad805e233eff9f48d8d9eb98f Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:47:57 -0400 Subject: [PATCH 03/34] Adjusted vocabulary in readme.md and added reference to overview.md --- docs/readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/readme.md b/docs/readme.md index 5380776..5743ecc 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -1,5 +1,7 @@ # Software release for *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc* -This is a respository containing the underlying analytical software used to create the results in the journal article *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc*, led by [M. Riley Owens](https://mrileyowens.github.io) and submitted to *The Astrophysical Journal*. +This is a respository containing the underlying software used to create the results in the journal article *Connecting Lyman-α and ionizing photon escape in the Sunburst Arc*, led by [M. Riley Owens](https://mrileyowens.github.io) and submitted to *The Astrophysical Journal*. + +For details about the files and structure of this repository, consult `docs/overview.md`. For questions or issues, please contact [M. Riley Owens](https://mrileyowens.github.io) at m.riley.owens@gmail.com. \ No newline at end of file From 7bde237c439e25488fde9fe665ddb96e6f23ac39 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:54:22 -0400 Subject: [PATCH 04/34] Added first text to overview.md, covering the respository structure --- docs/overview.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/overview.md b/docs/overview.md index e69de29..2b66dd2 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -0,0 +1,7 @@ +This file details the structure of this repository and the nature of its files. + +## Repository structure + +This repository contains three main folders: `docs`, `figs`, and `results`. The `docs` folder contains the project documentation, such as this file and the project's `readme.md`, the `figs` folder contains the figures used in the article, and the `results` folder contains various measurements and formatted tables used in the article. + +Outside these folders are the `.ipynb` Jupyter notebooks used to create the figures, measurements, and tables contained in `figs` and `results`. \ No newline at end of file From d8d02b3c24db5efc84a0f59ecd86aaf1d8059a87 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:56:59 -0400 Subject: [PATCH 05/34] Added section about esc.ipynb --- docs/overview.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 2b66dd2..7beab03 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -4,4 +4,10 @@ This file details the structure of this repository and the nature of its files. This repository contains three main folders: `docs`, `figs`, and `results`. The `docs` folder contains the project documentation, such as this file and the project's `readme.md`, the `figs` folder contains the figures used in the article, and the `results` folder contains various measurements and formatted tables used in the article. -Outside these folders are the `.ipynb` Jupyter notebooks used to create the figures, measurements, and tables contained in `figs` and `results`. \ No newline at end of file +Outside these folders are the `.ipynb` Jupyter notebooks used to create the figures, measurements, and tables contained in `figs` and `results`. + +## Repository files + +### `esc.ipynb` + +This notebook is responsible for calculating the LyC escape fractions. \ No newline at end of file From c83dc2cfbbc3f15ee53881b06758d0807d7f78de Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 14:58:35 -0400 Subject: [PATCH 06/34] Added section describing the data used by the software --- docs/overview.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/overview.md b/docs/overview.md index 7beab03..57344d5 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -1,5 +1,9 @@ This file details the structure of this repository and the nature of its files. +## Data + +The software of this repository uses data from two primary sources: the Magellan Echellette (MagE) spectrograph mounted on ... + ## Repository structure This repository contains three main folders: `docs`, `figs`, and `results`. The `docs` folder contains the project documentation, such as this file and the project's `readme.md`, the `figs` folder contains the figures used in the article, and the `results` folder contains various measurements and formatted tables used in the article. From 769866d9c9ad404ec57d9b00a24a96642580cafc Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 15:03:37 -0400 Subject: [PATCH 07/34] Added more details to esc.ipynb --- docs/overview.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 57344d5..659a5ad 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -14,4 +14,6 @@ Outside these folders are the `.ipynb` Jupyter notebooks used to create the figu ### `esc.ipynb` -This notebook is responsible for calculating the LyC escape fractions. \ No newline at end of file +This notebook is responsible for calculating the LyC escape fractions and tabulating the measurements. + +The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures. \ No newline at end of file From b214aae9aa75156479f3e379c78f263dcece5886 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 15:14:04 -0400 Subject: [PATCH 08/34] Added details of slit mask creation in masks.ipynb --- docs/overview.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 659a5ad..58e95d8 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -16,4 +16,10 @@ Outside these folders are the `.ipynb` Jupyter notebooks used to create the figu This notebook is responsible for calculating the LyC escape fractions and tabulating the measurements. -The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures. \ No newline at end of file +The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures. + +### `masks.ipynb` + +This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. + +The notebook starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. \ No newline at end of file From 7f3db3ae8df2fe3002769ef9cfd7eb26759975f3 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 15:16:16 -0400 Subject: [PATCH 09/34] Added information explaining the 'v5' tag in the MagE slit aperture masks --- docs/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 58e95d8..c700a0e 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -22,4 +22,4 @@ The primary function of the notebook is `measure()`, which is the function that This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. -The notebook starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. \ No newline at end of file +The notebook starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. The `v5` in `{slit_id}_mask_v5.fits` indicates the version number assigned to our collaboration's most recent reduction of the HST images. \ No newline at end of file From 567d60bc01b91f145772ca1427be5e2e6ecf5f3d Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 16:57:21 -0400 Subject: [PATCH 10/34] Added details about the arc mask creation in esc.ipynb --- docs/overview.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index c700a0e..5736e59 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -22,4 +22,6 @@ The primary function of the notebook is `measure()`, which is the function that This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. -The notebook starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. The `v5` in `{slit_id}_mask_v5.fits` indicates the version number assigned to our collaboration's most recent reduction of the HST images. \ No newline at end of file +The notebook's sole function is `make()`, which starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. The `v5` in `{slit_id}_mask_v5.fits` indicates the version number we assigned to our collaboration's most recent reduction of the HST images. + +The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. \ No newline at end of file From 5ad32d5aa854033c3a2778d075aa5194c52f9699 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 20:46:15 -0400 Subject: [PATCH 11/34] Changed text alignment to justify, added description of map.ipynb --- docs/overview.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 5736e59..f91e6e8 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -1,3 +1,5 @@ +
+ This file details the structure of this repository and the nature of its files. ## Data @@ -18,10 +20,18 @@ This notebook is responsible for calculating the LyC escape fractions and tabula The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures. +### `map.ipynb` + +This notebook creates the primary on-sky map figure of the article, showing the Sunburst Arc and its cluster field, the MagE slit apertures, and zoom-in insets on the two largest arcs (those targeted by the MagE observations) with labeled clump numbers. + +The notebook's primary function `plot()` starts by instantiating a figure with the common WCS of the HST images and plots the HST/WFC3 F606W image of the Sunburst Arc and cluster field. It then sets the coordinate boundaries and labels of the figure. To create the zoom-in inset axes, the notebook first defines the position of the inset axes in the main axes coordinate system, creates new WCSs by rotating the main image's WCS using `rotate_wcs()` so that the two largest arcs appear either horizontal or vertical, depending on the set of inset axes they appear in, adds the inset axes to the main panel with the rotated WCSs with `add_inset_axes()`, plots the accordingly rotated main image in the inset axes, and trims the inset axes coordinate limits to focus on the arcs using `set_inset_axes_limits()`. The notebook then disables the ticks and labels of the inset axes. The notebook executes `add_box()` several times to add footprints of the displayed area in the inset axes on the main image, as well as highlight the other arc segments of the Sunburst Arc. For each of these boxes in the main image and the corresponding inset axes, the notebook labels them according to the terminology of the lens model of Sharon et al. (2022) (ApJ, 941, 203). For each of the MagE slit apertures, the notebook then instantiates the aperture as a regions `RectangleSkyRegion()` object, converts it to a pixel-based representation given the WCS of each panel the aperture appears in, and then plots and labels the footprint. For each image of a source plane clump that appears in the inset axes, `plot()` circles (or boxes, for one image) and labels the clump. Following this, `plot()` concludes by annotating the main axes with a compass, adds scalebars to the main and inset axes, and finally saves the figure as `sunburst_arc_and_cluster_field.pdf` to the `figs` folder. + ### `masks.ipynb` This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. The notebook's sole function is `make()`, which starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. The `v5` in `{slit_id}_mask_v5.fits` indicates the version number we assigned to our collaboration's most recent reduction of the HST images. -The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. \ No newline at end of file +The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. + +
\ No newline at end of file From 3366828bceef6ac33b4c7f9cf14343bde7e30315 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 20:57:42 -0400 Subject: [PATCH 12/34] Added hyperlinks to citations and description of source_plane.ipynb --- docs/overview.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index f91e6e8..63a8629 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -24,7 +24,7 @@ The primary function of the notebook is `measure()`, which is the function that This notebook creates the primary on-sky map figure of the article, showing the Sunburst Arc and its cluster field, the MagE slit apertures, and zoom-in insets on the two largest arcs (those targeted by the MagE observations) with labeled clump numbers. -The notebook's primary function `plot()` starts by instantiating a figure with the common WCS of the HST images and plots the HST/WFC3 F606W image of the Sunburst Arc and cluster field. It then sets the coordinate boundaries and labels of the figure. To create the zoom-in inset axes, the notebook first defines the position of the inset axes in the main axes coordinate system, creates new WCSs by rotating the main image's WCS using `rotate_wcs()` so that the two largest arcs appear either horizontal or vertical, depending on the set of inset axes they appear in, adds the inset axes to the main panel with the rotated WCSs with `add_inset_axes()`, plots the accordingly rotated main image in the inset axes, and trims the inset axes coordinate limits to focus on the arcs using `set_inset_axes_limits()`. The notebook then disables the ticks and labels of the inset axes. The notebook executes `add_box()` several times to add footprints of the displayed area in the inset axes on the main image, as well as highlight the other arc segments of the Sunburst Arc. For each of these boxes in the main image and the corresponding inset axes, the notebook labels them according to the terminology of the lens model of Sharon et al. (2022) (ApJ, 941, 203). For each of the MagE slit apertures, the notebook then instantiates the aperture as a regions `RectangleSkyRegion()` object, converts it to a pixel-based representation given the WCS of each panel the aperture appears in, and then plots and labels the footprint. For each image of a source plane clump that appears in the inset axes, `plot()` circles (or boxes, for one image) and labels the clump. Following this, `plot()` concludes by annotating the main axes with a compass, adds scalebars to the main and inset axes, and finally saves the figure as `sunburst_arc_and_cluster_field.pdf` to the `figs` folder. +The notebook's primary function `plot()` starts by instantiating a figure with the common WCS of the HST images and plots the HST/WFC3 F606W image of the Sunburst Arc and cluster field. It then sets the coordinate boundaries and labels of the figure. To create the zoom-in inset axes, the notebook first defines the position of the inset axes in the main axes coordinate system, creates new WCSs by rotating the main image's WCS using `rotate_wcs()` so that the two largest arcs appear either horizontal or vertical, depending on the set of inset axes they appear in, adds the inset axes to the main panel with the rotated WCSs with `add_inset_axes()`, plots the accordingly rotated main image in the inset axes, and trims the inset axes coordinate limits to focus on the arcs using `set_inset_axes_limits()`. The notebook then disables the ticks and labels of the inset axes. The notebook executes `add_box()` several times to add footprints of the displayed area in the inset axes on the main image, as well as highlight the other arc segments of the Sunburst Arc. For each of these boxes in the main image and the corresponding inset axes, the notebook labels them according to the terminology of the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203). For each of the MagE slit apertures, the notebook then instantiates the aperture as a regions `RectangleSkyRegion()` object, converts it to a pixel-based representation given the WCS of each panel the aperture appears in, and then plots and labels the footprint. For each image of a source plane clump that appears in the inset axes, `plot()` circles (or boxes, for one image) and labels the clump. Following this, `plot()` concludes by annotating the main axes with a compass, adds scalebars to the main and inset axes, and finally saves the figure as `sunburst_arc_and_cluster_field.pdf` to the `figs` folder. ### `masks.ipynb` @@ -34,4 +34,8 @@ The notebook's sole function is `make()`, which starts by fetching the WCS of on The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. +### `source_plane.ipynb()` + +The `source_plane.ipynb()` notebook makes a 4-panel figure showing the source plane reconstruction of the Sunburst Arc—based on the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203)—with 1 of the 4 non-LyC-leaking MagE slit apertures overlaid on each panel. The notebook takes the base `.png` images created by Keren Sharon, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. + \ No newline at end of file From 8dceb5b9e9ee8211f22e400ddebd4bf9c2cd2d68 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 21:51:48 -0400 Subject: [PATCH 13/34] Added description of galfit.ipynb --- docs/overview.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/overview.md b/docs/overview.md index 63a8629..556054b 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -20,6 +20,12 @@ This notebook is responsible for calculating the LyC escape fractions and tabula The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures. +### `galfit.ipynb` + +This notebook creates a multi-panel figure showing the results of using GALFIT to remove a foreground, interloping galaxy covering part of the Sunburst Arc. + +The notebook fetches the cutouts of the interloper-removed images created by Alex Navarre, and then creates source masks of the two filters. For each cutout, the notebook creates a smaller cutout centered on the interloping galaxy and plots the new cutout in a panel of the figure, adding coordinate boundaries, ticks, and tick labels to the panel. The notebook also adjusts the aspect ratio of the panel to be square and labels the filter and GALFIT output type (i.e., the original image, model, or residual) of the image in the panel. Finally, the notebook adds labels and ticks to the figure before saving it as `foreground_galaxy_galfit_modeling_results.pdf` in the `figs/` folder. + ### `map.ipynb` This notebook creates the primary on-sky map figure of the article, showing the Sunburst Arc and its cluster field, the MagE slit apertures, and zoom-in insets on the two largest arcs (those targeted by the MagE observations) with labeled clump numbers. From 385b138aa638fb35209a2ecb8093441c52e14637 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 1 Aug 2024 21:54:44 -0400 Subject: [PATCH 14/34] Added headers for the remaining notebook descriptions --- docs/overview.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/overview.md b/docs/overview.md index 556054b..7b6f070 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -26,6 +26,12 @@ This notebook creates a multi-panel figure showing the results of using GALFIT t The notebook fetches the cutouts of the interloper-removed images created by Alex Navarre, and then creates source masks of the two filters. For each cutout, the notebook creates a smaller cutout centered on the interloping galaxy and plots the new cutout in a panel of the figure, adding coordinate boundaries, ticks, and tick labels to the panel. The notebook also adjusts the aspect ratio of the panel to be square and labels the filter and GALFIT output type (i.e., the original image, model, or residual) of the image in the panel. Finally, the notebook adds labels and ticks to the figure before saving it as `foreground_galaxy_galfit_modeling_results.pdf` in the `figs/` folder. +### `lya_and_lyc_maps.ipynb` + +### `lya_nb_m3.ipynb` + +### `lya.ipynb` + ### `map.ipynb` This notebook creates the primary on-sky map figure of the article, showing the Sunburst Arc and its cluster field, the MagE slit apertures, and zoom-in insets on the two largest arcs (those targeted by the MagE observations) with labeled clump numbers. @@ -40,8 +46,14 @@ The notebook's sole function is `make()`, which starts by fetching the WCS of on The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. +### `nb.ipynb` + +### `seeing.ipynb` + ### `source_plane.ipynb()` The `source_plane.ipynb()` notebook makes a 4-panel figure showing the source plane reconstruction of the Sunburst Arc—based on the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203)—with 1 of the 4 non-LyC-leaking MagE slit apertures overlaid on each panel. The notebook takes the base `.png` images created by Keren Sharon, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. +### `stack.ipynb` + \ No newline at end of file From 7a9e8d86814f7f9853126f5b41870da73cf8c843 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 2 Aug 2024 01:27:51 -0400 Subject: [PATCH 15/34] Added description of lya_and_lyc_maps.ipynb --- docs/overview.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 7b6f070..582a2cd 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -2,7 +2,11 @@ This file details the structure of this repository and the nature of its files. -## Data +## Overview + +### ... + +### Data The software of this repository uses data from two primary sources: the Magellan Echellette (MagE) spectrograph mounted on ... @@ -28,6 +32,10 @@ The notebook fetches the cutouts of the interloper-removed images created by Ale ### `lya_and_lyc_maps.ipynb` +This notebook plots the Lyα and LyC maps of the two largest arcs of the Sunburst Arc in a multi-panel figure. + +In the `plot()` function the notebook fetches the common WCS of the HST images and creates two rotated WCSs, such that either arc appears horizontal. Then, for each map to plot, the function gets the image, reprojects it to the rotated WCSs, and plots the rotated image in the corresponding panel. It continues by setting the coordinate limits of the panels and disabling their ticks and labels. The remaining code adds labels indicating the arcs the panels show and the type of map, as well as compasses, scalebars, the footprints of the MagE slit apertures, and labels of the images of source plane clumps. The notebook saves the final figure as `lya_and_lyc_maps.pdf` in the `figs/` folder. + ### `lya_nb_m3.ipynb` ### `lya.ipynb` From 226a0e545bc3fb8ddb16d3d526bf148def306101 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 2 Aug 2024 03:40:13 -0400 Subject: [PATCH 16/34] Fleshed out details of galfit.ipynb --- docs/overview.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 582a2cd..e15eaa1 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -28,7 +28,13 @@ The primary function of the notebook is `measure()`, which is the function that This notebook creates a multi-panel figure showing the results of using GALFIT to remove a foreground, interloping galaxy covering part of the Sunburst Arc. -The notebook fetches the cutouts of the interloper-removed images created by Alex Navarre, and then creates source masks of the two filters. For each cutout, the notebook creates a smaller cutout centered on the interloping galaxy and plots the new cutout in a panel of the figure, adding coordinate boundaries, ticks, and tick labels to the panel. The notebook also adjusts the aspect ratio of the panel to be square and labels the filter and GALFIT output type (i.e., the original image, model, or residual) of the image in the panel. Finally, the notebook adds labels and ticks to the figure before saving it as `foreground_galaxy_galfit_modeling_results.pdf` in the `figs/` folder. +Because the LyC escape fraction calculation in `esc.ipynb` requires HST photometry from the F275W and F814W filters for each MagE slit aperture, it is necessary to remove an interloping galaxy partly covering one of the MagE slit apertures. Alex Navarre used GALFIT to remove the interloper galaxy from both filters, creating cutouts of the original images centered on the two largest arcs of the Sunburst Arc. The GALFIT data products also include the model galaxy profile. + +The notebook fetches those cutouts and assembles them into a multi-panel figure. To do this, it starts by fetching the FITS files of the cutout images, and defines a new, smaller, square cutout area to later apply to these images using Astropy's `SkyCoord` object. The new cutout centers on the interloper galaxy. The notebook also creates source masks of the two filters from the cutouts of the original, unaltered images to later apply. After creating the matplotlib `Figure` and `Axes` objects for the figure, the notebook explicitly sets the vertical (`hspace`) and horizontal spacing (`wspace`) between the subplots to 0 to make the figure more compact. + +The following double loop iterates over each filter (F275W and F814W) and data type (original image, model, or residual) combination, each time creating an Astropy `Cutout2D` object of the smaller, new cutout area with the defined `SkyCoord` object and the WCS of the given image. From the aforementioned source masks, the notebook calculates the pixel value color boundaries of the new cutout image, and then plots the new cutout image on the appropriate panel. + +Because of difficulties encountered while trying to assign the multi-subplot figure a WCS, `plot()` opts to instead manually set the coordinate limits, ticks, and tick labels, utilizing that the drizzled pixel size of the images is 0.03″. The final size of each panel is 3″ on a side, with ticks and tick labels (except if the tick labels would appear between two panels) placed at -1″, 0″, and +1″ relative to the center on both coordinate axes. The notebook sets the aspect ratio of each panel to guarantee it appears square, and adds annotations to each panel indicating the image's filter and data type. Finally, the notebook adds coordinate axis labels to the figure and explicitly sets the tick parameters of each panel to ensure there are no tick labels for ticks facing other panels, and that each side of every panel has inward-facing ticks. The `plot()` function then saves the figure as `foreground_galaxy_galfit_modeling_results.pdf` to `figs/`. ### `lya_and_lyc_maps.ipynb` From acc500549d4f567ff632cdff396351b14dda425a Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 2 Aug 2024 14:30:21 -0400 Subject: [PATCH 17/34] Added more high-level details to the source_plane.ipynb description --- docs/overview.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index e15eaa1..8b621f8 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -66,7 +66,9 @@ The notebook then moves on to producing the aforementioned mask of the two large ### `source_plane.ipynb()` -The `source_plane.ipynb()` notebook makes a 4-panel figure showing the source plane reconstruction of the Sunburst Arc—based on the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203)—with 1 of the 4 non-LyC-leaking MagE slit apertures overlaid on each panel. The notebook takes the base `.png` images created by Keren Sharon, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. +The `source_plane.ipynb()` notebook makes a 4-panel figure showing the source plane reconstruction of the Sunburst Arc—based on the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203)—with 1 of the 4 non-LyC-leaking MagE slit apertures overlaid on each panel. + +To interpret the different non-LyC-leaking Lyα profiles of the MagE slit apertures, it is important to understand the geometry of those slit apertures in the source plane, which could reveal significant geometric and morphological information. To do this, Keren Sharon used her lens model to ray trace the non-LyC-leaking MagE slit apertures to the source plane of the Sunburst Arc, identifying their orientation in the source plane. The notebook takes the base `.png` images created by Keren of each non-LyC-leaking MagE slit aperture overlaid on the labeled source plane clumps of the Sunburst Arc, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. ### `stack.ipynb` From 292ad9ba7ff09e6f366754c54a95f7e3179fb478 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 2 Aug 2024 14:33:09 -0400 Subject: [PATCH 18/34] Adjusted language of source_plane.ipynb description to be more succinct --- docs/overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 8b621f8..d2ae2a6 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -68,7 +68,7 @@ The notebook then moves on to producing the aforementioned mask of the two large The `source_plane.ipynb()` notebook makes a 4-panel figure showing the source plane reconstruction of the Sunburst Arc—based on the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203)—with 1 of the 4 non-LyC-leaking MagE slit apertures overlaid on each panel. -To interpret the different non-LyC-leaking Lyα profiles of the MagE slit apertures, it is important to understand the geometry of those slit apertures in the source plane, which could reveal significant geometric and morphological information. To do this, Keren Sharon used her lens model to ray trace the non-LyC-leaking MagE slit apertures to the source plane of the Sunburst Arc, identifying their orientation in the source plane. The notebook takes the base `.png` images created by Keren of each non-LyC-leaking MagE slit aperture overlaid on the labeled source plane clumps of the Sunburst Arc, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. +To interpret the different non-LyC-leaking Lyα profiles of the MagE slit apertures, it is important to understand the geometry of those slit apertures in the source plane, which could reveal significant geometric and morphological information. To do this, Keren Sharon used her lens model to ray trace the non-LyC-leaking MagE slit apertures to the source plane of the Sunburst Arc. The notebook takes the base `.png` images created by Keren, which show each non-LyC-leaking MagE slit aperture overlaid on the labeled source plane reconstruction of the Sunburst Arc, trims them to be square, centered on the relevant portion of the image, plots them onto the corresponding panels, labels each panel by the ID of the MagE slit aperture ray traced onto the source plane reconstruction in the panel, and removes any ticks or tick labels from the panels before saving the figure as `source_plane_nonleaker_apertures.pdf` in `figs/`. ### `stack.ipynb` From 355b269f84c96d9df8a8ae43a47ad2c513018fec Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 2 Aug 2024 17:44:01 -0400 Subject: [PATCH 19/34] Overhauled the text of the masks.ipynb description --- docs/overview.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/overview.md b/docs/overview.md index d2ae2a6..15606c2 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -56,9 +56,13 @@ The notebook's primary function `plot()` starts by instantiating a figure with t This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. -The notebook's sole function is `make()`, which starts by fetching the WCS of one of the HST images of the latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion()` object of the aperture (since the apertures are rectangular) based on its center, width, and rotation on the sky from a dictionary in the notebook, and converts it to a pixel representation from the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image, and creates a new FITS header from the WCS. The notebook then adds several relevant keywords to the header, and saves the header and mask to a new `.fits` file, following the name format `{slit_id}_mask_v5.fits`. The notebook saves the new file to `results/masks/`. The `v5` in `{slit_id}_mask_v5.fits` indicates the version number we assigned to our collaboration's most recent reduction of the HST images. +When making photometric measurements to compare to the spectroscopic properties of the MagE slit apertures, it is important to measure those photometries from the footprints of the apertures, which requires masks of the apertures. Both `esc.ipynb` and `nb.ipynb` make photometric measurements that utilize the MagE slit aperture footprints and a mask of the Sunburst Arc. It is more efficient to create and save those masks explicitly and have those notebooks fetch them, rather than compute the masks each time either notebook executes. It also makes it easier to share those masks with collaborators if necessary. -The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer. The notebook then reprojects the precursor mask to the common WCS of the HST images, and converts it to binary values (the precursor mask does not have binary values, and the reprojection's interpolation would cause non-binary values anyways). The notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. +The `masks.ipynb` notebook has a sole function, `make()`, which constructs the aforementioned masks. `make()` starts by fetching the WCS of one of the HST images of our collaboration's latest reduction (all the images of the latest reduction share a common WCS, so the choice of image is arbitrary). + +Then, for each MagE slit aperture, the notebook creates a regions `RectangleSkyRegion` object of the aperture (since the apertures are rectangular) from an Astropy `SkyCoord` object of the celestical coordinates of the geometric center of the aperture and the aperture's width and rotation on the sky, converting it to a pixel representation as a `RectanglePixelRegion` using the HST image's WCS. From the pixel representation, the notebook creates a mask of the aperture matching the shape of the HST image with the `to_mask()` method of the new `RectanglePixelRegion` object, and then the `to_image()` method of the resulting `RegionMask` object. Using the WCS of the HST image, the notebook creates a new FITS header from the WCS with the `to_header()` method of the `WCS` object, adding several new keywords to the header describing the mask. Finally, the notebook saves the mask of the slit aperture as a `.fits` file to `results/masks/`, named like `{slit_id}_mask_v5.fits`, where the `v5` indicates the version number we assigned to our collaboration's most recent reduction of the HST images. + +The notebook then moves on to producing the aforementioned mask of the two largest arcs of the Sunburst Arc. It first retrieves the precursor mask, originally made by our collaboration to apply to observations of the Sunburst Arc with the Very Large Telescope's Multi Unit Spectroscopic Explorer (MUSE). Because MUSE has a much different field of view and pixel size than the HST images (which we want to apply the mask of the arc to), the notebook reprojects the arc mask to the WCS of the HST images with reproject's `reproject_interp()` function. Because (1) the original mask does not have binary values, and (2) the reprojection's interpolation also leads to non-binary values, it is necessary to explicitly convert the reprojected mask to binary, which the notebook performs by setting any positively-valued pixels to 1, and 0 otherwise. As before, the notebook creates a new FITS header from the common WCS of the HST images and inserts several relevant keywords before saving it as `arc_mask_v5.fits` in `results/masks/`. ### `nb.ipynb` From 6f864a6bdc6d9079861c1f3e77ac33bc9dc5b9f2 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sat, 3 Aug 2024 16:34:12 -0400 Subject: [PATCH 20/34] Created a dedicated task list and added the first tasks --- docs/tasks.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/tasks.md diff --git a/docs/tasks.md b/docs/tasks.md new file mode 100644 index 0000000..c1f3cf2 --- /dev/null +++ b/docs/tasks.md @@ -0,0 +1,6 @@ +### Open + +- [ ] Determine the units of the Lyα maps and verify the units stated in the documentation and code comments +- [ ] Add horizontal lines separating the LyC-leaking and non-LyC-leaking MagE slit apertures in tables + +### Closed \ No newline at end of file From 53fc6f67bafdaf225057a2fe0a5496040af586a6 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sat, 3 Aug 2024 17:20:00 -0400 Subject: [PATCH 21/34] Commented out file descriptions that need to be revamped, added description for lya_nb_m3.ipynb --- docs/overview.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/overview.md b/docs/overview.md index 15606c2..e7e6573 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -20,10 +20,14 @@ Outside these folders are the `.ipynb` Jupyter notebooks used to create the figu ### `esc.ipynb` + + ### `galfit.ipynb` This notebook creates a multi-panel figure showing the results of using GALFIT to remove a foreground, interloping galaxy covering part of the Sunburst Arc. @@ -38,20 +42,38 @@ Because of difficulties encountered while trying to assign the multi-subplot fig ### `lya_and_lyc_maps.ipynb` + + ### `lya_nb_m3.ipynb` +This notebook creates a multi-panel figure of the narrowband Lyα maps of the main image in the footprint of the MagE slit aperture M3, dubbed 'Godzilla' in the literature. + +Because the two Lyα map schemes are highly discrepant about the Lyα properties of Godzilla, it is important to show the two maps at the location of Godzilla at various statistical significances, which is the purpose of the notebook's sole function `plot()`. The function opens by fetching the `.fits` files of the two Lyα map schemes (with F390W and F555W as the local continuum estimates), and defines the celestial coordinate center of the cutout area to plot in each panel as an Astropy `SkyCoord` object, as well as the width of the square cutout area (slightly wider than the coordinate boundaries set later). After instantiating the matplotlib `Figure` and `Axes` object of the figure, `plot()` explicitly sets the `hspace` and `wspace` of the subplots to 0 to make the panels contiguous. + +In the following loop, for the Lyα map of each continuum estimate, the notebook fetches the `HDUList` of the map's `.fits` file and creates a `Cutout2D` object for both the fluxes and uncertainties of the image using the WCS of the map, previous `SkyCoord` object, and the set width of the cutout. A nested loop for a variety of statistical deviations (e.g., +1σ, -2σ, etc.) then plots the cutouts at those statistical deviations in the appropriate panels. In each panel, the nested loop also draws, in pixel coordinates, (1) a manually placed ellipse around Godzilla and the two nearby, smaller clumps, and (2) the footprint of slit M3's aperture, with its pixel coordinates manually calculated. + +Because it is difficult to apply a WCS projection to plots created from `plt.subplots()`, the nested loop also manually calculates the coordinate limits of the panels so that each is 2″ on a side, since each pixel in the drizzled images is 0.03″ across. Following this, `plot()` adds inward-facing ticks to all the plots, and only adds tick labels when the labels would not be between plots, calculating the coordinates of the ticks in similar fashion as the coordinate limits. The nested loop concludes by setting the aspect ratio of each panel to ensure they appear square, and adding labels indicating the statistical deviation of the panel and the continuum estimate method. + +`plot()` concludes by adding coordinate labels to the figure and saving the figure to `figs/` as `lya_nb_m3.pdf`. + ### `lya.ipynb` ### `map.ipynb` + + ### `masks.ipynb` This notebook makes masks of the MagE slit apertures and the two largest arcs of the Sunburst Arc in the world coordinate system (WCS) of the latest reduction of the HST images used in the article. These masks are critical for portions of analyses in other notebooks. From 4982fbd703c639b9c814dab22bc73a2758aed26d Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sun, 4 Aug 2024 02:34:00 -0400 Subject: [PATCH 22/34] Removed .gitignore to untrack it --- .gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b43e7e3..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.ipynb_checkpoints/ -comments/ \ No newline at end of file From 31e17142b2108204b12c48bda868989793ac543d Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Mon, 5 Aug 2024 13:02:58 -0400 Subject: [PATCH 23/34] Added a new task to update the article text with the new details of the MC simulation process --- docs/tasks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tasks.md b/docs/tasks.md index c1f3cf2..9b6288e 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -2,5 +2,6 @@ - [ ] Determine the units of the Lyα maps and verify the units stated in the documentation and code comments - [ ] Add horizontal lines separating the LyC-leaking and non-LyC-leaking MagE slit apertures in tables +- [ ] Update the article's methodology with new details about the MC simulation process ### Closed \ No newline at end of file From ceaa646d3c32b51b473c890ff26dc4ccd22ad933 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Mon, 5 Aug 2024 17:13:47 -0400 Subject: [PATCH 24/34] Added flow chart diagram showing the relations and products of the project's notebooks --- docs/flow.pdf | Bin 0 -> 46187 bytes docs/flow.svg | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 docs/flow.pdf create mode 100644 docs/flow.svg diff --git a/docs/flow.pdf b/docs/flow.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9243c2caee34144022c4b006b5c921042a2d299a GIT binary patch literal 46187 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 literal 0 HcmV?d00001 diff --git a/docs/flow.svg b/docs/flow.svg new file mode 100644 index 0000000..abcdc12 --- /dev/null +++ b/docs/flow.svg @@ -0,0 +1,4 @@ + + + +
article
article
cluster field and arc zoom-in figure
cluster field and...
F606W image
F606W image
map.ipynb
map.ipynb
GALFITed F275W, F814W images
GALFITed F275W, F...
galfit.ipynb
galfit.ipynb
GALFIT results figure
GALFIT results f...
arbitrary HST image
arbitrary HST im...
nb.ipynb
nb.ipynb
updated pixel- and coordinate-based background region files, Lyα maps
updated pixel- and coordinate-bas...
arbitrary HST images, F390W, F555W, F410M images, whole-galaxy SED fits, background region file
arbitrary HST images, F390W, F555W, F410M images...
lya_nb_m3.ipynb
lya_nb_m3.ipynb
Lyα maps figure of slit M3
Lyα maps figure o...
lya_and_lyc_maps.ipynb
lya_and_lyc_maps.ipynb
Lyα and LyC maps figure of the arcs
Lyα and LyC maps fi...
F275W image
F275W image
seeing.ipynb
seeing.ipynb
File and table of Lyα fluxes
File and table o...
Starburst99 models
Starburst99 mode...
files of randomly sampled spectra, Lyα measurements, and best-fit model parameters, tables of Lyα measurements, best-fit model parameters, and measurement correlations, corner plot, spectra plots
files of randomly sampled spectra, Lyα measurements, and best-fit model pa...
lya.ipynb
lya.ipynb
MagE spectra
MagE spectra
source_plane.ipynb
source_plane.ipynb
source plane reconstruction figure
source plane recon...
source plane reconstruction images
source plane reconst...
esc.ipynb
esc.ipynb
file and table of LyC escape fractions, F275W, and F814W fluxes
file and table of LyC escape frac...
masks.ipynb
masks.ipynb
arc mask
slit masks
arc mask...
stack.ipynb
stack.ipynb
stacked spectra
stacked spectra
Text is not SVG - cannot display
\ No newline at end of file From 4bc3364388ac9ef3e08ed692431e8c5020ce058c Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Thu, 8 Aug 2024 15:24:46 -0400 Subject: [PATCH 25/34] Adjusted comment in lya.ipynb to be more accurate --- lya.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lya.ipynb b/lya.ipynb index 99a5475..a9be944 100644 --- a/lya.ipynb +++ b/lya.ipynb @@ -1595,8 +1595,7 @@ " # Add the formatted parameter measurement to the table row\n", " table = table + f'& ${median}_{{-{lower}}}^{{+{upper}}}$ '\n", "\n", - " # Add an aesthetic, dividing '/' after the formatted parameter \n", - " # measurement, unless it is the last parameter in the loop\n", + " # Add a LaTeX row break character if the row is not the last, and a line break character to the string\n", " table = table + '\\\\\\\\\\n' if i != len(slits) - 1 else table + '\\n'\n", "\n", " # Add a footer to the table\n", From 1f4de339e1182a6b55fadd55d1a0ed182ff0001b Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 9 Aug 2024 02:49:39 -0400 Subject: [PATCH 26/34] Added new tasks --- docs/tasks.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/tasks.md b/docs/tasks.md index 9b6288e..17b23b1 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -3,5 +3,7 @@ - [ ] Determine the units of the Lyα maps and verify the units stated in the documentation and code comments - [ ] Add horizontal lines separating the LyC-leaking and non-LyC-leaking MagE slit apertures in tables - [ ] Update the article's methodology with new details about the MC simulation process +- [ ] Create a virtual environment with the latest Python and package versions and execute the project's code with the environment +- [ ] Create a `requirements.txt` file listing the package versions the project uses ### Closed \ No newline at end of file From b4be734ff1a229671df8228cc49adf61669895fa Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 9 Aug 2024 02:51:32 -0400 Subject: [PATCH 27/34] Added more tasks --- docs/tasks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tasks.md b/docs/tasks.md index 17b23b1..f81b69a 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -5,5 +5,6 @@ - [ ] Update the article's methodology with new details about the MC simulation process - [ ] Create a virtual environment with the latest Python and package versions and execute the project's code with the environment - [ ] Create a `requirements.txt` file listing the package versions the project uses +- [ ] Confirm that all uses of the stacked spectra use the correct and current version produced by `stack.ipynb` ### Closed \ No newline at end of file From 824b94d8c053671a718fe0ae52ff0787b5743209 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 9 Aug 2024 23:12:06 -0400 Subject: [PATCH 28/34] Added complete description of lya.ipynb except plot(), finished the description of map.ipynb, and started the description of stack.ipynb --- docs/overview.md | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/docs/overview.md b/docs/overview.md index e7e6573..2495561 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -64,15 +64,39 @@ Because it is difficult to apply a WCS projection to plots created from `plt.sub ### `lya.ipynb` -### `map.ipynb` +This notebook is the core of the article's results. It measures various properties of the Lyα profiles of the spectra of the MagE slit apertures, calculates statistical correlations between the measurements, and makes associated tables and plots. - +The notebook then disables the ticks and labels of the inset axes with a double `for` loop, and executes `add_box()` several times to add footprints of the displayed area in the inset axes on the main image, as well as highlight the other arc segments of the Sunburst Arc. For each of these boxes in the main image and the corresponding inset axes, the notebook labels them according to the terminology of the lens model of [Sharon et al. (2022)](https://doi.org/10.3847/1538-4357/ac927a) (ApJ, 941, 203). For each of the MagE slit apertures, `plot()` instantiates the aperture as a regions `RectangleSkyRegion()` object, converts it to a pixel-based representation given the WCS of each panel the aperture appears in, and then plots and labels the footprint with its slit ID. For each image of a source plane clump that appears in the inset axes, `plot()` circles (or boxes, for one image) and labels the clump. Following this, `plot()` concludes by annotating the main axes with a compass, adds scalebars to the main and inset axes, and finally saves the figure as `sunburst_arc_and_cluster_field.pdf` to `figs/`. ### `masks.ipynb` @@ -98,4 +122,6 @@ To interpret the different non-LyC-leaking Lyα profiles of the MagE slit apertu ### `stack.ipynb` +The `stack.ipynb` notebook creates stacked spectra of the MagE slit apertures targeting the LyC-leaking region and the non-LyC-leaking region. + \ No newline at end of file From 890de647ca02cf4b77a0846f7905587ac5f22ed3 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Fri, 9 Aug 2024 23:32:56 -0400 Subject: [PATCH 29/34] Added description for stack.ipynb --- docs/overview.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 2495561..92ca73b 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -122,6 +122,10 @@ To interpret the different non-LyC-leaking Lyα profiles of the MagE slit apertu ### `stack.ipynb` -The `stack.ipynb` notebook creates stacked spectra of the MagE slit apertures targeting the LyC-leaking region and the non-LyC-leaking region. +The `stack.ipynb` notebook creates stacked spectra of the MagE slit apertures targeting the LyC-leaking region and the non-LyC-leaking region, which has general utility to compare the bulk Lyα properties between the LyC-leaking region and the non-LyC-leaking regions. + +The core function of `stack.ipynb`, `stack()`, opens with a `for` loop iterating through the files of each MagE spectrum. An `if` block determines if the spectrum is one of the spectra to stack (slits M0 and M3 are undesirable for stacking because slit M0 has a very poor fluxing and slit M3 targets a highly magnified object probably not representative of the non-LyC-leaking regions it is embedded in), and if so, which stack to add the spectrum to (either the stack of the LyC-leaking region or non-LyC-leaking regions). Either way, if eligible for stacking, the `if` block will retrieve the spectrum, place it in the rest frame, normalize it, interpolate it to a set of common wavelength bins used for the stacked spectrum, and then add its flux densities to the stacked spectrum and add its associated uncertainties in quadrature. + +After exiting the `for` loop, the notebook closes by normalizing each stacked spectrum by the number of individual spectra in the stack, and then saves the two stacked spectra as `sunburst_arc_leaker_stack_mage.txt` and `sunburst_arc_nonleaker_stack_mage.txt` in `data/`. \ No newline at end of file From e1bb1f2169f43883eb6e8a1b843814372a5f9f8f Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sat, 10 Aug 2024 01:10:05 -0400 Subject: [PATCH 30/34] Added new task to the task list --- docs/tasks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tasks.md b/docs/tasks.md index f81b69a..08b9cb9 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -6,5 +6,6 @@ - [ ] Create a virtual environment with the latest Python and package versions and execute the project's code with the environment - [ ] Create a `requirements.txt` file listing the package versions the project uses - [ ] Confirm that all uses of the stacked spectra use the correct and current version produced by `stack.ipynb` +- [ ] Add the descriptions of `nb.ipynb` and `seeing.ipynb` once the results of `seeing.ipynb` are satisfactory ### Closed \ No newline at end of file From bb6f358a95129eddba391b6ff57b1598e140aa95 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sat, 10 Aug 2024 01:10:45 -0400 Subject: [PATCH 31/34] Expanded description of esc.ipynb, finished the description of lya_and_lyc_maps.ipynb --- docs/overview.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/overview.md b/docs/overview.md index 92ca73b..b5f88e5 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -22,9 +22,11 @@ Outside these folders are the `.ipynb` Jupyter notebooks used to create the figu @@ -42,13 +44,9 @@ Because of difficulties encountered while trying to assign the multi-subplot fig ### `lya_and_lyc_maps.ipynb` - +In the `plot()` function, the notebook fetches the common WCS of the HST images and creates two rotated WCSs using `rotate_wcs()`, such that either arc appears horizontal when plotted. Then, for each map to plot, the function gets the image, reprojects it to the rotated WCSs, and plots the rotated image in the corresponding panel. It continues by setting the coordinate limits of the panels and disabling their ticks and labels. The remaining code adds labels indicating the arcs the panels show and the type of map, as well as compasses, scalebars, the footprints of the MagE slit apertures, and labels of the images of source plane clumps. The notebook saves the final figure as `lya_and_lyc_maps.pdf` in the `figs/` folder. ### `lya_nb_m3.ipynb` From 1c4ec738ce73d7f28679476a83b969257c7a8035 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sun, 11 Aug 2024 16:16:30 -0400 Subject: [PATCH 32/34] Added task --- docs/tasks.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tasks.md b/docs/tasks.md index 08b9cb9..119e901 100644 --- a/docs/tasks.md +++ b/docs/tasks.md @@ -7,5 +7,6 @@ - [ ] Create a `requirements.txt` file listing the package versions the project uses - [ ] Confirm that all uses of the stacked spectra use the correct and current version produced by `stack.ipynb` - [ ] Add the descriptions of `nb.ipynb` and `seeing.ipynb` once the results of `seeing.ipynb` are satisfactory +- [ ] Update the convolution in `esc.ipynb` to also include the effect of airmass ### Closed \ No newline at end of file From 4401a5b42b39d31d37997fa4fe2affa15d9e68b6 Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sun, 11 Aug 2024 16:19:14 -0400 Subject: [PATCH 33/34] Added more text to draft of esc.ipynb description --- docs/overview.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index b5f88e5..010f13e 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -26,7 +26,9 @@ This notebook is responsible for calculating the LyC escape fractions and associ The primary function of the notebook is `measure()`, which is the function that actually measures the LyC escape fractions of the MagE slit apertures, and the secondary function `tabulate()` constructs a LaTeX-formatted table as a `.txt` from the LyC escape fraction measurements and measured photometries. `measure()` starts by retrieving the data of special copies of the HST/WFC3 F275W and HST/ACS F814W images of the Sunburst Arc, trimmed to just cover the two largest arcs (where the MagE slit apertures lie), and GALFITed to remove a foreground galaxy partially covering one of the apertures. Using the `Background2D` object of photutils, the notebook models the background of both images, subtracting the fitted background from the images and converting them into units of flux densities. -Next, `measure()` uses stsynphot to retrieve the filter transmission curves of the F275W and F814W curves, ... +Next, `measure()` uses stsynphot to retrieve the filter transmission curves of the F275W and F814W curves, integrating them to determine the total throughput, which will be necessary in the final calculation of the LyC escape fractions. Following this, the notebook prepares the mask of the arcs by reprojecting it and interpolating it to the smaller footprint of the trimmed filter cutouts. + +`measure()` then opens a `for` loop that iterates over each MagE slit aperture. For each slit, the loop reprojects and interpolates the slit mask created in `masks.ipynb` to the smaller footprint of the filter cutouts. It then estimates the uncertainties of the two filter cutouts as the standard deviation inside the slit mask but outside the arc mask. Using the ... --> From 3307f6089f5259b41a2cdd98a447f5b034896d9b Mon Sep 17 00:00:00 2001 From: mrileyowens Date: Sun, 11 Aug 2024 18:35:40 -0400 Subject: [PATCH 34/34] Added more info about the plotting functionality in plot() --- docs/overview.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/overview.md b/docs/overview.md index 010f13e..22d6191 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -86,7 +86,11 @@ Next, `tabulate()` creates the table containing the measured statistical correla The last table `tabulate()` constructs lists the best-fit model parameters of the functions fit to the Lyα profiles. Starting by creating the header of the table, `tabulate()` then opens a `for` loop that iterates through each MagE spectrum (including the stacked spectra), adding the slit ID to the table row and fetching the spectrum's best-fit model parameters from `{slit_id}_mc_sim_lya_best_fit_model_parameters.txt` from `results/lya_fits/{slit_id}/`. The loop checks if the spectrum's Lyα profile is triple-peaked, adding a new column with a blank entry if the profile is not triple-peaked. Otherwise, for each model parameter of the blueshifted Lyα peak, the loop calculates the median and estimates of the upper and lower uncertainties (calculated as stated previously) from the parameter distribution, rounding them according to `round_to_uncertainties()`, and formats and adds them to the table. The loop then adds a new column and repeats the previous process for the remaining model parameters (i.e., the remaining Lyα peaks and the local continuum). If the parameter has units of a flux density, the notebook rescales the parameter by a fixed and consistent factor (except for the non-stacked spectra) in order to prevent a cumbersome scientific notation factor that would otherwise complicate formatting the parameter as a string. The loop then closes and the notebook adds a footer to the table and saves the table as `lya_best_fit_model_parameters_table.txt` in `results/tables/`. -The function `plot()` is the final function executed by `lya.ipynb`, creating plots of the Lyα profiles and the corner plot of the Lyα and LyC escape fraction measurements. `plot()` starts by obtaining the LyC escape fraction measurements made by `esc.ipynb` and creating the matplotlib `Figure` and `Axes` objects of the figure plotting the Lyα profiles of the individual MagE spectra (but not the stacked spectra). Using a `for` loop, `plot()` gets the ... +The function `plot()` is the final function executed by `lya.ipynb`, creating plots of the Lyα profiles and the corner plot of the Lyα and LyC escape fraction measurements. `plot()` starts by obtaining the LyC escape fraction measurements made by `esc.ipynb` and creating the matplotlib `Figure` and `Axes` objects of the figure plotting the Lyα profiles of the individual MagE spectra (but not the stacked spectra). Using a `for` loop, `plot()` gets the data of each spectrum, converting it to the rest frame with the spectrum's redshift. A mask applied to the spectrum just selects the Lyα profile. From the best-fit Lyα model parameters (contained in `{slit_id}_mc_sim_lya_best_fit_model_parameters.txt` in `results/lya_fits/{slit_id}/`), `plot()` calculates the median best-fit model parameters, which it uses to plot the corresponding median model fit over the spectrum. For each panel in the figure, the notebook adds a slit ID label, sets the coordinate boundaries and tick properties, and makes the aspect ratio of the panel square. `plot` concludes the figur eby adding labels to each axis, saving the figure as `lya_fits.pdf` in `figs/`. + +Next, the notebook makes a figure of the stacked Lyα spectra, near identically to the previous figure, except this time with an additional panel of the two stacked Lyα profiles plotted together in the same panel. An extra line of code eliminates the vertical space between the panels before saving the figure as `lya_fits_stack.pdf` in `figs/`. + +The last figure that `plot()` creates is the corner plot of the Lyα measurements and the LyC escape fractions. `plot()` starts the figure by fetching the statistical correlation measurements between each measurement pair tabulated in `lya_measurements_statistical_correlations_table.txt` in `results/tables/`, which it will use later to add labels to each panel. The notebook then opens a `for` loop that iterates over each row of the corner plot except for the last (which contains the LyC escape fractions, which must be treated separately). The loop adds a column title to the last subplot in the row, a row title to the first subplot in the row, and column and row unit labels. Then, for each subplot in the row, an `if` block disables the subplot if it is above the main diagonal (where a measurement pair would just be repeated from the corresponding subplot mirrored across the main diagonal). Otherwise, for each MagE slit aperture (and the stacked spectra), the notebook fetches the measurement distributions of the measurement pair displayed in the panel, calculating their medians and 16th and 84th percentiles as proxies for the upper and lower uncertainties, and plotting the resulting data points onto the appropriate panel. ...