From eda43747585d53b61fd8fd3195da6259d54ca4b8 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Fri, 29 Nov 2024 11:01:54 +0530 Subject: [PATCH 01/41] ccd_tempreture taking astropy unit --- sunkit_instruments/suvi/suvi.py | 73 ++++++++++++++++----------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a1c4c822..c7db27db 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -101,53 +101,45 @@ def despike_l1b_array(data, dqf, filter_width=7): return _despike(data, dqf, filter_width) -def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="long"): +def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ - Get the SUVI instrument response for a specific wavelength channel, - spacecraft, CCD temperature, and exposure type. + Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. - ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those - parameters are read automatically from the metadata, or the parameters - can be passed manually, with ``request`` specifying the desired wavelength - channel. + ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. - Either an L1b filename (FITS or netCDF), or an integer - specifying the wavelength channel. - spacecraft: `int`, optional. + request : str or int ({94, 131, 171, 195, 284, 304}) + Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. + spacecraft : int, optional Which GOES spacecraft, default is 16. - ccd_temperature: `float`, optional. - The CCD temperature, in degrees Celsius, default is -60. + ccd_temperature : astropy.units.Quantity, optional + The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. - exposure_type: {"long" | "short" | "short_flare"}, optional. + exposure_type : {"long", "short", "short_flare"}, optional The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane - filter selection. - + The exposure type is needed for the correct focal plane filter selection. Can be: - * "long", "short", "short_flare" for 94 and 131 - * "long", "short_flare" for 171, 195, 284, and 304. + - "long", "short", "short_flare" for 94 and 131 + - "long", "short_flare" for 171, 195, 284, and 304. Returns ------- - `dict` + dict The instrument response information. Keys: - - * "wavelength" - * "effective_area" - * "response" - * "wavelength_channel" - * "spacecraft" - * "ccd_temperature" - * "exposure_type" - * "flight_model" - * "gain" - * "solid_angle" - * "geometric_area" - * "filter_setup" + - "wavelength" + - "effective_area" + - "response" + - "wavelength_channel" + - "spacecraft" + - "ccd_temperature" + - "exposure_type" + - "flight_model" + - "gain" + - "solid_angle" + - "geometric_area" + - "filter_setup" """ # Avoid circular import from sunkit_instruments.suvi.io import read_suvi @@ -156,7 +148,8 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l header, _, _ = read_suvi(request) wavelength_channel = int(header["WAVELNTH"]) spacecraft = int(header["TELESCOP"].replace(" ", "").replace("G", "")) - ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temp_header = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temperature = ccd_temp_header * u.deg_C exposure_type = "_".join( header["SCI_OBJ"].replace(" ", "").split(sep="_")[3:] ).replace("_exposure", "") @@ -178,6 +171,12 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l f"Valid spacecraft are: {VALID_SPACECRAFT}" ) + # Ensure ccd_temperature is a Quantity in degrees Celsius + if not isinstance(ccd_temperature, u.Quantity): + ccd_temperature = ccd_temperature * u.deg_C + else: + ccd_temperature = ccd_temperature.to(u.deg_C) + eff_area_file = ( PATH_TO_FILES / f"SUVI_{FLIGHT_MODEL[spacecraft]}_{wavelength_channel}A_eff_area.txt" @@ -192,10 +191,10 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l effective_area = eff_area[:, 2] * u.cm * u.cm gain_table = np.loadtxt(gain_file, skiprows=7) - temp_x = gain_table[:, 0] + temp_x = gain_table[:, 0] # Assuming temp_x is in degrees Celsius gain_y = gain_table[:, 1] gain_vs_temp = interpolate.interp1d(temp_x, gain_y) - gain = gain_vs_temp(ccd_temperature) + gain = gain_vs_temp(ccd_temperature.value) geometric_area = 19.362316 * u.cm * u.cm solid_angle = ((2.5 / 3600.0 * (np.pi / 180.0)) ** 2.0) * u.sr @@ -210,7 +209,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l "response": response, "wavelength_channel": wavelength_channel, "spacecraft": "GOES-" + str(spacecraft), - "ccd_temperature": ccd_temperature * u.deg_C, + "ccd_temperature": ccd_temperature, "exposure_type": exposure_type, "flight_model": FLIGHT_MODEL[spacecraft], "gain": float(gain), From 7b4f3f3da550787982fc06dff1f87d739c201a51 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:36:52 +0530 Subject: [PATCH 02/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index c7db27db..8224596c 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -103,7 +103,8 @@ def despike_l1b_array(data, dqf, filter_width=7): def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ - Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. + Get the SUVI instrument response for a specific wavelength channel, spacecraft, + CCD temperature, and exposure type. ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. From 9625f71c202fc1fcf2c6b85e6c72c76df6f93982 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:57:53 +0530 Subject: [PATCH 03/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 8224596c..0bb531a7 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -106,7 +106,8 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. - ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. + ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters + are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. Parameters ---------- From 33d13fa0e0d20b4e7e768f71f2387e13ff2ae2f8 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 30 Nov 2024 18:58:56 +0530 Subject: [PATCH 04/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 0bb531a7..a384e032 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -116,7 +116,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu spacecraft : int, optional Which GOES spacecraft, default is 16. ccd_temperature : astropy.units.Quantity, optional - The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. + The CCD temperature, in degrees Celsius, default is ``-60.0 * u.deg_C``. Needed for getting the correct gain number. exposure_type : {"long", "short", "short_flare"}, optional The exposure type of the SUVI image. From 85f3ff6d7d88f6d7d599dce4d6e527881bd135b8 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 30 Nov 2024 19:09:20 +0530 Subject: [PATCH 05/41] Adding unit tests for get_response --- sunkit_instruments/suvi/tests/test_suvi.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 1a6657b4..bf38a60a 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -2,6 +2,7 @@ import pytest from sunkit_instruments import suvi +from astropy import units as u # Test files are all remote data. pytestmark = pytest.mark.remote_data @@ -24,15 +25,15 @@ def test_suvi_despiking_nc(L1B_NC): def test_get_response_nc(L1B_NC): - l1b_nc_response = suvi.get_response(L1B_NC) + l1b_nc_response = suvi.get_response(L1B_NC, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") assert l1b_nc_response["wavelength_channel"] == 171 def test_get_response_fits(L1B_FITS): - l1b_fits_response = suvi.get_response(L1B_FITS) + l1b_fits_response = suvi.get_response(L1B_FITS, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") assert l1b_fits_response["wavelength_channel"] == 171 def test_get_response_wavelength(): - response_195 = suvi.get_response(195) - assert response_195["wavelength_channel"] == 195 + response_195 = suvi.get_response(195, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") + assert response_195["wavelength_channel"] == 195 \ No newline at end of file From 752a01dee653f07e5974f4c71adaac261b31c1d3 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 30 Nov 2024 20:10:20 +0530 Subject: [PATCH 06/41] Fixing precommit --- sunkit_instruments/suvi/tests/test_suvi.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index bf38a60a..aa385343 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -1,9 +1,10 @@ import numpy as np import pytest -from sunkit_instruments import suvi from astropy import units as u +from sunkit_instruments import suvi + # Test files are all remote data. pytestmark = pytest.mark.remote_data @@ -36,4 +37,4 @@ def test_get_response_fits(L1B_FITS): def test_get_response_wavelength(): response_195 = suvi.get_response(195, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") - assert response_195["wavelength_channel"] == 195 \ No newline at end of file + assert response_195["wavelength_channel"] == 195 From fc20b495f16d9499ce5c6c18d6f6d4ce6a02c19b Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 30 Nov 2024 20:20:27 +0530 Subject: [PATCH 07/41] Adding the changelog --- changelog/150.feature.3.rst | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 changelog/150.feature.3.rst diff --git a/changelog/150.feature.3.rst b/changelog/150.feature.3.rst new file mode 100644 index 00000000..b1d0009c --- /dev/null +++ b/changelog/150.feature.3.rst @@ -0,0 +1,6 @@ +### Added +- Support for `ccd_temperature` as an Astropy Quantity in the `get_response` function. +### Changed +- Updated the `get_response` function signature to accept `ccd_temperature` as an Astropy Quantity. +- Modified the function to handle `ccd_temperature` inputs with and without units, converting them to degrees Celsius. +- Updated the docstring of the `get_response` function to reflect the new parameter type and units requirement. \ No newline at end of file From fcbd964d1f24c7a95e0b444814629348f3f657ef Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 30 Nov 2024 20:30:21 +0530 Subject: [PATCH 08/41] again fixing the precommit --- changelog/150.feature.3.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog/150.feature.3.rst b/changelog/150.feature.3.rst index b1d0009c..2c0e4b4c 100644 --- a/changelog/150.feature.3.rst +++ b/changelog/150.feature.3.rst @@ -3,4 +3,4 @@ ### Changed - Updated the `get_response` function signature to accept `ccd_temperature` as an Astropy Quantity. - Modified the function to handle `ccd_temperature` inputs with and without units, converting them to degrees Celsius. -- Updated the docstring of the `get_response` function to reflect the new parameter type and units requirement. \ No newline at end of file +- Updated the docstring of the `get_response` function to reflect the new parameter type and units requirement. From 55acee02cb5213204efe697330ae7f4088ce1fe7 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sun, 1 Dec 2024 12:08:24 +0530 Subject: [PATCH 09/41] Adding the quantity decorators and removing the manual checks --- sunkit_instruments/suvi/suvi.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a384e032..318921f0 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -5,6 +5,7 @@ from scipy.ndimage import gaussian_filter from astropy import units as u +from astropy.utils.decorators import quantity_input import sunpy.map @@ -101,13 +102,12 @@ def despike_l1b_array(data, dqf, filter_width=7): return _despike(data, dqf, filter_width) +@quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ - Get the SUVI instrument response for a specific wavelength channel, spacecraft, - CCD temperature, and exposure type. + Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. - ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters - are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. + ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. Parameters ---------- @@ -116,7 +116,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu spacecraft : int, optional Which GOES spacecraft, default is 16. ccd_temperature : astropy.units.Quantity, optional - The CCD temperature, in degrees Celsius, default is ``-60.0 * u.deg_C``. + The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. exposure_type : {"long", "short", "short_flare"}, optional The exposure type of the SUVI image. @@ -173,12 +173,6 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu f"Valid spacecraft are: {VALID_SPACECRAFT}" ) - # Ensure ccd_temperature is a Quantity in degrees Celsius - if not isinstance(ccd_temperature, u.Quantity): - ccd_temperature = ccd_temperature * u.deg_C - else: - ccd_temperature = ccd_temperature.to(u.deg_C) - eff_area_file = ( PATH_TO_FILES / f"SUVI_{FLIGHT_MODEL[spacecraft]}_{wavelength_channel}A_eff_area.txt" From 7e74533f44b04729c0c2bdd4784ad212ff5dd91b Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sun, 1 Dec 2024 12:16:05 +0530 Subject: [PATCH 10/41] Correcting changelog --- changelog/150.feature.3.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/changelog/150.feature.3.rst b/changelog/150.feature.3.rst index 2c0e4b4c..39f32d9d 100644 --- a/changelog/150.feature.3.rst +++ b/changelog/150.feature.3.rst @@ -1,6 +1,4 @@ ### Added - Support for `ccd_temperature` as an Astropy Quantity in the `get_response` function. ### Changed -- Updated the `get_response` function signature to accept `ccd_temperature` as an Astropy Quantity. -- Modified the function to handle `ccd_temperature` inputs with and without units, converting them to degrees Celsius. -- Updated the docstring of the `get_response` function to reflect the new parameter type and units requirement. +- Updated `get_response` to enforce `ccd_temperature` as an Astropy Quantity with `@u.quantity_input` decorator. From 832b89cf51fede9bb18876d30eeaa9ff840b17c9 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Wed, 4 Dec 2024 19:54:22 +0530 Subject: [PATCH 11/41] Coming back to the code base where test cases did not fail so that i can debug --- sunkit_instruments/suvi/suvi.py | 9 +++++++-- sunkit_instruments/suvi/tests/test_suvi.py | 10 ++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 318921f0..05d717f0 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -102,7 +102,6 @@ def despike_l1b_array(data, dqf, filter_width=7): return _despike(data, dqf, filter_width) -@quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. @@ -173,6 +172,12 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu f"Valid spacecraft are: {VALID_SPACECRAFT}" ) + # Ensure ccd_temperature is a Quantity in degrees Celsius + if not isinstance(ccd_temperature, u.Quantity): + ccd_temperature = ccd_temperature * u.deg_C + else: + ccd_temperature = ccd_temperature.to(u.deg_C) + eff_area_file = ( PATH_TO_FILES / f"SUVI_{FLIGHT_MODEL[spacecraft]}_{wavelength_channel}A_eff_area.txt" @@ -213,4 +218,4 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "geometric_area": geometric_area, "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } - return response_info + return response_info \ No newline at end of file diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index aa385343..456a34ce 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -1,8 +1,6 @@ import numpy as np import pytest -from astropy import units as u - from sunkit_instruments import suvi # Test files are all remote data. @@ -26,15 +24,15 @@ def test_suvi_despiking_nc(L1B_NC): def test_get_response_nc(L1B_NC): - l1b_nc_response = suvi.get_response(L1B_NC, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") + l1b_nc_response = suvi.get_response(L1B_NC) assert l1b_nc_response["wavelength_channel"] == 171 def test_get_response_fits(L1B_FITS): - l1b_fits_response = suvi.get_response(L1B_FITS, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") + l1b_fits_response = suvi.get_response(L1B_FITS) assert l1b_fits_response["wavelength_channel"] == 171 def test_get_response_wavelength(): - response_195 = suvi.get_response(195, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long") - assert response_195["wavelength_channel"] == 195 + response_195 = suvi.get_response(195) + assert response_195["wavelength_channel"] == 195 \ No newline at end of file From 2277451add471be8e83c975c244f2ac1922b8a28 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Wed, 4 Dec 2024 20:23:30 +0530 Subject: [PATCH 12/41] Just Changes --- sunkit_instruments/suvi/suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 05d717f0..ff969b1b 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -5,7 +5,7 @@ from scipy.ndimage import gaussian_filter from astropy import units as u -from astropy.utils.decorators import quantity_input +from astropy.units import quantity_input import sunpy.map @@ -218,4 +218,4 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "geometric_area": geometric_area, "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } - return response_info \ No newline at end of file + return response_info From 119f05bf509660d9599297bbec6b4c4f4d10c09a Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Wed, 4 Dec 2024 20:33:09 +0530 Subject: [PATCH 13/41] updates --- sunkit_instruments/suvi/suvi.py | 74 +++++++++++----------- sunkit_instruments/suvi/tests/test_suvi.py | 2 +- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index ff969b1b..a1c4c822 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -5,7 +5,6 @@ from scipy.ndimage import gaussian_filter from astropy import units as u -from astropy.units import quantity_input import sunpy.map @@ -102,45 +101,53 @@ def despike_l1b_array(data, dqf, filter_width=7): return _despike(data, dqf, filter_width) -def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): +def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="long"): """ - Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. + Get the SUVI instrument response for a specific wavelength channel, + spacecraft, CCD temperature, and exposure type. - ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those parameters are read automatically from the metadata, or the parameters can be passed manually, with ``request`` specifying the desired wavelength channel. + ``request`` can either be an L1b filename (FITS or netCDF), in which case all of those + parameters are read automatically from the metadata, or the parameters + can be passed manually, with ``request`` specifying the desired wavelength + channel. Parameters ---------- - request : str or int ({94, 131, 171, 195, 284, 304}) - Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. - spacecraft : int, optional + request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. + Either an L1b filename (FITS or netCDF), or an integer + specifying the wavelength channel. + spacecraft: `int`, optional. Which GOES spacecraft, default is 16. - ccd_temperature : astropy.units.Quantity, optional - The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. + ccd_temperature: `float`, optional. + The CCD temperature, in degrees Celsius, default is -60. Needed for getting the correct gain number. - exposure_type : {"long", "short", "short_flare"}, optional + exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane filter selection. + The exposure type is needed for the correct focal plane + filter selection. + Can be: - - "long", "short", "short_flare" for 94 and 131 - - "long", "short_flare" for 171, 195, 284, and 304. + * "long", "short", "short_flare" for 94 and 131 + * "long", "short_flare" for 171, 195, 284, and 304. Returns ------- - dict + `dict` The instrument response information. Keys: - - "wavelength" - - "effective_area" - - "response" - - "wavelength_channel" - - "spacecraft" - - "ccd_temperature" - - "exposure_type" - - "flight_model" - - "gain" - - "solid_angle" - - "geometric_area" - - "filter_setup" + + * "wavelength" + * "effective_area" + * "response" + * "wavelength_channel" + * "spacecraft" + * "ccd_temperature" + * "exposure_type" + * "flight_model" + * "gain" + * "solid_angle" + * "geometric_area" + * "filter_setup" """ # Avoid circular import from sunkit_instruments.suvi.io import read_suvi @@ -149,8 +156,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu header, _, _ = read_suvi(request) wavelength_channel = int(header["WAVELNTH"]) spacecraft = int(header["TELESCOP"].replace(" ", "").replace("G", "")) - ccd_temp_header = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 - ccd_temperature = ccd_temp_header * u.deg_C + ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 exposure_type = "_".join( header["SCI_OBJ"].replace(" ", "").split(sep="_")[3:] ).replace("_exposure", "") @@ -172,12 +178,6 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu f"Valid spacecraft are: {VALID_SPACECRAFT}" ) - # Ensure ccd_temperature is a Quantity in degrees Celsius - if not isinstance(ccd_temperature, u.Quantity): - ccd_temperature = ccd_temperature * u.deg_C - else: - ccd_temperature = ccd_temperature.to(u.deg_C) - eff_area_file = ( PATH_TO_FILES / f"SUVI_{FLIGHT_MODEL[spacecraft]}_{wavelength_channel}A_eff_area.txt" @@ -192,10 +192,10 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu effective_area = eff_area[:, 2] * u.cm * u.cm gain_table = np.loadtxt(gain_file, skiprows=7) - temp_x = gain_table[:, 0] # Assuming temp_x is in degrees Celsius + temp_x = gain_table[:, 0] gain_y = gain_table[:, 1] gain_vs_temp = interpolate.interp1d(temp_x, gain_y) - gain = gain_vs_temp(ccd_temperature.value) + gain = gain_vs_temp(ccd_temperature) geometric_area = 19.362316 * u.cm * u.cm solid_angle = ((2.5 / 3600.0 * (np.pi / 180.0)) ** 2.0) * u.sr @@ -210,7 +210,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "response": response, "wavelength_channel": wavelength_channel, "spacecraft": "GOES-" + str(spacecraft), - "ccd_temperature": ccd_temperature, + "ccd_temperature": ccd_temperature * u.deg_C, "exposure_type": exposure_type, "flight_model": FLIGHT_MODEL[spacecraft], "gain": float(gain), diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 456a34ce..1a6657b4 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -35,4 +35,4 @@ def test_get_response_fits(L1B_FITS): def test_get_response_wavelength(): response_195 = suvi.get_response(195) - assert response_195["wavelength_channel"] == 195 \ No newline at end of file + assert response_195["wavelength_channel"] == 195 From 7b0e0e8ec199564a6d91b4281664b68409d857ec Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Wed, 4 Dec 2024 21:40:02 +0530 Subject: [PATCH 14/41] May be proceeding towards final script --- sunkit_instruments/suvi/suvi.py | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a1c4c822..4f9152e0 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -23,7 +23,6 @@ PATH_TO_FILES = Path(__file__).parent / "data" - def _despike(image, dqf_mask, filter_width): """ Helper function to do the actual despiking. @@ -46,7 +45,6 @@ def _despike(image, dqf_mask, filter_width): despiked_image[indices] = image_gaussian_filtered[indices] return despiked_image - def despike_l1b_file(filename, filter_width=7): """ Despike SUVI L1b data and return a despiked `~sunpy.map.Map`. @@ -78,7 +76,6 @@ def despike_l1b_file(filename, filter_width=7): despiked_image = _despike(image, dqf_mask, filter_width) return sunpy.map.Map(despiked_image, header) - def despike_l1b_array(data, dqf, filter_width=7): """ Despike SUVI L1b data and return a despiked `numpy.ndarray`. @@ -100,8 +97,8 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) - -def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="long"): +@u.quantity_input(ccd_temperature=u.deg_C) +def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. @@ -113,18 +110,16 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. - Either an L1b filename (FITS or netCDF), or an integer - specifying the wavelength channel. - spacecraft: `int`, optional. + request: `str` or {94 | 131 | 171 | 195 | 284 | 304} + Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. + spacecraft: `int`, optional Which GOES spacecraft, default is 16. - ccd_temperature: `float`, optional. - The CCD temperature, in degrees Celsius, default is -60. + ccd_temperature: `astropy.units.Quantity` + The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. - exposure_type: {"long" | "short" | "short_flare"}, optional. + exposure_type: {"long" | "short" | "short_flare"}, optional The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane - filter selection. + The exposure type is needed for the correct focal plane filter selection. Can be: * "long", "short", "short_flare" for 94 and 131 @@ -135,7 +130,6 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l `dict` The instrument response information. Keys: - * "wavelength" * "effective_area" * "response" @@ -156,7 +150,8 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l header, _, _ = read_suvi(request) wavelength_channel = int(header["WAVELNTH"]) spacecraft = int(header["TELESCOP"].replace(" ", "").replace("G", "")) - ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temperature = ccd_temp_avg * u.deg_C exposure_type = "_".join( header["SCI_OBJ"].replace(" ", "").split(sep="_")[3:] ).replace("_exposure", "") @@ -195,7 +190,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l temp_x = gain_table[:, 0] gain_y = gain_table[:, 1] gain_vs_temp = interpolate.interp1d(temp_x, gain_y) - gain = gain_vs_temp(ccd_temperature) + gain = gain_vs_temp(ccd_temperature.to(u.deg_C).value) geometric_area = 19.362316 * u.cm * u.cm solid_angle = ((2.5 / 3600.0 * (np.pi / 180.0)) ** 2.0) * u.sr @@ -210,7 +205,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l "response": response, "wavelength_channel": wavelength_channel, "spacecraft": "GOES-" + str(spacecraft), - "ccd_temperature": ccd_temperature * u.deg_C, + "ccd_temperature": ccd_temperature, "exposure_type": exposure_type, "flight_model": FLIGHT_MODEL[spacecraft], "gain": float(gain), @@ -218,4 +213,4 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l "geometric_area": geometric_area, "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } - return response_info + return response_info \ No newline at end of file From e5c8160638d3a15fb27602346ba6d02bdf7fc122 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Wed, 4 Dec 2024 21:53:26 +0530 Subject: [PATCH 15/41] Fixing pre-commit --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 4f9152e0..dddddfdd 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -213,4 +213,4 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "geometric_area": geometric_area, "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } - return response_info \ No newline at end of file + return response_info From 5da93f3d448946befec52939c030a2883baecef1 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Wed, 4 Dec 2024 23:17:18 +0530 Subject: [PATCH 16/41] Update changelog/150.feature.3.rst Co-authored-by: Nabil Freij --- changelog/150.feature.3.rst | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/changelog/150.feature.3.rst b/changelog/150.feature.3.rst index 39f32d9d..69cf4b95 100644 --- a/changelog/150.feature.3.rst +++ b/changelog/150.feature.3.rst @@ -1,4 +1 @@ -### Added -- Support for `ccd_temperature` as an Astropy Quantity in the `get_response` function. -### Changed -- Updated `get_response` to enforce `ccd_temperature` as an Astropy Quantity with `@u.quantity_input` decorator. +Updated `~.get_response` to enforce ``ccd_temperature`` as an `astropy.units.Quantity` From c47016c8d6bf47b19bf68c0fa7d8554899ac6fbd Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Fri, 6 Dec 2024 03:47:44 +0530 Subject: [PATCH 17/41] Passing all the test cases --- sunkit_instruments/suvi/tests/test_suvi.py | 25 +++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 1a6657b4..897722a8 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -1,5 +1,6 @@ import numpy as np import pytest +import astropy.units as u from sunkit_instruments import suvi @@ -8,31 +9,45 @@ def test_suvi_despiking_fits(L1B_FITS): - _, l1b_fits_data, _ = suvi.read_suvi( - L1B_FITS, - ) - despiked_l1b_fits_data = l1b_fits_data + _, l1b_fits_data, _ = suvi.read_suvi(L1B_FITS) despiked_l1b_fits_data = suvi.despike_l1b_file(L1B_FITS) assert not np.array_equal(l1b_fits_data, despiked_l1b_fits_data) def test_suvi_despiking_nc(L1B_NC): _, l1b_nc_data, _ = suvi.read_suvi(L1B_NC) - despiked_l1b_nc_data = l1b_nc_data despiked_l1b_nc_data = suvi.despike_l1b_file(L1B_NC) assert not np.array_equal(l1b_nc_data, despiked_l1b_nc_data) def test_get_response_nc(L1B_NC): + header, _, _ = suvi.read_suvi(L1B_NC) + ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_nc_response = suvi.get_response(L1B_NC) assert l1b_nc_response["wavelength_channel"] == 171 + assert l1b_nc_response["ccd_temperature"] == ccd_temp_avg def test_get_response_fits(L1B_FITS): + header, _, _ = suvi.read_suvi(L1B_FITS) + ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_fits_response = suvi.get_response(L1B_FITS) assert l1b_fits_response["wavelength_channel"] == 171 + assert l1b_fits_response["ccd_temperature"] == ccd_temp_avg def test_get_response_wavelength(): response_195 = suvi.get_response(195) assert response_195["wavelength_channel"] == 195 + + +def test_get_response_explicit_temperature(): + temp = -70.0 * u.deg_C + response = suvi.get_response(195, ccd_temperature=temp) + assert response["ccd_temperature"] == temp + + +def test_get_response_invalid_temperature(): + temp = -70.0 # Without units + with pytest.raises(TypeError): + suvi.get_response(195, ccd_temperature=temp) \ No newline at end of file From d8b1cae14315fc4f7fcb0ef9cf26e5aebb6c95c3 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Fri, 6 Dec 2024 04:05:30 +0530 Subject: [PATCH 18/41] Checking precommit --- sunkit_instruments/suvi/tests/test_suvi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 897722a8..a63569d0 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -1,5 +1,6 @@ import numpy as np import pytest + import astropy.units as u from sunkit_instruments import suvi @@ -50,4 +51,4 @@ def test_get_response_explicit_temperature(): def test_get_response_invalid_temperature(): temp = -70.0 # Without units with pytest.raises(TypeError): - suvi.get_response(195, ccd_temperature=temp) \ No newline at end of file + suvi.get_response(195, ccd_temperature=temp) From cca132c1dc160470d0aad814885f64e8d44336ee Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 09:42:43 +0530 Subject: [PATCH 19/41] Addressing the comments --- sunkit_instruments/suvi/suvi.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index dddddfdd..66430ddc 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -23,6 +23,7 @@ PATH_TO_FILES = Path(__file__).parent / "data" + def _despike(image, dqf_mask, filter_width): """ Helper function to do the actual despiking. @@ -45,6 +46,7 @@ def _despike(image, dqf_mask, filter_width): despiked_image[indices] = image_gaussian_filtered[indices] return despiked_image + def despike_l1b_file(filename, filter_width=7): """ Despike SUVI L1b data and return a despiked `~sunpy.map.Map`. @@ -76,6 +78,7 @@ def despike_l1b_file(filename, filter_width=7): despiked_image = _despike(image, dqf_mask, filter_width) return sunpy.map.Map(despiked_image, header) + def despike_l1b_array(data, dqf, filter_width=7): """ Despike SUVI L1b data and return a despiked `numpy.ndarray`. @@ -97,6 +100,7 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) + @u.quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ From d7f11bb0c0bfd2a3387216ebb7294b5bc360040e Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 11:16:30 +0530 Subject: [PATCH 20/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 66430ddc..f9c21de2 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -119,7 +119,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu spacecraft: `int`, optional Which GOES spacecraft, default is 16. ccd_temperature: `astropy.units.Quantity` - The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. + The CCD temperature, in degrees Celsius, default is ``-60.0 * u.deg_C``. Needed for getting the correct gain number. exposure_type: {"long" | "short" | "short_flare"}, optional The exposure type of the SUVI image. From 0340232636d276c3386e1ebd02773185f98ff252 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 11:31:17 +0530 Subject: [PATCH 21/41] addressing comments --- sunkit_instruments/suvi/suvi.py | 13 +++++++------ sunkit_instruments/suvi/tests/test_suvi.py | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 66430ddc..bc6089ea 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -121,9 +121,10 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu ccd_temperature: `astropy.units.Quantity` The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. - exposure_type: {"long" | "short" | "short_flare"}, optional + exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane filter selection. + The exposure type is needed for the correct focal plane + filter selection. Can be: * "long", "short", "short_flare" for 94 and 131 @@ -134,6 +135,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu `dict` The instrument response information. Keys: + * "wavelength" * "effective_area" * "response" @@ -154,8 +156,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu header, _, _ = read_suvi(request) wavelength_channel = int(header["WAVELNTH"]) spacecraft = int(header["TELESCOP"].replace(" ", "").replace("G", "")) - ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 - ccd_temperature = ccd_temp_avg * u.deg_C + ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 exposure_type = "_".join( header["SCI_OBJ"].replace(" ", "").split(sep="_")[3:] ).replace("_exposure", "") @@ -194,7 +195,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu temp_x = gain_table[:, 0] gain_y = gain_table[:, 1] gain_vs_temp = interpolate.interp1d(temp_x, gain_y) - gain = gain_vs_temp(ccd_temperature.to(u.deg_C).value) + gain = gain_vs_temp(ccd_temperature) geometric_area = 19.362316 * u.cm * u.cm solid_angle = ((2.5 / 3600.0 * (np.pi / 180.0)) ** 2.0) * u.sr @@ -209,7 +210,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "response": response, "wavelength_channel": wavelength_channel, "spacecraft": "GOES-" + str(spacecraft), - "ccd_temperature": ccd_temperature, + "ccd_temperature": ccd_temperature * u.deg_C, "exposure_type": exposure_type, "flight_model": FLIGHT_MODEL[spacecraft], "gain": float(gain), diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index a63569d0..ee02722b 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -31,10 +31,10 @@ def test_get_response_nc(L1B_NC): def test_get_response_fits(L1B_FITS): header, _, _ = suvi.read_suvi(L1B_FITS) - ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C + ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_fits_response = suvi.get_response(L1B_FITS) assert l1b_fits_response["wavelength_channel"] == 171 - assert l1b_fits_response["ccd_temperature"] == ccd_temp_avg + assert l1b_fits_response["ccd_temperature"] == ccd_temperature def test_get_response_wavelength(): From 4e5fd72856258e0f5362096645c897652bbde8c8 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 11:59:22 +0530 Subject: [PATCH 22/41] Addressing comments --- sunkit_instruments/suvi/suvi.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 6559bebc..3bf3ff74 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -100,7 +100,6 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) - @u.quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ @@ -114,12 +113,13 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304} - Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. - spacecraft: `int`, optional + request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. + Either an L1b filename (FITS or netCDF), or an integer4 + specifying the wavelength channel. + spacecraft: `int`, optional. Which GOES spacecraft, default is 16. - ccd_temperature: `astropy.units.Quantity` - The CCD temperature, in degrees Celsius, default is ``-60.0 * u.deg_C``. + ccd_temperature: `float`, optional. + The CCD temperature, in degrees Celsius, default is -60.0. Needed for getting the correct gain number. exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. @@ -219,3 +219,4 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } return response_info + From 22c8f7c779cdeae3189450ff099f3b4d0118bfe2 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 12:02:03 +0530 Subject: [PATCH 23/41] Addressing comments --- sunkit_instruments/suvi/suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 3bf3ff74..c33a79c6 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -114,12 +114,12 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. - Either an L1b filename (FITS or netCDF), or an integer4 + Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. spacecraft: `int`, optional. Which GOES spacecraft, default is 16. ccd_temperature: `float`, optional. - The CCD temperature, in degrees Celsius, default is -60.0. + The CCD temperature, in degrees Celsius, default is -60. Needed for getting the correct gain number. exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. From 427ada40769b54b8b78eea34b6592e12ed5bdf69 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 12:13:45 +0530 Subject: [PATCH 24/41] precommit-fix --- sunkit_instruments/suvi/suvi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index c33a79c6..0a99129a 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -219,4 +219,3 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu "filter_setup": FILTER_SETUP[wavelength_channel][exposure_type], } return response_info - From 49d11b69731bc2447ddf3e4077e6e351cd07306c Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 12:22:33 +0530 Subject: [PATCH 25/41] Resolving final comments --- sunkit_instruments/suvi/suvi.py | 4 ++-- sunkit_instruments/suvi/tests/test_suvi.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 0a99129a..a1c4c822 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -100,8 +100,8 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) -@u.quantity_input(ccd_temperature=u.deg_C) -def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): + +def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="long"): """ Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index ee02722b..73298161 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -7,16 +7,18 @@ # Test files are all remote data. pytestmark = pytest.mark.remote_data - - def test_suvi_despiking_fits(L1B_FITS): - _, l1b_fits_data, _ = suvi.read_suvi(L1B_FITS) + _, l1b_fits_data, _ = suvi.read_suvi( + L1B_FITS, + ) + despiked_l1b_fits_data = l1b_fits_data despiked_l1b_fits_data = suvi.despike_l1b_file(L1B_FITS) assert not np.array_equal(l1b_fits_data, despiked_l1b_fits_data) def test_suvi_despiking_nc(L1B_NC): _, l1b_nc_data, _ = suvi.read_suvi(L1B_NC) + despiked_l1b_nc_data = l1b_nc_data despiked_l1b_nc_data = suvi.despike_l1b_file(L1B_NC) assert not np.array_equal(l1b_nc_data, despiked_l1b_nc_data) From 0b1de6a55bc3f9f9fdf17f10be32fc480fc21626 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 12:43:47 +0530 Subject: [PATCH 26/41] back to the changes --- sunkit_instruments/suvi/suvi.py | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a1c4c822..dddddfdd 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -23,7 +23,6 @@ PATH_TO_FILES = Path(__file__).parent / "data" - def _despike(image, dqf_mask, filter_width): """ Helper function to do the actual despiking. @@ -46,7 +45,6 @@ def _despike(image, dqf_mask, filter_width): despiked_image[indices] = image_gaussian_filtered[indices] return despiked_image - def despike_l1b_file(filename, filter_width=7): """ Despike SUVI L1b data and return a despiked `~sunpy.map.Map`. @@ -78,7 +76,6 @@ def despike_l1b_file(filename, filter_width=7): despiked_image = _despike(image, dqf_mask, filter_width) return sunpy.map.Map(despiked_image, header) - def despike_l1b_array(data, dqf, filter_width=7): """ Despike SUVI L1b data and return a despiked `numpy.ndarray`. @@ -100,8 +97,8 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) - -def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="long"): +@u.quantity_input(ccd_temperature=u.deg_C) +def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ Get the SUVI instrument response for a specific wavelength channel, spacecraft, CCD temperature, and exposure type. @@ -113,18 +110,16 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. - Either an L1b filename (FITS or netCDF), or an integer - specifying the wavelength channel. - spacecraft: `int`, optional. + request: `str` or {94 | 131 | 171 | 195 | 284 | 304} + Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. + spacecraft: `int`, optional Which GOES spacecraft, default is 16. - ccd_temperature: `float`, optional. - The CCD temperature, in degrees Celsius, default is -60. + ccd_temperature: `astropy.units.Quantity` + The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. - exposure_type: {"long" | "short" | "short_flare"}, optional. + exposure_type: {"long" | "short" | "short_flare"}, optional The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane - filter selection. + The exposure type is needed for the correct focal plane filter selection. Can be: * "long", "short", "short_flare" for 94 and 131 @@ -135,7 +130,6 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l `dict` The instrument response information. Keys: - * "wavelength" * "effective_area" * "response" @@ -156,7 +150,8 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l header, _, _ = read_suvi(request) wavelength_channel = int(header["WAVELNTH"]) spacecraft = int(header["TELESCOP"].replace(" ", "").replace("G", "")) - ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 + ccd_temperature = ccd_temp_avg * u.deg_C exposure_type = "_".join( header["SCI_OBJ"].replace(" ", "").split(sep="_")[3:] ).replace("_exposure", "") @@ -195,7 +190,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l temp_x = gain_table[:, 0] gain_y = gain_table[:, 1] gain_vs_temp = interpolate.interp1d(temp_x, gain_y) - gain = gain_vs_temp(ccd_temperature) + gain = gain_vs_temp(ccd_temperature.to(u.deg_C).value) geometric_area = 19.362316 * u.cm * u.cm solid_angle = ((2.5 / 3600.0 * (np.pi / 180.0)) ** 2.0) * u.sr @@ -210,7 +205,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0, exposure_type="l "response": response, "wavelength_channel": wavelength_channel, "spacecraft": "GOES-" + str(spacecraft), - "ccd_temperature": ccd_temperature * u.deg_C, + "ccd_temperature": ccd_temperature, "exposure_type": exposure_type, "flight_model": FLIGHT_MODEL[spacecraft], "gain": float(gain), From e1b7abf7509ab9257ba653330ad307812cfb80c4 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 12:56:49 +0530 Subject: [PATCH 27/41] fixing codestyle and resolving commits --- sunkit_instruments/suvi/suvi.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index dddddfdd..02c00cba 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -23,6 +23,7 @@ PATH_TO_FILES = Path(__file__).parent / "data" + def _despike(image, dqf_mask, filter_width): """ Helper function to do the actual despiking. @@ -45,6 +46,7 @@ def _despike(image, dqf_mask, filter_width): despiked_image[indices] = image_gaussian_filtered[indices] return despiked_image + def despike_l1b_file(filename, filter_width=7): """ Despike SUVI L1b data and return a despiked `~sunpy.map.Map`. @@ -76,6 +78,7 @@ def despike_l1b_file(filename, filter_width=7): despiked_image = _despike(image, dqf_mask, filter_width) return sunpy.map.Map(despiked_image, header) + def despike_l1b_array(data, dqf, filter_width=7): """ Despike SUVI L1b data and return a despiked `numpy.ndarray`. @@ -97,6 +100,7 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) + @u.quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ @@ -130,6 +134,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu `dict` The instrument response information. Keys: + * "wavelength" * "effective_area" * "response" From c2d1899bc1df655100f7e0c726cbcfe212f0779e Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 13:03:28 +0530 Subject: [PATCH 28/41] precommit-fix --- sunkit_instruments/suvi/suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 02c00cba..aa8f9cc5 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -114,7 +114,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304} + request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. spacecraft: `int`, optional Which GOES spacecraft, default is 16. @@ -134,7 +134,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu `dict` The instrument response information. Keys: - + * "wavelength" * "effective_area" * "response" From c98c6274d864f2277794c2b52659454c3ccee5bc Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:11:24 +0530 Subject: [PATCH 29/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index aa8f9cc5..0df407c7 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -114,7 +114,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. + request: `str` or {94, 131, 171, 195, 284, 304} Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. spacecraft: `int`, optional Which GOES spacecraft, default is 16. From 6084b6cfffb8411824afabf2040467139aa643a5 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 13:17:19 +0530 Subject: [PATCH 30/41] Adding line space in test_suvi.py --- sunkit_instruments/suvi/tests/test_suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 73298161..7af6931c 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -4,9 +4,9 @@ import astropy.units as u from sunkit_instruments import suvi - -# Test files are all remote data. pytestmark = pytest.mark.remote_data + + def test_suvi_despiking_fits(L1B_FITS): _, l1b_fits_data, _ = suvi.read_suvi( L1B_FITS, From 64148c9bb90627a037766ed7d97f2ceac2cdff35 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:22:07 +0530 Subject: [PATCH 31/41] Update sunkit_instruments/suvi/tests/test_suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/tests/test_suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 7af6931c..3c61519b 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -28,7 +28,7 @@ def test_get_response_nc(L1B_NC): ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_nc_response = suvi.get_response(L1B_NC) assert l1b_nc_response["wavelength_channel"] == 171 - assert l1b_nc_response["ccd_temperature"] == ccd_temp_avg + assert l1b_nc_response["ccd_temperature"] == (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C def test_get_response_fits(L1B_FITS): From f2bf28ac179be8b7de62008d0f5acd0a1a231931 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:22:28 +0530 Subject: [PATCH 32/41] Update sunkit_instruments/suvi/tests/test_suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/tests/test_suvi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 3c61519b..f2550d1e 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -25,7 +25,6 @@ def test_suvi_despiking_nc(L1B_NC): def test_get_response_nc(L1B_NC): header, _, _ = suvi.read_suvi(L1B_NC) - ccd_temp_avg = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_nc_response = suvi.get_response(L1B_NC) assert l1b_nc_response["wavelength_channel"] == 171 assert l1b_nc_response["ccd_temperature"] == (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C From 943695503548e583f80f27041c0f0a9307c23a7b Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:23:01 +0530 Subject: [PATCH 33/41] Update sunkit_instruments/suvi/tests/test_suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/tests/test_suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index f2550d1e..fdbb1766 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -35,7 +35,7 @@ def test_get_response_fits(L1B_FITS): ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_fits_response = suvi.get_response(L1B_FITS) assert l1b_fits_response["wavelength_channel"] == 171 - assert l1b_fits_response["ccd_temperature"] == ccd_temperature + assert l1b_fits_response["ccd_temperature"] == (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C def test_get_response_wavelength(): From c203be75b24da0327210fd606d2a88f18f8d8f68 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 13:23:23 +0530 Subject: [PATCH 34/41] Update sunkit_instruments/suvi/tests/test_suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/tests/test_suvi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index fdbb1766..b701014f 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -32,7 +32,6 @@ def test_get_response_nc(L1B_NC): def test_get_response_fits(L1B_FITS): header, _, _ = suvi.read_suvi(L1B_FITS) - ccd_temperature = (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C l1b_fits_response = suvi.get_response(L1B_FITS) assert l1b_fits_response["wavelength_channel"] == 171 assert l1b_fits_response["ccd_temperature"] == (header["CCD_TMP1"] + header["CCD_TMP2"]) / 2.0 * u.deg_C From 26a0548869a39bd586728fbd321a5a21ade45860 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 13:35:26 +0530 Subject: [PATCH 35/41] precommit-fix --- sunkit_instruments/suvi/tests/test_suvi.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sunkit_instruments/suvi/tests/test_suvi.py b/sunkit_instruments/suvi/tests/test_suvi.py index 7af6931c..4e321731 100644 --- a/sunkit_instruments/suvi/tests/test_suvi.py +++ b/sunkit_instruments/suvi/tests/test_suvi.py @@ -4,6 +4,7 @@ import astropy.units as u from sunkit_instruments import suvi + pytestmark = pytest.mark.remote_data From 89e9221aa495bbcdcdd3303f6dfa7af35851921e Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 19:16:29 +0530 Subject: [PATCH 36/41] addressing old comments --- sunkit_instruments/suvi/suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 0df407c7..a92d2c30 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -114,9 +114,9 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94, 131, 171, 195, 284, 304} + request: `str` or {94, 131, 171, 195, 284, 304}. Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. - spacecraft: `int`, optional + spacecraft: `int`, optional. Which GOES spacecraft, default is 16. ccd_temperature: `astropy.units.Quantity` The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. From 35e03e056b7f1f4f84424ab8feb7003d8192005d Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 19:20:37 +0530 Subject: [PATCH 37/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a92d2c30..bada6c4a 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -119,7 +119,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu spacecraft: `int`, optional. Which GOES spacecraft, default is 16. ccd_temperature: `astropy.units.Quantity` - The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. + The CCD temperature, in degrees Celsius, default is ``-60.0 * u.deg_C``. Needed for getting the correct gain number. exposure_type: {"long" | "short" | "short_flare"}, optional The exposure type of the SUVI image. From 91063ca0a61eb3bc35ace3b79c15306952d22a3d Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 19:31:49 +0530 Subject: [PATCH 38/41] addressing old comments --- sunkit_instruments/suvi/suvi.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index a92d2c30..bd295f9f 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -100,7 +100,6 @@ def despike_l1b_array(data, dqf, filter_width=7): """ return _despike(data, dqf, filter_width) - @u.quantity_input(ccd_temperature=u.deg_C) def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposure_type="long"): """ @@ -114,16 +113,18 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94, 131, 171, 195, 284, 304}. - Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. + request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. + Either an L1b filename (FITS or netCDF), or an integer + specifying the wavelength channel. spacecraft: `int`, optional. Which GOES spacecraft, default is 16. ccd_temperature: `astropy.units.Quantity` The CCD temperature, in degrees Celsius, default is -60.0 * u.deg_C. Needed for getting the correct gain number. - exposure_type: {"long" | "short" | "short_flare"}, optional + exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. - The exposure type is needed for the correct focal plane filter selection. + The exposure type is needed for the correct focal plane + filter selection. Can be: * "long", "short", "short_flare" for 94 and 131 From f0d5c8d51d75e6310006023a1c9c3db733da0fb3 Mon Sep 17 00:00:00 2001 From: Abinash Mahapatra <89697294+Abinash-bit@users.noreply.github.com> Date: Sat, 7 Dec 2024 19:34:49 +0530 Subject: [PATCH 39/41] Update sunkit_instruments/suvi/suvi.py Co-authored-by: Nabil Freij --- sunkit_instruments/suvi/suvi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 9d5e6b52..3f38fe08 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -113,7 +113,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu Parameters ---------- - request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. + request: `str` or {94, 131, 171, 195, 284, 304} Either an L1b filename (FITS or netCDF), or an integer specifying the wavelength channel. spacecraft: `int`, optional. From 8fd73daf7e03c3a9b8022e046ea5274139c60603 Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 19:47:05 +0530 Subject: [PATCH 40/41] just precommit --- sunkit_instruments/suvi/suvi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sunkit_instruments/suvi/suvi.py b/sunkit_instruments/suvi/suvi.py index 9d5e6b52..d7502c7f 100644 --- a/sunkit_instruments/suvi/suvi.py +++ b/sunkit_instruments/suvi/suvi.py @@ -115,7 +115,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu ---------- request: `str` or {94 | 131 | 171 | 195 | 284 | 304}. Either an L1b filename (FITS or netCDF), or an integer - specifying the wavelength channel. + specifying the wavelength channel. spacecraft: `int`, optional. Which GOES spacecraft, default is 16. ccd_temperature: `astropy.units.Quantity` @@ -124,7 +124,7 @@ def get_response(request, spacecraft=16, ccd_temperature=-60.0 * u.deg_C, exposu exposure_type: {"long" | "short" | "short_flare"}, optional. The exposure type of the SUVI image. The exposure type is needed for the correct focal plane - filter selection. + filter selection. Can be: * "long", "short", "short_flare" for 94 and 131 From c99b66fa0e88eddbcdf13d245bc0d5bda924446f Mon Sep 17 00:00:00 2001 From: Abinash-bit Date: Sat, 7 Dec 2024 20:02:57 +0530 Subject: [PATCH 41/41] Changing the name of the changelog --- changelog/150.feature.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog/150.feature.rst diff --git a/changelog/150.feature.rst b/changelog/150.feature.rst new file mode 100644 index 00000000..69cf4b95 --- /dev/null +++ b/changelog/150.feature.rst @@ -0,0 +1 @@ +Updated `~.get_response` to enforce ``ccd_temperature`` as an `astropy.units.Quantity`