diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000000..69703cad06
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,4 @@
+# Migration commits for linting, formatting
+a008125e8203ae7245af8af945846ae54e0d51c4
+7d9f5008ae77a7ded8c721e952f958e56c4174f5
+977964573e4260c096d6f74ec908da7d810f1e80
diff --git a/.github/codecov.yml b/.github/codecov.yml
index 93b33a1713..9b3ef12bf5 100644
--- a/.github/codecov.yml
+++ b/.github/codecov.yml
@@ -16,4 +16,4 @@ coverage:
# extension:
# https://github.com/codecov/browser-extension
target: auto
- threshold: 1%
\ No newline at end of file
+ threshold: 1%
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index fd49e1c275..c5c71c97c6 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,4 +5,4 @@ updates:
schedule:
interval: daily
time: "09:00"
- open-pull-requests-limit: 10
\ No newline at end of file
+ open-pull-requests-limit: 10
diff --git a/.github/workflows/dev_tests.yaml b/.github/workflows/dev_tests.yaml
new file mode 100644
index 0000000000..17edb9c67f
--- /dev/null
+++ b/.github/workflows/dev_tests.yaml
@@ -0,0 +1,48 @@
+name: Run development tests
+
+on:
+ pull_request:
+ push:
+ workflow_dispatch:
+ schedule:
+ # Run every Sunday at 03:53 UTC
+ - cron: 53 3 * * 0
+
+jobs:
+ dev_tests:
+ runs-on: "${{ matrix.os }}"
+ strategy:
+ matrix:
+ python-version: [
+ "3.11",
+ "3.12",
+ "3.13",
+ ]
+
+ os:
+ - ubuntu-latest
+ - macos-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: conda-incubator/setup-miniconda@v3
+ with:
+ auto-update-conda: true
+ channels: conda-forge
+ conda-remove-defaults: true
+ miniforge-version: latest
+
+ - name: Install python
+ uses: actions/setup-python@v5
+ with:
+ python-version: |
+ 3.11
+ 3.12
+ 3.13
+
+
+ - name: Run dev tests
+ run: |
+ python -m pip install nox
+ nox -s run_dev_tests -- -vv
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000000..52350e589c
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,43 @@
+# Linting and format-checking workflow for the repository.
+#
+# Behavior in this file, other than setup, is controlled in the file
+# .pre-commit-config.yaml in the top directory of the repository.
+#
+# Any automations should be added to that file. This check runs over the entire
+# repository, not just changes.
+name: Lint repository
+
+on:
+ pull_request:
+ push:
+ workflow_dispatch:
+ schedule:
+ # Run every Sunday at 03:53 UTC
+ - cron: 53 3 * * 0
+
+jobs:
+ lint:
+ runs-on: "${{ matrix.os }}"
+ strategy:
+ matrix:
+ python-version: ["3.12"]
+ os:
+ - ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install python
+ uses: actions/setup-python@v5
+ with:
+ python-version: ${{ matrix.python-version }}
+
+
+ - name: Install packages
+ shell: bash -l {0}
+ run: python -m pip install nox
+
+ - name: Run pre-commit via nox
+ shell: bash -l {0}
+ run: |
+ nox -s lint
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 84eeed0039..453e8ef24b 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -9,7 +9,7 @@ on:
- cron: 53 3 * * 0
jobs:
- tests:
+ unit_tests:
runs-on: ubuntu-latest
strategy:
matrix:
diff --git a/.jenkins/Jenkinsfile_conda b/.jenkins/Jenkinsfile_conda
index 59acb0b4d3..bb6743d2de 100644
--- a/.jenkins/Jenkinsfile_conda
+++ b/.jenkins/Jenkinsfile_conda
@@ -148,4 +148,3 @@ pipeline {
}
}
}
-
diff --git a/.jenkins/scripts/setup_dirs.sh b/.jenkins/scripts/setup_dirs.sh
index bd5e7460a1..7aabc432c8 100755
--- a/.jenkins/scripts/setup_dirs.sh
+++ b/.jenkins/scripts/setup_dirs.sh
@@ -17,4 +17,3 @@ if [[ -n "${DRAGONS_TEST_OUT-}" ]]; then
else
echo "DRAGONS_TEST_OUT is not set, so not deleting it"
fi
-
diff --git a/.jenkins/scripts/update_files_permissions.sh b/.jenkins/scripts/update_files_permissions.sh
index ebade41477..396101f848 100755
--- a/.jenkins/scripts/update_files_permissions.sh
+++ b/.jenkins/scripts/update_files_permissions.sh
@@ -8,4 +8,3 @@ chmod -Rv 775 $DRAGONS_TEST_INPUTS || echo 1
chmod -Rv 775 $DRAGONS_TEST_OUTPUTS || echo 1
chmod -Rv 775 $DRAGONS_TEST_REFS || echo 1
-
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000..6be007f5bd
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,68 @@
+# pre-commit configuration for DRAGONS
+#
+# Please follow these guidelines:
+#
+# 1) All linting behavior can & should be defined in this file. For example,
+# that includes:
+#
+# + Formatting
+# + Syntax/type checks
+# + Commit protections/standards
+#
+# 2) Do not include any tests involving the execution of this software, under
+# any circumstances.
+#
+# 3) This should be a superset of the NOIRLab Python Standard, which can be
+# found here:
+#
+# https://github.com/teald/python-standard-template/blob/main/.pre-commit-config.yaml
+default_stages: [pre-commit]
+
+repos:
+- repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v5.0.0
+ hooks:
+ - id: check-yaml
+ - id: check-json
+ - id: check-toml
+ - id: check-docstring-first
+ exclude: "archived/"
+ - id: check-case-conflict
+ - id: trailing-whitespace
+ - id: end-of-file-fixer
+ - id: check-symlinks
+ - id: check-vcs-permalinks
+ - id: forbid-submodules
+
+- repo: https://github.com/executablebooks/mdformat
+ rev: 0.7.18 # Use the ref you want to point at
+ hooks:
+ - id: mdformat
+ # Optionally add plugins
+ additional_dependencies:
+ - mdformat-gfm
+ - mdformat-black
+ args: ['--wrap=80']
+
+# Below is the formatter (to be turned on after pyproject.toml update)
+# # Mirror uses compiled black, so faster.
+# - repo: https://github.com/psf/black-pre-commit-mirror
+# rev: 24.8.0
+# hooks:
+# - id: black
+# # It is recommended to specify the latest version of Python
+# # supported by your project here, or alternatively use
+# # pre-commit's default_language_version, see
+# # https://pre-commit.com/#top_level-default_language_version
+# language_version: python3.12
+# exclude: "archived/"
+
+
+# Below is linter (to be turned on after pyproject.toml update)
+# - repo: https://github.com/astral-sh/ruff-pre-commit
+# # Ruff version.
+# rev: v0.8.3
+# hooks:
+# # Run the linter.
+# - id: ruff
+# exclude: "archived/"
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 2b9e8a3620..2094e2bf54 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/LICENSE b/LICENSE
index 8b7e96aaf0..9de1b5ffac 100644
--- a/LICENSE
+++ b/LICENSE
@@ -31,4 +31,3 @@ GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/README.md b/README.md
index f624a8bbf2..9d5cfcb84e 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,3 @@
-
-
|
@@ -11,18 +9,19 @@
# Current Status
-**The stable version is v3.2.2.**
+**The stable version is v3.2.2.**
-[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13821517.svg)](https://doi.org/10.5281/zenodo.13821517) DRAGONS is distributed as a conda package, *dragons*, and it is
-included in the conda *gemini* stack.
+[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.13821517.svg)](https://doi.org/10.5281/zenodo.13821517)
+DRAGONS is distributed as a conda package, *dragons*, and it is included in the
+conda *gemini* stack.
Version 3.2 is recommend for the reduction of **imaging** data from Gemini's
current facility instruments: GMOS, NIRI, Flamingos-2, and GSAOI, for the
reduction of GMOS longslit spectroscopy data, and the reduction of GHOST data.
-To reduce other types of Gemini spectroscopy data, please continue to use
-the [Gemini IRAF package](https://www.gemini.edu/observing/phase-iii/reducing-data/gemini-iraf-data-reduction-software).
+To reduce other types of Gemini spectroscopy data, please continue to use the
+[Gemini IRAF package](https://www.gemini.edu/observing/phase-iii/reducing-data/gemini-iraf-data-reduction-software).
To install DRAGONS:
@@ -37,40 +36,40 @@ $ conda config --add channels conda-forge
$ conda config --add channels http://astroconda.gemini.edu/public
```
+A list of changes since 3.1 can be found in the
+[Change Logs](https://dragons.readthedocs.io/en/v3.2.0/changes.html).
-A list of changes since 3.1 can be found in the [Change Logs](https://dragons.readthedocs.io/en/v3.2.0/changes.html).
+______________________________________________________________________
----
# What is DRAGONS
-DRAGONS is a platform for the reduction and processing of astronomical data.
-The DRAGONS meta-package includes an infrastructure for automation of the
-processes and algorithms for processing of astronomical data, with focus on the
-reduction of Gemini data.
+DRAGONS is a platform for the reduction and processing of astronomical data. The
+DRAGONS meta-package includes an infrastructure for automation of the processes
+and algorithms for processing of astronomical data, with focus on the reduction
+of Gemini data.
----
+______________________________________________________________________
# Documentation
+
Documentation on DRAGONS v3.2 is available on "readthedocs" at:
-* https://dragons.readthedocs.io/en/v3.2.2/
+- https://dragons.readthedocs.io/en/v3.2.2/
There your will find manuals for Astrodata and the Recipe System, and hands-on
tutorials on reducing Gemini imaging data with DRAGONS.
-Gemini users with imaging data to reduce should pick the tutorial discussing
-the reduction of data from the appropriate instrument.
+Gemini users with imaging data to reduce should pick the tutorial discussing the
+reduction of data from the appropriate instrument.
-Software developers should start with the Astrodata and Recipe System
-manuals.
+Software developers should start with the Astrodata and Recipe System manuals.
----
+______________________________________________________________________
# Setting up a development environment
-To run checkouts, first set up a development conda environment. This is what
-we are using at this time for the `master` branch and the `release/3.2.x`
-branches.
+To run checkouts, first set up a development conda environment. This is what we
+are using at this time for the `master` branch and the `release/3.2.x` branches.
```
$ conda create -n dgdev3.10_20240401 python=3.10 astropy=6 astroquery matplotlib numpy psutil pytest python-dateutil requests scikit-image scipy sextractor sqlalchemy ds9 gwcs specutils sphinx sphinx_rtd_theme bokeh holoviews cython future astroscrappy=1.1 fitsverify imexam
@@ -78,8 +77,8 @@ $ conda activate dgdev3.10_20240401
$ pip install git+https://github.com/GeminiDRSoftware/GeminiObsDB.git@release/1.0.x
$ pip install git+https://github.com/GeminiDRSoftware/GeminiCalMgr.git@release/1.1.x
```
-Dependencies change all the time and can break the development environment
-or cause problems when conda tries to find a solution for the dependencies.
-This not guaranteed to work flawlessly, you might have to adjust version
-requirements.
+Dependencies change all the time and can break the development environment or
+cause problems when conda tries to find a solution for the dependencies. This
+not guaranteed to work flawlessly, you might have to adjust version
+requirements.
diff --git a/old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py b/archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py
similarity index 99%
rename from old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py
rename to archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py
index ea26cec277..32bfe87dd3 100644
--- a/old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py
+++ b/archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/parameters_GEMINI.py
@@ -86,7 +86,7 @@
"default" : 0.067,
"type" : "float",
"recipeOverride": True,
- "userOverride" : True,
+ "userOverride" : True,
"uiLevel" : "UIBASIC",
},
"source":{ # gmos catalog is combination of sdss9, vstatlas and apass7
@@ -378,7 +378,7 @@
"default" : None,
"type" : "float",
"recipeOverride": True,
- "userOverride" : True,
+ "userOverride" : True,
"uiLevel" : "UIBASIC",
},
"mask":{
@@ -424,7 +424,7 @@
"uiLevel" : "UIBASIC",
},
},
- "display":{
+ "display":{
"extname":{
"default" : "SCI",
"type" : "str",
@@ -725,7 +725,7 @@
"recipeOverride": True,
"userOverride" : True,
"uiLevel" : "UIBASIC",
- },
+ },
"nhigh":{
"default" : 1,
"type" : "int",
@@ -769,7 +769,7 @@
"recipeOverride": True,
"userOverride" : True,
"uiLevel" : "UIBASIC",
- },
+ },
"nhigh":{
"default" : 1,
"type" : "int",
@@ -816,7 +816,7 @@
"userOverride" : True,
"uiLevel" : "UIBASIC",
},
- },
+ },
"storeProcessedBias":{
"suffix":{
"default" : "_bias",
@@ -825,7 +825,7 @@
"userOverride" : True,
"uiLevel" : "UIBASIC",
},
- },
+ },
"storeProcessedDark":{
"suffix":{
"default" : "_dark",
@@ -834,7 +834,7 @@
"userOverride" : True,
"uiLevel" : "UIBASIC",
},
- },
+ },
"storeProcessedFlat":{
"suffix":{
"default" : "_flat",
@@ -843,7 +843,7 @@
"userOverride" : True,
"uiLevel" : "UIBASIC",
},
- },
+ },
"storeProcessedStandard":{
"suffix":{
"default" : "_standard",
@@ -852,7 +852,7 @@
"userOverride" : True,
"uiLevel" : "UIBASIC",
},
- },
+ },
"storeProcessedSlitIllum":{
"suffix":{
"default" : "_slitillum",
@@ -895,7 +895,7 @@
"recipeOverride": True,
"userOverride" : True,
"uiLevel" : "UIBASIC",
- },
+ },
},
"writeOutputs":{
"suffix":{
diff --git a/old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py b/archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py
similarity index 94%
rename from old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py
rename to archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py
index 082329b293..f2b28cc784 100644
--- a/old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py
+++ b/archived/old_astrodata_Gemini/RECIPES_Gemini/primitives/primitives_GEMINI.py
@@ -31,7 +31,7 @@ class GEMINIPrimitives(BookkeepingPrimitives,CalibrationPrimitives,
above, 'GENERALPrimitives'.
"""
astrotype = "GEMINI"
-
+
def init(self, rc):
BookkeepingPrimitives.init(self, rc)
CalibrationPrimitives.init(self, rc)
@@ -46,7 +46,7 @@ def init(self, rc):
StandardizePrimitives.init(self, rc)
return rc
init.pt_hide = True
-
+
def standardizeGeminiHeaders(self, rc):
"""
This primitive is used to make the changes and additions to the
@@ -54,90 +54,90 @@ def standardizeGeminiHeaders(self, rc):
"""
# Instantiate the log
log = logutils.get_logger(__name__)
-
+
# Log the standard "starting primitive" debug message
log.debug(gt.log_message("primitive", "standardizeGeminiHeaders",
"starting"))
-
+
# Define the keyword to be used for the time stamp for this primitive
timestamp_key = self.timestamp_keys["standardizeGeminiHeaders"]
-
+
# Initialize the list of output AstroData objects
adoutput_list = []
-
+
# Loop over each input AstroData object in the input list
for ad in rc.get_inputs_as_astrodata():
-
+
# Check whether the standardizeGeminiHeaders primitive has been run
# previously
if ad.phu_get_key_value(timestamp_key):
log.warning("No changes will be made to %s, since it has "
"already been processed by "
"standardizeGeminiHeaders" % ad.filename)
-
+
# Append the input AstroData object to the list of output
# AstroData objects without further processing
adoutput_list.append(ad)
continue
-
+
# Standardize the headers of the input AstroData object. Update the
# keywords in the headers that are common to all Gemini data.
log.status("Updating keywords that are common to all Gemini data")
-
+
# Original name
ad.store_original_name()
-
+
# Number of science extensions
gt.update_key(adinput=ad, keyword="NSCIEXT", value=ad.count_exts("SCI"),
comment=None, extname="PHU", keyword_comments=self.keyword_comments)
-
+
# Number of extensions
- gt.update_key(adinput=ad, keyword="NEXTEND", value=len(ad), comment=None,
+ gt.update_key(adinput=ad, keyword="NEXTEND", value=len(ad), comment=None,
extname="PHU", keyword_comments=self.keyword_comments)
-
+
# Physical units (assuming raw data has units of ADU)
gt.update_key(adinput=ad, keyword="BUNIT", value="adu", comment=None,
extname="SCI", keyword_comments=self.keyword_comments)
-
+
# Add the appropriate time stamps to the PHU
gt.mark_history(adinput=ad, primname=self.myself(), keyword=timestamp_key)
-
+
# Change the filename
- ad.filename = gt.filename_updater(adinput=ad, suffix=rc["suffix"],
+ ad.filename = gt.filename_updater(adinput=ad, suffix=rc["suffix"],
strip=True)
-
+
# Append the output AstroData object to the list of output
- # AstroData objects
+ # AstroData objects
adoutput_list.append(ad)
-
+
# Report the list of output AstroData objects to the reduction context
rc.report_output(adoutput_list)
-
+
yield rc
def mosaicADdetectors(self,rc): # Uses python MosaicAD script
"""
This primitive will mosaic the SCI frames of the input images, along
with the VAR and DQ frames if they exist.
-
+
:param tile: tile images instead of mosaic
:type tile: Python boolean (True/False), default is False
-
+
"""
log = logutils.get_logger(__name__)
# Log the standard "starting primitive" debug message
log.debug(gt.log_message("primitive", "mosaicADdetectors", "starting"))
-
+
# Define the keyword to be used for the time stamp for this primitive
timestamp_key = self.timestamp_keys["mosaicADdetectors"]
# Initialize the list of output AstroData objects
adoutput_list = []
-
+
# Loop over each input AstroData object in the input list
for ad in rc.get_inputs_as_astrodata():
-
+
# Validate Data
#if (ad.phu_get_key_value('GPREPARE')==None) and \
# (ad.phu_get_key_value('PREPARE')==None):
@@ -153,7 +153,7 @@ def mosaicADdetectors(self,rc): # Uses python MosaicAD script
# AstroData objects without further processing
adoutput_list.append(ad)
continue
-
+
# If the input AstroData object only has one extension, there is no
# need to mosaic the detectors
if ad.count_exts("SCI") == 1:
@@ -163,10 +163,10 @@ def mosaicADdetectors(self,rc): # Uses python MosaicAD script
# AstroData objects without further processing
adoutput_list.append(ad)
continue
-
+
# Get the necessary parameters from the RC
tile = rc["tile"]
-
+
log.stdinfo("Mosaicking %s ..."%ad.filename)
log.stdinfo("MosaicAD: Using tile: %s ..."%tile)
#t1 = time.time()
@@ -177,10 +177,10 @@ def mosaicADdetectors(self,rc): # Uses python MosaicAD script
adout = mo.as_astrodata(tile=tile)
#t2 = time.time()
#print '%s took %0.3f ms' % ('as_astrodata', (t2-t1)*1000.0)
-
+
# Verify mosaicAD was actually run on the file
# then log file names of successfully reduced files
- if adout.phu_get_key_value("MOSAIC"):
+ if adout.phu_get_key_value("MOSAIC"):
log.fullinfo("File "+adout.filename+\
" was successfully mosaicked")
@@ -190,23 +190,23 @@ def mosaicADdetectors(self,rc): # Uses python MosaicAD script
# Change the filename
adout.filename = gt.filename_updater(
adinput=ad, suffix=rc["suffix"], strip=True)
-
+
# Append the output AstroData object to the list
# of output AstroData objects
adoutput_list.append(adout)
-
+
# Report the list of output AstroData objects to the reduction
# context
rc.report_output(adoutput_list)
-
+
yield rc
-
+
def traceFootprints(self, rc):
-
+
"""
This primitive will create and append a 'TRACEFP' Bintable HDU to the
- AD object. The content of this HDU is the footprints information
+ AD object. The content of this HDU is the footprints information
from the espectroscopic flat in the SCI array.
:param logLevel: Verbosity setting for log messages to the screen.
@@ -216,7 +216,7 @@ def traceFootprints(self, rc):
"""
# Instantiate the log
log = logutils.get_logger(__name__)
-
+
# Log the standard "starting primitive" debug message
log.debug(gt.log_message("primitive", "", "starting"))
@@ -240,13 +240,13 @@ def traceFootprints(self, rc):
trace_threshold=rc["trace_threshold"])
except:
log.warning("Error in traceFootprints with file: %s"%ad.filename)
-
+
# Change the filename
- adout.filename = gt.filename_updater(adinput=ad,
+ adout.filename = gt.filename_updater(adinput=ad,
suffix=rc["suffix"],
strip=True)
- # Append the output AstroData object to the list of output
+ # Append the output AstroData object to the list of output
# AstroData objects.
adoutput_list.append(adout)
@@ -258,7 +258,7 @@ def traceFootprints(self, rc):
def cutFootprints(self, rc):
-
+
"""
This primitive will create and append multiple HDU to the output
AD object. Each HDU correspond to a rectangular cut containing a
@@ -283,7 +283,7 @@ def cutFootprints(self, rc):
# Loop over each input AstroData object in the input list
for ad in rc.get_inputs_as_astrodata():
# Call the user level function
-
+
# Check that the input ad has the TRACEFP extension,
# otherwise, create it.
if ad['TRACEFP'] == None:
@@ -296,14 +296,14 @@ def cutFootprints(self, rc):
log.error("Error in cut_slits with file: %s"%ad.filename)
# DO NOT add this input ad to the adoutput_lis
continue
-
-
+
+
# Change the filename
- adout.filename = gt.filename_updater(adinput=ad,
+ adout.filename = gt.filename_updater(adinput=ad,
suffix=rc["suffix"],
strip=True)
- # Append the output AstroData object to the list of output
+ # Append the output AstroData object to the list of output
# AstroData objects.
adoutput_list.append(adout)
@@ -317,7 +317,7 @@ def attachWavelengthSolution(self,rc):
# Instantiate the log
log = logutils.get_logger(__name__)
-
+
# Define the keyword to be used for the time stamp
timestamp_key = self.timestamp_keys["attachWavelengthSolution"]
@@ -346,7 +346,7 @@ def attachWavelengthSolution(self,rc):
arc = AstroData(arc)
tmp_list.append(arc)
arc_list = tmp_list
-
+
arc_dict = gt.make_dict(key_list=adinput, value_list=arc_list)
for ad in adinput:
@@ -354,8 +354,8 @@ def attachWavelengthSolution(self,rc):
arc = arc_dict[ad]
else:
arc = rc.get_cal(ad, "processed_arc")
-
- # Take care of the case where there was no arc
+
+ # Take care of the case where there was no arc
if arc is None:
log.warning("Could not find an appropriate arc for %s" \
% (ad.filename))
@@ -377,8 +377,8 @@ def attachWavelengthSolution(self,rc):
gt.mark_history(adinput=ad, primname=self.myself(), keyword=timestamp_key)
# Change the filename
- ad.filename = gt.filename_updater(adinput=ad,
- suffix=rc["suffix"],
+ ad.filename = gt.filename_updater(adinput=ad,
+ suffix=rc["suffix"],
strip=True)
adoutput_list.append(ad)
else:
@@ -388,6 +388,5 @@ def attachWavelengthSolution(self,rc):
# Report the list of output AstroData objects to the reduction
# context
rc.report_output(adoutput_list)
-
- yield rc
+ yield rc
diff --git a/old_other/astrodata/tests/__init__.py b/archived/old_other/astrodata/tests/__init__.py
similarity index 100%
rename from old_other/astrodata/tests/__init__.py
rename to archived/old_other/astrodata/tests/__init__.py
diff --git a/old_other/astrodata/tests/test_AstroDataAPI.py b/archived/old_other/astrodata/tests/test_AstroDataAPI.py
similarity index 98%
rename from old_other/astrodata/tests/test_AstroDataAPI.py
rename to archived/old_other/astrodata/tests/test_AstroDataAPI.py
index 894a38eb01..a34d73712b 100644
--- a/old_other/astrodata/tests/test_AstroDataAPI.py
+++ b/archived/old_other/astrodata/tests/test_AstroDataAPI.py
@@ -8,7 +8,7 @@
__version__ = '$Revision$'[11:-2]
__version_date__ = '$Date$'[7:-2]
# ------------------------------------------------------------------------------
-""" Initial AstroData API tests.
+""" Initial AstroData API tests.
To run theses tests w/ pytest:
@@ -39,7 +39,7 @@
if GEM0 is None:
for path in sys.path:
if 'gemini_python' in path:
- GEM1 = os.path.join(path.split('gemini_python')[0],
+ GEM1 = os.path.join(path.split('gemini_python')[0],
'gemini_python', 'test_data')
break
@@ -80,7 +80,7 @@
# ==================================== tests ==================================
xfail = pytest.mark.xfail
# ==============================================================================
-# Constructor
+# Constructor
def test_constructor_0():
""" Good filename """
assert AstroData(dataset=TESTFILE)
@@ -104,7 +104,7 @@ def test_constructor_4():
""" dataset as bad URL """
with pytest.raises(AstroDataError):
assert AstroData(dataset=TESTURL)
-
+
def test_constructor_5():
""" HDUList """
assert AstroData(dataset=pfob)
@@ -371,7 +371,7 @@ def test_method_append_3():
ad = AstroData(TESTFILE)
initial_len = len(ad)
ad.append(moredata=pfob, auto_number=True)
- assert len(ad) == initial_len + len(pfob) - 1
+ assert len(ad) == initial_len + len(pfob) - 1
def test_method_append_4():
ad = AstroData(TESTFILE)
@@ -383,7 +383,7 @@ def test_method_append_5():
ad = AstroData(TESTFILE)
ad.append(moredata=hdu1, auto_number=True)
assert ad.hdulist[-1] == hdu1
-
+
def test_method_append_6():
ad = AstroData(TESTFILE)
initial_len = len(ad)
@@ -568,7 +568,7 @@ def test_attr_types_1():
def test_attr_types_2():
ad = AstroData(TESTFILE)
- assert KNOWNTYPE in ad.types
+ assert KNOWNTYPE in ad.types
def test_attr_types_3():
ad = AstroData(TESTFILE)
@@ -675,13 +675,13 @@ def test_method_ext_index_3():
assert ad.ext_index(('SCI',3)) == 2
# rename_ext()
-def test_method_rename_ext_1(): # Raise on multi-ext
+def test_method_rename_ext_1(): # Raise on multi-ext
ad = AstroData(TESTFILE)
with pytest.raises(SingleHDUMemberExcept):
ad.rename_ext("SCI", ver=99)
def test_method_rename_ext_2():
- ad = AstroData(TESTFILE)
+ ad = AstroData(TESTFILE)
with pytest.raises(SingleHDUMemberExcept):
ad.rename_ext("FOO")
@@ -707,7 +707,7 @@ def test_method_extname_1():
assert isinstance(ad.extname(), str)
def test_method_extname_2():
- ad = AstroData(TESTFILE2)
+ ad = AstroData(TESTFILE2)
assert ad.extname() == 'SCI'
def test_method_extname_3():
@@ -721,7 +721,7 @@ def test_method_extver_1():
assert isinstance(ad.extver(), int)
def test_method_extver_2():
- ad = AstroData(TESTFILE2)
+ ad = AstroData(TESTFILE2)
assert ad.extver() == 1
def test_method_extver_3():
@@ -753,7 +753,7 @@ def test_method_info_3():
ad.info(oid=True)
sys.stdout = old_stdout
assert isinstance(mystdout.getvalue(), str)
-
+
def test_method_info_4():
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
diff --git a/astrodata/.readthedocs.yaml b/astrodata/.readthedocs.yaml
index e80232f0c8..df5b793a92 100644
--- a/astrodata/.readthedocs.yaml
+++ b/astrodata/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
-# - requirements: docs/requirements.txt
\ No newline at end of file
+# - requirements: docs/requirements.txt
diff --git a/astrodata/doc/.readthedocs.yaml b/astrodata/doc/.readthedocs.yaml
index 02f76b790d..fc746292c7 100644
--- a/astrodata/doc/.readthedocs.yaml
+++ b/astrodata/doc/.readthedocs.yaml
@@ -29,4 +29,4 @@ python:
- requirements: requirements.txt
- requirements: doc/requirements.txt
- method: pip
- path: .
\ No newline at end of file
+ path: .
diff --git a/astrodata/doc/_static/rtd_theme_overrides.css b/astrodata/doc/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/astrodata/doc/_static/rtd_theme_overrides.css
+++ b/astrodata/doc/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/astrodata/doc/_static/rtd_theme_overrides_references.css b/astrodata/doc/_static/rtd_theme_overrides_references.css
index 785c691ebf..23660678c6 100644
--- a/astrodata/doc/_static/rtd_theme_overrides_references.css
+++ b/astrodata/doc/_static/rtd_theme_overrides_references.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/astrodata/doc/conf.py b/astrodata/doc/conf.py
index 1f70f11f4d..834bd84542 100644
--- a/astrodata/doc/conf.py
+++ b/astrodata/doc/conf.py
@@ -462,4 +462,3 @@ def setup(app):
""".format(v = rtdurl)
-
diff --git a/astrodata/doc/progmanual/tags.rst b/astrodata/doc/progmanual/tags.rst
index 01a2c82b5d..58bef8466d 100644
--- a/astrodata/doc/progmanual/tags.rst
+++ b/astrodata/doc/progmanual/tags.rst
@@ -156,5 +156,5 @@ and starts iterating over the ``TagSet`` list.
4. Finally, neither ``GCAL_IR_OFF`` nor ``LAMPOFF`` are in ``blocked``, and
``PROCESSED`` is not in ``tags``, meaning that we can add this tag set to
the final one.
-
+
Our result will look something like: ``{'BIAS', 'CAL', 'GMOS', 'GCAL_IR_OFF', 'LAMPOFF'}``
diff --git a/doc/DRAGONS/_static/css/custom_code.css b/doc/DRAGONS/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/doc/DRAGONS/_static/css/custom_code.css
+++ b/doc/DRAGONS/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/doc/DRAGONS/_static/fonts.css b/doc/DRAGONS/_static/fonts.css
index ea822553c8..562c34e947 100644
--- a/doc/DRAGONS/_static/fonts.css
+++ b/doc/DRAGONS/_static/fonts.css
@@ -24,4 +24,4 @@
.big {
font-size: 120%;
-}
\ No newline at end of file
+}
diff --git a/doc/DRAGONS/_static/rtd_theme_overrides.css b/doc/DRAGONS/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/doc/DRAGONS/_static/rtd_theme_overrides.css
+++ b/doc/DRAGONS/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/doc/DRAGONS/_static/todo-styles.css b/doc/DRAGONS/_static/todo-styles.css
index dcf9445b79..09f3659575 100644
--- a/doc/DRAGONS/_static/todo-styles.css
+++ b/doc/DRAGONS/_static/todo-styles.css
@@ -5,4 +5,3 @@ border-left: 2px solid red;
border-right: 2px solid red;
background-color: #ff6347
}
-
diff --git a/doc/DRAGONS/conf.py b/doc/DRAGONS/conf.py
index 76d7ea0b56..34e50dafc5 100644
--- a/doc/DRAGONS/conf.py
+++ b/doc/DRAGONS/conf.py
@@ -26,7 +26,7 @@
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
- 'sphinx.ext.autodoc',
+ 'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.coverage',
diff --git a/doc/DRAGONS/development/continuous_integration.rst b/doc/DRAGONS/development/continuous_integration.rst
new file mode 100644
index 0000000000..9d04f172c2
--- /dev/null
+++ b/doc/DRAGONS/development/continuous_integration.rst
@@ -0,0 +1,148 @@
+.. _continuous_integration:
+
+Continuous Integration
+======================
+
+DRAGONS uses a Continuous Integration pipeline from commit to merge, in order
+to:
+
+1. Maintain basic coding standards across our software and packages.
+2. Provide peace of mind to new and regular contributors.
+3. Catch classes on common bugs and antipatterns early in the development
+ process.
+4. Perform testing and code analysis for feedback on complexity, coverage,
+ performance, and integrity.
+
+When using our :ref:`development environments ` and
+our repository, all CI will be automatically managed for you.
+
+Linting, formatting, and quick checks (``pre-commit``)
+------------------------------------------------------
+
+.. ATTENTION::
+
+ You can run these checks manually at any time by running
+
+ .. code-block:: bash
+
+ nox -s lint
+
+
+ It performs exactly the same thing as:
+
+ .. code-block:: bash
+
+ pre-commit run --all
+
+
+
+We perform quick conformance operations---specifically, formatting, linting,
+and validating changes---when you try to commit your changes.
+
+.. _pre-commit_docs: https://pre-commit.com/
+
+The following tools are used to accomplish this through :ref:`pre-commit
+`_. It runs the following other tools (with *no need to install
+them yourself*):
+
+.. _ruff_docs: https://docs.astral.sh/ruff/
+.. _black_docs: https://black.readthedocs.io/en/stable/
+.. _pre_commit_default_hooks: https://github.com/pre-commit/pre-commit-hooks?tab=readme-ov-file#pre-commit-hooks
+.. _mdformat_hook: https://github.com/hukkin/mdformat
+
++-------------------------------------------------------------+--------------------------+
+| Tool | Chore |
++-------------------------------------------------------------+--------------------------+
+| ``black`` (`link `_) | Automated formatting |
++-------------------------------------------------------------+--------------------------+
+| ``ruff`` (`link `_) | Linting |
++-------------------------------------------------------------+--------------------------+
+| ``pre-commit-hooks`` (`link `_) | Miscellaneous validation |
++-------------------------------------------------------------+--------------------------+
+| ``mdformat`` (`link `_) | Markdown formatting |
++-------------------------------------------------------------+--------------------------+
+
+.. _noirlab_python_template: https://github.com/teald/python-standard-template
+
+These tools will comprise a superset of NOIRLab's Python Coding Standard
+outlined in the `Python standard template `_.
+
+Formatting
+^^^^^^^^^^
+
+DRAGONS uses the `black ` formatter for all formatting in the
+repository. We chose it for it focus on:
+
++ Consistency
++ Minimal diffs between changes
++ Clarity
+
+You can learn more about the formatter in `the black documentation
+`_, but there are a few concepts that may be useful to your
+development.
+
+Trailing commas
+***************
+
+Trailing commas are used to expand collections. For example, if I omit the
+trailing comma, the formatter will not change the following line:
+
+.. code-block:: python
+
+ def my_func_with_a_few_arguments(arg_1, arg_2, *, kwarg_1):
+ """It has arguments, but does nothing."""
+
+If we instead add a trailing comma after ``kwarg_``, it will expand the
+arguments when the formatter is run:
+
+.. code-block:: python
+
+ def my_func_with_a_few_arguments(arg_1, arg_2, *, kwarg_1,):
+ """It has arguments, but does nothing."""
+
+becomes
+
+.. code-block:: python
+
+ def my_func_with_a_few_arguments(
+ arg_1,
+ arg_2,
+ *,
+ kwarg_1,
+ ):
+ """It has arguments, but does nothing."""
+
+This also happens if the arguments become *too large to fit on one line,
+alone*. black will automatically add the trailing comma.
+
+*Why should you use this?* It is not just difficult to parse functions with
+many arguments on a single line; it makes the diffs between code versions much
+less clear than they otherwise would be. If one argument is modified, a whole
+line of arguments is changed and history about prior changes to arguments is
+obfuscated in the commit history.
+
+If a function's arguments, or the contents of a literal ``dict``, ``list``, or
+other collection, are numerous and not obvious by eye, if can be a good idea to
+just add the trialing comma yourself..
+
+Ignoring the formatter
+**********************
+
+To ignore lines of code when formatting, you add ``# fmt: off`` and ``# fmt:
+on`` before and after (respectively) the lines to be ignored. For example:
+
+.. code-block:: python
+
+ # The below code will be formatted
+ code = ("my code with unnecessary parentheses")
+
+ # The code after the below comment will not.
+ # fmt: off
+ my_matrix = [
+ [1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]
+ ]
+
+ # fmt: on
+ # After the above comment, formatting is applied.
diff --git a/doc/DRAGONS/development/development_environments.rst b/doc/DRAGONS/development/development_environments.rst
new file mode 100644
index 0000000000..a713e91f8b
--- /dev/null
+++ b/doc/DRAGONS/development/development_environments.rst
@@ -0,0 +1,116 @@
+.. _development_environments:
+
+Development Environments
+========================
+
+.. _nox: https://github.com/wntrblm/nox
+.. _pipx: https://github.com/pypa/pipx
+
+DRAGONS provides a common development environment, available through our `nox`_
+automations.
+
+To get started, ensure you have `nox`_ installed. We recommend using `pipx`_ to
+avoid adding a package to your global environment, though you can also use
+`pip` or a different platform.
+
+To install using `pipx`_:
+
+.. code-block:: console
+
+ pipx install nox
+
+To install using `pip`_:
+
+.. code-block:: console
+
+ pip install nox
+
+ # Alternatively... to specify the python you're using.
+
+ python -m pip install nox
+
+
+Generating a fresh development environment
+------------------------------------------
+
+.. _venv: https://docs.python.org/3/library/venv.html
+.. _conda: https://github.com/conda-forge/miniforge
+
+We currently support two development environments, one that uses `venv`_
+and another that uses `conda`_. Which you use is up to preference, though keep
+the following in mind:
+
++ Installation of packages is the same for both environments with the exception
+ of ``sextractor``. Everything else (including DRAGONS) is installed via `pip`.
++ You can pass normal `conda create` command line arguments to the `conda`
+ development environment, making it slightly more configurable. Details below.
+
+
+``venv`` environments
+-------------------
+
+.. warning::
+
+ This process will overwrite existing environments and files at the local
+ path `venv/`. If you have anything there you want to keep, save it before
+ proceeding.
+
+New `venv`_ environments can be generated using the ``devenv`` session:
+
+.. code-block:: console
+
+ nox -s devenv
+
+This will not activate the environment for you. `venv` environments are created
+in a new local directory, ``venv/``. To activate a `venv`, you run ``source
+venv/bin/activate``. You'll know the environment is active when the prompt
+``(dragons_venv)`` is visible on your terminal prompt. For example:
+
+.. code-block:: console
+
+ awesomedev@my_laptop $ source venv/bin/activate
+ (dragons_venv) awesomedev@my_laptop $
+
+Now, you will be using the correct packages and python to develop with DRAGONS.
+That's it! If you decide you need a fresh environment, or update something, you
+can trivially generate a new one with the exact same `nox` command.
+
+
+``conda`` environments
+----------------------
+
+.. warning::
+
+ This process will delete ``conda`` environments with the same name as the
+ requested environment. By default, that is ``dragons_dev``, so if you run
+ the nox command to generate a new default conda environment, it will delete
+ any environment it finds named ``dragons_dev``.
+
+ You can specify a specific name, as discussed below, and that will be
+ overridden.
+
+New `conda`_ environments can be generating using the ``devconda`` `nox`_ session:
+
+.. code-block:: console
+
+ nox -s devconda
+
+You can specify arguments for ``conda create`` using a trailing ``--`` followed
+by the arguments. For example, if we want to name our environment
+``my_conda_env``:
+
+.. code-block:: console
+
+ nox -s devconda -- --name my_conda_env
+
+By default, the environment name is ``dragons_dev``.
+
+This script does not automatically activate your environment. To activate your
+conda environment, you need to run:
+
+.. code-block:: console
+
+ conda activate dragons_dev
+
+If you specified a custom name, you'll need to replace ``dragons_dev`` with
+that name.
diff --git a/doc/DRAGONS/development/index.rst b/doc/DRAGONS/development/index.rst
new file mode 100644
index 0000000000..f0e365b2b6
--- /dev/null
+++ b/doc/DRAGONS/development/index.rst
@@ -0,0 +1,19 @@
+
+Development Documentation
+=========================
+
+.. TODO: Add link to documetation homepage below
+
+This is the development documentation for DRAGONS. This is *not* covering
+developing with or using DRAGONS, which are covered in our **Programmer's
+Manuals** and **User Manuals**, respectively. These can be found on the
+documentation home page.
+
+This documentation covers specific components of the DRAGONS development process.
+
+.. toctree::
+ :maxdepth: 2
+
+ development_environments.rst
+ continuous_integration.rst
+ testing.rst
diff --git a/doc/DRAGONS/development/testing.rst b/doc/DRAGONS/development/testing.rst
new file mode 100644
index 0000000000..82f2559172
--- /dev/null
+++ b/doc/DRAGONS/development/testing.rst
@@ -0,0 +1,4 @@
+Running and creating tests
+==========================
+
+Tests are executed in isolated testing environments generated by `nox`_.
diff --git a/doc/DRAGONS/dragonsteam.rst b/doc/DRAGONS/dragonsteam.rst
index 4a53d5d280..623ac20860 100644
--- a/doc/DRAGONS/dragonsteam.rst
+++ b/doc/DRAGONS/dragonsteam.rst
@@ -34,4 +34,4 @@ Past DRAGONS Team Members
Special Thanks
==============
-* Vinicius Placco
\ No newline at end of file
+* Vinicius Placco
diff --git a/doc/DRAGONS/index.rst b/doc/DRAGONS/index.rst
index c73a012a2b..82a4b42159 100644
--- a/doc/DRAGONS/index.rst
+++ b/doc/DRAGONS/index.rst
@@ -81,4 +81,3 @@ Releases
.. testing.rst
.. todolist::
-
diff --git a/doc/DRAGONS/releasenotes.rst b/doc/DRAGONS/releasenotes.rst
index ac5f3d583e..6826235b8e 100644
--- a/doc/DRAGONS/releasenotes.rst
+++ b/doc/DRAGONS/releasenotes.rst
@@ -158,5 +158,3 @@ will nevertheless be useful to our users.
Installation instructions can be found in the Recipe System User Manual at:
|RSUserShow|
-
-
diff --git a/doc/requirements.txt b/doc/requirements.txt
index a9e2ab237c..95b9c78737 100644
--- a/doc/requirements.txt
+++ b/doc/requirements.txt
@@ -1,2 +1,2 @@
# requirements only used for building documentation
-sphinx-rtd-theme
\ No newline at end of file
+sphinx-rtd-theme
diff --git a/extern_licenses/jqplot b/extern_licenses/jqplot
index 3730cff00f..c73fb46716 100644
--- a/extern_licenses/jqplot
+++ b/extern_licenses/jqplot
@@ -5,13 +5,13 @@
* Version: @VERSION
*
* Copyright (c) 2009-2011 Chris Leonello
- * jqPlot is currently available for use in all personal or commercial projects
- * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
- * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
- * choose the license that best suits your project and use it accordingly.
+ * jqPlot is currently available for use in all personal or commercial projects
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can
+ * choose the license that best suits your project and use it accordingly.
*
- * Although not required, the author would appreciate an email letting him
- * know of any substantial use of jqPlot. You can reach the author at:
+ * Although not required, the author would appreciate an email letting him
+ * know of any substantial use of jqPlot. You can reach the author at:
* chris at jqplot dot com or see http://www.jqplot.com/info.php .
*
* If you are feeling kind and generous, consider supporting the project by
@@ -30,18 +30,18 @@
*
* Copyright (c) 2010-2011 Chris Leonello
*
- * jsDate is currently available for use in all personal or commercial projects
- * under both the MIT and GPL version 2.0 licenses. This means that you can
+ * jsDate is currently available for use in all personal or commercial projects
+ * under both the MIT and GPL version 2.0 licenses. This means that you can
* choose the license that best suits your project and use it accordingly.
*
- * jsDate borrows many concepts and ideas from the Date Instance
+ * jsDate borrows many concepts and ideas from the Date Instance
* Methods by Ken Snyder along with some parts of Ken's actual code.
- *
+ *
* Ken's origianl Date Instance Methods and copyright notice:
- *
+ *
* Ken Snyder (ken d snyder at gmail dot com)
* 2008-09-10
- * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
+ * version 2.0.2 (http://kendsnyder.com/sandbox/date/)
* Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/)
*
* jqplotToImage function based on Larry Siden's export-jqplot-to-png.js.
@@ -51,6 +51,6 @@
* Larry's original code can be found here:
*
* https://github.com/lsiden/export-jqplot-to-png
- *
- *
+ *
+ *
*/
diff --git a/extern_licenses/jqplot_excanvas b/extern_licenses/jqplot_excanvas
index b1ecd779c6..a236e8d5ed 100644
--- a/extern_licenses/jqplot_excanvas
+++ b/extern_licenses/jqplot_excanvas
@@ -1,4 +1,4 @@
-// Memory Leaks patch from http://explorercanvas.googlecode.com/svn/trunk/
+// Memory Leaks patch from http://explorercanvas.googlecode.com/svn/trunk/
// svn : r73
// ------------------------------------------------------------------
// Copyright 2006 Google Inc.
diff --git a/extern_licenses/jquery.color b/extern_licenses/jquery.color
index 1d3ac7d0a6..fd76e0168b 100644
--- a/extern_licenses/jquery.color
+++ b/extern_licenses/jquery.color
@@ -8,4 +8,3 @@
*
* Date: @DATE
*/
-
diff --git a/extern_licenses/numdisplay b/extern_licenses/numdisplay
index 7e8019a89e..d62fd3729f 100644
--- a/extern_licenses/numdisplay
+++ b/extern_licenses/numdisplay
@@ -26,4 +26,3 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
-
diff --git a/gemini_instruments/cirpass/adclass.py b/gemini_instruments/cirpass/adclass.py
index 000c7a30db..c23b6aea20 100644
--- a/gemini_instruments/cirpass/adclass.py
+++ b/gemini_instruments/cirpass/adclass.py
@@ -49,7 +49,7 @@ def _tag_bias(self):
@astro_data_descriptor
def ra(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
@@ -62,7 +62,7 @@ def ra(self):
@astro_data_descriptor
def dec(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
diff --git a/gemini_instruments/flamingos/adclass.py b/gemini_instruments/flamingos/adclass.py
index 8f0a8a5caf..f05a49b072 100644
--- a/gemini_instruments/flamingos/adclass.py
+++ b/gemini_instruments/flamingos/adclass.py
@@ -33,7 +33,7 @@ def _tag_flat(self):
@astro_data_tag
def _tag_twilight(self):
if 'twilight' in self.phu.get('OBJECT', '').lower():
- return TagSet(['TWILIGHT', 'CAL'])
+ return TagSet(['TWILIGHT', 'CAL'])
@astro_data_tag
def _tag_dark(self):
@@ -138,7 +138,7 @@ def exposure_time(self):
@astro_data_descriptor
def filter_name(self, stripID=False, pretty=False):
- return self.phu.get(self._keyword_for('filter_name'))
+ return self.phu.get(self._keyword_for('filter_name'))
@astro_data_descriptor
def ra(self):
diff --git a/gemini_instruments/gemini/lookup.py b/gemini_instruments/gemini/lookup.py
index d4c82dc0ff..f663e40ceb 100644
--- a/gemini_instruments/gemini/lookup.py
+++ b/gemini_instruments/gemini/lookup.py
@@ -19,7 +19,7 @@
nominal_extinction = {
# These are the nominal MK and CP extinction values
- # ie the k values where the magnitude of the star should be modified by
+ # ie the k values where the magnitude of the star should be modified by
# -= k(airmass-1.0)
#
# Columns are given as:
diff --git a/gemini_instruments/gemini/tests/test_descriptors.py b/gemini_instruments/gemini/tests/test_descriptors.py
index d963a7841a..23ec3f11e4 100644
--- a/gemini_instruments/gemini/tests/test_descriptors.py
+++ b/gemini_instruments/gemini/tests/test_descriptors.py
@@ -112,7 +112,7 @@ def ad(request):
filename = request.param
path = astrodata.testing.download_from_archive(filename)
return astrodata.open(path)
-
+
@pytest.mark.dragons_remote_data
@pytest.mark.parametrize("ad", test_files, indirect=True)
diff --git a/gemini_instruments/hokupaa_quirc/adclass.py b/gemini_instruments/hokupaa_quirc/adclass.py
index 13662efb95..e80d7a8563 100644
--- a/gemini_instruments/hokupaa_quirc/adclass.py
+++ b/gemini_instruments/hokupaa_quirc/adclass.py
@@ -91,7 +91,7 @@ def instrument(self, generic=False):
Returns
-------
- :
+ :
instrument name
"""
@@ -105,7 +105,7 @@ def observation_type(self):
Returns
-------
- :
+ :
observation type.
"""
@@ -114,7 +114,7 @@ def observation_type(self):
@astro_data_descriptor
def ra(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
@@ -127,7 +127,7 @@ def ra(self):
@astro_data_descriptor
def dec(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
diff --git a/gemini_instruments/hrwfs/adclass.py b/gemini_instruments/hrwfs/adclass.py
index 10b0feb5de..06465c682a 100644
--- a/gemini_instruments/hrwfs/adclass.py
+++ b/gemini_instruments/hrwfs/adclass.py
@@ -49,7 +49,7 @@ def _tag_bias(self):
@astro_data_descriptor
def ra(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
@@ -62,7 +62,7 @@ def ra(self):
@astro_data_descriptor
def dec(self):
"""
- Returns the name of the
+ Returns the name of the
Returns
-------
diff --git a/gemini_instruments/igrins/adclass.py b/gemini_instruments/igrins/adclass.py
index 0eb34387b1..2bbb138d54 100644
--- a/gemini_instruments/igrins/adclass.py
+++ b/gemini_instruments/igrins/adclass.py
@@ -133,7 +133,7 @@ def instrument(self, generic=False):
Returns
-------
- :
+ :
instrument name
"""
@@ -251,7 +251,7 @@ def _slit_x_center(self):
Returns
-------
- :
+ :
center x position in pixels
"""
@@ -264,7 +264,7 @@ def _slit_y_center(self):
Returns
-------
- :
+ :
center y position in pixels
"""
@@ -277,7 +277,7 @@ def _slit_width(self):
Returns
-------
- :
+ :
slit width in pixels
"""
@@ -290,7 +290,7 @@ def _slit_length(self):
Returns
-------
- :
+ :
slit length in pixels
"""
@@ -303,11 +303,11 @@ def _slit_angle(self):
Returns
-------
- :
+ :
slit length in pixels
"""
- return self.phu.get(self._keyword_for('slit_angle'))
+ return self.phu.get(self._keyword_for('slit_angle'))
@astro_data_descriptor
def target_ra(self):
diff --git a/gemini_instruments/niri/tests/test_niri.py b/gemini_instruments/niri/tests/test_niri.py
index 6eef03c991..d83a0991ff 100644
--- a/gemini_instruments/niri/tests/test_niri.py
+++ b/gemini_instruments/niri/tests/test_niri.py
@@ -78,4 +78,3 @@ def test_ra_dec_from_text(astrofaker):
assert ad.target_dec() == pytest.approx(24.345277777777778)
from astropy import units as u
-
diff --git a/geminidr/core/parameters_nearIR.py b/geminidr/core/parameters_nearIR.py
index dc6a5c4519..ffe4cab708 100644
--- a/geminidr/core/parameters_nearIR.py
+++ b/geminidr/core/parameters_nearIR.py
@@ -79,7 +79,7 @@ class cleanFFTReadoutConfig(config.Config):
allowed={"default": "perform pattern removal if pattern in strong enough",
"skip": "skip primitive"},
default="skip", optional=False)
-
+
class separateFlatsDarksConfig(config.Config):
diff --git a/geminidr/core/primitives_nearIR.py b/geminidr/core/primitives_nearIR.py
index b2cb829478..4916981d11 100644
--- a/geminidr/core/primitives_nearIR.py
+++ b/geminidr/core/primitives_nearIR.py
@@ -577,32 +577,32 @@ def reblock(data):
def cleanFFTReadout(self, adinputs=None, **params):
"""
- This attempts to remove the pattern noise in NIRI/GNIRS data
- in the Fourier domain. It shares similar capabilities as
- cleanReadout (automatically determining pattern coverage,
- leveling intra- and inter-quad biases), but with an additonal
- advantage of being able to handling pattern noise that varies
+ This attempts to remove the pattern noise in NIRI/GNIRS data
+ in the Fourier domain. It shares similar capabilities as
+ cleanReadout (automatically determining pattern coverage,
+ leveling intra- and inter-quad biases), but with an additonal
+ advantage of being able to handling pattern noise that varies
from row to row. NOTE, however, when battle tested, cleanReadout
performs equally or better than this Fourier version. For e.g.,
this Fourier version may not work when applied to an image with
a strong gradient in background supersposed with a strong pattern
noise; there will likely be issues in leveling of signals.
Additionally, this Fourier version DOES NOT work well for cross-
- dispersed spectra.
-
- The processing flow of this algorithm is the following. For each
- quadrant, take the FFT row by row and relying on the known
- periodicity of the pattern (8 pix), look for significant peaks
- in the amplitude spectrum at the corresponding frequency and its
- harmonics, and interpolate over them. This should clean
- the noise. Subtract the resulting frame from the input frame
- to generate the pattern frame.
- Then, leverage the four-fold symmetry of the pattern coverage to
- determine the edges. To this end, median-combine the pattern
- amplitude functions (using the pattern frame) after standardizing
- each separately. The regions unaffected by pattern noise will
- show up in such a stacked amplitude function near -1.
- Finally, in a similar manner to cleanReadout, the signal levels
+ dispersed spectra.
+
+ The processing flow of this algorithm is the following. For each
+ quadrant, take the FFT row by row and relying on the known
+ periodicity of the pattern (8 pix), look for significant peaks
+ in the amplitude spectrum at the corresponding frequency and its
+ harmonics, and interpolate over them. This should clean
+ the noise. Subtract the resulting frame from the input frame
+ to generate the pattern frame.
+ Then, leverage the four-fold symmetry of the pattern coverage to
+ determine the edges. To this end, median-combine the pattern
+ amplitude functions (using the pattern frame) after standardizing
+ each separately. The regions unaffected by pattern noise will
+ show up in such a stacked amplitude function near -1.
+ Finally, in a similar manner to cleanReadout, the signal levels
are normalized across the edges within each quad and across quads.
Parameters
@@ -610,33 +610,33 @@ def cleanFFTReadout(self, adinputs=None, **params):
suffix: str, Default: "_readoutFFTCleaned"
Suffix to be added to output files.
win_size: int
- Window size to compute local threshold for finding significant Fourier peaks at
- the target frequencies corresponding to the pattern noise periodicity.
+ Window size to compute local threshold for finding significant Fourier peaks at
+ the target frequencies corresponding to the pattern noise periodicity.
periodicity: int
Pattern noise periodicity. For NIRI/GNIRS, it is known to be 8 pix.
sigma_fact: float
- Sigma factor used for the Fourier amplitude threshold.
+ Sigma factor used for the Fourier amplitude threshold.
pat_thres: float
- Threshold used to characterise the strength of the standardized pattern noise. If
- smaller than this value, the pattern noise is absent.
+ Threshold used to characterise the strength of the standardized pattern noise. If
+ smaller than this value, the pattern noise is absent.
lquad: bool
Level the offset in bias level across (sub-)quads that typically accompany
pattern noise.
l2clean: bool
- Perform a second-level cleaning of the pattern to do away with Fourier artifacts,
- e.g., ringing from bright stars. This operates on the pattern frame and tries to
+ Perform a second-level cleaning of the pattern to do away with Fourier artifacts,
+ e.g., ringing from bright stars. This operates on the pattern frame and tries to
interpolate over rogue rows.
l2thres: float
Sigma factor to be used in thresholding for l2clean. For stubborn Fourier artifacts,
- consider decreasing this value.
+ consider decreasing this value.
smoothing_extent: int
- Width (in pixels) of the region at a given quad interface to be smoothed over
+ Width (in pixels) of the region at a given quad interface to be smoothed over
on each side of the interface.
pad_rows: int
- Number of dummy rows to append to the top quads of the image. This is to take care of
- weird quad structure like that for GNIRS, where the top and bottom quads are not equal
- in size but are read out synchronously. For example, for GNIRS, the top quad is really
- only 510 rows but read out synchronously with the "bottom" 510 rows although this "bottom"
+ Number of dummy rows to append to the top quads of the image. This is to take care of
+ weird quad structure like that for GNIRS, where the top and bottom quads are not equal
+ in size but are read out synchronously. For example, for GNIRS, the top quad is really
+ only 510 rows but read out synchronously with the "bottom" 510 rows although this "bottom"
quad has 512 rows.
clean: str, Default: "skip"
Must be one of "skip" or "default". Note "force" option doesn't exist for this FFT method.
@@ -682,7 +682,7 @@ def cleanFFTReadout(self, adinputs=None, **params):
pad_objmask = np.full((pad_rows, ext.OBJMASK.shape[1]), DQ.no_data)
ext.OBJMASK = np.insert(ext.OBJMASK, qysize, pad_objmask, axis=0)
log.stdinfo(f"Padded {pad_rows} dummy rows for image taken with {ad.instrument()}")
-
+
ori_ext = deepcopy(ext)
pattern_data = {}
rows_cleaned = 0
@@ -697,7 +697,7 @@ def cleanFFTReadout(self, adinputs=None, **params):
num_samples = len(quad.data[i,:])
row_data = quad.data[i,:]
row_fft = rfft(row_data)
- row_freq = rfftfreq(num_samples, 1)
+ row_freq = rfftfreq(num_samples, 1)
amp = np.abs(row_fft)
_ind = np.argmin(np.abs(row_freq - 1/periodicity)) ##find the index closest to the principal target frequency
a_mean, a_median, a_std = sigma_clipped_stats(amp[_ind-win_size:_ind+win_size], sigma=2.0)
@@ -707,14 +707,14 @@ def cleanFFTReadout(self, adinputs=None, **params):
if np.interp(1/periodicity, row_freq, amp)>amp_threshold: ##if principal target frequency stands out then automatically clean its harmonics
counter = 1
while int(counter*1/periodicity*num_samples) <= (num_samples-1):
- mask.append(int(counter*1/periodicity*num_samples))
+ mask.append(int(counter*1/periodicity*num_samples))
counter += 1
rows_cleaned += 1
mask = np.array(mask)
real_ = row_fft.real
imag_ = row_fft.imag
- idx = np.arange(len(row_fft))
+ idx = np.arange(len(row_fft))
MM = np.isin(idx, mask)
real_[MM] = np.interp(idx[MM].astype(float), idx[~MM].astype(float), real_[~MM])
imag_[MM] = np.interp(idx[MM].astype(float), idx[~MM].astype(float), imag_[~MM])
@@ -723,12 +723,12 @@ def cleanFFTReadout(self, adinputs=None, **params):
row_fft.real = real_
row_fft.imag = imag_
row_data_new = irfft(row_fft)
- quad.data[i,:] = row_data_new
+ quad.data[i,:] = row_data_new
pattern_data[tb+'-'+lr] = ori_quad.data - quad.data
if lquad and rows_cleaned>0:
- ## intra-quad leveling
+ ## intra-quad leveling
for K in ['bottom-left', 'bottom-right']:
pattern_data[K] = np.flipud(pattern_data[K])
@@ -745,8 +745,8 @@ def cleanFFTReadout(self, adinputs=None, **params):
edges = {} #dummy dict to make use of the _levelQuad function
if np.sum(MSK) > 0:
for ystart, tb in zip((0, qysize),('bottom','top')):
- for xstart, lr in zip((0, qxsize),('left','right')):
- quad = ext.nddata[ystart:ystart + qysize, xstart:xstart + qxsize]
+ for xstart, lr in zip((0, qxsize),('left','right')):
+ quad = ext.nddata[ystart:ystart + qysize, xstart:xstart + qxsize]
mean_collapsed_signa, median_collapsed_signal, __ = sigma_clipped_stats(quad.data, axis=1, sigma=2.0)
if np.sum(MSK) > np.sum(~MSK): ##to normalize the smaller section to the larger section
@@ -759,7 +759,7 @@ def cleanFFTReadout(self, adinputs=None, **params):
median_collapsed_signal[mask] = np.NAN
mean_collapsed_signa[mask] = np.NAN
- ## for intra-quad, level to the same value. Note that when there is a strong gradient in the quad, this method will fail
+ ## for intra-quad, level to the same value. Note that when there is a strong gradient in the quad, this method will fail
for _ind in np.arange(len(median_collapsed_signal))[mask]:
offset = np.nanmean(median_collapsed_signal) - sigma_clipped_stats(quad.data[_ind,:], sigma=2.0)[1]
quad.data[_ind,:] += offset
@@ -776,37 +776,37 @@ def cleanFFTReadout(self, adinputs=None, **params):
MASK = ext.mask
masked_data = np.ma.masked_array(ext.data, mask=MASK)
self._levelQuad(masked_data, smoothing_extent=smoothing_extent, edges=edges)
-
- if l2clean and rows_cleaned>0:
+
+ if l2clean and rows_cleaned>0:
for ystart, tb in zip((0, qysize),('bottom','top')):
- for xstart, lr in zip((0, qxsize),('left','right')):
+ for xstart, lr in zip((0, qxsize),('left','right')):
quad = ext.nddata[ystart:ystart + qysize, xstart:xstart + qxsize]
- ori_quad = ori_ext.nddata[0][ystart:ystart + qysize, xstart:xstart + qxsize]
- ## update the pattern data (lquad, if called, would have modified it)
+ ori_quad = ori_ext.nddata[0][ystart:ystart + qysize, xstart:xstart + qxsize]
+ ## update the pattern data (lquad, if called, would have modified it)
pattern_data[tb+'-'+lr] = ori_quad.data - quad.data
if tb=='top':
pattern_data[tb+'-'+lr] = np.flipud(ori_quad.data - quad.data)
strength = {}
for K, V in pattern_data.items():
- strength[K] = np.std(V, axis=1)
+ strength[K] = np.std(V, axis=1)
collapsed_matrix = pd.DataFrame(strength)
- standardized_collapsed_matrix = (collapsed_matrix - collapsed_matrix.median())/collapsed_matrix.std()
+ standardized_collapsed_matrix = (collapsed_matrix - collapsed_matrix.median())/collapsed_matrix.std()
meddev_matrix = standardized_collapsed_matrix.sub(standardized_collapsed_matrix.mean(axis=1), axis=0) ## flatten the curves
pattern_data_new = {}
- bucket = np.array([meddev_matrix[V] for V in meddev_matrix.columns])
- mn, med, st = sigma_clipped_stats(bucket, sigma=2.5)
+ bucket = np.array([meddev_matrix[V] for V in meddev_matrix.columns])
+ mn, med, st = sigma_clipped_stats(bucket, sigma=2.5)
for K in meddev_matrix.columns:
- bb = meddev_matrix[K].values
+ bb = meddev_matrix[K].values
mask = (bb < mn - l2thres * st) | (bb > mn + l2thres * st)
pattern_data_new[K] = deepcopy(pattern_data[K])
if np.sum(mask) > 0:
- for i in range(pattern_data_new[K].shape[1]): ## work at column-by-column level
- pattern_data_new[K][mask,i] = np.interp(np.arange(pattern_data[K].shape[0])[mask],
+ for i in range(pattern_data_new[K].shape[1]): ## work at column-by-column level
+ pattern_data_new[K][mask,i] = np.interp(np.arange(pattern_data[K].shape[0])[mask],
np.arange(pattern_data[K].shape[0])[~mask], pattern_data[K][~mask,i])
for K in ['top-left', 'top-right']:
@@ -815,7 +815,7 @@ def cleanFFTReadout(self, adinputs=None, **params):
## create the full improved pattern
temp_top = np.hstack((pattern_data_new['top-left'], pattern_data_new['top-right']))
temp_bottom = np.hstack((pattern_data_new['bottom-left'], pattern_data_new['bottom-right']))
- temp = np.vstack((temp_bottom, temp_top))
+ temp = np.vstack((temp_bottom, temp_top))
ext.data = ori_ext.data[0] - temp
if pad_rows>0:
@@ -823,14 +823,14 @@ def cleanFFTReadout(self, adinputs=None, **params):
ext.mask = np.delete(ext.mask, np.arange(qysize, qysize+pad_rows), axis=0)
if hasattr(ext, 'OBJMASK'):
ext.OBJMASK = np.delete(ext.OBJMASK, np.arange(qysize, qysize+pad_rows), axis=0)
-
+
# Timestamp and update filename
gt.mark_history(ad, primname=self.myself(), keyword=timestamp_key)
ad.update_filename(suffix=params["suffix"], strip=True)
return adinputs
-
+
def separateFlatsDarks(self, adinputs=None, **params):
"""
diff --git a/geminidr/core/tests/test_nearIR.py b/geminidr/core/tests/test_nearIR.py
index 02a471c704..3bf3b43409 100644
--- a/geminidr/core/tests/test_nearIR.py
+++ b/geminidr/core/tests/test_nearIR.py
@@ -141,7 +141,7 @@ def test_clean_readout(in_file, path_to_inputs, path_to_refs):
"N20060218S0138", # NIRI image
"S20060501S0081", # GNIRS XD spectrum
"S20060806S0080", # GNIRS XD spectrum
- "S20070131S0105", # GNIRS XD spectrum
+ "S20070131S0105", # GNIRS XD spectrum
"N20101227S0040", # GNIRS LS (par needs tweaking pat_thres=0.1). Only FFT can handle this frame.
"N20231112S0136", # GNIRS LS
])
@@ -152,7 +152,7 @@ def test_clean_fftreadout(in_file, path_to_inputs, path_to_refs):
pm = PrimitiveMapper(ad.tags, ad.instrument(generic=True).lower(),
mode="sq", drpkg="geminidr")
pclass = pm.get_applicable_primitives()
- p = pclass([ad])
+ p = pclass([ad])
ad_out = p.cleanFFTReadout(clean="default")[0]
ref = astrodata.open(os.path.join(path_to_refs, in_file + '_readoutFFTCleaned.fits'))
assert ad_compare(ad_out, ref)
diff --git a/geminidr/core/tests/test_resample.py b/geminidr/core/tests/test_resample.py
index cecc6452c9..760549192b 100644
--- a/geminidr/core/tests/test_resample.py
+++ b/geminidr/core/tests/test_resample.py
@@ -65,4 +65,4 @@ def test_shift_images(astrofaker, separator, trim_data, file_write, path_to_outp
assert coord.separation(new_coord) < 1e-6 * u.arcsec # should be identical
if file_write:
- os.remove(shifts_par)
\ No newline at end of file
+ os.remove(shifts_par)
diff --git a/geminidr/core/tests/test_wcs_creation_and_stability.py b/geminidr/core/tests/test_wcs_creation_and_stability.py
index 42f951cc7a..0db90fb769 100644
--- a/geminidr/core/tests/test_wcs_creation_and_stability.py
+++ b/geminidr/core/tests/test_wcs_creation_and_stability.py
@@ -106,4 +106,4 @@ def test_gmos_wcs_stability(raw_ad_path, do_prepare, do_overscan_correct, tile_a
c = SkyCoord(*ad[new_ref_index].wcs(x, y), unit="deg")
assert c0.separation(c) < 1e-9 * u.arcsec
- os.remove(TEMPFILE)
\ No newline at end of file
+ os.remove(TEMPFILE)
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/css/custom_code.css b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/css/custom_code.css
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/fonts.css b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/fonts.css
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/rtd_theme_overrides.css b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/rtd_theme_overrides.css
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqarecipes.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqarecipes.rst
index dcbbdfe911..d15a8aa2aa 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqarecipes.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqarecipes.rst
@@ -13,4 +13,3 @@ geminidr.gmos.recipes.qa.recipes_IMAGE
.. automodule:: geminidr.gmos.recipes.qa.recipes_IMAGE
:members:
:undoc-members:
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqlrecipes.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqlrecipes.rst
index d072e4ff12..6764c51884 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqlrecipes.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/appendices/recipes/gmosqlrecipes.rst
@@ -13,4 +13,3 @@ geminidr.gmos.recipes.ql.recipes_IMAGE
.. automodule:: geminidr.gmos.recipes.ql.recipes_IMAGE
:members:
:undoc-members:
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/flows.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/flows.rst
index c6fc9503db..7e27a814e8 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/flows.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/flows.rst
@@ -37,5 +37,3 @@ Top-Level Flow Charts for Processing of Calibrations
Top-Level Flow Charts for Processing of Science
-----------------------------------------------
-
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosprimitives.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosprimitives.rst
index 21a58b69d1..d5fdd9bbb1 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosprimitives.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosprimitives.rst
@@ -86,4 +86,4 @@ primitives_gmos_spect
.. rubric:: Methods defined in class
-.. inheritance-diagram:: geminidr.gmos.primitives_gmos_spect.GMOSSpect
\ No newline at end of file
+.. inheritance-diagram:: geminidr.gmos.primitives_gmos_spect.GMOSSpect
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosrecipes.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosrecipes.rst
index 3c04d2131e..52c2e22308 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosrecipes.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmosrecipes.rst
@@ -44,4 +44,3 @@ Issues and Limitations
remember: focus programmer's view
memory issues with some recipes.
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmostests.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmostests.rst
index 35d7bf7792..b12786712d 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmostests.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/gmostests.rst
@@ -39,4 +39,3 @@ Missing or Desirable Tests
--------------------------
.. note:: as a list, or in a table
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/index.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/index.rst
index 9773fa2d06..67ac69206e 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/index.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/index.rst
@@ -40,4 +40,3 @@ Indices and tables
* :ref:`search`
.. todolist::
-
diff --git a/geminidr/doc/progmanuals/GMOSDR_ProgManual/tags.rst b/geminidr/doc/progmanuals/GMOSDR_ProgManual/tags.rst
index bdf23e8ec2..d179ca7790 100644
--- a/geminidr/doc/progmanuals/GMOSDR_ProgManual/tags.rst
+++ b/geminidr/doc/progmanuals/GMOSDR_ProgManual/tags.rst
@@ -13,4 +13,4 @@ for calibration association, for archive (including processed data).
Association Table
=================
-associate ad tags with type of observations
\ No newline at end of file
+associate ad tags with type of observations
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/F2Img-DRTutorial/.readthedocs.yaml
index e753dfdcc3..448a206df2 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/01_introduction.rst b/geminidr/doc/tutorials/F2Img-DRTutorial/01_introduction.rst
index 3013d38cbe..16e70a59e3 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/01_introduction.rst
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/01_introduction.rst
@@ -80,4 +80,3 @@ will work in the subdirectory named ``f2img_tutorial/playground``.
but if you really want to learn how to search for and retrieve the
data yourself, see the step-by-step instructions for Example 1 in
the appendix :ref:`goadownload`.
-
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/05_issues_and_limitations.rst b/geminidr/doc/tutorials/F2Img-DRTutorial/05_issues_and_limitations.rst
index 661b0dbeaf..001280d6cd 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/05_issues_and_limitations.rst
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/05_issues_and_limitations.rst
@@ -50,4 +50,4 @@ screen. We recommend using the DRAGONS logger located in the
:linenos:
from gempy.utils import logutils
- logutils.config(file_name='f2_data_reduction.log')
\ No newline at end of file
+ logutils.config(file_name='f2_data_reduction.log')
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/Makefile b/geminidr/doc/tutorials/F2Img-DRTutorial/Makefile
index 431574d781..174072efb3 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/Makefile
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/Makefile
@@ -17,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/_static/css/code.xref-styles.css b/geminidr/doc/tutorials/F2Img-DRTutorial/_static/css/code.xref-styles.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/_static/css/code.xref-styles.css
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/_static/css/code.xref-styles.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/F2Img-DRTutorial/appendices/01_goa_download.rst b/geminidr/doc/tutorials/F2Img-DRTutorial/appendices/01_goa_download.rst
index 855e76c376..a6c6ffa328 100644
--- a/geminidr/doc/tutorials/F2Img-DRTutorial/appendices/01_goa_download.rst
+++ b/geminidr/doc/tutorials/F2Img-DRTutorial/appendices/01_goa_download.rst
@@ -103,4 +103,4 @@ downloaded the data from the `Gemini Archive "at-file" Facility
\ No newline at end of file
+ "at-file" Facility
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/GHOST-DRTutorial/.readthedocs.yaml
index bfa969b592..bd5eeb5b03 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/css/custom_code.css b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/css/custom_code.css
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/fonts.css b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/fonts.css
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/rtd_theme_overrides.css b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/_static/rtd_theme_overrides.css
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_cmdline.rst b/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_cmdline.rst
index 1f117a4008..a5cd017b11 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_cmdline.rst
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_cmdline.rst
@@ -703,4 +703,4 @@ so you should run
reduce -r makeIRAFCompatible S20230416S0079_red001_dragons.fits
which will create a file ``S20230416S0079_red001_irafCompatible.fits`` that
-IRAF can read. Note, however, that this file is **incompatible with DRAGONS**.
\ No newline at end of file
+IRAF can read. Note, however, that this file is **incompatible with DRAGONS**.
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_dataset.rst b/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_dataset.rst
index d5f53cd915..d23c22f2a9 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_dataset.rst
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/ex1_ghost_stdonetarget_dataset.rst
@@ -82,6 +82,3 @@ You can download them from
here: https://archive.gemini.edu/searchform/GHOST/notengineering/cols=CTOWBEQ/NotFail/not_site_monitoring/BPM
Put them in ``playdata/example1/``.
-
-
-
diff --git a/geminidr/doc/tutorials/GHOST-DRTutorial/index.rst b/geminidr/doc/tutorials/GHOST-DRTutorial/index.rst
index 2d3cbd55cc..b439889c6f 100644
--- a/geminidr/doc/tutorials/GHOST-DRTutorial/index.rst
+++ b/geminidr/doc/tutorials/GHOST-DRTutorial/index.rst
@@ -32,4 +32,4 @@ Indices and tables
* :ref:`modindex`
* :ref:`search`
-.. todolist::
\ No newline at end of file
+.. todolist::
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/GMOSImg-DRTutorial/.readthedocs.yaml
index 8e4c1d8a82..3107ecb2de 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/01_introduction.rst b/geminidr/doc/tutorials/GMOSImg-DRTutorial/01_introduction.rst
index 45552f5161..c390e5e707 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/01_introduction.rst
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/01_introduction.rst
@@ -83,4 +83,3 @@ will work in the subdirectory named ``gmosimg_tutorial/playground``.
but if you really want to learn how to search for and retrieve the
data yourself, see the step-by-step instructions for Example 1
in the appendix, :ref:`goadownload`.
-
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/05_issues_and_limitations.rst b/geminidr/doc/tutorials/GMOSImg-DRTutorial/05_issues_and_limitations.rst
index 9e6707029d..f4c23115aa 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/05_issues_and_limitations.rst
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/05_issues_and_limitations.rst
@@ -44,4 +44,4 @@ screen. We recommend using the DRAGONS logger located in the
Astropy warnings
================
You might see some warning messages from AstroPy that are related to the
-header of the images. It is safe to ignore them.
\ No newline at end of file
+header of the images. It is safe to ignore them.
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/Makefile b/geminidr/doc/tutorials/GMOSImg-DRTutorial/Makefile
index 431574d781..174072efb3 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/Makefile
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/Makefile
@@ -17,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/_static/css/code.xref-styles.css b/geminidr/doc/tutorials/GMOSImg-DRTutorial/_static/css/code.xref-styles.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/_static/css/code.xref-styles.css
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/_static/css/code.xref-styles.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/GMOSImg-DRTutorial/appendices/01_goa_download.rst b/geminidr/doc/tutorials/GMOSImg-DRTutorial/appendices/01_goa_download.rst
index 0193325cef..1639c08e9a 100644
--- a/geminidr/doc/tutorials/GMOSImg-DRTutorial/appendices/01_goa_download.rst
+++ b/geminidr/doc/tutorials/GMOSImg-DRTutorial/appendices/01_goa_download.rst
@@ -107,4 +107,4 @@ downloaded the data from the `Gemini Archive "at-file" Facility
\ No newline at end of file
+ "at-file" Facility
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/GMOSLS-DRTutorial/.readthedocs.yaml
index 4b0f4f5c5a..18ae8f6d74 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/01_overview.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/01_overview.rst
index 83cb5b3454..0499f6bbea 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/01_overview.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/01_overview.rst
@@ -34,4 +34,4 @@ We show how to run the same reduction using both methods.
* :ref:`ns_example`
* :ref:`nsred_example`
-See the |RSUserInstall| to install the software if you have not already.
\ No newline at end of file
+See the |RSUserInstall| to install the software if you have not already.
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/02_datasets.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/02_datasets.rst
index cc8a60f1d4..e8db6ca241 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/02_datasets.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/02_datasets.rst
@@ -33,4 +33,3 @@ we will work in the subdirectory named ``gmosls_tutorial/playground``.
.. note:: All the raw data can also be downloaded from the Gemini Observatory
Archive. Using the tutorial data package is probably more convenient.
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/05_tips_and_tricks.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/05_tips_and_tricks.rst
index 2c2ab2cac4..c53a5ada1d 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/05_tips_and_tricks.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/05_tips_and_tricks.rst
@@ -164,6 +164,3 @@ do it.
In the science-approved version of the GMOS longslit support in DRAGONS, there
will be an interactive tool to inspect and adjust the sensitivity function.
-
-
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/07_interactive.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/07_interactive.rst
index 1c4460ca49..ab0487840e 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/07_interactive.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/07_interactive.rst
@@ -243,4 +243,4 @@ inspect all the apertures of interest.
The tracing algorithm can be controlled with the "Left Panel". There might
be cases (eg. faint sources) where the defaults struggle to follow the signal
and the plot looks really noisy or odd. You can experiment with those input
-parameters to see if you can get a better trace to fit.
\ No newline at end of file
+parameters to see if you can get a better trace to fit.
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/css/custom_code.css b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/css/custom_code.css
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/fonts.css b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/fonts.css
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/rtd_theme_overrides.css b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/rtd_theme_overrides.css
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered.rst
index 83399d3af7..ff3796e3a7 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered.rst
@@ -15,5 +15,3 @@ dwarf candidate.
ex1_gmosls_dithered_dataset
ex1_gmosls_dithered_cmdline
ex1_gmosls_dithered_api
-
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered_dataset.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered_dataset.rst
index 1213e2833a..52f4d35744 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered_dataset.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex1_gmosls_dithered_dataset.rst
@@ -72,4 +72,3 @@ package. They can also be downloaded from the Gemini Observatory Archive (GOA).
+---------------------+---------------------------------------------+
| BPM || bpm_20140601_gmos-s_Ham_22_full_12amp.fits |
+---------------------+---------------------------------------------+
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither.rst
index a1c2d37607..41327f1209 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither.rst
@@ -14,5 +14,3 @@ In this example we will reduce a GMOS longslit observation containing traces of
ex2_gmosls_large_dither_dataset
ex2_gmosls_large_dither_cmdline
ex2_gmosls_large_dither_api
-
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_api.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_api.rst
index 30f13374c7..3bc59682f7 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_api.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_api.rst
@@ -246,13 +246,13 @@ receive the Astrodata tag ``STANDARD``. To be recognized, the name of the
star must be in a lookup table. All spectrophotometric standards normally used
at Gemini are in that table.
-For this example with a large wavelength dither, we will be reducing the standard star observations at each
-central wavelength separately without stacking them. The standard star reduction
-recipe stacks all the observations in a given file list. So we need to create
-separate file lists for the different central wavelengths.
+For this example with a large wavelength dither, we will be reducing the standard star observations at each
+central wavelength separately without stacking them. The standard star reduction
+recipe stacks all the observations in a given file list. So we need to create
+separate file lists for the different central wavelengths.
-First, let's inspect the central wavelength of the standard star frames in our raw data directory.
-For this, we can loop through all the files with the tag ``STANDARD`` and print
+First, let's inspect the central wavelength of the standard star frames in our raw data directory.
+For this, we can loop through all the files with the tag ``STANDARD`` and print
the value for the descriptor of interest, here ``central_wavelength``.
.. code-block:: python
@@ -263,7 +263,7 @@ the value for the descriptor of interest, here ``central_wavelength``.
for std in all_stdstar:
ad = astrodata.open(std)
print(std, ' ', ad.central_wavelength())
-
+
::
../playdata/example2/S20220608S0098.fits 7.05e-07
@@ -484,11 +484,11 @@ Processed Standard - Sensitivity Function
=========================================
The GMOS longslit spectrophotometric standards are normally taken when there
is a hole in the queue schedule, often when the weather is not good enough
-for science observations. For a large wavelength dither, i.e., a difference
-in central wavelength much greater than about 10 nm, a spectrophotometric standard should be
-taken at each of those positions to calculate the respective sensitvity functions.
-The latter will then be used for spectrophotometric calibration of the science observations
-at the corresponding central wavelengths.
+for science observations. For a large wavelength dither, i.e., a difference
+in central wavelength much greater than about 10 nm, a spectrophotometric standard should be
+taken at each of those positions to calculate the respective sensitvity functions.
+The latter will then be used for spectrophotometric calibration of the science observations
+at the corresponding central wavelengths.
The reduction of the standard will be using a BPM, a master bias, a master flat,
and a processed arc. If those have been added to the local calibration
@@ -548,15 +548,15 @@ The interactive tools are introduced in section :ref:`interactive`.
**The 795nm Standard**
For the standard star observation at central wavelength 795 nm in this
-dataset, ``calculateSensitivity`` with its default parameter values yields a suboptimal number
-of data points to constrain its sensitivity curve (see the left plot below; click the panel to enlarge).
-There is a conspicuous gap between 820 and 980 nm -- a result of the amplifier #5 issue and compounded
-by the presence of telluric absorption redward of around 880 nm.
-
-To deal with this, we can consider interpolating the (reference) data of the spectrophotometric standard,
-given that it has a smooth spectrum,
-to generate new sensitivity data points to fit.
-This is enabled by the ``resampling`` parameter, whose value
+dataset, ``calculateSensitivity`` with its default parameter values yields a suboptimal number
+of data points to constrain its sensitivity curve (see the left plot below; click the panel to enlarge).
+There is a conspicuous gap between 820 and 980 nm -- a result of the amplifier #5 issue and compounded
+by the presence of telluric absorption redward of around 880 nm.
+
+To deal with this, we can consider interpolating the (reference) data of the spectrophotometric standard,
+given that it has a smooth spectrum,
+to generate new sensitivity data points to fit.
+This is enabled by the ``resampling`` parameter, whose value
we update as follows
.. code-block:: python
@@ -573,14 +573,14 @@ we update as follows
.. image:: _graphics/LS_ldred_sens_before.png
:width: 325
:alt: Sensitivity function before optimization
-
-
+
+
.. image:: _graphics/LS_ldred_sens_after.png
:width: 325
:alt: Sensitivity function after optimization
-The resulting curve is shown on the right plot (click the panel to enlarge). Notice that we have also tuned other parameters in the
-interactive tool and have manually masked four data points.
+The resulting curve is shown on the right plot (click the panel to enlarge). Notice that we have also tuned other parameters in the
+interactive tool and have manually masked four data points.
.. note:: If you wish to inspect the spectrum in aperture 1:
@@ -600,10 +600,10 @@ interactive tool and have manually masked four data points.
Science Observations
====================
-As mentioned previously, the science target is the central galaxy of an Odd Radio Circle. The sequence
-has two images that were dithered in wavelength (with a large step of 90 nm).
+As mentioned previously, the science target is the central galaxy of an Odd Radio Circle. The sequence
+has two images that were dithered in wavelength (with a large step of 90 nm).
DRAGONS will register the two images, align and stack them before
-extracting the 1-D spectrum.
+extracting the 1-D spectrum.
This is what one raw image looks like.
@@ -611,11 +611,11 @@ This is what one raw image looks like.
:width: 600
:alt: raw science image
-The broad, white and black vertical bands (slightly to the left of the middle) are related
-to the GMOS-S amplifier #5 issues.
-As can be seen, there are two obvious sources in this observation. Regardless of whether
-both of them are of interest to the program, DRAGONS will locate, trace, and extract
-them automatically. Each extracted spectrum is stored in an individual extension
+The broad, white and black vertical bands (slightly to the left of the middle) are related
+to the GMOS-S amplifier #5 issues.
+As can be seen, there are two obvious sources in this observation. Regardless of whether
+both of them are of interest to the program, DRAGONS will locate, trace, and extract
+them automatically. Each extracted spectrum is stored in an individual extension
in the output multi-extension FITS file.
@@ -633,29 +633,29 @@ science observations and extract the 1-D spectrum.
reduce_science.recipename = 'reduceWithMultipleStandards'
reduce_science.uparms = dict([('interactive', True)])
reduce_science.runr()
-
-Here we use a different science reduction recipe ``reduceWithMultipleStandards`` (line 97)
-than the default. The
-latter performs flux calibration *after* stacking the extracted spectra
-as described :ref:`here `, which is not suitable
-for these observations with a large wavelength dither. The recipe
-``reduceWithMultipleStandards`` will run flux calibration for each
+
+Here we use a different science reduction recipe ``reduceWithMultipleStandards`` (line 97)
+than the default. The
+latter performs flux calibration *after* stacking the extracted spectra
+as described :ref:`here `, which is not suitable
+for these observations with a large wavelength dither. The recipe
+``reduceWithMultipleStandards`` will run flux calibration for each
central wavelength using the corresponding sensitivity function from the
-spectrophotometric standard before stacking
+spectrophotometric standard before stacking
the observations -- the desired workflow for this example.
-You can make use of the interactive tools to optimize the reduction. For
+You can make use of the interactive tools to optimize the reduction. For
the science reduction above, we have deleted any additional apertures found
-by DRAGONS barring the two most prominent ones (see the left plot; click
-to enlarge). You simply hover over the unwanted peak and press D. Furthermore,
-we have selected sigma-clipping while tracing the apertures (right plot;
+by DRAGONS barring the two most prominent ones (see the left plot; click
+to enlarge). You simply hover over the unwanted peak and press D. Furthermore,
+we have selected sigma-clipping while tracing the apertures (right plot;
click to enlarge). Notice that there is an additional tab for Aperture 2
-in the upper part of the right plot.
+in the upper part of the right plot.
.. image:: _graphics/LS_ldred_findAp_sci.png
:width: 325
:alt: Apertures found by DRAGONS
-
+
.. image:: _graphics/LS_ldred_traceAp_sci.png
:width: 325
:alt: Tracing of aperture
@@ -663,12 +663,12 @@ in the upper part of the right plot.
The outputs include a 2-D spectrum image (``S20220611S0716_2D.fits``), which has been
bias corrected, flat fielded, QE-corrected, wavelength-calibrated, corrected for
distortion, sky-subtracted, flux-calibrated, and stacked, and also the 1-D spectra
-(``S20171022S0087_1D.fits``) extracted from this 2-D spectrum image. The 1-D spectra are stored
-as 1-D FITS images in extensions of the output Multi-Extension FITS file, along with their
-respective variance and data quality (or mask) arrays.
+(``S20171022S0087_1D.fits``) extracted from this 2-D spectrum image. The 1-D spectra are stored
+as 1-D FITS images in extensions of the output Multi-Extension FITS file, along with their
+respective variance and data quality (or mask) arrays.
+
+.. note:: If you wish to inspect the content of the 1-D output, run:
-.. note:: If you wish to inspect the content of the 1-D output, run:
-
.. code-block:: python
astrodata.open('S20220611S0716_1D.fits').info()
@@ -736,13 +736,13 @@ The 1-D flux-calibrated spectra of the two apertures are shown below.
.. image:: _graphics/LS_ldred_ap1_spec1D.png
:width: 325
:alt: 1D spectrum for aperture 1
-
+
.. image:: _graphics/LS_ldred_ap2_spec1D.png
:width: 325
- :alt: 1D spectrum for aperture 2
+ :alt: 1D spectrum for aperture 2
To learn how to plot a 1-D spectrum with matplotlib using the WCS from a Python
-script, see Tips and Tricks :ref:`plot_1d`.
+script, see Tips and Tricks :ref:`plot_1d`.
If you need an ascii representation of the spectum, you can use the primitive
``write1DSpectra`` to extract the values from the FITS file.
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_cmdline.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_cmdline.rst
index 7018f110fe..329a68290e 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_cmdline.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_cmdline.rst
@@ -7,7 +7,7 @@ Example 2 - Longslit large-dither point source - using the "reduce" command line
********************************************************************************
-In this example, we will reduce a GMOS longslit observation of `ORC J0102-2450 `_,
+In this example, we will reduce a GMOS longslit observation of `ORC J0102-2450 `_,
an Odd Radio Circle, using the "|reduce|" command that is operated directly from the unix shell. Just open a terminal and load the DRAGONS conda environment
to get started.
@@ -184,11 +184,11 @@ Two lists for the spectrophotometric standard star
--------------------------------------------------
If a spectrophotometric standard is recognized as such by DRAGONS, it will
receive the Astrodata tag ``STANDARD``. All spectrophotometric standards
-normally used at Gemini are in the DRAGONS list of recognized standards.
-For this example, we will be reducing the standard star observations at each
-central wavelength separately without stacking them. The standard star reduction
-recipe stacks all the observations in a given file list. So we need to create
-separate file lists for the different central wavelengths.
+normally used at Gemini are in the DRAGONS list of recognized standards.
+For this example, we will be reducing the standard star observations at each
+central wavelength separately without stacking them. The standard star reduction
+recipe stacks all the observations in a given file list. So we need to create
+separate file lists for the different central wavelengths.
First, let's check the central wavelength of the standard star frames in our raw data directory.
@@ -200,15 +200,15 @@ First, let's check the central wavelength of the standard star frames in our raw
filename central_wavelength
-------------------------------------------------------------
../playdata/example2/S20220608S0098.fits 7.05e-07
- ../playdata/example2/S20220608S0101.fits 7.95e-07
+ ../playdata/example2/S20220608S0101.fits 7.95e-07
-We will then create two standard star lists for the two central wavelengths.
+We will then create two standard star lists for the two central wavelengths.
::
dataselect ../playdata/example2/*.fits --tags STANDARD --expr='central_wavelength==7.05e-07' -o std_705nm.lis
dataselect ../playdata/example2/*.fits --tags STANDARD --expr='central_wavelength==7.95e-07' -o std_795nm.lis
-
+
A list for the science observations
-----------------------------------
@@ -320,13 +320,13 @@ Processed Arc - Wavelength Solution
===================================
GMOS longslit arc can be obtained at night with the observation sequence,
if requested by the program, but are often obtained at the end of the night
-or the following afternoon instead. In this example, the arcs have been obtained at night,
+or the following afternoon instead. In this example, the arcs have been obtained at night,
as part of the sequence. Like the spectroscopic flats, they are not
stacked, which means that they can be sent to reduce all together and will
be reduced individually.
The wavelength solution is automatically calculated and has been found to be
-quite reliable. There might be cases where it fails; inspect the RMS of
+quite reliable. There might be cases where it fails; inspect the RMS of
``determineWavelengthSolution`` in the logs to confirm a good solution.
::
@@ -347,11 +347,11 @@ Processed Standard - Sensitivity Function
=========================================
The GMOS longslit spectrophotometric standards are normally taken when there
is a hole in the queue schedule, often when the weather is not good enough
-for science observations. For a large wavelength dither, i.e., a difference
-in central wavelength much greater than about 10 nm, a spectrophotometric standard should be
-taken at each of those positions to calculate the respective sensitvity functions.
-The latter will then be used for spectrophotometric calibration of the science observations
-at the corresponding central wavelengths.
+for science observations. For a large wavelength dither, i.e., a difference
+in central wavelength much greater than about 10 nm, a spectrophotometric standard should be
+taken at each of those positions to calculate the respective sensitvity functions.
+The latter will then be used for spectrophotometric calibration of the science observations
+at the corresponding central wavelengths.
The reduction of the standard will be using a BPM, a master bias, a master flat,
and a processed arc. If those have been added to the local calibration
@@ -384,7 +384,7 @@ interactive mode for all four:
Since the standard star spectrum is bright and strong, and the exposure short,
it is somewhat unlikely that interactivity will be needed for the sky
subtraction, or finding and tracing the spectrum. The fitting of the
-sensitivity function however can sometimes benefit from little adjustment.
+sensitivity function however can sometimes benefit from little adjustment.
To activate the interactive mode **only** for the measurement of the
sensitivity function:
@@ -393,20 +393,20 @@ sensitivity function:
reduce @std_705nm.lis -p calculateSensitivity:interactive=True
-The interactive tools are introduced in section :ref:`interactive`.
+The interactive tools are introduced in section :ref:`interactive`.
**The 795nm Standard**
For the standard star observation at central wavelength 795 nm in this
-dataset, ``calculateSensitivity`` with its default parameter values yields a suboptimal number
-of data points to constrain its sensitivity curve (see the left plot below; click the panel to enlarge).
-There is a conspicuous gap between 820 and 980 nm -- a result of the amplifier #5 issue and compounded
-by the presence of telluric absorption redward of around 880 nm.
-
-To deal with this, we can consider interpolating the (reference) data of the spectrophotometric standard,
-given that it has a smooth spectrum,
-to generate new sensitivity data points to fit.
-This is enabled by the ``resampling`` parameter, whose value
+dataset, ``calculateSensitivity`` with its default parameter values yields a suboptimal number
+of data points to constrain its sensitivity curve (see the left plot below; click the panel to enlarge).
+There is a conspicuous gap between 820 and 980 nm -- a result of the amplifier #5 issue and compounded
+by the presence of telluric absorption redward of around 880 nm.
+
+To deal with this, we can consider interpolating the (reference) data of the spectrophotometric standard,
+given that it has a smooth spectrum,
+to generate new sensitivity data points to fit.
+This is enabled by the ``resampling`` parameter, whose value
we update as follows
.. todo:: The trace and the sensfunc plot are different from 3.2.x For the
@@ -420,14 +420,14 @@ we update as follows
.. image:: _graphics/LS_ldred_sens_before.png
:width: 325
:alt: Sensitivity function before optimization
-
-
+
+
.. image:: _graphics/LS_ldred_sens_after.png
:width: 325
:alt: Sensitivity function after optimization
-The resulting curve is shown on the right plot (click the panel to enlarge). Notice that we have also tuned other parameters in the
-interactive tool and have manually masked four data points.
+The resulting curve is shown on the right plot (click the panel to enlarge). Notice that we have also tuned other parameters in the
+interactive tool and have manually masked four data points.
.. note:: If you wish to inspect the spectra::
@@ -444,10 +444,10 @@ interactive tool and have manually masked four data points.
Science Observations
====================
-As mentioned previously, the science target is the central galaxy of an Odd Radio Circle. The sequence
-has two images that were dithered in wavelength (with a large step of 90 nm).
+As mentioned previously, the science target is the central galaxy of an Odd Radio Circle. The sequence
+has two images that were dithered in wavelength (with a large step of 90 nm).
DRAGONS will register the two images, align and stack them before
-extracting the 1-D spectrum.
+extracting the 1-D spectrum.
This is what one raw image looks like.
@@ -455,11 +455,11 @@ This is what one raw image looks like.
:width: 600
:alt: raw science image
-The broad, white and black vertical bands (slightly to the left of the middle) are related
-to the GMOS-S amplifier #5 issues.
-As can be seen, there are two obvious sources in this observation. Regardless of whether
-both of them are of interest to the program, DRAGONS will locate, trace, and extract
-them automatically. Each extracted spectrum is stored in an individual extension
+The broad, white and black vertical bands (slightly to the left of the middle) are related
+to the GMOS-S amplifier #5 issues.
+As can be seen, there are two obvious sources in this observation. Regardless of whether
+both of them are of interest to the program, DRAGONS will locate, trace, and extract
+them automatically. Each extracted spectrum is stored in an individual extension
in the output multi-extension FITS file.
@@ -472,21 +472,21 @@ science observations and extract the 1-D spectrum.
reduce -r reduceWithMultipleStandards @sci.lis -p interactive=True
-Here we use a different science reduction recipe ``reduceWithMultipleStandards``
-than the default. The
-latter performs flux calibration *after* stacking the extracted spectra
-as described :ref:`here `, which is not suitable
-for these observations with a large wavelength dither. The recipe
-``reduceWithMultipleStandards`` will run flux calibration for each
+Here we use a different science reduction recipe ``reduceWithMultipleStandards``
+than the default. The
+latter performs flux calibration *after* stacking the extracted spectra
+as described :ref:`here `, which is not suitable
+for these observations with a large wavelength dither. The recipe
+``reduceWithMultipleStandards`` will run flux calibration for each
central wavelength using the corresponding sensitivity function from the
-spectrophotometric standard before stacking
+spectrophotometric standard before stacking
the observations -- the desired workflow for this example.
-You can make use of the interactive tools to optimize the reduction. For
+You can make use of the interactive tools to optimize the reduction. For
the science reduction above, we have deleted any additional apertures found
-by DRAGONS barring the two most prominent ones (see the left plot; click
-to enlarge). You simply hover over the unwanted peak and press D. Furthermore,
-we have selected sigma-clipping while tracing the apertures (right plot;
+by DRAGONS barring the two most prominent ones (see the left plot; click
+to enlarge). You simply hover over the unwanted peak and press D. Furthermore,
+we have selected sigma-clipping while tracing the apertures (right plot;
click to enlarge). Notice that there is an additional tab for Aperture 2
in the upper part of the right plot.
@@ -495,7 +495,7 @@ in the upper part of the right plot.
.. image:: _graphics/LS_ldred_findAp_sci.png
:width: 325
:alt: Apertures found by DRAGONS
-
+
.. image:: _graphics/LS_ldred_traceAp_sci.png
:width: 325
:alt: Tracing of aperture
@@ -504,8 +504,8 @@ The outputs include a 2-D spectrum image (``S20220611S0716_2D.fits``), which has
bias corrected, flat fielded, QE-corrected, wavelength-calibrated, corrected for
distortion, sky-subtracted, flux-calibrated, and stacked, and also the 1-D spectra
(``S20220611S0716_1D.fits``) extracted from this 2-D spectrum image. The 1-D spectra are stored
-as 1-D FITS images in extensions of the output Multi-Extension FITS file, along with their
-respective variance and data quality (or mask) arrays.
+as 1-D FITS images in extensions of the output Multi-Extension FITS file, along with their
+respective variance and data quality (or mask) arrays.
This is what the 2-D spectrum looks like.
@@ -545,10 +545,10 @@ The 1-D flux-calibrated spectra of the two apertures are shown below.
.. image:: _graphics/LS_ldred_ap1_spec1D.png
:width: 325
:alt: 1D spectrum for aperture 1
-
+
.. image:: _graphics/LS_ldred_ap2_spec1D.png
:width: 325
- :alt: 1D spectrum for aperture 2
+ :alt: 1D spectrum for aperture 2
Since there are only two images, several bad columns, and artifacts remain
in the data. Many are flagged in the mask, the DQ plane of the output FITS
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_dataset.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_dataset.rst
index 7d3b86c156..07ac5ba08a 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_dataset.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex2_gmosls_large_dither_dataset.rst
@@ -5,10 +5,10 @@
*******************************
Example 2 - Dataset description
*******************************
-The dataset used in this example is from a GMOS longslit observation from the program GS-2022A-FT-110.
-The primary target is the central galaxy of an Odd Radio Circle, `ORC J0102-2450 `_.
-The observation sequence makes a large wavelength dither (several tens of nanometer) to circumvent the issues with
-GMOS South amplifier #5, which began in January 2022. During reduction, DRAGONS will adjust for the difference in
+The dataset used in this example is from a GMOS longslit observation from the program GS-2022A-FT-110.
+The primary target is the central galaxy of an Odd Radio Circle, `ORC J0102-2450 `_.
+The observation sequence makes a large wavelength dither (several tens of nanometer) to circumvent the issues with
+GMOS South amplifier #5, which began in January 2022. During reduction, DRAGONS will adjust for the difference in
central wavelength and then stack the aligned spectra automatically.
The observation uses the R400 grating on GMOS South. The central wavelengths
@@ -73,4 +73,3 @@ package. They can also be downloaded from the Gemini Observatory Archive (GOA).
+---------------------+---------------------------------------------+
| BPM || bpm_20220128_gmos-s_Ham_22_full_12amp.fits |
+---------------------+---------------------------------------------+
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns.rst
index 69911ff697..53b5b2569a 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns.rst
@@ -16,5 +16,3 @@ Hamamatsu CCDs.
ex3_gmosls_ns_dataset
ex3_gmosls_ns_cmdline
ex3_gmosls_ns_api
-
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns_dataset.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns_dataset.rst
index 62a583fd0b..48b57ff81b 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns_dataset.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex3_gmosls_ns_dataset.rst
@@ -75,4 +75,4 @@ package. They can also be downloaded from the Gemini Observatory Archive (GOA).
desired by the PI. DRAGONS will use a dark if there is one.
In contrast, for the EEV CCDs and the ee2vv CCDs, nod-and-shuffle
- darks are required, not optional.
\ No newline at end of file
+ darks are required, not optional.
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex4_gmosls_nsred.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex4_gmosls_nsred.rst
index b410d9fc2b..43f9d94a11 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex4_gmosls_nsred.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/ex4_gmosls_nsred.rst
@@ -19,4 +19,3 @@ that extra order using the interactive tools.
ex4_gmosls_nsred_dataset
ex4_gmosls_nsred_cmdline
ex4_gmosls_nsred_api
-
diff --git a/geminidr/doc/tutorials/GMOSLS-DRTutorial/index.rst b/geminidr/doc/tutorials/GMOSLS-DRTutorial/index.rst
index e74f1dc3cd..fe4936a525 100644
--- a/geminidr/doc/tutorials/GMOSLS-DRTutorial/index.rst
+++ b/geminidr/doc/tutorials/GMOSLS-DRTutorial/index.rst
@@ -36,4 +36,4 @@ Indices and tables
* :ref:`modindex`
* :ref:`search`
-.. todolist::
\ No newline at end of file
+.. todolist::
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/.readthedocs.yaml
index 5d41b66b56..b173b464c0 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/01_overview.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/01_overview.rst
index 06c90c0e3f..217fa5fd5c 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/01_overview.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/01_overview.rst
@@ -32,4 +32,3 @@ in two different ways:
We show how to run the same reduction using both methods.
* :ref:`twostars_example`
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/02_datasets.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/02_datasets.rst
index 2e318820e8..d9413b5c2b 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/02_datasets.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/02_datasets.rst
@@ -31,4 +31,3 @@ will work in the subdirectory named ``gnirsimg_tutorial/playground``.
.. note:: All the raw data can also be downloaded from the Gemini Observatory
Archive. Using the tutorial data package is probably more convenient.
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/05_tips_and_tricks.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/05_tips_and_tricks.rst
index cf78e15d84..abbcf8c3c4 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/05_tips_and_tricks.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/05_tips_and_tricks.rst
@@ -177,4 +177,3 @@ The list of recognized processed calibration is:
* processed_flat
* processed_fringe
* processed_standard
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/Makefile b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/Makefile
index 2355fe96fd..1e532d5523 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/Makefile
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/Makefile
@@ -17,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/css/custom_code.css b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/css/custom_code.css
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/fonts.css b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/fonts.css
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/rtd_theme_overrides.css b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/rtd_theme_overrides.css
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars.rst
index 4ae9ca053f..f36331748e 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars.rst
@@ -16,5 +16,3 @@ in time will be used for sky subtraction of each frame.
ex1_gnirsim_twostars_dataset
ex1_gnirsim_twostars_cmdline
ex1_gnirsim_twostars_api
-
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars_cmdline.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars_cmdline.rst
index 17ab192a49..72801af5c1 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars_cmdline.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/ex1_gnirsim_twostars_cmdline.rst
@@ -225,4 +225,3 @@ signal-to-noise.
.. image:: _graphics/gnirs_keyhole_after.png
:scale: 60%
:align: center
-
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/index.rst b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/index.rst
index d4735b7b3b..3319c46542 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/index.rst
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/index.rst
@@ -31,4 +31,4 @@ Indices and tables
* :ref:`modindex`
* :ref:`search`
-.. todolist::
\ No newline at end of file
+.. todolist::
diff --git a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/retired/DRAGONSlinks.txt b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/retired/DRAGONSlinks.txt
index cdda9c0fc9..b00d358e69 100644
--- a/geminidr/doc/tutorials/GNIRSImg-DRTutorial/retired/DRAGONSlinks.txt
+++ b/geminidr/doc/tutorials/GNIRSImg-DRTutorial/retired/DRAGONSlinks.txt
@@ -36,4 +36,4 @@
.. |atfile| raw:: html
- "at-file" Facility
\ No newline at end of file
+ "at-file" Facility
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/.readthedocs.yaml
index bf047ed3e5..d6b6947aec 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/01_introduction.rst b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/01_introduction.rst
index b4e1ece944..04bfc95ee6 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/01_introduction.rst
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/01_introduction.rst
@@ -72,4 +72,3 @@ will work in the subdirectory named ``gsaoiimg_tutorial/playground``.
but if you really want to learn how to search for and retrieve the
data yourself, see the step-by-step instructions for Example 1
in the appendix, :ref:`goadownload`.
-
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/05_issues_and_limitations.rst b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/05_issues_and_limitations.rst
index 1f401ad529..f1fa3b55d2 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/05_issues_and_limitations.rst
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/05_issues_and_limitations.rst
@@ -40,4 +40,4 @@ on the screen. We recommend using the DRAGONS logger located in the
:linenos:
from gempy.utils import logutils
- logutils.config(file_name='gsaoi_data_reduction.log')
\ No newline at end of file
+ logutils.config(file_name='gsaoi_data_reduction.log')
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/Makefile b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/Makefile
index 298ea9e213..51285967a7 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/Makefile
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/Makefile
@@ -16,4 +16,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/README b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/README
index 61912db867..fa5a7536f9 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/README
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/README
@@ -1,7 +1,7 @@
To ensure some sort of uniformity across our Sphinx documents please use
-this template. Follow the instructions below.
+this template. Follow the instructions below.
-First, go to the directory that will contain the sources and
+First, go to the directory that will contain the sources and
run sphinx-quickstart to get the basic structure laid out and the Makefile
created.
@@ -24,13 +24,13 @@ index.rst
The template index.rst has additional statements over the default to make
the HTML look a bit better and to display the TODOs. Also, it shows
how to set up an appendix section.
-
- Copy the template index.rst on top of the automatically generated one
- and edit as needed. In particular, edit the with what it
- says. You can remove the appendix section if you don't need it. Of
+
+ Copy the template index.rst on top of the automatically generated one
+ and edit as needed. In particular, edit the with what it
+ says. You can remove the appendix section if you don't need it. Of
course, replace "intro" and "yourcontent" with the name of your .rst
files. (There is an example "intro.rst" file in the template directory.)
-
+
$ cp /DPSG-TEMP-110_TeamSphinxManual/index.rst .
$ launch editor on index.rst
@@ -40,19 +40,19 @@ index-latex.rst
copy it over and edit the strings appropriately. If you
do not need an appendix, just delete that section (from .. raw:: latex
to appendices/appendix_yourcontent, inclusively).
-
+
$ cp /DPSG-TEMP-110_TeamSphinxManual/index-latex.rst .
$ launch editor on index-latex.rst
-
+
conf.py
There is a bit of work to do on this file changing strings relating to the
- title of the manual, your name, version number. However, all the special
+ title of the manual, your name, version number. However, all the special
code to pick up the "index-latex.rst", the todo style, and setting up the
extensions is done for you. So, in the end, it is simpler this way.
$ cp /DPSG-TEMP-110_TeamSphinxManual/conf.py .
$ launch editor on conf.py
-
+
Things to edit:
* Replace all the "" with the title of your document.
* Replace all the "ReplaceWithTitle" with a CamelCase string of your title.
@@ -61,7 +61,7 @@ conf.py
* Replace the only occurrence of "2016" with the current year.
* Find "version =", and set the X.Y version number
* Find "release =", and set the full version/release number (eg. X.Y.Z)
-
+
That should do it.
That's it with the edits.
@@ -70,4 +70,3 @@ For reference, the template directory has a source .rst example, "intro.rst"
and an appendix example. It would be nice if we could adopt the section
delimiters from the examples as our standard. (Though of course ReST does
not care, just us, humans.)
-
\ No newline at end of file
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/_static/css/code.xref-styles.css b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/_static/css/code.xref-styles.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/_static/css/code.xref-styles.css
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/_static/css/code.xref-styles.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/appendices/01_goa_download.rst b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/appendices/01_goa_download.rst
index d7b44268b0..444d604e95 100644
--- a/geminidr/doc/tutorials/GSAOIImg-DRTutorial/appendices/01_goa_download.rst
+++ b/geminidr/doc/tutorials/GSAOIImg-DRTutorial/appendices/01_goa_download.rst
@@ -64,4 +64,4 @@ downloaded the data from the `Gemini Archive "at-file" Facility
\ No newline at end of file
+ "at-file" Facility
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/.readthedocs.yaml b/geminidr/doc/tutorials/NIRIImg-DRTutorial/.readthedocs.yaml
index f273257aee..0063c7381e 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/.readthedocs.yaml
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/.readthedocs.yaml
@@ -27,4 +27,4 @@ sphinx:
python:
install:
- requirements: requirements.txt
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/01_overview.rst b/geminidr/doc/tutorials/NIRIImg-DRTutorial/01_overview.rst
index 207619a774..4ea4c37d13 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/01_overview.rst
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/01_overview.rst
@@ -31,4 +31,4 @@ We show how to run the same reduction using both methods.
We plan to add additional examples in the future.
-See the |RSUserInstall| to install the software if you have not already.
\ No newline at end of file
+See the |RSUserInstall| to install the software if you have not already.
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/02_datasets.rst b/geminidr/doc/tutorials/NIRIImg-DRTutorial/02_datasets.rst
index fabeeddc43..9cc608e9c6 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/02_datasets.rst
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/02_datasets.rst
@@ -30,4 +30,3 @@ we will work in the subdirectory named ``niriimg_tutorial/playground``.
.. note:: All the raw data can also be downloaded from the Gemini Observatory
Archive. Using the tutorial data package is probably more convenient.
-
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/Makefile b/geminidr/doc/tutorials/NIRIImg-DRTutorial/Makefile
index dc2d29cf39..a3926c72f0 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/Makefile
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/Makefile
@@ -17,4 +17,4 @@ help:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/css/custom_code.css b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/css/custom_code.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/css/custom_code.css
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/css/custom_code.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/fonts.css b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/fonts.css
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/rtd_theme_overrides.css b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/rtd_theme_overrides.css
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/_static/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended.rst b/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended.rst
index 75713be3e6..8b5d0f625e 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended.rst
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended.rst
@@ -17,5 +17,3 @@ the science observation that is not "contaminated" by the galaxy.
ex1_niriim_extended_dataset
ex1_niriim_extended_cmdline
ex1_niriim_extended_api
-
-
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended_cmdline.rst b/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended_cmdline.rst
index 6f3b2d57d8..5e0ead1358 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended_cmdline.rst
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/ex1_niriim_extended_cmdline.rst
@@ -359,4 +359,4 @@ the common area, rather the image size is adjusted to include the complete
area covered by the whole sequence. Of course the areas covered by less than
the full stack of images will have a lower signal-to-noise. The final MEF file
has three named extensions, the science (SCI), the variance (VAR), and the data
-quality plane (DQ).
\ No newline at end of file
+quality plane (DQ).
diff --git a/geminidr/doc/tutorials/NIRIImg-DRTutorial/index.rst b/geminidr/doc/tutorials/NIRIImg-DRTutorial/index.rst
index e50f6b054a..e4ebf99d82 100644
--- a/geminidr/doc/tutorials/NIRIImg-DRTutorial/index.rst
+++ b/geminidr/doc/tutorials/NIRIImg-DRTutorial/index.rst
@@ -23,7 +23,7 @@ Tutorial Series - NIRI Imaging Data Reduction with DRAGONS
ex1_niriim_extended
05_tips_and_tricks
06_issues_and_limitations
-
+
Indices and tables
==================
@@ -32,4 +32,4 @@ Indices and tables
* :ref:`modindex`
* :ref:`search`
-.. todolist::
\ No newline at end of file
+.. todolist::
diff --git a/geminidr/doc/usermanuals/README b/geminidr/doc/usermanuals/README
index a66b976ad7..028018bdc2 100644
--- a/geminidr/doc/usermanuals/README
+++ b/geminidr/doc/usermanuals/README
@@ -41,4 +41,3 @@ Dev and test for primitives
Dev and test for recipes
* ./generate_recipedoc.py gmos -d testdoc
-
diff --git a/geminidr/doc/usermanuals/_static/css/code.xref-styles.css b/geminidr/doc/usermanuals/_static/css/code.xref-styles.css
index 785c691ebf..23660678c6 100644
--- a/geminidr/doc/usermanuals/_static/css/code.xref-styles.css
+++ b/geminidr/doc/usermanuals/_static/css/code.xref-styles.css
@@ -13,4 +13,3 @@
/* border: solid 1px #e1e4e5; */
text-decoration: underline;
}
-
diff --git a/geminidr/doc/usermanuals/_static/css/fonts.css b/geminidr/doc/usermanuals/_static/css/fonts.css
index b6c4949c81..8fd395842a 100644
--- a/geminidr/doc/usermanuals/_static/css/fonts.css
+++ b/geminidr/doc/usermanuals/_static/css/fonts.css
@@ -33,4 +33,4 @@
.bolditalic {
font-weight: bold;
font-style: italic;
-}
\ No newline at end of file
+}
diff --git a/geminidr/doc/usermanuals/_static/css/rtd_theme_overrides.css b/geminidr/doc/usermanuals/_static/css/rtd_theme_overrides.css
index 62910a0bb7..912eac4c0b 100644
--- a/geminidr/doc/usermanuals/_static/css/rtd_theme_overrides.css
+++ b/geminidr/doc/usermanuals/_static/css/rtd_theme_overrides.css
@@ -3,13 +3,13 @@
@media screen and (min-width: 767px) {
.wy-table-responsive table td, .wy-table-responsive table th {
- /* !important prevents the common CSS stylesheets from
+ /* !important prevents the common CSS stylesheets from
overriding this as on RTD the are loaded after this stylesheet */
white-space: normal !important;
- }
+ }
.wy-table-responsive {
- /* margin-bottom: 24px; */
+ /* margin-bottom: 24px; */
/* max-width: 100%; */
overflow: visible !important;
}
diff --git a/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.core.primitives_ccd.CCD.subtractOverscan_param.rst b/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.core.primitives_ccd.CCD.subtractOverscan_param.rst
index 2bed542a44..d80828538b 100644
--- a/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.core.primitives_ccd.CCD.subtractOverscan_param.rst
+++ b/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.core.primitives_ccd.CCD.subtractOverscan_param.rst
@@ -7,7 +7,7 @@ Parameter defaults and options
none Row-by-row values
spline3 Cubic spline
chebyshev Chebyshev polynomial
-
+
order None Order of fitting function
Valid Range = [0,inf)
lsigma 3.0 Low rejection in sigma of fit
diff --git a/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.gmos.primitives_gmos.GMOS.subtractOverscan_param.rst b/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.gmos.primitives_gmos.GMOS.subtractOverscan_param.rst
index b31afcd5f3..219c6a6bab 100644
--- a/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.gmos.primitives_gmos.GMOS.subtractOverscan_param.rst
+++ b/geminidr/doc/usermanuals/examples/primitives/generated_doc/geminidr.gmos.primitives_gmos.GMOS.subtractOverscan_param.rst
@@ -7,7 +7,7 @@ Parameter defaults and options
none Row-by-row values
spline3 Cubic spline
chebyshev Chebyshev polynomial
-
+
order None Order of fitting function
Valid Range = [0,inf)
lsigma 3.0 Low rejection in sigma of fit
diff --git a/geminidr/doc/usermanuals/examples/primitives/primitive_createExample.rst b/geminidr/doc/usermanuals/examples/primitives/primitive_createExample.rst
index 648c62b303..ca93f2a7e6 100644
--- a/geminidr/doc/usermanuals/examples/primitives/primitive_createExample.rst
+++ b/geminidr/doc/usermanuals/examples/primitives/primitive_createExample.rst
@@ -84,4 +84,3 @@ Issues and Limitations
----------------------
Optional, okay to refer to the section from another implementation to avoid
unnecessary duplication.
-
diff --git a/geminidr/doc/usermanuals/examples/primitives/primitives_index.rst b/geminidr/doc/usermanuals/examples/primitives/primitives_index.rst
index 3e2369bb0b..77b6530934 100644
--- a/geminidr/doc/usermanuals/examples/primitives/primitives_index.rst
+++ b/geminidr/doc/usermanuals/examples/primitives/primitives_index.rst
@@ -11,4 +11,3 @@ Primitives Reference
:numbered:
primitive_createExample
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeIRAFCompatible.rst
index cf7ed6b46d..9a2d7d86fb 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeProcessedArc.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeProcessedArc.rst
index 93205b644e..2bbfe4a394 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeProcessedArc.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeProcessedArc.rst
@@ -18,4 +18,3 @@ makeProcessedArc
p.determineDistortion()
p.storeProcessedArc()
p.writeOutputs()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeIRAFCompatible.rst
index 9e6c6d9efa..7786cb3d0b 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeProcessedBias.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeProcessedBias.rst
index 13003cd585..d396e00be8 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeProcessedBias.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_BIAS.makeProcessedBias.rst
@@ -28,4 +28,3 @@ equal to the name of the first input bias image with "_bias.fits" appended.
p.makeIRAFCompatible()
p.storeProcessedBias()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeIRAFCompatible.rst
index 4fec79e16d..9ab27e121f 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeProcessedDark.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeProcessedDark.rst
index 7eb9c1e88e..f235d2b470 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeProcessedDark.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_DARK.makeProcessedDark.rst
@@ -32,4 +32,3 @@ equal to the name of the first input bias image with "_dark.fits" appended.
p.makeIRAFCompatible()
p.storeProcessedDark()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeIRAFCompatible.rst
index 171ffbbf1f..331954bdf8 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeProcessedFlat.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeProcessedFlat.rst
index 94cb950de2..109594e671 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeProcessedFlat.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_IMAGE.makeProcessedFlat.rst
@@ -32,4 +32,3 @@ flat image with "_flat.fits" appended.
p.makeIRAFCompatible()
p.storeProcessedFlat()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeIRAFCompatible.rst
index 5466e3de17..c806a6288a 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatNoStack.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatNoStack.rst
index da2a2bb307..d6a8465e73 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatNoStack.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatNoStack.rst
@@ -17,4 +17,3 @@ makeProcessedFlatNoStack
p.thresholdFlatfield()
p.makeIRAFCompatible()
p.storeProcessedFlat()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatStack.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatStack.rst
index 1b38502ae1..a98769af7d 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatStack.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedFlatStack.rst
@@ -18,4 +18,3 @@ makeProcessedFlatStack
p.thresholdFlatfield()
p.makeIRAFCompatible()
p.storeProcessedFlat()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedSlitIllum.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedSlitIllum.rst
index eadfb5c860..98661db170 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedSlitIllum.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_FLAT_LS_SPECT.makeProcessedSlitIllum.rst
@@ -17,4 +17,3 @@ makeProcessedSlitIllum
p.makeSlitIllum()
p.makeIRAFCompatible()
p.storeProcessedSlitIllum()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.alignAndStack.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.alignAndStack.rst
index 8e6877db5b..0a5ac89edb 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.alignAndStack.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.alignAndStack.rst
@@ -23,4 +23,3 @@ This recipe stack already preprocessed data.
p.scaleCountsToReference()
p.stackFrames(zero=True)
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst
index 608dc5144e..e40a5cd508 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeProcessedFringe.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeProcessedFringe.rst
index 56187b7f48..59275fd08a 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeProcessedFringe.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeProcessedFringe.rst
@@ -30,4 +30,3 @@ to the name of the first input bias image with "_fringe.fits" appended.
p.makeFringeFrame()
p.storeProcessedFringe()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduce.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduce.rst
index 9dc95f3be7..44d0e340dc 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduce.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduce.rst
@@ -37,4 +37,3 @@ convert the raw input science images into a stacked image.
p.stackFrames(zero=True)
p.storeProcessedScience(suffix="_image")
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDs.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDs.rst
index 4911406b97..178d7def3d 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDs.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDs.rst
@@ -48,4 +48,3 @@ of the images and then applied to each of the CCDs separately.
p.appendStream(stream="all", from_stream="main", copy=False)
p.mergeInputs(instream="all")
p.storeProcessedScience(suffix="_image")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDsCentral.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDsCentral.rst
index fc6045574a..3cdc93ebcd 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDsCentral.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.reduceSeparateCCDsCentral.rst
@@ -47,4 +47,3 @@ separately. The relative WCS is determined from the central CCD
p.appendStream(stream="all", from_stream="main", copy=False)
p.mergeInputs(instream="all")
p.storeProcessedScience(suffix="_image")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.makeIRAFCompatible.rst
index 9b4a6a69b8..991eb34c40 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceScience.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceScience.rst
index 8a1ec5d550..57a94a4ee0 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceScience.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceScience.rst
@@ -40,4 +40,3 @@ todo: add docstring
p.extractSpectra()
p.fluxCalibrate()
p.storeProcessedScience(suffix="_1D")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceStandard.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceStandard.rst
index f4c58230a6..6477541f0d 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceStandard.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceStandard.rst
@@ -37,4 +37,3 @@ todo: add docstring
p.calculateSensitivity()
p.storeProcessedStandard()
p.writeOutputs()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceWithMultipleStandards.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceWithMultipleStandards.rst
index 1ca0016bf1..8673fc6fd7 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceWithMultipleStandards.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_LS_SPECT.reduceWithMultipleStandards.rst
@@ -40,4 +40,3 @@ todo: add docstring
p.storeProcessedScience(suffix="_2D")
p.extractSpectra()
p.storeProcessedScience(suffix="_1D")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_NS_LS_SPECT.reduce.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_NS_LS_SPECT.reduce.rst
index 6cf4364f82..173a12a2fc 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_NS_LS_SPECT.reduce.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_NS_LS_SPECT.reduce.rst
@@ -49,4 +49,3 @@ This recipe reduces GMOS N&S longslit science data.
p.extractSpectra()
p.fluxCalibrate()
p.storeProcessedScience(suffix="_1D")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_SLITILLUM_LS_SPECT.makeProcessedSlitIllum.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_SLITILLUM_LS_SPECT.makeProcessedSlitIllum.rst
index 6c8feba90b..dea22ecdde 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_SLITILLUM_LS_SPECT.makeProcessedSlitIllum.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_SLITILLUM_LS_SPECT.makeProcessedSlitIllum.rst
@@ -17,4 +17,3 @@ makeProcessedSlitIllum
p.makeSlitIllum()
p.makeIRAFCompatible()
p.storeProcessedSlitIllum()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.makeIRAFCompatible.rst
index 17d5f39c51..bc4a23c346 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.makeIRAFCompatible.rst
@@ -22,4 +22,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceScience.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceScience.rst
index b46e2cfb3d..2b5c7cce6c 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceScience.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceScience.rst
@@ -41,4 +41,3 @@ todo: add docstring
p.extractSpectra()
p.fluxCalibrate()
p.storeProcessedScience(suffix="_1D")
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceStandard.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceStandard.rst
index 0173c1fd11..263ae543a6 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceStandard.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_STANDARD_LS_SPECT.reduceStandard.rst
@@ -38,4 +38,3 @@ todo: add docstring
p.calculateSensitivity()
p.storeProcessedStandard()
p.writeOutputs()
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_common.makeIRAFCompatible.rst b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_common.makeIRAFCompatible.rst
index 3c324502e1..79a7084681 100644
--- a/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_common.makeIRAFCompatible.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/generated_doc/geminidr.gmos.recipes.sq.recipes_common.makeIRAFCompatible.rst
@@ -21,4 +21,3 @@ only if the reduced file will be used as input to Gemini IRAF tasks.
p.makeIRAFCompatible()
p.writeOutputs()
return
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/gmos_cal_sq_recipes.rst b/geminidr/doc/usermanuals/examples/recipes/gmos_cal_sq_recipes.rst
index 3d8e7a7e20..6991a9013e 100644
--- a/geminidr/doc/usermanuals/examples/recipes/gmos_cal_sq_recipes.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/gmos_cal_sq_recipes.rst
@@ -27,4 +27,3 @@ GMOS Calibrations Recipes
.. gmos_cal_flat_ls_spect_sq_recipes
gmos_cal_wavecal_ls_sq_recipes
.. gmos_cal_standard_ls_sq_recipes
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/gmos_cal_wavecal_ls_sq_recipes.rst b/geminidr/doc/usermanuals/examples/recipes/gmos_cal_wavecal_ls_sq_recipes.rst
index 87a81043ae..d3180c9753 100644
--- a/geminidr/doc/usermanuals/examples/recipes/gmos_cal_wavecal_ls_sq_recipes.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/gmos_cal_wavecal_ls_sq_recipes.rst
@@ -26,4 +26,3 @@ Utility Recipes
***************
.. include:: generated_doc/geminidr.gmos.recipes.sq.recipes_ARC_LS_SPECT.makeIRAFCompatible.rst
-
diff --git a/geminidr/doc/usermanuals/examples/recipes/gmos_img_sq_recipes.rst b/geminidr/doc/usermanuals/examples/recipes/gmos_img_sq_recipes.rst
index b78f2eab8e..c5a5cb37d0 100644
--- a/geminidr/doc/usermanuals/examples/recipes/gmos_img_sq_recipes.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/gmos_img_sq_recipes.rst
@@ -29,4 +29,4 @@ Utility Recipes
***************
.. include:: generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.alignAndStack.rst
-.. include:: generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst
\ No newline at end of file
+.. include:: generated_doc/geminidr.gmos.recipes.sq.recipes_IMAGE.makeIRAFCompatible.rst
diff --git a/geminidr/doc/usermanuals/examples/recipes/gmos_sq_recipes.rst b/geminidr/doc/usermanuals/examples/recipes/gmos_sq_recipes.rst
index 915a7969af..b8c5a10a82 100644
--- a/geminidr/doc/usermanuals/examples/recipes/gmos_sq_recipes.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/gmos_sq_recipes.rst
@@ -16,4 +16,4 @@ GMOS Science Recipes
gmos_img_sq_recipes
.. gmos_ls_sq_recipes
- .. gmos_ns_sq_recipes
\ No newline at end of file
+ .. gmos_ns_sq_recipes
diff --git a/geminidr/doc/usermanuals/examples/recipes/recipes_index.rst b/geminidr/doc/usermanuals/examples/recipes/recipes_index.rst
index 01fa001c84..f662b143fc 100644
--- a/geminidr/doc/usermanuals/examples/recipes/recipes_index.rst
+++ b/geminidr/doc/usermanuals/examples/recipes/recipes_index.rst
@@ -13,4 +13,3 @@ Recipes Reference
gmos_sq_recipes
.. niri_sq_recipes
-
diff --git a/geminidr/doc/usermanuals/recipes/recipes_index.rst b/geminidr/doc/usermanuals/recipes/recipes_index.rst
index fb89405902..00e1cb7e51 100644
--- a/geminidr/doc/usermanuals/recipes/recipes_index.rst
+++ b/geminidr/doc/usermanuals/recipes/recipes_index.rst
@@ -15,5 +15,3 @@ Recipes Reference
.. gnirs_sq_recipes
.. gsaoi_sq_recipes
.. niri_sq_recipes
-
-
diff --git a/geminidr/doc/usermanuals/utility_scripts/generate_primdoc.py b/geminidr/doc/usermanuals/utility_scripts/generate_primdoc.py
index ba1245435a..3b72aaf557 100755
--- a/geminidr/doc/usermanuals/utility_scripts/generate_primdoc.py
+++ b/geminidr/doc/usermanuals/utility_scripts/generate_primdoc.py
@@ -282,4 +282,4 @@ def main(argv=None):
# the generic, just different defaults, no point in repeating the docstring.
# make testdoc
-# utility_scripts/generate_primdoc.py core gmos -d testdoc
\ No newline at end of file
+# utility_scripts/generate_primdoc.py core gmos -d testdoc
diff --git a/geminidr/doc/usermanuals/utility_scripts/generate_recipedoc.py b/geminidr/doc/usermanuals/utility_scripts/generate_recipedoc.py
index a2ebbc65c6..9316666285 100755
--- a/geminidr/doc/usermanuals/utility_scripts/generate_recipedoc.py
+++ b/geminidr/doc/usermanuals/utility_scripts/generate_recipedoc.py
@@ -291,5 +291,3 @@ def main(argv=None):
if __name__ == '__main__':
sys.exit(main())
-
-
diff --git a/geminidr/f2/lookups/maskdb.py b/geminidr/f2/lookups/maskdb.py
index 601d5923b4..87754e0bcc 100644
--- a/geminidr/f2/lookups/maskdb.py
+++ b/geminidr/f2/lookups/maskdb.py
@@ -5,4 +5,4 @@
illumMask_dict = {
'F2_IMAGE_11': 'f2_image_illumination.fits',
-}
\ No newline at end of file
+}
diff --git a/geminidr/f2/lookups/nearIRsky.dat b/geminidr/f2/lookups/nearIRsky.dat
index 57ae7a8edd..0ff83547ca 100644
--- a/geminidr/f2/lookups/nearIRsky.dat
+++ b/geminidr/f2/lookups/nearIRsky.dat
@@ -10,7 +10,7 @@
#
# Because of the very high resolution OH line list from Rousselot et al,
# the list was then modified removing lines that could not be identified
-# with the medium resolution mode on ISAAC. Because of the lower
+# with the medium resolution mode on ISAAC. Because of the lower
# resolution R=2000 mode of GNIRS, the blended lines will be identified
# by the strongest line in the blend.
#
diff --git a/geminidr/f2/lookups/nearIRsky_with_2nd_order.dat b/geminidr/f2/lookups/nearIRsky_with_2nd_order.dat
index 599fa3efe3..7fbc7b7f73 100644
--- a/geminidr/f2/lookups/nearIRsky_with_2nd_order.dat
+++ b/geminidr/f2/lookups/nearIRsky_with_2nd_order.dat
@@ -10,7 +10,7 @@
#
# Because of the very high resolution OH line list from Rousselot et al,
# the list was then modified removing lines that could not be identified
-# with the medium resolution mode on ISAAC. Because of the lower
+# with the medium resolution mode on ISAAC. Because of the lower
# resolution R=2000 mode of GNIRS, the blended lines will be identified
# by the strongest line in the blend.
#
diff --git a/geminidr/f2/parameters_f2_spect.py b/geminidr/f2/parameters_f2_spect.py
index 71e68c58fc..8917181ab4 100644
--- a/geminidr/f2/parameters_f2_spect.py
+++ b/geminidr/f2/parameters_f2_spect.py
@@ -30,8 +30,7 @@ def setDefaults(self):
class skyCorrectConfig(parameters_preprocess.skyCorrectConfig):
def setDefaults(self):
- self.scale_sky = False #MS: IF for whatever reason the exposure times are different between frames being subtracted, one should have a check to turn this on.
+ self.scale_sky = False #MS: IF for whatever reason the exposure times are different between frames being subtracted, one should have a check to turn this on.
self.offset_sky = False
self.mask_objects = False
self.dilation = 0.
-
diff --git a/geminidr/f2/primitives_f2_spect.py b/geminidr/f2/primitives_f2_spect.py
index 072bb7df18..09736725a6 100644
--- a/geminidr/f2/primitives_f2_spect.py
+++ b/geminidr/f2/primitives_f2_spect.py
@@ -325,7 +325,7 @@ def determineWavelengthSolution(self, adinputs=None, **params):
if min_snr_isNone:
self.log.stdinfo(f'Parameter "min_snr" is set to None. '
f'Using min_snr={these_params["min_snr"]} for {ad.filename}')
-
+
adoutputs.extend(super().determineWavelengthSolution([ad], **these_params))
return adoutputs
diff --git a/geminidr/f2/recipes/qa/recipes_LS_SPECT.py b/geminidr/f2/recipes/qa/recipes_LS_SPECT.py
index b9e1e81cf0..18b74df401 100644
--- a/geminidr/f2/recipes/qa/recipes_LS_SPECT.py
+++ b/geminidr/f2/recipes/qa/recipes_LS_SPECT.py
@@ -9,7 +9,7 @@
def reduceScience(p):
"""
- To be updated as development continues: This recipe processes F2 longslit
+ To be updated as development continues: This recipe processes F2 longslit
spectroscopic data, currently up to basic extraction (no telluric correction).
Parameters
@@ -53,6 +53,6 @@ def reduceScience(p):
p.traceApertures()
p.extractSpectra()
p.plotSpectraForQA()
-
-
+
+
_default = reduceScience
diff --git a/geminidr/f2/recipes/sq/recipes_IMAGE.py b/geminidr/f2/recipes/sq/recipes_IMAGE.py
index 4d7b2c63e7..4af65cca91 100644
--- a/geminidr/f2/recipes/sq/recipes_IMAGE.py
+++ b/geminidr/f2/recipes/sq/recipes_IMAGE.py
@@ -254,4 +254,4 @@ def makeIRAFCompatible(p):
p.makeIRAFCompatible()
p.writeOutputs()
- return
\ No newline at end of file
+ return
diff --git a/geminidr/f2/recipes/tests/reduce_img.sh b/geminidr/f2/recipes/tests/reduce_img.sh
index cccbd77d17..c765d8ea8c 100755
--- a/geminidr/f2/recipes/tests/reduce_img.sh
+++ b/geminidr/f2/recipes/tests/reduce_img.sh
@@ -61,4 +61,3 @@ reduce @sciset.lis -p alignAndStack:save=True -p addDQ:user_bpm=${bpm}
# Check the final result & return status:
compare_file $(last_result_filename stack)
-
diff --git a/geminidr/f2/recipes/tests/reduce_img_nodarks.sh b/geminidr/f2/recipes/tests/reduce_img_nodarks.sh
index 386dad6533..e764a4f3dd 100755
--- a/geminidr/f2/recipes/tests/reduce_img_nodarks.sh
+++ b/geminidr/f2/recipes/tests/reduce_img_nodarks.sh
@@ -61,4 +61,3 @@ reduce @sciset.lis -p darkCorrect:do_dark=False -p alignAndStack:save=True -p ad
# Check the final result & return status:
compare_file $(last_result_filename stack)
-
diff --git a/geminidr/f2/recipes/tests/test_H_img.sh b/geminidr/f2/recipes/tests/test_H_img.sh
index 5ec7d57823..8f361acd61 100755
--- a/geminidr/f2/recipes/tests/test_H_img.sh
+++ b/geminidr/f2/recipes/tests/test_H_img.sh
@@ -10,4 +10,3 @@ start_test_set "$name"
"$script_dir/reduce_img_nodarks.sh" F2/H/raw "S201801..S00[0-1]" 48 || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/f2/recipes/tests/test_J_img.sh b/geminidr/f2/recipes/tests/test_J_img.sh
index 110e42db37..0a4636085a 100755
--- a/geminidr/f2/recipes/tests/test_J_img.sh
+++ b/geminidr/f2/recipes/tests/test_J_img.sh
@@ -10,4 +10,3 @@ start_test_set "$name"
"$script_dir/reduce_img.sh" "$name" "S20130719S052" "S20130719S055" || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/f2/recipes/tests/test_K-red_img.sh b/geminidr/f2/recipes/tests/test_K-red_img.sh
index 49396a284b..ec0e6803b6 100755
--- a/geminidr/f2/recipes/tests/test_K-red_img.sh
+++ b/geminidr/f2/recipes/tests/test_K-red_img.sh
@@ -10,4 +10,3 @@ start_test_set "$name"
"$script_dir/reduce_img.sh" "$name" "S2018(0303S|0207S00[23])" "S2018(0211S|0207S004)" 25 || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv10000_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv10000_za48_r0.dat
index 20f3bf0ba1..12a8fcc941 100644
--- a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv10000_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv10000_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 8930 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 10000 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv2300_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv2300_za48_r0.dat
index 8ee450c4c9..6f755ee5c3 100644
--- a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv2300_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv2300_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 8930 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 2300 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv4300_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv4300_za48_r0.dat
index 6eaa24cf83..c43d1886ab 100644
--- a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv4300_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv4300_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 8930 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 4300 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv7600_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv7600_za48_r0.dat
index 35114cd2d7..c5c8981b1f 100644
--- a/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv7600_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_cp_850-6000nm_wv7600_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 8930 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 7600 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1000_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1000_za48_r0.dat
index efad777daa..ef506c2323 100644
--- a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1000_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1000_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 13825 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 1000 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1600_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1600_za48_r0.dat
index 0cdb4cf70a..547b9c7894 100644
--- a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1600_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv1600_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 13825 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 1600 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv3000_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv3000_za48_r0.dat
index c89bafebab..dbcc9279d5 100644
--- a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv3000_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv3000_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 13825 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 3000 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv5000_za48_r0.dat b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv5000_za48_r0.dat
index 5752bb9e19..fb5a30eb9d 100644
--- a/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv5000_za48_r0.dat
+++ b/geminidr/gemini/lookups/atran_models/atran_mk_850-6000nm_wv5000_za48_r0.dat
@@ -1,7 +1,7 @@
# ATRAN synthetic spectrum for 850-6000nm, unconvolved, resampled to 0.01nm.
# Input parameters: Obs Altitude: 13825 feet, Obs Latitude: 39 degrees,
# Water Vapor Overburden: 5000 microns, Std Atmosphere with: 2 Layers,
-# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
+# Zenith Angle: 48 degrees, Wavelength Range: 0.85 - 6.0 microns, Smoothing R: 0
# units nanometer
# wavelengths in IN VACUUM
850.000 1.0000000
diff --git a/geminidr/gemini/lookups/color_corrections.py b/geminidr/gemini/lookups/color_corrections.py
index b0b8f4bb0f..606eda3a84 100644
--- a/geminidr/gemini/lookups/color_corrections.py
+++ b/geminidr/gemini/lookups/color_corrections.py
@@ -1,27 +1,32 @@
-# Color corrections for photometry
-# The nature of encoding transformations should be clear from these examples
-# K_MKO = K_2MASS -0.003 (+/-0.007) - 0.026 (+/-0.011) * (J-K)_2MASS
-# K_MKO = K_2MASS -0.006 (+/-0.004) - 0.071 (+/-0.020) * (H-K)_2MASS
-# Leggett 2008, http://arxiv.org/pdf/astro-ph/0609461v1.pdf
-# K(prime) = K_MKO + 0.22 (+/- 0.003) * (H-K)_2MASS
-# (Wainscoat and Cowie 1992AJ.103.332W)
-# If multiple options, make a list of lists; code will choose options
-# with smallest uncertainty on an object-by-object basis
-# The filter names are case-sensitive
-# The catalog column names are not
+"""
+Color corrections for photometry
+The nature of encoding transformations should be clear from these examples
+ K_MKO = K_2MASS -0.003 (+/-0.007) - 0.026 (+/-0.011) * (J-K)_2MASS
+ K_MKO = K_2MASS -0.006 (+/-0.004) - 0.071 (+/-0.020) * (H-K)_2MASS
+ Leggett 2008, http://arxiv.org/pdf/astro-ph/0609461v1.pdf
+ K(prime) = K_MKO + 0.22 (+/- 0.003) * (H-K)_2MASS
+ (Wainscoat and Cowie 1992AJ.103.332W)
+If multiple options, make a list of lists; code will choose options
+with smallest uncertainty on an object-by-object basis
+The filter names are case-sensitive
+The catalog column names are not
+"""
+
colorTerms = {
-'u' : ['u'],
-'g' : ['g'],
-'r' : ['r'],
-'i' : ['i'],
-'z' : ['z'],
-'J' : ['j'],
-'H' : ['h'],
-'Kshort' : ['k'],
-'K(short)' : ['k'],
-'Ks' : ['k'],
-'K' : [['k',(-0.003,0.007),(-0.026,0.011,'j-k')],
- ['k',(-0.006,0.004),(-0.071,0.020,'h-k')]],
-'Kprime' : ['k',(-0.006,0.007),(0.149,0.023,'h-k')],
-'K(prime)' : ['k',(-0.006,0.007),(0.149,0.023,'h-k')],
+ "u": ["u"],
+ "g": ["g"],
+ "r": ["r"],
+ "i": ["i"],
+ "z": ["z"],
+ "J": ["j"],
+ "H": ["h"],
+ "Kshort": ["k"],
+ "K(short)": ["k"],
+ "Ks": ["k"],
+ "K": [
+ ["k", (-0.003, 0.007), (-0.026, 0.011, "j-k")],
+ ["k", (-0.006, 0.004), (-0.071, 0.020, "h-k")],
+ ],
+ "Kprime": ["k", (-0.006, 0.007), (0.149, 0.023, "h-k")],
+ "K(prime)": ["k", (-0.006, 0.007), (0.149, 0.023, "h-k")],
}
diff --git a/geminidr/gemini/lookups/extinction_data.py b/geminidr/gemini/lookups/extinction_data.py
index 752289e507..89fe5be596 100644
--- a/geminidr/gemini/lookups/extinction_data.py
+++ b/geminidr/gemini/lookups/extinction_data.py
@@ -116,4 +116,4 @@ def extinction(wave, site=None, telescope=None):
except AttributeError:
# Assume it's nm already
wave_in_nm = wave
- return extinction_curves[site](wave_in_nm)
\ No newline at end of file
+ return extinction_curves[site](wave_in_nm)
diff --git a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_10000_XJHK.dat b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_10000_XJHK.dat
index e1ccafbd0b..c6e217c3ca 100644
--- a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_10000_XJHK.dat
+++ b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_10000_XJHK.dat
@@ -1,4 +1,4 @@
-# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=10000
+# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=10000
# Based on the line list computed by Philippe Rousselot (Observatory of Besancon, France).
900.000 0.0000000
900.010 0.0000000
diff --git a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_1500_XJHK.dat b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_1500_XJHK.dat
index 593c680d7d..936bf16f54 100644
--- a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_1500_XJHK.dat
+++ b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_1500_XJHK.dat
@@ -1,4 +1,4 @@
-# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=1500
+# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=1500
# Based on the line list computed by Philippe Rousselot (Observatory of Besancon, France).
900.000 0.0019955
900.100 0.0028002
diff --git a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_20000_XJHK.dat b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_20000_XJHK.dat
index 20f7d9cbff..689a25313e 100644
--- a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_20000_XJHK.dat
+++ b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_20000_XJHK.dat
@@ -1,4 +1,4 @@
-# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=20000
+# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=20000
# Based on the line list computed by Philippe Rousselot (Observatory of Besancon, France).
900.000 0.0000000
900.010 0.0000000
diff --git a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_500_XJHK.dat b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_500_XJHK.dat
index 2436dee449..d28455f50f 100644
--- a/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_500_XJHK.dat
+++ b/geminidr/gemini/lookups/oh_synthetic_spectra/oh_conv_500_XJHK.dat
@@ -1,4 +1,4 @@
-# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=500
+# Synthetic OH emission line spectrum in XJHK-bands, convolved to R=500
# Based on the line list computed by Philippe Rousselot (Observatory of Besancon, France).
900.000 0.0012915
900.100 0.0013413
diff --git a/geminidr/gemini/lookups/qa_constraints.py b/geminidr/gemini/lookups/qa_constraints.py
index 147aef81fe..5d9f2a42a2 100644
--- a/geminidr/gemini/lookups/qa_constraints.py
+++ b/geminidr/gemini/lookups/qa_constraints.py
@@ -1,25 +1,26 @@
-# Gives BG band constraints in mags / square arcsec for given (GMOS) filter
-# These are derived by Paul Hirst based on both
-# http://www.gemini.edu/sciops/telescopes-and-sites/observing-condition-constraints/optical-sky-background
-# And the model sky spectra in the ITC.
-# There are uncertainties and caveats with these numbers, and discrepancies between different sources of data and
-# different assumptions. Predicting sky brightness is not an exact science. These are probably affected by systematics
-# at the +/- 0.3 level in some cases, especially i and z.
-
-#NOTE. Nelson Zarate: Added JHK filter for NIRI. The user of this dictionaty is
+"""Gives BG band constraints in mags / square arcsec for given (GMOS) filter
+These are derived by Paul Hirst based on both
+http://www.gemini.edu/sciops/telescopes-and-sites/observing-condition-constraints/optical-sky-background
+And the model sky spectra in the ITC.
+There are uncertainties and caveats with these numbers, and discrepancies between different sources of data and
+different assumptions. Predicting sky brightness is not an exact science. These are probably affected by systematics
+at the +/- 0.3 level in some cases, especially i and z.
+"""
+
+# NOTE. Nelson Zarate: Added JHK filter for NIRI. The user of this dictionaty is
# primitives_qa.py/measureBG() at the GENERALPrimitives level. Otherwise we would need
# to create a NIRI measureBG() primitive just to handle this dictionary.
bgBands = {
-'u':{20:21.66, 50:19.49, 80:17.48},
-'g':{20:21.62, 50:20.68, 80:19.36},
-'r':{20:21.33, 50:20.32, 80:19.34},
-'i':{20:20.44, 50:19.97, 80:19.30},
-'z':{20:19.51, 50:19.04, 80:18.37},
-'J':{20:16.20, 50:16.20, 80:16.20},
-'H':{20:13.80, 50:13.80, 80:13.80},
-'K':{20:14.60, 50:14.60, 80:14.60},
-'Ks':{20:14.60, 50:14.60, 80:14.60},
+ "u": {20: 21.66, 50: 19.49, 80: 17.48},
+ "g": {20: 21.62, 50: 20.68, 80: 19.36},
+ "r": {20: 21.33, 50: 20.32, 80: 19.34},
+ "i": {20: 20.44, 50: 19.97, 80: 19.30},
+ "z": {20: 19.51, 50: 19.04, 80: 18.37},
+ "J": {20: 16.20, 50: 16.20, 80: 16.20},
+ "H": {20: 13.80, 50: 13.80, 80: 13.80},
+ "K": {20: 14.60, 50: 14.60, 80: 14.60},
+ "Ks": {20: 14.60, 50: 14.60, 80: 14.60},
}
# Gives CC band constraints as a function of magnitudes of extinction.
@@ -30,33 +31,30 @@
# focal reducer, also we're using a nominal rather than measured atmospheric extinction
# so we take the photometric number to be less than 0.08 mags extinction.
-ccBands = {
-50:0.08, 70:0.3, 80:1.0
-}
+ccBands = {50: 0.08, 70: 0.3, 80: 1.0}
# Gives IQ band constraints for given filter + wavefront sensor combination
# Note that X has just been set to the average of Y and J.
iqBands = {
-'u': {20:0.60, 70:0.90, 85:1.20},
-'g': {20:0.60, 70:0.85, 85:1.10},
-'r': {20:0.50, 70:0.75, 85:1.05},
-'i': {20:0.50, 70:0.75, 85:1.05},
-'Z': {20:0.50, 70:0.70, 85:0.95},
-'Y': {20:0.40, 70:0.70, 85:0.95},
-'X': {20:0.40, 70:0.65, 85:0.90},
-'J': {20:0.40, 70:0.60, 85:0.85},
-'H': {20:0.40, 70:0.60, 85:0.85},
-'K': {20:0.35, 70:0.55, 85:0.80},
-'L': {20:0.35, 70:0.50, 85:0.75},
-'M': {20:0.35, 70:0.50, 85:0.70},
-'N': {20:0.34, 70:0.37, 85:0.45},
-'Q': {20:0.54, 70:0.54, 85:0.54},
-
-'AO': {20:0.45, 70:0.80, 85:1.20} # from view_wfs.py (telops ~/bin)
+ "u": {20: 0.60, 70: 0.90, 85: 1.20},
+ "g": {20: 0.60, 70: 0.85, 85: 1.10},
+ "r": {20: 0.50, 70: 0.75, 85: 1.05},
+ "i": {20: 0.50, 70: 0.75, 85: 1.05},
+ "Z": {20: 0.50, 70: 0.70, 85: 0.95},
+ "Y": {20: 0.40, 70: 0.70, 85: 0.95},
+ "X": {20: 0.40, 70: 0.65, 85: 0.90},
+ "J": {20: 0.40, 70: 0.60, 85: 0.85},
+ "H": {20: 0.40, 70: 0.60, 85: 0.85},
+ "K": {20: 0.35, 70: 0.55, 85: 0.80},
+ "L": {20: 0.35, 70: 0.50, 85: 0.75},
+ "M": {20: 0.35, 70: 0.50, 85: 0.70},
+ "N": {20: 0.34, 70: 0.37, 85: 0.45},
+ "Q": {20: 0.54, 70: 0.54, 85: 0.54},
+ "AO": {20: 0.45, 70: 0.80, 85: 1.20}, # from view_wfs.py (telops ~/bin)
}
# Gives WV band constraints (in mm of precipitable H2O at zenith) for Mauna Kea and Cerro Pachon.
wvBands = {
- 'Gemini-North': {"20": 1.0, "50": 1.6, "80": 3.0},
- 'Gemini-South': {"20": 2.3, "50": 4.3, "80": 7.6}
+ "Gemini-North": {"20": 1.0, "50": 1.6, "80": 3.0},
+ "Gemini-South": {"20": 2.3, "50": 4.3, "80": 7.6},
}
diff --git a/geminidr/gemini/lookups/source_detection/default.nnw b/geminidr/gemini/lookups/source_detection/default.nnw
index 3b2c967d5e..6c1d480199 100644
--- a/geminidr/gemini/lookups/source_detection/default.nnw
+++ b/geminidr/gemini/lookups/source_detection/default.nnw
@@ -24,6 +24,5 @@ NNW
-1.70059e+00 -3.65695e+00 1.22367e+00 -5.74367e-01 -3.29571e+00 2.46316e+00 5.22353e+00 2.42038e+00 1.22919e+00 -9.22250e-01 -2.32028e+00
- 0.00000e+00
- 1.00000e+00
-
+ 0.00000e+00
+ 1.00000e+00
diff --git a/geminidr/gemini/lookups/source_detection/default.param b/geminidr/gemini/lookups/source_detection/default.param
index 99a26290e1..38065b4660 100644
--- a/geminidr/gemini/lookups/source_detection/default.param
+++ b/geminidr/gemini/lookups/source_detection/default.param
@@ -176,4 +176,3 @@ BACKGROUND
#RAD14
#RAD15
#VIGNET
-
diff --git a/geminidr/gemini/lookups/source_detection/default.sex b/geminidr/gemini/lookups/source_detection/default.sex
index 5c2bc7fb2d..6429ba235e 100644
--- a/geminidr/gemini/lookups/source_detection/default.sex
+++ b/geminidr/gemini/lookups/source_detection/default.sex
@@ -1,78 +1,78 @@
# Default configuration file for SExtractor 2.8.6
# EB 2009-04-09
#
-
+
#-------------------------------- Catalog ------------------------------------
-
+
CATALOG_NAME test.fits # name of the output catalog
CATALOG_TYPE FITS_1.0 # NONE,ASCII,ASCII_HEAD, ASCII_SKYCAT,
# ASCII_VOTABLE, FITS_1.0 or FITS_LDAC
PARAMETERS_NAME default.param # name of the file containing catalog contents
-
+
#------------------------------- Extraction ----------------------------------
-
+
DETECT_TYPE CCD # CCD (linear) or PHOTO (with gamma correction)
DETECT_MINAREA 8 # minimum number of pixels above threshold
DETECT_THRESH 2.0 # or , in mag.arcsec-2
ANALYSIS_THRESH 2.0 # or , in mag.arcsec-2
-
+
FILTER Y # apply filter for detection (Y or N)?
FILTER_NAME default.conv # name of the file containing the filter
-
+
DEBLEND_NTHRESH 32 # Number of deblending sub-thresholds
DEBLEND_MINCONT 0.005 # Minimum contrast parameter for deblending
-
+
CLEAN Y # Clean spurious detections? (Y or N)?
CLEAN_PARAM 1.0 # Cleaning efficiency
-
+
MASK_TYPE CORRECT # type of detection MASKing: can be one of
# NONE, BLANK or CORRECT
FLAG_TYPE OR # IMAFLAGS_ISO set to bitwise OR of DQ values
-
+
#------------------------------ Photometry -----------------------------------
-
+
PHOT_APERTURES 20 # MAG_APER aperture diameter(s) in pixels
PHOT_AUTOPARAMS 2.5, 3.5 # MAG_AUTO parameters: ,
PHOT_PETROPARAMS 2.0, 3.5 # MAG_PETRO parameters: ,
#
PHOT_FLUXFRAC 0.5 # The isophote fraction for FLUX_RADIUS
-
+
SATUR_LEVEL 5000000.0 # level (in ADUs) at which arises saturation
SATUR_KEY SATURATE # keyword for saturation level (in ADUs)
-
+
MAG_ZEROPOINT 0.0 # magnitude zero-point
MAG_GAMMA 4.0 # gamma of emulsion (for photographic scans)
GAIN 1.0 # detector gain in e-/ADU
GAIN_KEY GAIN # keyword for detector gain in e-/ADU
PIXEL_SCALE 0 # size of pixel in arcsec (0=use FITS WCS info)
-
+
#------------------------- Star/Galaxy Separation ----------------------------
-
+
SEEING_FWHM 1.2 # stellar FWHM in arcsec
STARNNW_NAME default.nnw # Neural-Network_Weight table filename
-
+
#------------------------------ Background -----------------------------------
-
+
BACK_SIZE 32 # Background mesh: or ,
BACK_FILTERSIZE 8 # Background filter: or ,
#------------------------------ Check Image ----------------------------------
-
+
CHECKIMAGE_TYPE NONE # can be NONE, BACKGROUND, BACKGROUND_RMS,
# MINIBACKGROUND, MINIBACK_RMS, -BACKGROUND,
# FILTERED, OBJECTS, -OBJECTS, SEGMENTATION,
# or APERTURES
CHECKIMAGE_NAME check.fits # Filename for the check-image
-
+
#--------------------- Memory (change with caution!) -------------------------
-
+
MEMORY_OBJSTACK 5000 # number of objects in stack
MEMORY_PIXSTACK 1000000 # number of pixels in stack
MEMORY_BUFSIZE 2048 # number of lines in buffer
-
+
#----------------------------- Miscellaneous ---------------------------------
-
+
VERBOSE_TYPE NORMAL # can be QUIET, NORMAL or FULL
WRITE_XML N # Write XML file (Y/N)?
XML_NAME sex.xml # Filename for XML output
diff --git a/geminidr/gemini/lookups/source_detection/default_nodq.param b/geminidr/gemini/lookups/source_detection/default_nodq.param
index 15218f1f3b..ad3bd68bab 100644
--- a/geminidr/gemini/lookups/source_detection/default_nodq.param
+++ b/geminidr/gemini/lookups/source_detection/default_nodq.param
@@ -175,4 +175,3 @@ BACKGROUND
#RAD14
#RAD15
#VIGNET
-
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/bd+284211.dat b/geminidr/gemini/lookups/spectrophotometric_standards/bd+284211.dat
index 1547c483a6..db75587cc3 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/bd+284211.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/bd+284211.dat
@@ -84,32 +84,32 @@
7200.00 11.21 50.
7250.00 11.21 50.
7300.00 11.18 50.
-7350 11.14 50
-7400 11.13 50
-7450 11.15 50
-7500 11.16 50
-7750 11.22 50
-7800 11.23 50
-7850 11.24 50
-7900 11.26 50
-7950 11.28 50
-8000 11.26 50
-8050 11.30 50
-8600 11.33 50
-8650 11.34 50
-8700 11.33 50
-8750 11.35 50
-8800 11.35 50
-8850 11.35 50
-8900 11.36 50
-9700 11.62 50
-9750 11.63 50
-9800 11.63 50
-9850 11.59 50
-9900 11.57 50
-9950 11.63 50
-10000 11.64 50
-10050 11.71 50
-10100 11.75 50
-10150 11.73 50
-10200 11.74 50
+7350 11.14 50
+7400 11.13 50
+7450 11.15 50
+7500 11.16 50
+7750 11.22 50
+7800 11.23 50
+7850 11.24 50
+7900 11.26 50
+7950 11.28 50
+8000 11.26 50
+8050 11.30 50
+8600 11.33 50
+8650 11.34 50
+8700 11.33 50
+8750 11.35 50
+8800 11.35 50
+8850 11.35 50
+8900 11.36 50
+9700 11.62 50
+9750 11.63 50
+9800 11.63 50
+9850 11.59 50
+9900 11.57 50
+9950 11.63 50
+10000 11.64 50
+10050 11.71 50
+10100 11.75 50
+10150 11.73 50
+10200 11.74 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/feige110.dat b/geminidr/gemini/lookups/spectrophotometric_standards/feige110.dat
index 9db72a6d21..c0c4ffacc6 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/feige110.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/feige110.dat
@@ -84,32 +84,32 @@
7200.00 12.47 50.
7250.00 12.47 50.
7300.00 12.45 50.
-7350 12.45 50
-7400 12.44 50
-7450 12.45 50
-7500 12.46 50
-7750 12.53 50
-7800 12.53 50
-7850 12.55 50
-7900 12.57 50
-7950 12.58 50
-8000 12.57 50
-8050 12.61 50
-8600 12.64 50
-8650 12.65 50
-8700 12.64 50
-8750 12.66 50
-8800 12.67 50
-8850 12.68 50
-8900 12.68 50
-9700 12.94 50
-9750 12.99 50
-9800 12.95 50
-9850 12.86 50
-9900 12.86 50
-9950 13.00 50
-10000 13.02 50
-10050 13.01 50
-10100 12.98 50
-10150 13.00 50
-10200 13.01 50
+7350 12.45 50
+7400 12.44 50
+7450 12.45 50
+7500 12.46 50
+7750 12.53 50
+7800 12.53 50
+7850 12.55 50
+7900 12.57 50
+7950 12.58 50
+8000 12.57 50
+8050 12.61 50
+8600 12.64 50
+8650 12.65 50
+8700 12.64 50
+8750 12.66 50
+8800 12.67 50
+8850 12.68 50
+8900 12.68 50
+9700 12.94 50
+9750 12.99 50
+9800 12.95 50
+9850 12.86 50
+9900 12.86 50
+9950 13.00 50
+10000 13.02 50
+10050 13.01 50
+10100 12.98 50
+10150 13.00 50
+10200 13.01 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/feige34.dat b/geminidr/gemini/lookups/spectrophotometric_standards/feige34.dat
index 9844937fd3..167eb59945 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/feige34.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/feige34.dat
@@ -84,32 +84,32 @@
7200.00 11.83 50.
7250.00 11.82 50.
7300.00 11.82 50.
-7350 11.79 50
-7400 11.79 50
-7450 11.81 50
-7500 11.81 50
-7750 11.86 50
-7800 11.89 50
-7850 11.88 50
-7900 11.88 50
-7950 11.91 50
-8000 11.88 50
-8050 11.91 50
-8600 11.94 50
-8650 11.94 50
-8700 11.93 50
-8750 11.93 50
-8800 11.94 50
-8850 11.93 50
-8900 11.95 50
-9700 12.14 50
-9750 12.14 50
-9800 12.18 50
-9850 12.12 50
-9900 12.17 50
-9950 12.23 50
-10000 12.27 50
-10050 12.28 50
-10100 12.31 50
-10150 12.29 50
-10200 12.29 50
+7350 11.79 50
+7400 11.79 50
+7450 11.81 50
+7500 11.81 50
+7750 11.86 50
+7800 11.89 50
+7850 11.88 50
+7900 11.88 50
+7950 11.91 50
+8000 11.88 50
+8050 11.91 50
+8600 11.94 50
+8650 11.94 50
+8700 11.93 50
+8750 11.93 50
+8800 11.94 50
+8850 11.93 50
+8900 11.95 50
+9700 12.14 50
+9750 12.14 50
+9800 12.18 50
+9850 12.12 50
+9900 12.17 50
+9950 12.23 50
+10000 12.27 50
+10050 12.28 50
+10100 12.31 50
+10150 12.29 50
+10200 12.29 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/feige66.dat b/geminidr/gemini/lookups/spectrophotometric_standards/feige66.dat
index f3ff8b5918..f631267cfe 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/feige66.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/feige66.dat
@@ -84,32 +84,32 @@
7200.00 11.13 50.
7250.00 11.14 50.
7300.00 11.13 50.
-7350 11.13 50
-7400 11.13 50
-7450 11.14 50
-7500 11.15 50
-7750 11.19 50
-7800 11.23 50
-7850 11.22 50
-7900 11.22 50
-7950 11.25 50
-8000 11.23 50
-8050 11.26 50
-8600 11.29 50
-8650 11.29 50
-8700 11.30 50
-8750 11.29 50
-8800 11.30 50
-8850 11.30 50
-8900 11.30 50
-9700 11.53 50
-9750 11.53 50
-9800 11.57 50
-9850 11.54 50
-9900 11.59 50
-9950 11.64 50
-10000 11.66 50
-10050 11.77 50
-10100 11.78 50
-10150 11.74 50
-10200 11.77 50
+7350 11.13 50
+7400 11.13 50
+7450 11.14 50
+7500 11.15 50
+7750 11.19 50
+7800 11.23 50
+7850 11.22 50
+7900 11.22 50
+7950 11.25 50
+8000 11.23 50
+8050 11.26 50
+8600 11.29 50
+8650 11.29 50
+8700 11.30 50
+8750 11.29 50
+8800 11.30 50
+8850 11.30 50
+8900 11.30 50
+9700 11.53 50
+9750 11.53 50
+9800 11.57 50
+9850 11.54 50
+9900 11.59 50
+9950 11.64 50
+10000 11.66 50
+10050 11.77 50
+10100 11.78 50
+10150 11.74 50
+10200 11.77 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/feige67.dat b/geminidr/gemini/lookups/spectrophotometric_standards/feige67.dat
index 6e886e702a..344cf84c13 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/feige67.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/feige67.dat
@@ -84,32 +84,32 @@
7200.00 12.50 50.
7250.00 12.50 50.
7300.00 12.50 50.
-7350 12.46 50
-7400 12.46 50
-7450 12.48 50
-7500 12.48 50
-7750 12.53 50
-7800 12.56 50
-7850 12.56 50
-7900 12.57 50
-7950 12.59 50
-8000 12.57 50
-8050 12.61 50
-8600 12.64 50
-8650 12.65 50
-8700 12.63 50
-8750 12.64 50
-8800 12.65 50
-8850 12.63 50
-8900 12.65 50
-9700 12.90 50
-9750 12.92 50
-9800 12.94 50
-9850 12.89 50
-9900 12.94 50
-9950 13.02 50
-10000 13.06 50
-10050 13.08 50
-10100 13.10 50
-10150 13.12 50
-10200 13.15 50
+7350 12.46 50
+7400 12.46 50
+7450 12.48 50
+7500 12.48 50
+7750 12.53 50
+7800 12.56 50
+7850 12.56 50
+7900 12.57 50
+7950 12.59 50
+8000 12.57 50
+8050 12.61 50
+8600 12.64 50
+8650 12.65 50
+8700 12.63 50
+8750 12.64 50
+8800 12.65 50
+8850 12.63 50
+8900 12.65 50
+9700 12.90 50
+9750 12.92 50
+9800 12.94 50
+9850 12.89 50
+9900 12.94 50
+9950 13.02 50
+10000 13.06 50
+10050 13.08 50
+10100 13.10 50
+10150 13.12 50
+10200 13.15 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/g191b2b.dat b/geminidr/gemini/lookups/spectrophotometric_standards/g191b2b.dat
index 0c9fe2bf35..1aeda74422 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/g191b2b.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/g191b2b.dat
@@ -84,32 +84,32 @@
7200.00 12.47 50.
7250.00 12.46 50.
7300.00 12.43 50.
-7350 12.43 50
-7400 12.42 50
-7450 12.44 50
-7500 12.45 50
-7750 12.51 50
-7800 12.53 50
-7850 12.53 50
-7900 12.55 50
-7950 12.57 50
-8000 12.56 50
-8050 12.59 50
-8600 12.63 50
-8650 12.62 50
-8700 12.63 50
-8750 12.64 50
-8800 12.64 50
-8850 12.65 50
-8900 12.66 50
-9700 12.93 50
-9750 12.95 50
-9800 12.95 50
-9850 12.87 50
-9900 12.88 50
-9950 13.00 50
-10000 12.99 50
-10050 12.98 50
-10100 12.98 50
-10150 12.96 50
-10200 12.95 50
+7350 12.43 50
+7400 12.42 50
+7450 12.44 50
+7500 12.45 50
+7750 12.51 50
+7800 12.53 50
+7850 12.53 50
+7900 12.55 50
+7950 12.57 50
+8000 12.56 50
+8050 12.59 50
+8600 12.63 50
+8650 12.62 50
+8700 12.63 50
+8750 12.64 50
+8800 12.64 50
+8850 12.65 50
+8900 12.66 50
+9700 12.93 50
+9750 12.95 50
+9800 12.95 50
+9850 12.87 50
+9900 12.88 50
+9950 13.00 50
+10000 12.99 50
+10050 12.98 50
+10100 12.98 50
+10150 12.96 50
+10200 12.95 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/gd140.dat b/geminidr/gemini/lookups/spectrophotometric_standards/gd140.dat
index 68598e4fd3..b050acb843 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/gd140.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/gd140.dat
@@ -84,32 +84,32 @@
7200.00 13.08 50.
7250.00 13.10 50.
7300.00 13.11 50.
-7350 13.04 50
-7400 13.03 50
-7450 13.05 50
-7500 13.06 50
-7750 13.09 50
-7800 13.13 50
-7850 13.12 50
-7900 13.11 50
-7950 13.15 50
-8000 13.12 50
-8050 13.15 50
-8600 13.18 50
-8650 13.18 50
-8700 13.18 50
-8750 13.17 50
-8800 13.17 50
-8850 13.16 50
-8900 13.18 50
-9700 13.41 50
-9750 13.41 50
-9800 13.42 50
-9850 13.40 50
-9900 13.48 50
-9950 13.60 50
-10000 13.71 50
-10050 13.68 50
-10100 13.68 50
-10150 13.65 50
-10200 13.73 50
+7350 13.04 50
+7400 13.03 50
+7450 13.05 50
+7500 13.06 50
+7750 13.09 50
+7800 13.13 50
+7850 13.12 50
+7900 13.11 50
+7950 13.15 50
+8000 13.12 50
+8050 13.15 50
+8600 13.18 50
+8650 13.18 50
+8700 13.18 50
+8750 13.17 50
+8800 13.17 50
+8850 13.16 50
+8900 13.18 50
+9700 13.41 50
+9750 13.41 50
+9800 13.42 50
+9850 13.40 50
+9900 13.48 50
+9950 13.60 50
+10000 13.71 50
+10050 13.68 50
+10100 13.68 50
+10150 13.65 50
+10200 13.73 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/hiltner600.dat b/geminidr/gemini/lookups/spectrophotometric_standards/hiltner600.dat
index ffb8a18c1c..2fe9e5c281 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/hiltner600.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/hiltner600.dat
@@ -84,32 +84,32 @@
7200.00 10.63 50.
7250.00 10.61 50.
7300.00 10.60 50.
-7350 10.57 50
-7400 10.56 50
-7450 10.56 50
-7500 10.56 50
-7750 10.58 50
-7800 10.60 50
-7850 10.57 50
-7900 10.60 50
-7950 10.60 50
-8000 10.59 50
-8050 10.62 50
-8600 10.58 50
-8650 10.57 50
-8700 10.51 50
-8750 10.57 50
-8800 10.51 50
-8850 10.55 50
-8900 10.52 50
-9700 10.68 50
-9750 10.66 50
-9800 10.67 50
-9850 10.61 50
-9900 10.58 50
-9950 10.61 50
-10000 10.61 50
-10050 10.69 50
-10100 10.63 50
-10150 10.59 50
-10200 10.53 50
+7350 10.57 50
+7400 10.56 50
+7450 10.56 50
+7500 10.56 50
+7750 10.58 50
+7800 10.60 50
+7850 10.57 50
+7900 10.60 50
+7950 10.60 50
+8000 10.59 50
+8050 10.62 50
+8600 10.58 50
+8650 10.57 50
+8700 10.51 50
+8750 10.57 50
+8800 10.51 50
+8850 10.55 50
+8900 10.52 50
+9700 10.68 50
+9750 10.66 50
+9800 10.67 50
+9850 10.61 50
+9900 10.58 50
+9950 10.61 50
+10000 10.61 50
+10050 10.69 50
+10100 10.63 50
+10150 10.59 50
+10200 10.53 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/hz44.dat b/geminidr/gemini/lookups/spectrophotometric_standards/hz44.dat
index 906b2360fb..4640172016 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/hz44.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/hz44.dat
@@ -84,32 +84,32 @@
7200.00 12.36 50.
7250.00 12.36 50.
7300.00 12.35 50.
-7350 12.30 50
-7400 12.29 50
-7450 12.31 50
-7500 12.32 50
-7750 12.37 50
-7800 12.41 50
-7850 12.40 50
-7900 12.41 50
-7950 12.44 50
-8000 12.41 50
-8050 12.45 50
-8600 12.49 50
-8650 12.49 50
-8700 12.48 50
-8750 12.48 50
-8800 12.49 50
-8850 12.48 50
-8900 12.49 50
-9700 12.75 50
-9750 12.73 50
-9800 12.76 50
-9850 12.73 50
-9900 12.78 50
-9950 12.84 50
-10000 12.93 50
-10050 12.95 50
-10100 12.98 50
-10150 12.95 50
-10200 12.97 50
+7350 12.30 50
+7400 12.29 50
+7450 12.31 50
+7500 12.32 50
+7750 12.37 50
+7800 12.41 50
+7850 12.40 50
+7900 12.41 50
+7950 12.44 50
+8000 12.41 50
+8050 12.45 50
+8600 12.49 50
+8650 12.49 50
+8700 12.48 50
+8750 12.48 50
+8800 12.49 50
+8850 12.48 50
+8900 12.49 50
+9700 12.75 50
+9750 12.73 50
+9800 12.76 50
+9850 12.73 50
+9900 12.78 50
+9950 12.84 50
+10000 12.93 50
+10050 12.95 50
+10100 12.98 50
+10150 12.95 50
+10200 12.97 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/pg0823546.dat b/geminidr/gemini/lookups/spectrophotometric_standards/pg0823546.dat
index 6997cf8bf3..4c9fac8bc3 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/pg0823546.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/pg0823546.dat
@@ -84,32 +84,32 @@
7200.00 14.88 50.
7250.00 15.02 50.
7300.00 14.84 50.
-7350 14.80 50
-7400 14.80 50
-7450 14.82 50
-7500 14.82 50
-7750 14.86 50
-7800 14.89 50
-7850 14.86 50
-7900 14.88 50
-7950 14.91 50
-8000 14.88 50
-8050 14.92 50
-8600 14.94 50
-8650 14.90 50
-8700 14.91 50
-8750 14.88 50
-8800 14.88 50
-8850 14.89 50
-8900 14.94 50
-9700 15.18 50
-9750 15.44 50
-9800 15.19 50
-9850 14.91 50
-9900 15.10 50
-9950 15.86 50
-10000 15.96 50
-10050 15.22 50
-10100 15.11 50
-10150 15.19 50
-10200 15.08 50
+7350 14.80 50
+7400 14.80 50
+7450 14.82 50
+7500 14.82 50
+7750 14.86 50
+7800 14.89 50
+7850 14.86 50
+7900 14.88 50
+7950 14.91 50
+8000 14.88 50
+8050 14.92 50
+8600 14.94 50
+8650 14.90 50
+8700 14.91 50
+8750 14.88 50
+8800 14.88 50
+8850 14.89 50
+8900 14.94 50
+9700 15.18 50
+9750 15.44 50
+9800 15.19 50
+9850 14.91 50
+9900 15.10 50
+9950 15.86 50
+10000 15.96 50
+10050 15.22 50
+10100 15.11 50
+10150 15.19 50
+10200 15.08 50
diff --git a/geminidr/gemini/lookups/spectrophotometric_standards/wolf1346.dat b/geminidr/gemini/lookups/spectrophotometric_standards/wolf1346.dat
index 1b47170805..05e0b405a7 100644
--- a/geminidr/gemini/lookups/spectrophotometric_standards/wolf1346.dat
+++ b/geminidr/gemini/lookups/spectrophotometric_standards/wolf1346.dat
@@ -84,32 +84,32 @@
7200.00 12.13 50.
7250.00 12.12 50.
7300.00 12.12 50.
-7350 12.06 50
-7400 12.05 50
-7450 12.07 50
-7500 12.08 50
-7750 12.13 50
-7800 12.15 50
-7850 12.15 50
-7900 12.16 50
-7950 12.18 50
-8000 12.16 50
-8050 12.19 50
-8600 12.22 50
-8650 12.22 50
-8700 12.22 50
-8750 12.23 50
-8800 12.23 50
-8850 12.23 50
-8900 12.24 50
-9700 12.45 50
-9750 12.47 50
-9800 12.47 50
-9850 12.42 50
-9900 12.45 50
-9950 12.58 50
-10000 12.63 50
-10050 12.69 50
-10100 12.65 50
-10150 12.61 50
-10200 12.63 50
+7350 12.06 50
+7400 12.05 50
+7450 12.07 50
+7500 12.08 50
+7750 12.13 50
+7800 12.15 50
+7850 12.15 50
+7900 12.16 50
+7950 12.18 50
+8000 12.16 50
+8050 12.19 50
+8600 12.22 50
+8650 12.22 50
+8700 12.22 50
+8750 12.23 50
+8800 12.23 50
+8850 12.23 50
+8900 12.24 50
+9700 12.45 50
+9750 12.47 50
+9800 12.47 50
+9850 12.42 50
+9900 12.45 50
+9950 12.58 50
+10000 12.63 50
+10050 12.69 50
+10100 12.65 50
+10150 12.61 50
+10200 12.63 50
diff --git a/geminidr/gemini/tests/sh_functions b/geminidr/gemini/tests/sh_functions
index ff3658a0a5..6e227808b8 100644
--- a/geminidr/gemini/tests/sh_functions
+++ b/geminidr/gemini/tests/sh_functions
@@ -72,4 +72,3 @@ end_test_set() { # name nerr
echo
exit $nerr
}
-
diff --git a/geminidr/gemini/tests/test_gemini.py b/geminidr/gemini/tests/test_gemini.py
index 244664b28f..1ad9b80e3c 100644
--- a/geminidr/gemini/tests/test_gemini.py
+++ b/geminidr/gemini/tests/test_gemini.py
@@ -173,4 +173,4 @@ def test_standardize_wcs_create_new(dataset):
# there may be an absolute offset.
for c1, c2 in zip(coords1, coords2):
separations = [cc1.separation(cc2).arcsec for cc1, cc2 in zip(c1, c2)]
- assert np.std(separations) < dataset[2]
\ No newline at end of file
+ assert np.std(separations) < dataset[2]
diff --git a/geminidr/ghost/lookups/Polyfit/README b/geminidr/ghost/lookups/Polyfit/README
index f124ab77a9..baadd411ea 100644
--- a/geminidr/ghost/lookups/Polyfit/README
+++ b/geminidr/ghost/lookups/Polyfit/README
@@ -1 +1 @@
-Any Polyfit aperture models should be stored here as binary FITS tables
\ No newline at end of file
+Any Polyfit aperture models should be stored here as binary FITS tables
diff --git a/geminidr/ghost/lookups/Polyfit/ghost_thar_linelist_20220718.dat b/geminidr/ghost/lookups/Polyfit/ghost_thar_linelist_20220718.dat
index 2ebb610574..613992a6b8 100644
--- a/geminidr/ghost/lookups/Polyfit/ghost_thar_linelist_20220718.dat
+++ b/geminidr/ghost/lookups/Polyfit/ghost_thar_linelist_20220718.dat
@@ -1,411 +1,411 @@
- 27951.4149 3576.615368 5.153 Ar II W
+ 27951.4149 3576.615368 5.153 Ar II W
27087.9796 3690.623869 3.906 Th I P
26878.1606 3719.434728 4.607 Th I P
-# 26807.002 3729.308136 3.433 Ar II W
- 26745.4646 3737.888945 3.163 Ar II W
- 26508.0267 3771.370827 4.259 Th I P
-# 26243.0166 3809.456226 3.275 Ar II L
- 25997.6861 3845.405511 2.941 Ar II L
- 25962.7407 3850.581478 3.727 Ar II L
- 25952.2693 3852.135168 3.175 Th I L
- 25936.2783 3854.510257 2.812 Th II L
- 25842.2953 3868.528624 3.508 Ar II L
- 25806.9833 3873.822102 4.029 Th I L
- 25663.9063 3895.419264 3.515 Th I L
- 25526.3105 3916.417436 3.771 Th I L
- 25478.2881 3923.7994 3.286 Th I L
- 25465.829 3925.719162 3.603 Ar II L
- 25440.2317 3929.669203 3.805 Th II L
- 25421.6161 3932.546855 3.29 Ar II L
- 25419.2603 3932.911332 3.552 Th I L
-# 25306.7596 3950.395397 4.173 Th I L
- 25249.8455 3959.299941 3.184 Th I L
- 25198.3452 3967.392112 3.949 Th I L
- 25168.1355 3972.154338 3.57 XX 0 L
- 25153.4305 3974.476567 3.21 Ar II L
- 25122.5897 3979.355779 3.281 Ar II L
- 25052.4792 3990.492442 3.271 Th I L
- 25042.6825 3992.053554 2.653 Ar II L
- 24915.104 4012.495421 3.871 Th I L
- 24873.9836 4019.128807 4.27 Th II L
-# 24807.956 4029.826137 3.019 Th I L
-# 24805.0847 4030.292633 3.094 XX 0 L
- 24801.7013 4030.842436 4.129 Th I L
- 24773.32 4035.460437 3.219 Ar II L
-# 24769.7144 4036.047864 4.394 Th I L
-# 24752.8063 4038.804857 2.578 Ar II L
- 24727.7687 4042.894358 3.965 Ar II L
- 24718.453 4044.418042 3.694 Ar I L
- 24666.5951 4052.92101 4.033 Ar II L
- 24602.9416 4063.407073 3.54 Th I L
- 24529.9226 4075.503004 3.475 Th I L
- 24523.1489 4076.628745 3.326 Ar II L
- 24521.2566 4076.943344 3.126 Ar II L
- 24488.5551 4082.38772 3.316 Ar II L
- 24482.0713 4083.468911 3.414 Th I L
- 24472.641 4085.042472 3.179 Th II L
- 24470.2972 4085.433751 3.167 Th I L
- 24463.7893 4086.520592 3.848 Th II L
- 24448.1329 4089.137621 3.259 Th I L
- 24414.6398 4094.747403 3.891 Th II L
- 24396.7667 4097.747286 3.79 Th I L
- 24381.3329 4100.341269 4.183 Th I L
- 24290.0028 4115.758823 3.551 Th I L
- 24284.3704 4116.713432 3.655 Th II L
- 23998.4216 4165.766346 3.751 Th I L
- 23970.993 4170.53309 3.847 Th I L
- 23905.9331 4181.883406 3.768 Ar I L
+# 26807.002 3729.308136 3.433 Ar II W
+ 26745.4646 3737.888945 3.163 Ar II W
+ 26508.0267 3771.370827 4.259 Th I P
+# 26243.0166 3809.456226 3.275 Ar II L
+ 25997.6861 3845.405511 2.941 Ar II L
+ 25962.7407 3850.581478 3.727 Ar II L
+ 25952.2693 3852.135168 3.175 Th I L
+ 25936.2783 3854.510257 2.812 Th II L
+ 25842.2953 3868.528624 3.508 Ar II L
+ 25806.9833 3873.822102 4.029 Th I L
+ 25663.9063 3895.419264 3.515 Th I L
+ 25526.3105 3916.417436 3.771 Th I L
+ 25478.2881 3923.7994 3.286 Th I L
+ 25465.829 3925.719162 3.603 Ar II L
+ 25440.2317 3929.669203 3.805 Th II L
+ 25421.6161 3932.546855 3.29 Ar II L
+ 25419.2603 3932.911332 3.552 Th I L
+# 25306.7596 3950.395397 4.173 Th I L
+ 25249.8455 3959.299941 3.184 Th I L
+ 25198.3452 3967.392112 3.949 Th I L
+ 25168.1355 3972.154338 3.57 XX 0 L
+ 25153.4305 3974.476567 3.21 Ar II L
+ 25122.5897 3979.355779 3.281 Ar II L
+ 25052.4792 3990.492442 3.271 Th I L
+ 25042.6825 3992.053554 2.653 Ar II L
+ 24915.104 4012.495421 3.871 Th I L
+ 24873.9836 4019.128807 4.27 Th II L
+# 24807.956 4029.826137 3.019 Th I L
+# 24805.0847 4030.292633 3.094 XX 0 L
+ 24801.7013 4030.842436 4.129 Th I L
+ 24773.32 4035.460437 3.219 Ar II L
+# 24769.7144 4036.047864 4.394 Th I L
+# 24752.8063 4038.804857 2.578 Ar II L
+ 24727.7687 4042.894358 3.965 Ar II L
+ 24718.453 4044.418042 3.694 Ar I L
+ 24666.5951 4052.92101 4.033 Ar II L
+ 24602.9416 4063.407073 3.54 Th I L
+ 24529.9226 4075.503004 3.475 Th I L
+ 24523.1489 4076.628745 3.326 Ar II L
+ 24521.2566 4076.943344 3.126 Ar II L
+ 24488.5551 4082.38772 3.316 Ar II L
+ 24482.0713 4083.468911 3.414 Th I L
+ 24472.641 4085.042472 3.179 Th II L
+ 24470.2972 4085.433751 3.167 Th I L
+ 24463.7893 4086.520592 3.848 Th II L
+ 24448.1329 4089.137621 3.259 Th I L
+ 24414.6398 4094.747403 3.891 Th II L
+ 24396.7667 4097.747286 3.79 Th I L
+ 24381.3329 4100.341269 4.183 Th I L
+ 24290.0028 4115.758823 3.551 Th I L
+ 24284.3704 4116.713432 3.655 Th II L
+ 23998.4216 4165.766346 3.751 Th I L
+ 23970.993 4170.53309 3.847 Th I L
+ 23905.9331 4181.883406 3.768 Ar I L
0 4208.890 0 XX 0 0
- 23728.9928 4213.067117 3.483 Th I L
- 23704.4412 4217.430828 3.252 Ar II L
- 23689.6343 4220.066936 3.035 Th I L
- 23675.2141 4222.637351 3.398 Ar II L
- 23644.3027 4228.157937 3.978 Ar II L
- 23638.7712 4229.147346 3.559 Th I L
- 23631.6258 4230.426111 3.234 Th I L
- 23603.5188 4235.463786 4.317 Th I L
+ 23728.9928 4213.067117 3.483 Th I L
+ 23704.4412 4217.430828 3.252 Ar II L
+ 23689.6343 4220.066936 3.035 Th I L
+ 23675.2141 4222.637351 3.398 Ar II L
+ 23644.3027 4228.157937 3.978 Ar II L
+ 23638.7712 4229.147346 3.559 Th I L
+ 23631.6258 4230.426111 3.234 Th I L
+ 23603.5188 4235.463786 4.317 Th I L
0 4257.496 0 XX 0 0
-# 23432.9935 4266.286458 3.941 Ar I L
-# 23431.6706 4266.527325 3.922 Ar II L
+# 23432.9935 4266.286458 3.941 Ar I L
+# 23431.6706 4266.527325 3.922 Ar II L
# 0 4312.997 0 XX 0 0
-# 23167.0889 4315.254471 3.84 Th I L
- 23093.9807 4328.915443 3.851 Th I L
- 23077.3781 4332.029855 3.617 Ar II L
- 23022.0345 4342.443971 3.788 Th I L
- 22834.1416 4378.176824 4.112 Th I L
- 22826.3714 4379.667209 4.249 Ar II L
- 22814.9488 4381.859986 3.972 Th II L
- 22798.3139 4385.057274 4.015 Ar II L
- 22766.8846 4391.110881 4.137 Th II L
- 22757.2285 4392.974102 3.481 Th I L
- 22705.7873 4402.926798 4.043 Th I L
-# 22646.3323 4414.486318 3.605 Th I L
- 22634.2387 4416.845034 3.241 Th I L
- 22561.952 4430.996494 3.873 Ar II L
- 22547.492 4433.838218 3.76 Ar II L
- 22518.9325 4439.461496 3.731 Ar II L
- 22471.2607 4448.879769 3.916 Ar II L
- 22452.6578 4452.565919 3.931 Th I L
- 22425.2816 4458.001577 3.987 Th I L
- 22412.4328 4460.557349 3.029 Ar II L
- 22408.9979 4461.241078 3.708 Th I L
- 22407.5585 4461.527666 3.734 Th I L
- 22260.5991 4490.982155 3.439 Ar II L
- 0 4493.333 0 XX 0 0
- 22216.0731 4499.983224 3.741 Th I L
- 22201.5491 4502.927116 3.343 Ar II L
- 22190.2681 4505.216342 3.597 Th I L
- 22141.6045 4515.118228 4.227 Th I L
- 22015.414 4540.998918 3.833 Th I L
- 21787.859 4588.426418 3.936 Th I L
- 21767.7445 4592.66643 3.811 Th I L
- 21738.8877 4598.762949 3.951 Ar II L
- 21604.8328 4627.298084 3.174 Th I L
- 21600.6138 4628.201884 3.419 Th I L
- 21599.4977 4628.441048 3.32 Ar I L
- 21551.8006 4638.684582 3.667 Th I L
- 21438.4863 4663.202971 3.988 Th I L
- 0 4673.660 0 XX 0 0
- 21407.356 4669.984249 4.046 Th I L
- 21333.305 4686.1947 4.199 Th I L
- 21313.1682 4690.622309 3.755 Th I L
- 21233.176 4708.29364 3.5 Th I L
- 21126.5625 4732.054032 4.118 Ar II L
- 0 4739.676 0 XX 0 0
- 21036.0547 4752.414027 3.981 Th II L
- 20973.4451 4766.601069 4.11 Th I L
- 20886.1198 4786.530632 3.41 Th I L
- 20883.4284 4787.147499 3.665 Th I L
- 20873.6664 4789.386339 4.188 Th I L
- 20856.8635 4793.24488 3.215 Th I L
- 20845.2567 4795.913819 3.322 Th I L
- 20785.8771 4809.614655 4.099 Th I L
- 20693.3477 4831.120944 4.316 Th I L
- 20691.307 4831.597425 3.871 Th I L
- 20653.358 4840.475242 3.123 XX 0 L
- 20651.7901 4840.84274 4.539 Th I L
- 20619.7588 4848.362742 4.171 Th I L
- 20610.9288 4850.439875 3.689 Th II L
- 20600.6133 4852.868708 3.473 XX 0 L
- 20491.4014 4878.733135 4.423 Th I L
- 20481.026 4881.204677 3.543 Th I L
- 20476.6671 4882.243739 3.166 Ar II L
- 20452.7703 4887.948196 3.378 XX 1 L
- 20432.6576 4892.759664 3.286 Th I L
- 20429.7951 4893.445228 3.123 Th I L
- 20360.2634 4910.156909 3.63 Th I L
- 20350.4344 4912.528468 3.338 Th II L
- 20320.2903 4919.816059 4.365 Th II L
- 20282.0764 4929.085714 3.009 Th I L
- 20265.1216 4933.209697 3.922 Ar II L
- 20238.7347 4939.641603 4.139 Th I L
-# 20224.7244 4943.063499 4.058 Th I L
- 20210.0086 4946.662819 3.719 Th II L
- 20193.8284 4950.626354 3.33 Th II L
- 20073.9709 4980.185897 3.558 Th I L
- 20064.7004 4982.486931 3.82 Th I L
- 20053.0889 4985.372021 4.132 Th I L
- 20037.2681 4989.308372 3.624 Th I L
- 19986.039 5002.097356 4.55 Th I L
- 19980.0422 5003.598696 3.227 Th I L
- 19957.1617 5009.335298 3.971 Ar II L
- 0 5017.160 0 XX 0 0
- 19875.6013 5029.891591 3.661 Th I L
- 19838.7674 5039.230522 4.311 Th I L
- 19815.1048 5045.248316 3.603 Th I L
- 19808.0559 5047.043744 3.964 Th I L
- 19793.3865 5050.784272 3.995 Th I L
- 19789.0597 5051.888619 3.573 Th I L
- 19743.6239 5063.514632 3.419 Th I L
- 19739.3861 5064.601734 4.121 Th I L
- 19738.0487 5064.944882 4.162 Th I L
- 19737.0856 5065.192056 3.913 Th I L
- 19733.4104 5066.135402 3.525 Th I L
- 19673.9522 5081.446377 3.312 Th I L
- 19660.2256 5084.994251 3.101 Th I L
-# 19615.8997 5096.484919 4.005 Th I L
- 19609.9033 5098.043343 3.391 Th II L
- 19544.7257 5115.044494 4.338 Th I L
- 19493.4838 5128.490403 3.529 Th I L
- 19469.7337 5134.746459 3.862 Th I L
- 19459.3975 5137.473905 3.32 Th I L
- 19430.7911 5145.037484 3.106 Th II L
- 19429.7673 5145.30861 3.867 Ar II L
- 19396.0917 5154.242014 4.216 Th I L
- 19379.6882 5158.604754 4.606 Th I L
- 19368.6694 5161.539521 3.792 Th I L
- 19365.8694 5162.285814 3.744 Ar I L
- 19361.4728 5163.458074 4.16 Th I L
- 19317.0771 5175.325212 3.595 Th I L
- 19245.93 5194.457234 3.776 Th I L
- 19240.907 5195.813306 4.168 Th I L
- 19189.529 5209.724726 3.75 Th I L
- 19183.9839 5211.230608 4.402 Th I L
- 19155.0209 5219.11026 4.085 Th I L
-# 19050.8285 5247.654859 4.086 Th II L
- 19005.7396 5260.104444 3.694 Th I L
- 18981.9017 5266.710292 4.13 Th I L
- 18891.8456 5291.81662 3.411 Th I L
- 18868.7909 5298.282447 3.896 Th I L
-# 18476.5268 5410.768418 4.073 Th I L
- 18431.4296 5424.007403 3.832 Th I L
- 18425.7551 5425.677824 3.594 Th II L
-# 18407.3205 5431.111593 4.07 Th I L
- 18337.9671 5451.65205 3.572 Ar I L
- 18336.0614 5452.21866 4.043 Th I L
- 18273.9222 5470.758744 3.666 Th I L
- 18201.1114 5492.643935 3.993 Th I L
- 18162.5634 5504.30159 4.017 Th I L
- 18143.8027 5509.993104 4.099 Th I L
- 18127.7477 5514.873106 4.028 Th I L
- 18040.3758 5541.582669 3.154 Th I L
- 18036.1188 5542.890641 3.793 Th I L
- 18018.9372 5548.176013 4.181 Th I L
- 17990.178 5557.045427 4.11 Th I L
- 17980.9705 5559.891048 4.019 Th I L
-# 17928.3679 5576.204181 3.877 Th I L
-# 17918.2352 5579.357544 4.197 Th I L
- 17867.9344 5595.064394 4.265 Th I L
- 17847.0776 5601.603067 4.274 Th I L
- 17837.8044 5604.515166 3.902 Th II L
- 17818.2033 5610.680538 3.874 Th I L
- 17813.7993 5612.067646 3.953 Th I L
- 17726.3748 5639.746033 4.307 Th II L
-# 17646.794 5665.179556 4.124 Th I L
-# 17609.8878 5677.052542 3.929 Th I L
- 17584.6743 5685.192577 3.619 Th I L
- 17544.2425 5698.294609 3.265 Th I L
- 17517.1644 5707.103137 4.119 Th II L
- 17461.221 5725.388111 4.161 Th I L
- 17418.2277 5739.520188 3.599 Ar I L
- 17388.3294 5749.389072 3.811 Th II L
- 17377.3342 5753.026927 4.205 Th I L
-# 17345.6719 5763.528456 4.184 Th I L
-# 17331.681 5768.181074 3.983 Th I L
- 17267.4285 5789.644814 4.203 Th I L
- 17259.1237 5792.430723 4.188 Th I L
- 17248.2902 5796.068933 3.79 Th I L
- 17230.4161 5802.081595 3.176 Ar I L
- 17190.8914 5815.421655 3.974 Th II L
- 17081.4519 5852.680944 3.997 Th I L
- 17079.1362 5853.474514 4.038 Th I L
- 17077.2518 5854.120429 3.93 Th I L
- 17059.2128 5860.31081 3.661 Ar I L
- 17049.2972 5863.719119 3.925 Th I L
- 16994.5054 5882.624429 3.596 Ar I L
- 16985.6219 5885.701097 4.187 Th I L
- 16969.0451 5891.45079 4.128 Th I L
- 16871.8109 5925.404219 4.006 Th I L
- 16869.4547 5926.231866 4.17 Th I L
- 16731.5835 5975.065492 4.422 Th I L
- 16697.3914 5987.301034 3.406 Ar I L
- 16692.5297 5989.044879 4.341 Th II L
- 16687.0643 5991.006437 4.226 Th I L
- 16658.7112 6001.203223 4.001 Th I L
- 16647.72 6005.16538 4.119 Th I L
- 16642.4369 6007.071707 4.217 Th I L
- 16633.8842 6010.160403 4.242 Th I L
- 16603.8394 6021.035954 4.358 Th I L
- 16592.5019 6025.15012 3.47 Ar I L
- 16577.9344 6030.444634 4.051 Th I L
- 16555.3236 6038.680894 3.927 Th I L
- 16516.9157 6052.723191 3.624 Ar I L
- 16515.1212 6053.380881 4.067 Th I L
-# 16461.4885 6073.103405 3.785 Th II L
- 16444.9174 6079.223155 3.969 Th I L
- 16421.1282 6088.030147 4.435 Th I L
- 16413.6972 6090.786428 3.206 Ar I L
- 16392.1217 6098.803276 3.695 Ar I L
- 16384.2718 6101.725299 4.051 Th I L
- 16381.9371 6102.594888 4.264 Th I L
- 16373.7803 6105.635022 3.722 Ar I L
- 16368.6914 6107.533218 3.758 XX 0 L
- 16269.5317 6144.757809 3.06 Th I L
- 16250.3973 6151.993136 4.522 Th I L
- 16243.7375 6154.515407 3.569 Th I L
- 16018.7613 6240.953508 3.786 Th I L
- 16013.201 6243.120579 3.894 Ar II L
- 15976.5997 6257.423258 4.212 Th I L
-# 15876.5065 6296.873431 3.731 Ar I L
- 15849.3632 6307.657424 3.75 Ar I L
- 15813.8566 6321.820008 3.276 Th I L
- 15789.8935 6331.414229 3.443 Th I L
- 15677.1914 6376.930646 4.294 Th I L
- 15651.5069 6387.39542 4.288 Th I L
- 15420.4983 6483.0833 4.172 Ar II L
- 15402.3141 6490.737378 4.369 Th I L
- 15396.4786 6493.197488 3.993 Th I L
- 15101.6929 6619.945897 4.239 Th II L
- 15060.118 6638.221029 4.191 Ar II L
- 15058.5508 6638.911903 4.118 Th I L
-# 15056.671 6639.740761 4.078 Ar II L
- 15001.7455 6664.050878 3.809 Ar I L
- 14996.5522 6666.358628 4.231 Ar II L
- 14977.818 6674.696969 4.531 Th I L
- 14956.3153 6684.293258 4.377 Ar II L
- 14926.3497 6697.712496 4.096 Th I L
- 14923.7609 6698.874332 3.819 Ar I L
- 14774.3664 6766.612079 4.089 Ar I L
- 14648.6644 6824.677603 4.336 Th I L
- 14643.1467 6827.249245 3.692 Ar I L
- 14639.3164 6829.035562 4.617 Th I L
- 14541.9645 6874.753192 4.511 Th I L
- 14531.7565 6879.582453 3.88 Ar I L
- 14515.9197 6887.088119 3.839 Ar I L
- 14410.0993 6937.663708 4.722 Ar I N
- 14397.7579 6943.610523 4.236 Th I P
- 14381.4649 6951.477124 3.812 Ar I N
- 14363.3392 6960.249543 3.812 Ar I N
- 14302.9125 6989.65526 4.541 Th I P
- 14243.9935 7018.567528 3.82 Th I P
- 14220.3219 7030.250958 5.172 Ar I N
- 14142.9024 7068.735373 5.022 Ar I N
- 14112.0908 7084.169001 4.158 Th I P
- 14107.0428 7086.703961 3.512 Ar I N
- 14065.8118 7107.477291 4.422 Ar I N
- 14032.0848 7124.560689 3.78 Th I P
- 14029.606 7125.819469 4.422 Ar I N
- 13981.6036 7150.284392 3.541 Th I P
- 13964.8977 7158.838154 4.112 Ar I N
- 13945.307 7168.895141 4.381 Th I P
- 13936.603 7173.372448 3.424 Th I P
- 13884.9744 7200.045414 3.397 Th I P
- 13871.6145 7206.979882 4.872 Ar I N
- 13869.6392 7208.006314 4.202 Th I P
- 13860.6336 7212.689565 3.64 Th I P
- 13848.227 7219.151439 3.319 Th I P
- 13760.5074 7265.171889 4.112 Ar I N
- 13723.2369 7284.903267 3.591 Th I P
- 13672.9139 7311.715419 4.572 Ar I N
- 13664.8981 7316.004481 4.422 Ar I N
- 13641.999 7328.285014 3.579 Th I P
- 13618.0895 7341.151478 3.559 Th I P
- 13600.1897 7350.813537 3.662 Ar I N
- 13595.6047 7353.29255 4.872 Ar I N
- 13560.8874 7372.117865 5.322 Ar I N
- 13522.6211 7392.979599 4.262 Ar I N
- 13463.7725 7425.29365 3.962 Ar I N
- 13457.1632 7428.940503 3.953 Th I P
- 13454.7857 7430.253226 3.613 Th I P
- 13445.5306 7435.367797 4.422 Ar I N
- 13443.8515 7436.29646 3.962 Ar I N
- 13381.1108 7471.163605 3.512 Ar I N
- 13362.8836 7481.354454 3.714 Th I P
- 13358.8283 7483.62556 3.278 Th I P
- 13357.5778 7484.326163 3.362 Ar I N
- 13328.4985 7500.6551 2.912 Ar I N
- 13311.1909 7510.407726 3.062 Ar I N
- 13284.4818 7525.507848 3.191 Th II P
- 13242.5909 7549.313767 3.534 Th I P
- 13107.4063 7627.17483 3.437 Th I P
- 13104.4744 7628.881301 2.912 Ar I N
- 13034.1252 7670.056955 3.062 Ar I N
- 12835.1953 7788.934115 3.957 Th I P
- 12787.8531 7817.769853 4.232 Th I P
- 12739.3428 7847.539388 4.205 Th I P
- 12716.0579 7861.909446 2.462 Ar I N
- 12709.494 7865.96977 3.715 Th I P
- 12446.1079 8032.431249 3.788 Th I P
- 12438.6957 8037.217764 2.912 Ar I N
- 12424.9392 8046.116362 3.212 Ar I N
- 12413.8438 8053.307955 3.812 Ar I N
- 12251.9425 8159.727615 3.821 Th I P
- 12236.8577 8169.786443 3.49 Th I P
- 12211.2616 8186.911262 4.063 Th I P
- 12114.3664 8252.393524 3.404 Th I P
-# 12080.3567 8275.626506 3.874 Th I P
- 12014.693 8320.855356 3.969 Th I P
- 11877.8392 8416.726817 4.134 Th I P
- 11876.0454 8417.998115 3.705 Th I P
- 11871.4942 8421.225355 4.017 Th I P
- 11837.3907 8445.486996 3.803 Th I P
- 11835.9549 8446.511509 4.262 Th I P
- 11774.9034 8490.305885 3.062 Ar I N
- 11685.9368 8554.943992 3.327 Th I P
- 11661.1607 8573.120489 3.885 Th I P
- 11616.9119 8605.775647 3.812 Ar I N
- 11597.1239 8620.459617 3.512 Ar I N
- 11519.687 8678.407764 2.612 Ar I N
-# 11478.9133 8709.234029 3.413 Th I P
- 11428.0054 8748.030881 3.986 Th I P
- 11414.6799 8758.243376 3.886 Th I P
- 11410.1954 8761.685632 3.512 Ar I N
- 11396.9605 8771.860292 3.263 Ar II W
- 11361.6956 8799.086895 3.212 Ar I N
- 11307.5983 8841.183227 3.392 Th I P
- 11272.3451 8868.833307 3.714 Th I P
- 11148.145 8967.640269 4.301 Th I P
- 11048.8279 9048.250039 4.353 Th I P
-# 10901.1562 9170.821948 2.609 Th I P
+# 23167.0889 4315.254471 3.84 Th I L
+ 23093.9807 4328.915443 3.851 Th I L
+ 23077.3781 4332.029855 3.617 Ar II L
+ 23022.0345 4342.443971 3.788 Th I L
+ 22834.1416 4378.176824 4.112 Th I L
+ 22826.3714 4379.667209 4.249 Ar II L
+ 22814.9488 4381.859986 3.972 Th II L
+ 22798.3139 4385.057274 4.015 Ar II L
+ 22766.8846 4391.110881 4.137 Th II L
+ 22757.2285 4392.974102 3.481 Th I L
+ 22705.7873 4402.926798 4.043 Th I L
+# 22646.3323 4414.486318 3.605 Th I L
+ 22634.2387 4416.845034 3.241 Th I L
+ 22561.952 4430.996494 3.873 Ar II L
+ 22547.492 4433.838218 3.76 Ar II L
+ 22518.9325 4439.461496 3.731 Ar II L
+ 22471.2607 4448.879769 3.916 Ar II L
+ 22452.6578 4452.565919 3.931 Th I L
+ 22425.2816 4458.001577 3.987 Th I L
+ 22412.4328 4460.557349 3.029 Ar II L
+ 22408.9979 4461.241078 3.708 Th I L
+ 22407.5585 4461.527666 3.734 Th I L
+ 22260.5991 4490.982155 3.439 Ar II L
+ 0 4493.333 0 XX 0 0
+ 22216.0731 4499.983224 3.741 Th I L
+ 22201.5491 4502.927116 3.343 Ar II L
+ 22190.2681 4505.216342 3.597 Th I L
+ 22141.6045 4515.118228 4.227 Th I L
+ 22015.414 4540.998918 3.833 Th I L
+ 21787.859 4588.426418 3.936 Th I L
+ 21767.7445 4592.66643 3.811 Th I L
+ 21738.8877 4598.762949 3.951 Ar II L
+ 21604.8328 4627.298084 3.174 Th I L
+ 21600.6138 4628.201884 3.419 Th I L
+ 21599.4977 4628.441048 3.32 Ar I L
+ 21551.8006 4638.684582 3.667 Th I L
+ 21438.4863 4663.202971 3.988 Th I L
+ 0 4673.660 0 XX 0 0
+ 21407.356 4669.984249 4.046 Th I L
+ 21333.305 4686.1947 4.199 Th I L
+ 21313.1682 4690.622309 3.755 Th I L
+ 21233.176 4708.29364 3.5 Th I L
+ 21126.5625 4732.054032 4.118 Ar II L
+ 0 4739.676 0 XX 0 0
+ 21036.0547 4752.414027 3.981 Th II L
+ 20973.4451 4766.601069 4.11 Th I L
+ 20886.1198 4786.530632 3.41 Th I L
+ 20883.4284 4787.147499 3.665 Th I L
+ 20873.6664 4789.386339 4.188 Th I L
+ 20856.8635 4793.24488 3.215 Th I L
+ 20845.2567 4795.913819 3.322 Th I L
+ 20785.8771 4809.614655 4.099 Th I L
+ 20693.3477 4831.120944 4.316 Th I L
+ 20691.307 4831.597425 3.871 Th I L
+ 20653.358 4840.475242 3.123 XX 0 L
+ 20651.7901 4840.84274 4.539 Th I L
+ 20619.7588 4848.362742 4.171 Th I L
+ 20610.9288 4850.439875 3.689 Th II L
+ 20600.6133 4852.868708 3.473 XX 0 L
+ 20491.4014 4878.733135 4.423 Th I L
+ 20481.026 4881.204677 3.543 Th I L
+ 20476.6671 4882.243739 3.166 Ar II L
+ 20452.7703 4887.948196 3.378 XX 1 L
+ 20432.6576 4892.759664 3.286 Th I L
+ 20429.7951 4893.445228 3.123 Th I L
+ 20360.2634 4910.156909 3.63 Th I L
+ 20350.4344 4912.528468 3.338 Th II L
+ 20320.2903 4919.816059 4.365 Th II L
+ 20282.0764 4929.085714 3.009 Th I L
+ 20265.1216 4933.209697 3.922 Ar II L
+ 20238.7347 4939.641603 4.139 Th I L
+# 20224.7244 4943.063499 4.058 Th I L
+ 20210.0086 4946.662819 3.719 Th II L
+ 20193.8284 4950.626354 3.33 Th II L
+ 20073.9709 4980.185897 3.558 Th I L
+ 20064.7004 4982.486931 3.82 Th I L
+ 20053.0889 4985.372021 4.132 Th I L
+ 20037.2681 4989.308372 3.624 Th I L
+ 19986.039 5002.097356 4.55 Th I L
+ 19980.0422 5003.598696 3.227 Th I L
+ 19957.1617 5009.335298 3.971 Ar II L
+ 0 5017.160 0 XX 0 0
+ 19875.6013 5029.891591 3.661 Th I L
+ 19838.7674 5039.230522 4.311 Th I L
+ 19815.1048 5045.248316 3.603 Th I L
+ 19808.0559 5047.043744 3.964 Th I L
+ 19793.3865 5050.784272 3.995 Th I L
+ 19789.0597 5051.888619 3.573 Th I L
+ 19743.6239 5063.514632 3.419 Th I L
+ 19739.3861 5064.601734 4.121 Th I L
+ 19738.0487 5064.944882 4.162 Th I L
+ 19737.0856 5065.192056 3.913 Th I L
+ 19733.4104 5066.135402 3.525 Th I L
+ 19673.9522 5081.446377 3.312 Th I L
+ 19660.2256 5084.994251 3.101 Th I L
+# 19615.8997 5096.484919 4.005 Th I L
+ 19609.9033 5098.043343 3.391 Th II L
+ 19544.7257 5115.044494 4.338 Th I L
+ 19493.4838 5128.490403 3.529 Th I L
+ 19469.7337 5134.746459 3.862 Th I L
+ 19459.3975 5137.473905 3.32 Th I L
+ 19430.7911 5145.037484 3.106 Th II L
+ 19429.7673 5145.30861 3.867 Ar II L
+ 19396.0917 5154.242014 4.216 Th I L
+ 19379.6882 5158.604754 4.606 Th I L
+ 19368.6694 5161.539521 3.792 Th I L
+ 19365.8694 5162.285814 3.744 Ar I L
+ 19361.4728 5163.458074 4.16 Th I L
+ 19317.0771 5175.325212 3.595 Th I L
+ 19245.93 5194.457234 3.776 Th I L
+ 19240.907 5195.813306 4.168 Th I L
+ 19189.529 5209.724726 3.75 Th I L
+ 19183.9839 5211.230608 4.402 Th I L
+ 19155.0209 5219.11026 4.085 Th I L
+# 19050.8285 5247.654859 4.086 Th II L
+ 19005.7396 5260.104444 3.694 Th I L
+ 18981.9017 5266.710292 4.13 Th I L
+ 18891.8456 5291.81662 3.411 Th I L
+ 18868.7909 5298.282447 3.896 Th I L
+# 18476.5268 5410.768418 4.073 Th I L
+ 18431.4296 5424.007403 3.832 Th I L
+ 18425.7551 5425.677824 3.594 Th II L
+# 18407.3205 5431.111593 4.07 Th I L
+ 18337.9671 5451.65205 3.572 Ar I L
+ 18336.0614 5452.21866 4.043 Th I L
+ 18273.9222 5470.758744 3.666 Th I L
+ 18201.1114 5492.643935 3.993 Th I L
+ 18162.5634 5504.30159 4.017 Th I L
+ 18143.8027 5509.993104 4.099 Th I L
+ 18127.7477 5514.873106 4.028 Th I L
+ 18040.3758 5541.582669 3.154 Th I L
+ 18036.1188 5542.890641 3.793 Th I L
+ 18018.9372 5548.176013 4.181 Th I L
+ 17990.178 5557.045427 4.11 Th I L
+ 17980.9705 5559.891048 4.019 Th I L
+# 17928.3679 5576.204181 3.877 Th I L
+# 17918.2352 5579.357544 4.197 Th I L
+ 17867.9344 5595.064394 4.265 Th I L
+ 17847.0776 5601.603067 4.274 Th I L
+ 17837.8044 5604.515166 3.902 Th II L
+ 17818.2033 5610.680538 3.874 Th I L
+ 17813.7993 5612.067646 3.953 Th I L
+ 17726.3748 5639.746033 4.307 Th II L
+# 17646.794 5665.179556 4.124 Th I L
+# 17609.8878 5677.052542 3.929 Th I L
+ 17584.6743 5685.192577 3.619 Th I L
+ 17544.2425 5698.294609 3.265 Th I L
+ 17517.1644 5707.103137 4.119 Th II L
+ 17461.221 5725.388111 4.161 Th I L
+ 17418.2277 5739.520188 3.599 Ar I L
+ 17388.3294 5749.389072 3.811 Th II L
+ 17377.3342 5753.026927 4.205 Th I L
+# 17345.6719 5763.528456 4.184 Th I L
+# 17331.681 5768.181074 3.983 Th I L
+ 17267.4285 5789.644814 4.203 Th I L
+ 17259.1237 5792.430723 4.188 Th I L
+ 17248.2902 5796.068933 3.79 Th I L
+ 17230.4161 5802.081595 3.176 Ar I L
+ 17190.8914 5815.421655 3.974 Th II L
+ 17081.4519 5852.680944 3.997 Th I L
+ 17079.1362 5853.474514 4.038 Th I L
+ 17077.2518 5854.120429 3.93 Th I L
+ 17059.2128 5860.31081 3.661 Ar I L
+ 17049.2972 5863.719119 3.925 Th I L
+ 16994.5054 5882.624429 3.596 Ar I L
+ 16985.6219 5885.701097 4.187 Th I L
+ 16969.0451 5891.45079 4.128 Th I L
+ 16871.8109 5925.404219 4.006 Th I L
+ 16869.4547 5926.231866 4.17 Th I L
+ 16731.5835 5975.065492 4.422 Th I L
+ 16697.3914 5987.301034 3.406 Ar I L
+ 16692.5297 5989.044879 4.341 Th II L
+ 16687.0643 5991.006437 4.226 Th I L
+ 16658.7112 6001.203223 4.001 Th I L
+ 16647.72 6005.16538 4.119 Th I L
+ 16642.4369 6007.071707 4.217 Th I L
+ 16633.8842 6010.160403 4.242 Th I L
+ 16603.8394 6021.035954 4.358 Th I L
+ 16592.5019 6025.15012 3.47 Ar I L
+ 16577.9344 6030.444634 4.051 Th I L
+ 16555.3236 6038.680894 3.927 Th I L
+ 16516.9157 6052.723191 3.624 Ar I L
+ 16515.1212 6053.380881 4.067 Th I L
+# 16461.4885 6073.103405 3.785 Th II L
+ 16444.9174 6079.223155 3.969 Th I L
+ 16421.1282 6088.030147 4.435 Th I L
+ 16413.6972 6090.786428 3.206 Ar I L
+ 16392.1217 6098.803276 3.695 Ar I L
+ 16384.2718 6101.725299 4.051 Th I L
+ 16381.9371 6102.594888 4.264 Th I L
+ 16373.7803 6105.635022 3.722 Ar I L
+ 16368.6914 6107.533218 3.758 XX 0 L
+ 16269.5317 6144.757809 3.06 Th I L
+ 16250.3973 6151.993136 4.522 Th I L
+ 16243.7375 6154.515407 3.569 Th I L
+ 16018.7613 6240.953508 3.786 Th I L
+ 16013.201 6243.120579 3.894 Ar II L
+ 15976.5997 6257.423258 4.212 Th I L
+# 15876.5065 6296.873431 3.731 Ar I L
+ 15849.3632 6307.657424 3.75 Ar I L
+ 15813.8566 6321.820008 3.276 Th I L
+ 15789.8935 6331.414229 3.443 Th I L
+ 15677.1914 6376.930646 4.294 Th I L
+ 15651.5069 6387.39542 4.288 Th I L
+ 15420.4983 6483.0833 4.172 Ar II L
+ 15402.3141 6490.737378 4.369 Th I L
+ 15396.4786 6493.197488 3.993 Th I L
+ 15101.6929 6619.945897 4.239 Th II L
+ 15060.118 6638.221029 4.191 Ar II L
+ 15058.5508 6638.911903 4.118 Th I L
+# 15056.671 6639.740761 4.078 Ar II L
+ 15001.7455 6664.050878 3.809 Ar I L
+ 14996.5522 6666.358628 4.231 Ar II L
+ 14977.818 6674.696969 4.531 Th I L
+ 14956.3153 6684.293258 4.377 Ar II L
+ 14926.3497 6697.712496 4.096 Th I L
+ 14923.7609 6698.874332 3.819 Ar I L
+ 14774.3664 6766.612079 4.089 Ar I L
+ 14648.6644 6824.677603 4.336 Th I L
+ 14643.1467 6827.249245 3.692 Ar I L
+ 14639.3164 6829.035562 4.617 Th I L
+ 14541.9645 6874.753192 4.511 Th I L
+ 14531.7565 6879.582453 3.88 Ar I L
+ 14515.9197 6887.088119 3.839 Ar I L
+ 14410.0993 6937.663708 4.722 Ar I N
+ 14397.7579 6943.610523 4.236 Th I P
+ 14381.4649 6951.477124 3.812 Ar I N
+ 14363.3392 6960.249543 3.812 Ar I N
+ 14302.9125 6989.65526 4.541 Th I P
+ 14243.9935 7018.567528 3.82 Th I P
+ 14220.3219 7030.250958 5.172 Ar I N
+ 14142.9024 7068.735373 5.022 Ar I N
+ 14112.0908 7084.169001 4.158 Th I P
+ 14107.0428 7086.703961 3.512 Ar I N
+ 14065.8118 7107.477291 4.422 Ar I N
+ 14032.0848 7124.560689 3.78 Th I P
+ 14029.606 7125.819469 4.422 Ar I N
+ 13981.6036 7150.284392 3.541 Th I P
+ 13964.8977 7158.838154 4.112 Ar I N
+ 13945.307 7168.895141 4.381 Th I P
+ 13936.603 7173.372448 3.424 Th I P
+ 13884.9744 7200.045414 3.397 Th I P
+ 13871.6145 7206.979882 4.872 Ar I N
+ 13869.6392 7208.006314 4.202 Th I P
+ 13860.6336 7212.689565 3.64 Th I P
+ 13848.227 7219.151439 3.319 Th I P
+ 13760.5074 7265.171889 4.112 Ar I N
+ 13723.2369 7284.903267 3.591 Th I P
+ 13672.9139 7311.715419 4.572 Ar I N
+ 13664.8981 7316.004481 4.422 Ar I N
+ 13641.999 7328.285014 3.579 Th I P
+ 13618.0895 7341.151478 3.559 Th I P
+ 13600.1897 7350.813537 3.662 Ar I N
+ 13595.6047 7353.29255 4.872 Ar I N
+ 13560.8874 7372.117865 5.322 Ar I N
+ 13522.6211 7392.979599 4.262 Ar I N
+ 13463.7725 7425.29365 3.962 Ar I N
+ 13457.1632 7428.940503 3.953 Th I P
+ 13454.7857 7430.253226 3.613 Th I P
+ 13445.5306 7435.367797 4.422 Ar I N
+ 13443.8515 7436.29646 3.962 Ar I N
+ 13381.1108 7471.163605 3.512 Ar I N
+ 13362.8836 7481.354454 3.714 Th I P
+ 13358.8283 7483.62556 3.278 Th I P
+ 13357.5778 7484.326163 3.362 Ar I N
+ 13328.4985 7500.6551 2.912 Ar I N
+ 13311.1909 7510.407726 3.062 Ar I N
+ 13284.4818 7525.507848 3.191 Th II P
+ 13242.5909 7549.313767 3.534 Th I P
+ 13107.4063 7627.17483 3.437 Th I P
+ 13104.4744 7628.881301 2.912 Ar I N
+ 13034.1252 7670.056955 3.062 Ar I N
+ 12835.1953 7788.934115 3.957 Th I P
+ 12787.8531 7817.769853 4.232 Th I P
+ 12739.3428 7847.539388 4.205 Th I P
+ 12716.0579 7861.909446 2.462 Ar I N
+ 12709.494 7865.96977 3.715 Th I P
+ 12446.1079 8032.431249 3.788 Th I P
+ 12438.6957 8037.217764 2.912 Ar I N
+ 12424.9392 8046.116362 3.212 Ar I N
+ 12413.8438 8053.307955 3.812 Ar I N
+ 12251.9425 8159.727615 3.821 Th I P
+ 12236.8577 8169.786443 3.49 Th I P
+ 12211.2616 8186.911262 4.063 Th I P
+ 12114.3664 8252.393524 3.404 Th I P
+# 12080.3567 8275.626506 3.874 Th I P
+ 12014.693 8320.855356 3.969 Th I P
+ 11877.8392 8416.726817 4.134 Th I P
+ 11876.0454 8417.998115 3.705 Th I P
+ 11871.4942 8421.225355 4.017 Th I P
+ 11837.3907 8445.486996 3.803 Th I P
+ 11835.9549 8446.511509 4.262 Th I P
+ 11774.9034 8490.305885 3.062 Ar I N
+ 11685.9368 8554.943992 3.327 Th I P
+ 11661.1607 8573.120489 3.885 Th I P
+ 11616.9119 8605.775647 3.812 Ar I N
+ 11597.1239 8620.459617 3.512 Ar I N
+ 11519.687 8678.407764 2.612 Ar I N
+# 11478.9133 8709.234029 3.413 Th I P
+ 11428.0054 8748.030881 3.986 Th I P
+ 11414.6799 8758.243376 3.886 Th I P
+ 11410.1954 8761.685632 3.512 Ar I N
+ 11396.9605 8771.860292 3.263 Ar II W
+ 11361.6956 8799.086895 3.212 Ar I N
+ 11307.5983 8841.183227 3.392 Th I P
+ 11272.3451 8868.833307 3.714 Th I P
+ 11148.145 8967.640269 4.301 Th I P
+ 11048.8279 9048.250039 4.353 Th I P
+# 10901.1562 9170.821948 2.609 Th I P
0. 9203.962 0. XX 0 0
- 10788.9417 9266.206929 3.952 Th I P
- 10777.2341 9276.273096 3.568 Th I P
- 10761.8167 9289.562352 3.804 Th I P
- 10759.5369 9291.530673 5.622 Ar I N
- 10654.3399 9383.272149 3.509 Th I P
- 10615.6654 9417.456971 2.089 Th I P
+ 10788.9417 9266.206929 3.952 Th I P
+ 10777.2341 9276.273096 3.568 Th I P
+ 10761.8167 9289.562352 3.804 Th I P
+ 10759.5369 9291.530673 5.622 Ar I N
+ 10654.3399 9383.272149 3.509 Th I P
+ 10615.6654 9417.456971 2.089 Th I P
# 10599.7474 9431.599536 3.364 Th I P
- 10556.006 9470.681818 3.753 Th I P
- 10551.3297 9474.879195 4.238 Th I P
- 10547.4896 9478.328794 3.169 Ar I W
- 10528.4185 9495.497829 4.069 Th I P
- 10526.5437 9497.189003 4.221 Th I P
- 10514.959 9507.652426 2.574 Th I P
- 10456.0207 9561.245166 3.626 Th I P
- 10411.7224 9601.925116 3.103 Ar II W
- 10381.833 9629.569247 3.551 Th I P
- 10344.0975 9664.69825 3.821 Th I P
- 10329.0176 9678.80832 2.763 Ar II W
-# 10305.8536 9700.563011 4.019 Th I P
- 10257.3196 9746.462788 4.37 Th I P
- 10188.0839 9812.697557 3.945 Th I P
- 10173.8258 9826.449598 4.324 Th I P
- 10166.6109 9833.42312 4.378 Th I P
- 9958.0604 10039.364012 3.764 Th I P
- 9928.7757 10068.974981 3.799 Ar I W
- 9886.9291 10111.592224 3.423 Ar II W
- 9548.4337 10470.052823 6.222 Ar I N
- 9541.1608 10478.033852 5.539 Ar I W
+ 10556.006 9470.681818 3.753 Th I P
+ 10551.3297 9474.879195 4.238 Th I P
+ 10547.4896 9478.328794 3.169 Ar I W
+ 10528.4185 9495.497829 4.069 Th I P
+ 10526.5437 9497.189003 4.221 Th I P
+ 10514.959 9507.652426 2.574 Th I P
+ 10456.0207 9561.245166 3.626 Th I P
+ 10411.7224 9601.925116 3.103 Ar II W
+ 10381.833 9629.569247 3.551 Th I P
+ 10344.0975 9664.69825 3.821 Th I P
+ 10329.0176 9678.80832 2.763 Ar II W
+# 10305.8536 9700.563011 4.019 Th I P
+ 10257.3196 9746.462788 4.37 Th I P
+ 10188.0839 9812.697557 3.945 Th I P
+ 10173.8258 9826.449598 4.324 Th I P
+ 10166.6109 9833.42312 4.378 Th I P
+ 9958.0604 10039.364012 3.764 Th I P
+ 9928.7757 10068.974981 3.799 Ar I W
+ 9886.9291 10111.592224 3.423 Ar II W
+ 9548.4337 10470.052823 6.222 Ar I N
+ 9541.1608 10478.033852 5.539 Ar I W
0. 5231.159 0. XX 0 0
0. 5312.002 0. XX 0 0
# 0. 5326.975 0. XX 0 0
@@ -475,17 +475,17 @@
0. 3868.530 0. XX 0 0
0. 3886.916 0. XX 0 0
0. 3898.437 0. XX 0 0
-# 12669.0601 7891.074479 3.962 Ar I N
+# 12669.0601 7891.074479 3.962 Ar I N
0. 6032.124 0. XX 0 0
0. 5912.084 0. XX 0 0
0. 5804.141 0. XX 0 0
- 17234.1342 5800.829807 4.5 Th I L
- 18047.9343 5539.2618 4.455 Th I L
+ 17234.1342 5800.829807 4.5 Th I L
+ 18047.9343 5539.2618 4.455 Th I L
# 0. 8478.358 0. XX 0 0
# 0. 8478.358 0. XX 0 0
0. 7567.741 0. XX 0 0
- 12000.856 8330.449354 4.426 Th I P
- 0. 9985.050 0. XX 0 0
- 0. 9970.463 0. XX 0 0
- 0. 9987.635 0. XX 0 0
- 0. 9993.863 0. XX 0 0
+ 12000.856 8330.449354 4.426 Th I P
+ 0. 9985.050 0. XX 0 0
+ 0. 9970.463 0. XX 0 0
+ 0. 9987.635 0. XX 0 0
+ 0. 9993.863 0. XX 0 0
diff --git a/geminidr/ghost/lookups/Polyfit/westinhouse.dat b/geminidr/ghost/lookups/Polyfit/westinhouse.dat
index 4cb8b00fb3..eefef547ad 100644
--- a/geminidr/ghost/lookups/Polyfit/westinhouse.dat
+++ b/geminidr/ghost/lookups/Polyfit/westinhouse.dat
@@ -94,21 +94,21 @@
0 3265.5778 1 ThII
0 3271.1199 1 Th
0 3271.8912 1 ThI
-0 3272.0268 1 ThI
+0 3272.0268 1 ThI
0 3273.9157 1 ThII
-0 3275.0676 1 ThII
+0 3275.0676 1 ThII
0 3276.1712 1 Th
-0 3280.3713 1 ThII
+0 3280.3713 1 ThII
0 3281.0488 1 ThI
0 3281.2731 1 Th
0 3281.7016 1 ArII
-0 3282.6166 1 Th
+0 3282.6166 1 Th
0 3282.9795 1 ThII
-0 3285.7525 1 ThI
+0 3285.7525 1 ThI
0 3286.5829 1 ThII
-0 3287.7893 1 ThII
+0 3287.7893 1 ThII
0 3290.5996 1 Th
-0 3291.7394 1 ThII
+0 3291.7394 1 ThII
0 3292.5209 1 ThII
0 3293.2257 1 Th
0 3293.9481 1 ThII
@@ -116,41 +116,41 @@
0 3296.6073 1 ThII
0 3297.3748 1 ThII
0 3297.8333 1 ThII
-0 3298.0498 1 ThI
+0 3298.0498 1 ThI
0 3299.6687 1 ThII
0 3301.6511 1 ThI
0 3304.2383 1 ThI
-0 3305.3036 1 ThI
+0 3305.3036 1 ThI
0 3307.2283 1 ArII
0 3308.4740 1 Th
0 3309.3654 1 ThI
-0 3310.1988 1 Th
+0 3310.1988 1 Th
0 3313.6784 1 Th
-0 3314.8268 1 ThII
+0 3314.8268 1 ThII
0 3319.9101 1 ThI
0 3320.3004 1 ThII
0 3320.4763 1 ThI
-0 3321.4508 1 ThII
+0 3321.4508 1 ThII
0 3321.5741 1 ThI
-0 3322.0933 1 ThI
+0 3322.0933 1 ThI
0 3324.7527 1 ThII
0 3325.1207 1 ThII
0 3326.4652 1 ThII
-0 3327.1931 1 ThI
+0 3327.1931 1 ThI
0 3329.7284 1 ThI
-0 3330.4770 1 ThI
+0 3330.4770 1 ThI
0 3333.1290 1 ThI
-0 3334.6041 1 ThII
+0 3334.6041 1 ThII
0 3335.0639 1 ThII
-0 3336.1618 1 ThII
-0 3337.8703 1 ThII
+0 3336.1618 1 ThII
+0 3337.8703 1 ThII
0 3338.3970 1 ThII
-0 3340.7254 1 ThI
+0 3340.7254 1 ThI
0 3343.1644 1 ThI
0 3343.6183 1 ThII
0 3345.1709 1 ThI
0 3345.8804 1 Th
-0 3346.5560 1 ThII
+0 3346.5560 1 ThII
0 3346.9648 1 ThI
0 3347.9923 1 Th
0 3348.7684 1 ThI
@@ -163,30 +163,30 @@
0 3355.1061 1 ThI
0 3355.2587 1 ThII
0 3355.5631 1 ThII
-0 3358.6020 1 ThII
+0 3358.6020 1 ThII
0 3359.7569 1 ThII
0 3360.3735 1 ThII
0 3360.9982 1 ThI
0 3361.1979 1 ThI
-0 3361.6190 1 ThII
+0 3361.6190 1 ThII
0 3361.7367 1 ThII
0 3362.6762 1 ThII
-0 3364.6855 1 ThII
+0 3364.6855 1 ThII
0 3365.1376 1 ThI
-0 3365.3383 1 ThI
+0 3365.3383 1 ThI
0 3366.5171 1 ThII
0 3367.5822 1 ThI
0 3367.8189 1 ThII
0 3371.7967 1 ThII
-0 3372.8230 1 Th
+0 3372.8230 1 Th
0 3373.4925 1 ThI
0 3374.5814 1 ThII
0 3374.9749 1 ThI
0 3376.4359 1 ArII
0 3378.5734 1 ThII
-0 3380.8595 1 ThI
+0 3380.8595 1 ThI
0 3383.1068 1 ThII
-0 3385.5316 1 ThII
+0 3385.5316 1 ThII
0 3386.5006 1 ThII
0 3387.9205 1 ThI
0 3388.5309 1 ArII
@@ -194,116 +194,116 @@
0 3389.6405 1 ThII
0 3390.3681 1 Th
0 3391.8713 1 ThI
-0 3392.0349 1 ThII
+0 3392.0349 1 ThII
0 3393.4215 1 ThI
0 3393.9929 1 ThI
0 3394.7970 1 ThII
-0 3396.7278 1 ThI
+0 3396.7278 1 ThI
0 3397.5161 1 ThI
-0 3398.5448 1 ThI
+0 3398.5448 1 ThI
0 3401.7110 1 ThI
0 3402.0264 1 ThII
-0 3402.6952 1 ThII
+0 3402.6952 1 ThII
0 3404.6508 1 ThII
-0 3405.5584 1 ThI
+0 3405.5584 1 ThI
0 3406.2418 1 ThII
0 3407.8302 1 ThI
0 3408.7499 1 ThI
0 3409.2699 1 ThII
-0 3410.0756 1 ThI
+0 3410.0756 1 ThI
0 3413.0130 1 ThI
-0 3415.8846 1 ThI
+0 3415.8846 1 ThI
0 3417.4978 1 ThI
0 3418.7755 1 ThII
0 3419.1733 1 ThII
-0 3421.2100 1 ThI
-0 3422.6561 1 ThI
-0 3423.1290 1 Th
-0 3423.9897 1 ThI
+0 3421.2100 1 ThI
+0 3422.6561 1 ThI
+0 3423.1290 1 Th
+0 3423.9897 1 ThI
0 3425.4348 1 ThI
0 3425.9436 1 ThII
-0 3427.0923 1 ThI
+0 3427.0923 1 ThI
0 3428.6221 1 ThI
0 3428.7144 1 ThI
-0 3428.9992 1 ThI
+0 3428.9992 1 ThI
0 3430.4175 1 Th
-0 3431.8104 1 ThII
-0 3433.9988 1 ThII
-0 3434.7271 1 ThI
-0 3435.9771 1 ThII
-0 3436.7272 1 ThI
-0 3437.3071 1 ThI
+0 3431.8104 1 ThII
+0 3433.9988 1 ThII
+0 3434.7271 1 ThI
+0 3435.9771 1 ThII
+0 3436.7272 1 ThI
+0 3437.3071 1 ThI
0 3438.9503 1 ThII
-0 3439.3987 1 ThI
+0 3439.3987 1 ThI
0 3439.7118 1 ThII
0 3441.0359 1 ThII
0 3441.3647 1 ThII
0 3441.5268 1 ThI
-0 3442.5790 1 ThI
+0 3442.5790 1 ThI
0 3445.2173 1 ThII
0 3445.7441 1 ThII
-0 3446.5474 1 ThI
+0 3446.5474 1 ThI
0 3448.9487 1 ThI
0 3449.2871 1 ThII
0 3449.6448 1 ThII
-0 3451.7023 1 ThI
-0 3452.6820 1 ThII
+0 3451.7023 1 ThI
+0 3452.6820 1 ThII
0 3454.0952 1 ArII
-0 3455.6130 1 ThI
-0 3457.0691 1 ThI
+0 3455.6130 1 ThI
+0 3457.0691 1 ThI
0 3461.0187 1 ThI
0 3461.2172 1 ThI
-0 3462.8505 1 ThII
+0 3462.8505 1 ThII
0 3463.7197 1 ThII
0 3464.1272 1 ArII
-0 3465.0626 1 ThI
-0 3465.7650 1 ThII
+0 3465.0626 1 ThI
+0 3465.7650 1 ThII
0 3466.5383 1 ThI
0 3466.6459 1 ThI
-0 3468.2198 1 ThII
-0 3469.3454 1 ThI
-0 3469.9208 1 ThII
+0 3468.2198 1 ThII
+0 3469.3454 1 ThI
+0 3469.9208 1 ThII
0 3470.5675 1 ThI
0 3471.0005 1 ThI
-0 3471.2186 1 ThI
-0 3471.9593 1 ThI
+0 3471.2186 1 ThI
+0 3471.9593 1 ThI
0 3476.3852 1 ThI
0 3476.7474 1 ArII
0 3477.7042 1 ThII
0 3478.2324 1 ArII
0 3478.4635 1 ThII
-0 3479.1725 1 ThII
+0 3479.1725 1 ThII
0 3479.6847 1 ThI
0 3480.0525 1 ThI
0 3480.5055 1 ArII
0 3482.5482 1 ThII
-0 3482.7613 1 ThII
-0 3484.0800 1 ThII
+0 3482.7613 1 ThII
+0 3484.0800 1 ThII
0 3485.2124 1 ThII
-0 3486.5512 1 ThI
+0 3486.5512 1 ThI
0 3487.8436 1 ThII
0 3488.8338 1 ThI
0 3489.1841 1 ThI
-0 3489.5076 1 ThI
+0 3489.5076 1 ThI
0 3490.4524 1 ThII
0 3490.8733 1 ArII
0 3491.2439 1 ArII
-0 3491.5360 1 ArII
-0 3491.9000 1 ThI
+0 3491.5360 1 ArII
+0 3491.9000 1 ThI
0 3493.2513 1 Th
-0 3493.5185 1 ThII
-0 3495.6998 1 ThI
+0 3493.5185 1 ThII
+0 3495.6998 1 ThI
0 3496.0604 1 Th
-0 3496.8107 1 ThI
+0 3496.8107 1 ThI
0 3497.2628 1 ThII
-0 3498.0098 1 ThII
-0 3498.6210 1 ThI
+0 3498.0098 1 ThII
+0 3498.6210 1 ThI
0 3499.6829 1 Th
0 3499.8218 1 ThI
0 3499.9866 1 ThII
0 3500.1032 1 Th
0 3501.4559 1 ThII
-0 3501.8666 1 ThI
+0 3501.8666 1 ThI
0 3502.9637 1 ThI
0 3503.6144 1 ThII
0 3503.7859 1 ThI
@@ -313,49 +313,49 @@
0 3507.5464 1 Th
0 3509.0889 1 ThI
0 3509.7785 1 ArII
-0 3511.1574 1 ThI
-0 3511.5620 1 ThII
+0 3511.1574 1 ThI
+0 3511.5620 1 ThII
0 3512.7425 1 ThII
0 3514.3877 1 ArII
0 3514.9621 1 ThII
0 3516.3545 1 Th
0 3516.8243 1 ThII
-0 3518.4040 1 ThI
+0 3518.4040 1 ThI
0 3518.8858 1 ThI
0 3519.9936 1 ArII
0 3521.0595 1 ThI
0 3521.2601 1 ArII
-0 3523.5061 1 ThI
+0 3523.5061 1 ThI
0 3523.7585 1 ThI
0 3524.1787 1 ThI
0 3524.7091 1 ThI
-0 3526.6342 1 ThI
+0 3526.6342 1 ThI
0 3527.0005 1 Th
0 3527.3224 1 ThI
-0 3528.4116 1 ThI
+0 3528.4116 1 ThI
0 3528.8202 1 ThII
-0 3528.9544 1 ThII
-0 3529.3859 1 ThI
-0 3530.5148 1 ThI
-0 3531.4505 1 ThI
-0 3533.1826 1 ThI
+0 3528.9544 1 ThII
+0 3529.3859 1 ThI
+0 3530.5148 1 ThI
+0 3531.4505 1 ThI
+0 3533.1826 1 ThI
0 3535.3196 1 ArII
-0 3536.0108 1 ThI
+0 3536.0108 1 ThI
0 3537.1597 1 ThII
0 3539.3223 1 ThII
-0 3539.5872 1 ThII
+0 3539.5872 1 ThII
0 3539.8401 1 ThI
0 3541.6159 1 ThII
-0 3542.4979 1 ThI
+0 3542.4979 1 ThI
0 3543.1475 1 ArII
-0 3544.0179 1 ThI
+0 3544.0179 1 ThI
0 3545.2851 1 ThII
0 3545.5956 1 ArII
-0 3545.8450 1 ArII
-0 3547.3376 1 ThI
+0 3545.8450 1 ArII
+0 3547.3376 1 ThI
0 3547.9175 1 Th
0 3548.5144 1 ArII
-0 3549.5959 1 ThI
+0 3549.5959 1 ThI
0 3550.7184 1 ThI
0 3551.4019 1 ThI
0 3553.1103 1 ThII
@@ -368,7 +368,7 @@
0 3559.5081 1 ArII
0 3561.0304 1 ArII
0 3561.7809 1 ThI
-0 3562.1930 1 ArII
+0 3562.1930 1 ArII
0 3565.0298 1 ArII
0 3565.6042 1 ThI
0 3567.0471 1 ThII
@@ -379,7 +379,7 @@
0 3570.3577 1 ThI
0 3570.5239 1 ThI
0 3571.5731 1 ThII
-0 3572.3923 1 ThII
+0 3572.3923 1 ThII
0 3573.2196 1 ThII
0 3575.1263 1 ThI
0 3575.3018 1 ThI
@@ -393,8 +393,8 @@
0 3581.7579 1 ThI
0 3582.0091 1 ThII
0 3582.3546 1 ArII
-0 3583.1022 1 ThI
-0 3584.1756 1 ThI
+0 3583.1022 1 ThI
+0 3584.1756 1 ThI
0 3585.0509 1 ThII
0 3585.7702 1 ThII
0 3588.4407 1 ArII
@@ -404,8 +404,8 @@
0 3589.9941 1 ThI
0 3590.5250 1 Th
0 3590.9253 1 ThI
-0 3591.4524 1 ThI
-0 3592.7794 1 ThI
+0 3591.4524 1 ThI
+0 3592.7794 1 ThI
0 3594.1111 1 ThII
0 3594.7216 1 Th
0 3594.9856 1 ThI
@@ -413,7 +413,7 @@
0 3597.4955 1 Th
0 3598.1199 1 ThI
0 3598.5247 1 ThI
-0 3599.7240 1 ThI
+0 3599.7240 1 ThI
0 3600.4323 1 ThI
0 3601.0344 1 ThII
0 3601.5093 1 ArII
@@ -451,16 +451,16 @@
0 3622.3358 1 Th
0 3622.7954 1 ThI
0 3623.7725 1 ThI
-0 3624.4720 1 ThI
+0 3624.4720 1 ThI
0 3624.8953 1 ThII
-0 3625.0293 1 ThI
+0 3625.0293 1 ThI
0 3625.1496 1 ThI
-0 3625.6280 1 ThII
+0 3625.6280 1 ThII
0 3625.8933 1 ThI
-0 3626.9390 1 ThI
+0 3626.9390 1 ThI
0 3629.8503 1 Th
0 3632.8303 1 ThI
-0 3634.5822 1 ThI
+0 3634.5822 1 ThI
0 3634.8124 1 ArII
0 3635.2419 1 ThII
0 3635.4195 1 ThII
@@ -468,14 +468,14 @@
0 3636.1728 1 ThII
0 3636.5667 1 ThII
0 3636.8345 1 Th
-0 3637.0310 1 ArII
+0 3637.0310 1 ArII
0 3637.5557 1 ThII
0 3638.3192 1 ThI
0 3638.6444 1 ThI
0 3639.4469 1 ThII
0 3639.8329 1 ArII
0 3641.9647 1 ThI
-0 3642.2490 1 ThI
+0 3642.2490 1 ThI
0 3642.5729 1 ThI
0 3643.5123 1 ThI
0 3643.8250 1 ThI
@@ -493,7 +493,7 @@
0 3651.5716 1 ThII
0 3652.1683 1 ThII
0 3652.5372 1 ThII
-0 3654.4618 1 ThI
+0 3654.4618 1 ThI
0 3655.1256 1 ThI
0 3655.2782 1 ArII
0 3656.0498 1 ArII
@@ -529,13 +529,13 @@
0 3673.2645 1 ArII
0 3673.7935 1 ThII
0 3674.0147 1 ThI
-0 3674.8910 1 ThI
+0 3674.8910 1 ThI
0 3675.1372 1 ThI
0 3675.5675 1 ThII
0 3675.7893 1 ThI
0 3675.9592 1 ThI
0 3676.1424 1 Th
-0 3676.6897 1 ThII
+0 3676.6897 1 ThII
0 3677.9139 1 ThII
0 3678.0483 1 ThII
0 3678.2701 1 ArII
@@ -551,11 +551,11 @@
0 3682.4863 1 ThI
0 3683.4931 1 ThI
0 3684.9329 1 ThI
-0 3685.5870 1 ThI
+0 3685.5870 1 ThI
0 3686.9812 1 ThII
0 3687.1943 1 ThI
0 3687.4936 1 Th
-0 3687.6700 1 ThII
+0 3687.6700 1 ThII
0 3687.9841 1 ThI
0 3688.7604 1 ThII
0 3690.1158 1 Th
@@ -568,7 +568,7 @@
0 3693.2473 1 ThI
0 3693.5238 1 Th
0 3693.9946 1 ThI
-0 3694.1785 1 Th
+0 3694.1785 1 Th
0 3694.3651 1 ThI
0 3694.7854 1 ThII
0 3695.2889 1 ThI
@@ -593,8 +593,8 @@
0 3706.7672 1 ThI
0 3707.0036 1 Th
0 3707.4282 1 ThII
-0 3708.7530 1 ThII
-0 3709.8620 1 ThI
+0 3708.7530 1 ThII
+0 3709.8620 1 ThI
0 3711.3041 1 ThII
0 3711.6229 1 ThI
0 3711.8332 1 ThI
@@ -621,7 +621,7 @@
0 3724.5165 1 ArII
0 3725.3932 1 Th
0 3726.7246 1 ThII
-0 3727.6120 1 ThI
+0 3727.6120 1 ThI
0 3727.9027 1 ThI
0 3729.3087 1 ArII
0 3729.8361 1 Th
@@ -634,10 +634,10 @@
0 3735.5109 1 ThII
0 3736.9026 1 Th
0 3737.5125 1 ThI
-0 3737.8890 1 ArII
+0 3737.8890 1 ArII
0 3738.8439 1 ThII
0 3740.8551 1 ThII
-0 3741.1830 1 ThII
+0 3741.1830 1 ThII
0 3742.2773 1 Th
0 3742.9234 1 ThI
0 3743.5083 1 Th
@@ -648,19 +648,19 @@
0 3745.6591 1 Th
0 3745.9706 1 ThI
0 3746.9133 1 ArII
-0 3747.5390 1 ThII
+0 3747.5390 1 ThII
0 3748.2838 1 ThII
0 3749.0843 1 ThI
0 3749.6183 1 ThI
0 3750.4939 1 Th
0 3750.6602 1 ThII
0 3751.0219 1 ThI
-0 3752.5689 1 ThII
-0 3753.2421 1 ThI
+0 3752.5689 1 ThII
+0 3753.2421 1 ThI
0 3753.5177 1 ArII
0 3754.0308 1 ThI
0 3754.2884 1 Th
-0 3754.5930 1 ThII
+0 3754.5930 1 ThII
0 3755.2121 1 ThI
0 3755.9869 1 Th
0 3756.2941 1 ThI
@@ -674,16 +674,16 @@
0 3761.7044 1 ThI
0 3762.4166 1 ThII
0 3763.5053 1 ArII
-0 3765.2700 1 ArII
+0 3765.2700 1 ArII
0 3766.1186 1 ArII
-0 3766.4473 1 ThI
+0 3766.4473 1 ThI
0 3767.0819 1 Th
0 3767.9007 1 Th
0 3768.4359 1 ThII
0 3769.5854 1 Th
-0 3770.0560 1 ThI
+0 3770.0560 1 ThI
0 3770.3687 1 ArI
-0 3770.5200 1 ArII
+0 3770.5200 1 ArII
0 3771.3708 1 ThI
0 3771.6150 1 ThI
0 3772.2369 1 ThII
@@ -696,7 +696,7 @@
0 3775.9028 1 ThII
0 3776.2711 1 ThI
0 3776.6239 1 ThI
-0 3777.4167 1 ThI
+0 3777.4167 1 ThI
0 3777.7473 1 ThI
0 3779.5624 1 Th
0 3780.8398 1 ArII
@@ -710,30 +710,30 @@
0 3785.2804 1 Th
0 3785.6002 1 ThII
0 3786.3824 1 ArII
-0 3786.883 1 Th
+0 3786.883 1 Th
0 3789.168 1 Th
0 3790.356 1 Th
0 3790.795 1 Th
0 3792.374 1 Th
-0 3792.730 1 Th
+0 3792.730 1 Th
0 3794.151 1 Th
0 3794.318 1 Th
-0 3795.3800 1
+0 3795.3800 1
0 3798.103 1 Th
-0 3799.3820 1 ArII
+0 3799.3820 1 ArII
0 3800.198 1 Th
0 3801.443 1 Th
-0 3803.0750 1 ThI
+0 3803.0750 1 ThI
0 3803.984 1 Th
0 3805.314 1 Th
-0 3805.820 1 Th
+0 3805.820 1 Th
0 3807.874 1 Th
0 3808.129 1 Th
0 3808.5748 1 ArII
0 3809.4561 1 ArII
0 3809.835 1 Th
0 3813.0678 1 ThII
-0 3816.1666 1 Th
+0 3816.1666 1 Th
0 3817.4767 1 Th
0 3818.6855 1 ThI
0 3820.7926 1 ThI
@@ -752,9 +752,9 @@
0 3830.0606 1 ThI
0 3830.5100 1 ThII
0 3830.7736 1 ThI
-0 3831.6398 1 ThI
+0 3831.6398 1 ThI
0 3832.3035 1 Th
-0 3833.0860 1 Th
+0 3833.0860 1 Th
0 3834.6787 1 ArI
0 3835.7111 1 ThI
0 3836.5851 1 ThI
@@ -776,7 +776,7 @@
0 3847.6199 1 ThI
0 3849.1832 1 Th
0 3849.9114 1 ThI
-0 3850.1340 1 ThII
+0 3850.1340 1 ThII
0 3850.5813 1 ArII
0 3851.1583 1 ThI
0 3852.1353 1 ThI
@@ -1011,7 +1011,7 @@
0 4032.5951 1 ThI
0 4034.2461 1 ThII
0 4034.9218 1 ThII
-0 4035.4600 1 ArII
+0 4035.4600 1 ArII
0 4036.0479 1 ThI
0 4036.5652 1 ThII
0 4037.5614 1 ThI
@@ -1058,7 +1058,7 @@
0 4070.2383 1 ThI
0 4070.7835 1 ArII
0 4071.7513 1 ThI
-0 4072.0047 1 ArII
+0 4072.0047 1 ArII
0 4072.3849 1 ArII
0 4072.6284 1 Th
0 4073.8563 1 ThI
@@ -1352,7 +1352,7 @@
0 4345.1680 1 ArI
0 4346.4367 1 ThI
0 4347.6385 1 ThI
-0 4348.0640 1 ArII
+0 4348.0640 1 ArII
0 4348.5982 1 ThI
0 4349.0722 1 ThI
0 4350.2717 1 ThI
@@ -1540,7 +1540,7 @@
0 4519.2592 1 ThI
0 4521.1939 1 ThI
0 4521.7407 1 Th
-0 4522.3230 1 ArI
+0 4522.3230 1 ArI
0 4522.7839 1 ThII
0 4524.1289 1 ThI
0 4524.8379 1 ThII
diff --git a/geminidr/ghost/lookups/keyword_comments.py b/geminidr/ghost/lookups/keyword_comments.py
index 668bc430a9..d7c65186db 100644
--- a/geminidr/ghost/lookups/keyword_comments.py
+++ b/geminidr/ghost/lookups/keyword_comments.py
@@ -13,4 +13,4 @@
"ARCIM_A": "'After' arc image used",
"ARCWT_B": "Weight factor of before arc (0 <= WT_B <= 1)",
"ARCWT_A": "Weight factor of after arc (0 <= WT_A <= 1)",
-}
\ No newline at end of file
+}
diff --git a/geminidr/ghost/lookups/targetn_dict.py b/geminidr/ghost/lookups/targetn_dict.py
index 88ced6ba5e..4191a1b075 100644
--- a/geminidr/ghost/lookups/targetn_dict.py
+++ b/geminidr/ghost/lookups/targetn_dict.py
@@ -3,4 +3,4 @@
'unknown': 0,
'sky': 1,
'object': 2,
-}
\ No newline at end of file
+}
diff --git a/geminidr/ghost/polyfit/__init__.py b/geminidr/ghost/polyfit/__init__.py
index f694db6232..4d7e69d8b4 100644
--- a/geminidr/ghost/polyfit/__init__.py
+++ b/geminidr/ghost/polyfit/__init__.py
@@ -12,5 +12,3 @@
from .ghost import GhostArm
from .slitview import SlitView
from .extract import Extractor
-
-
diff --git a/geminidr/ghost/polyfit/extract.py b/geminidr/ghost/polyfit/extract.py
index 3aa0af0ee2..c1247de297 100644
--- a/geminidr/ghost/polyfit/extract.py
+++ b/geminidr/ghost/polyfit/extract.py
@@ -100,10 +100,10 @@ def bin_models(self):
Bin the models to match data binning.
Function used to artificially bin the models so that they apply to
- whatever binning mode the data are. This requires knowledge of the
+ whatever binning mode the data are. This requires knowledge of the
x and y binning from the arm class, which is assumed this class
- inherits.
-
+ inherits.
+
The binning is done as a running average, in which the
values for each binned pixel are assumed to be equivalent to the average
value of all physical pixels that are part of the binned pixel.
@@ -159,7 +159,7 @@ def bin_models(self):
# Now, naturally, the actualy x values must change according to the
# xbin
x_map = (x_map + 0.5) / self.arm.xbin - 0.5
- # The w_map and blaze remain unchanged by this.
+ # The w_map and blaze remain unchanged by this.
# Now we must modify the values of the [0,0] and [1,1] elements of
# each matrix according to the binning to reflect the now size of
@@ -183,11 +183,11 @@ def bin_models(self):
def make_pixel_model(self, input_image=None):
"""
- Based on the xmod and the slit viewer image, create a complete model image,
- where flux versus wavelength pixel is constant. As this is designed for
+ Based on the xmod and the slit viewer image, create a complete model image,
+ where flux versus wavelength pixel is constant. As this is designed for
comparing to flats, normalisation is to the median of the non-zero pixels in the
profile.
-
+
Parameters
----------
input_iage: :obj:`numpy.ndarray`, optional
@@ -195,7 +195,7 @@ def make_pixel_model(self, input_image=None):
If this is given, then the pixel model is scaled according to the input flux
for every order and wavelength. Note that this isn't designed to reproduce
dual-object or object+sky data.
-
+
Returns
-------
model: :obj:`numpy.ndarray`
@@ -212,19 +212,19 @@ def make_pixel_model(self, input_image=None):
ny = x_map.shape[1]
nm = x_map.shape[0]
nx = int(self.arm.szx / self.arm.xbin)
-
+
profiles = [self.slitview.slit_profile(arm=self.arm.arm)]
-
+
n_slitpix = profiles[0].shape[0]
profile_y_microns = (np.arange(n_slitpix) -
n_slitpix / 2 + 0.5) * self.slitview.microns_pix
-
+
if self.transpose:
pixel_model = np.zeros((ny, nx))
else:
pixel_model = np.zeros((nx, ny))
-
- # Loop through all orders then through all y pixels.
+
+ # Loop through all orders then through all y pixels.
print(" Creating order ", end="")
for i in range(nm):
print(f"{self.arm.m_min+i}...", end="")
@@ -246,7 +246,7 @@ def make_pixel_model(self, input_image=None):
pixel_model[j, np.minimum(x_ix, nx-1)] = phi[0]
else:
pixel_model[np.minimum(x_ix, nx-1), j] = phi[0]
-
+
return pixel_model
def new_extract(self, data=None, correct_for_sky=True, use_sky=True,
@@ -631,7 +631,7 @@ def find_lines(self, flux, arclines, hw=12,
THIS FUNCTION IS NO LONGER USED!
Find lines near the locations of input arc lines.
-
+
This is done with Gaussian fits near the location of where lines are
expected to be. An initial decent model must be present, likely
the result of a manual adjustment.
@@ -653,7 +653,7 @@ def find_lines(self, flux, arclines, hw=12,
If true, show display of lines and where they are predicted to fall
plots: bool, optional
- If true, plot every gaussian fit along the way for visual inspection
+ If true, plot every gaussian fit along the way for visual inspection
Returns
-------
@@ -756,7 +756,7 @@ def find_lines(self, flux, arclines, hw=12,
plt.show()
# This part allows the user to inspect the global fit and
- # position finding.
+ # position finding.
if inspect:
plt.plot(xpos, ix, 'bx')
plt.plot(xpos, ypos, 'rx')
diff --git a/geminidr/ghost/polyfit/ghost.py b/geminidr/ghost/polyfit/ghost.py
index c66b304725..c5f7f9e08f 100644
--- a/geminidr/ghost/polyfit/ghost.py
+++ b/geminidr/ghost/polyfit/ghost.py
@@ -27,8 +27,8 @@
import numpy as np
from .polyspect import Polyspect
-GHOST_BLUE_SZX = 4112 # 4096 #
-GHOST_BLUE_SZY = 4096 # 4112 #
+GHOST_BLUE_SZX = 4112 # 4096 #
+GHOST_BLUE_SZY = 4096 # 4112 #
GHOST_RED_SZX = 6160
GHOST_RED_SZY = 6144
@@ -78,7 +78,7 @@ def __init__(self, arm='blue', mode='std',
| ``lenslet_high_size`` and | Unused |
| ``lenslet_std_size`` | |
+------------------------------+---------------------------------------+
-
+
Attributes
----------
arm: str
@@ -160,7 +160,7 @@ def bin_data(self, data):
----------
data: :obj:`numpy.ndarray`
The (unbinned) data to be binned
-
+
Raises
------
UserWarning
@@ -212,9 +212,9 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
a different slit magnification corresponding to each order stored in the
list orders.
- For each of these orders, a convolution is done in 2D by interpolating
- the magnified slit profile with the slit coordinates, normalising it and
- inverse Fourier transforming the product between the flat transform and the
+ For each of these orders, a convolution is done in 2D by interpolating
+ the magnified slit profile with the slit coordinates, normalising it and
+ inverse Fourier transforming the product between the flat transform and the
shifted slit profile::
# Create the slit model.
@@ -244,25 +244,25 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
----------
flat: :obj:`numpy.ndarray`
A flat field image from the spectrograph
-
+
slit_profile: :obj:`numpy.ndarray`, optional
A slit profile as a 1D array with the slit profile fiber amplitudes.
If none is supplied this function will assume identical fibers and
create one to be used in the convolution based on default parameters
specified in the ghost class.
-
+
spatpars: :obj:`numpy.ndarray`, optional
- The 2D polynomial parameters for the slit spatial scale.
+ The 2D polynomial parameters for the slit spatial scale.
Required if slit_profile is not None.
-
+
microns_pix: float, optional
The slit scale in microns per pixel.
Required if slit_profile is not None.
-
+
xpars: :obj:`numpy.ndarray`, optional
The 2D polynomial parameters for the x (along-slit) coordinate.
Required if slit_profile is not None.
-
+
num_conv: int, optional, optional
The number of different convolution functions to use for different
orders.
@@ -308,7 +308,7 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
# Fourier transform the flat for convolution
im_fft = np.fft.rfft(flat, axis=0)
- # Create a x baseline for convolution
+ # Create a x baseline for convolution
xbase = flat.shape[0]
profilex = np.arange(xbase) - xbase // 2
@@ -343,7 +343,7 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
# If a profile is given, do this instead.
else:
slit_profile_cor = slit_profile.copy()
-
+
flat_conv = np.zeros_like(flat)
flat_conv_cube = np.zeros((num_conv, flat.shape[0], flat.shape[1]))
@@ -365,7 +365,7 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
# The x pixel values, just for this order
x_map[j] = self.evaluate_poly(xpars)[orders[j] - self.m_min]
-
+
for i in range(im_fft.shape[1]):
#CRH 20220901 Old Create the slit model.
#mod_slit = np.interp(profilex * spat_scale[i], slit_coord,
@@ -388,8 +388,8 @@ def slit_flat_convolve(self, flat, slit_profile=None, spatpars=None,
#mod_slit2_ft = (np.fft.rfft(np.fft.fftshift(mod_slit2), n=flat.shape[0]))
# Normalise the slit model and Fourier transform for
- # convolution. This has to be an l2 norm, in order to
- # work with variable slit lengths and mean that
+ # convolution. This has to be an l2 norm, in order to
+ # work with variable slit lengths and mean that
# the correlation peak is the least squares fit.
#mod_slit /= np.sum(mod_slit)
#mod_slit /= np.sqrt(np.sum(mod_slit ** 2))
diff --git a/geminidr/ghost/polyfit/polyspect.py b/geminidr/ghost/polyfit/polyspect.py
index 77c147f2e6..283a6ce197 100644
--- a/geminidr/ghost/polyfit/polyspect.py
+++ b/geminidr/ghost/polyfit/polyspect.py
@@ -138,14 +138,14 @@ def evaluate_poly(self, params, data=None):
------
TypeError
If required input ``params`` is not provided.
-
+
Returns
-------
evaluation: :obj:`numpy.ndarray`
This is a (orders,yvalues) array containing the polynomial
evaluation at every point. If data is provided, the returned
- array has the same shape.
+ array has the same shape.
"""
# params needs to be a np.array
@@ -160,7 +160,7 @@ def evaluate_poly(self, params, data=None):
# Create the y_values and orders.
# This is essentially the purpose of creating this function. These
# parameters can be easily derived from class properties and should
- # not have to be provided as inputs.
+ # not have to be provided as inputs.
y_values, orders = np.meshgrid(np.arange(self.szy),
np.arange(self.m_max -
self.m_min + 1) +
@@ -221,8 +221,8 @@ def fit_resid(self, params, orders, y_values, data, ydeg=3, xdeg=3,
xdeg: int
Polynomial degree as a function of y
sigma: :obj:`numpy.ndarray` array
- Array containing uncertainties for each point. Must have the same
- format as data.
+ Array containing uncertainties for each point. Must have the same
+ format as data.
Returns
-------
@@ -451,7 +451,7 @@ def adjust_x(self, old_x, image, num_xcorr=21):
usefulness of this function can be debated, but ultimately it won't
create any problems.
-
+
Parameters
----------
old_x: :obj:`numpy.ndarray`
@@ -554,7 +554,7 @@ def fit_x_to_image(self, data, xparams, decrease_dim=8, sampling=1,
UserWarning
If the decreased dimension is not possible due to rounding off
errors
-
+
Returns
-------
fitted_parameters: :obj:`numpy.ndarray`
@@ -696,9 +696,9 @@ def fit_to_x(self, x_to_fit, init_mod, y_values=None, sigma=None,
Initial model parameters
y_values: :obj:`numpy.ndarray`, optional
Y positions on the CCD. If none given, defaults to the spectral
- direction pixel indices.
+ direction pixel indices.
sigma: :obj:`numpy.ndarray`, optional
- Uncertainties in the y_values, for weighted fit purposes.
+ Uncertainties in the y_values, for weighted fit purposes.
decrease_dim: int, optional
The factor of decreased dimentionality for the fit.
This needs to be an exact factor of the y size.
@@ -797,7 +797,7 @@ def spectral_format_with_matrix(self, xmod, wavemod, spatmod=None,
return_arrays=False):
"""
Create a spectral format, including a detector-to-slit matrix, at
- every point.
+ every point.
The input parameters represent the polynomial coefficients for second
order descriptions of how the spectral and spatial scales vary as a
@@ -1003,7 +1003,7 @@ def manual_model_adjust(self, data, xparams, model='position', wparams=None,
overlaid on top of the result of convolving the flat with a slit
profile in 2D which just reveals the location of the middle of the
orders.
-
+
It uses :any:`matplotlib` slider widgets to adjust a polynomial model
representation overlaid on top of an image. A ``data`` array is provided
containing an image, and the model parameters needed to determine the
@@ -1027,7 +1027,7 @@ def manual_model_adjust(self, data, xparams, model='position', wparams=None,
documented in the :any:`matplotlib` documentation.
The function returns the changed model parameters.
-
+
Parameters
----------
data: :obj:`numpy.ndarray`
@@ -1069,24 +1069,24 @@ def manual_model_adjust(self, data, xparams, model='position', wparams=None,
# Grab the model to be plotted
x_int, wave_int, blaze_int = self.spectral_format(wparams=wparams,
xparams=xparams)
-
+
# define what is to be plotted
def plot_data(model, xparams, wparams, nxbase, ygrid,
thar_spectrum=None):
"""
Function used for working out and defining
- the data to be plotted as a function of purpose
+ the data to be plotted as a function of purpose
Parameters
----------
model: string
- What model is being adjusted. This is the input to the main
+ What model is being adjusted. This is the input to the main
function
xparams: :obj:`numpy.ndarray` array
The (adjusted) position model parameters
wparams: :obj:`numpy.ndarray` array
- The (adjusted) wavelength model parameters
+ The (adjusted) wavelength model parameters
nxbase: :obj:`numpy.ndarray` array
The amount to add to the xbase after the spectral format
ygrid: :obj:`numpy.ndarray` array
@@ -1095,7 +1095,7 @@ def plot_data(model, xparams, wparams, nxbase, ygrid,
Returns
-------
-
+
plot_vals: :obj:`numpy.ndarray` array
The values to be plotted
"""
@@ -1147,8 +1147,8 @@ def plot_data(model, xparams, wparams, nxbase, ygrid,
# slider change though ***
#if len(to_plot)>2:
# plt.scatter(to_plot[0], to_plot[1], c=to_plot[2])
- # plt.colorbar()
-
+ # plt.colorbar()
+
# Now over plot the image and add a contrast adjustment slider.
image_min = np.percentile(data,10) #!!! MJI Hack
image_max = data.max()
@@ -1344,4 +1344,4 @@ def plotit(self, x, y, waves, mask=None, filename='wavecal.pdf'):
ax.set_title(self.name)
ax.set_xlabel("Column number")
ax.set_ylabel("Order number")
- fig.savefig(filename, bbox_inches='tight')
\ No newline at end of file
+ fig.savefig(filename, bbox_inches='tight')
diff --git a/geminidr/ghost/polyfit/test/testdata/Polyfit/README b/geminidr/ghost/polyfit/test/testdata/Polyfit/README
index f124ab77a9..baadd411ea 100644
--- a/geminidr/ghost/polyfit/test/testdata/Polyfit/README
+++ b/geminidr/ghost/polyfit/test/testdata/Polyfit/README
@@ -1 +1 @@
-Any Polyfit aperture models should be stored here as binary FITS tables
\ No newline at end of file
+Any Polyfit aperture models should be stored here as binary FITS tables
diff --git a/geminidr/ghost/primitives_calibdb_ghost.py b/geminidr/ghost/primitives_calibdb_ghost.py
index 121ae92de5..c877e8b11f 100644
--- a/geminidr/ghost/primitives_calibdb_ghost.py
+++ b/geminidr/ghost/primitives_calibdb_ghost.py
@@ -68,4 +68,3 @@ def storeProcessedStandard(self, adinputs=None, suffix=None):
adinputs, suffix=suffix, primname=self.myself(), keyword="PROCSTND")
self.storeCalibration(adinputs, caltype=caltype)
return adinputs
-
diff --git a/geminidr/ghost/primitives_ghost_bundle.py b/geminidr/ghost/primitives_ghost_bundle.py
index ccfaa64abb..a7fa8ce726 100644
--- a/geminidr/ghost/primitives_ghost_bundle.py
+++ b/geminidr/ghost/primitives_ghost_bundle.py
@@ -134,7 +134,7 @@ def _get_common_hdr_value(base, extns, key):
extns : iterable of :any:`astrodata.Astrodata`
AstroData extensions to be examined
key : str
- The FITS header key to find in each extension
+ The FITS header key to find in each extension
Raises
------
@@ -278,4 +278,3 @@ def _write_newfile(extns, suffix, base, log):
#n.phu['GHOSTDR'] = (ghost_instruments.__version__, "GHOSTDR version")
return n
-
diff --git a/geminidr/ghost/primitives_ghost_slit.py b/geminidr/ghost/primitives_ghost_slit.py
index 64d8e2f568..a51aff62f9 100644
--- a/geminidr/ghost/primitives_ghost_slit.py
+++ b/geminidr/ghost/primitives_ghost_slit.py
@@ -656,4 +656,3 @@ def _total_obj_flux(log, res, ut_date, filename, data, flat_data=None, binning=2
blues = blues[:1]
reds = reds[:1]
return reduce(lambda x, y: x + y, [np.sum(z) for z in reds + blues])
-
diff --git a/geminidr/ghost/primitives_ghost_spect.py b/geminidr/ghost/primitives_ghost_spect.py
index 8c89dd1ff1..f7d54a9550 100644
--- a/geminidr/ghost/primitives_ghost_spect.py
+++ b/geminidr/ghost/primitives_ghost_spect.py
@@ -1144,7 +1144,7 @@ def extractSpectra(self, adinputs=None, **params):
objects for the input
- Extract the spectra from the input AstroData, using calls to
:meth:`polyfit.Extractor.new_extract`.
-
+
Parameters
----------
suffix: str
@@ -1410,7 +1410,7 @@ def extractSpectra(self, adinputs=None, **params):
extractor = Extractor(arm, sview, badpixmask=ad[0].mask,
vararray=ad[0].variance)
-
+
# FIXME: This really could be done as part of flat processing!
correction = None
if flat_correct:
@@ -2148,7 +2148,7 @@ def standardizeStructure(self, adinputs=None, **params):
will try to attach an MDF because a GHOST image is
tagged as SPECT. Rather than set parameters for that primitive to
stop it from doing so, just override with a no-op primitive.
-
+
.. note::
This could go in primitives_ghost.py if the SLITV version
also no-ops.
diff --git a/geminidr/ghost/recipes/sq/tests/test_reduce_ghost.py b/geminidr/ghost/recipes/sq/tests/test_reduce_ghost.py
index c5c6b431b0..0bcf47e408 100644
--- a/geminidr/ghost/recipes/sq/tests/test_reduce_ghost.py
+++ b/geminidr/ghost/recipes/sq/tests/test_reduce_ghost.py
@@ -204,4 +204,4 @@ def reduce(file_list, label, caldb, recipe_name=None,
# check that we are not leaking objects
assert len(objgraph.by_type('NDAstroData')) == 0
- return r.output_filenames
\ No newline at end of file
+ return r.output_filenames
diff --git a/geminidr/ghost/tests/__init__.py b/geminidr/ghost/tests/__init__.py
index c27e9d00ad..ceb4f0bdf5 100644
--- a/geminidr/ghost/tests/__init__.py
+++ b/geminidr/ghost/tests/__init__.py
@@ -6,4 +6,4 @@
primitives are tested during the full reduction tests
(:any:`geminidr.ghost.recipes.test`).
-"""
\ No newline at end of file
+"""
diff --git a/geminidr/ghost/tests/slit/test_fix_cosmic_rays.py b/geminidr/ghost/tests/slit/test_fix_cosmic_rays.py
index e7a8255d39..e66def9a0f 100644
--- a/geminidr/ghost/tests/slit/test_fix_cosmic_rays.py
+++ b/geminidr/ghost/tests/slit/test_fix_cosmic_rays.py
@@ -48,5 +48,3 @@ def test_fix_cosmic_rays(ad_slit):
'Incorrect number of rejected pixels recorded in CRPIXREJ'
np.testing.assert_array_equal(ad_slit.shape, shapes), \
'fixCosmicRays has mangled data shapes'
-
-
diff --git a/geminidr/ghost/tests/slit/test_stack_frames.py b/geminidr/ghost/tests/slit/test_stack_frames.py
index 71c2c74c39..0255425310 100644
--- a/geminidr/ghost/tests/slit/test_stack_frames.py
+++ b/geminidr/ghost/tests/slit/test_stack_frames.py
@@ -23,4 +23,3 @@ def test_stackFrames_outputs(ad_slit):
assert np.all([output[0][0].data.shape ==
_.data.shape for _ in ad_slit]), "Stacked frame shape " \
"does not match inputs"
-
diff --git a/geminidr/ghost/tests/slit/test_total_obj_flux.py b/geminidr/ghost/tests/slit/test_total_obj_flux.py
index ec30ab800f..457a001a73 100644
--- a/geminidr/ghost/tests/slit/test_total_obj_flux.py
+++ b/geminidr/ghost/tests/slit/test_total_obj_flux.py
@@ -24,5 +24,3 @@ def test__total_obj_flux(ad_slit):
for ext in ad_slit])
for actual, measured in zip(sums, fluxes):
assert 0.98 < measured / actual < 1.01
-
-
diff --git a/geminidr/ghost/tests/spect/__init__.py b/geminidr/ghost/tests/spect/__init__.py
index 79887c7463..ee2670f48e 100644
--- a/geminidr/ghost/tests/spect/__init__.py
+++ b/geminidr/ghost/tests/spect/__init__.py
@@ -26,4 +26,3 @@ def ad_min():
ad = astrodata.create(phu, [sci, ])
ad.filename = rawfilename
return ad
-
diff --git a/geminidr/ghost/tests/spect/test_barycentric_correct.py b/geminidr/ghost/tests/spect/test_barycentric_correct.py
index 206676cc39..8cb6398d08 100644
--- a/geminidr/ghost/tests/spect/test_barycentric_correct.py
+++ b/geminidr/ghost/tests/spect/test_barycentric_correct.py
@@ -67,4 +67,3 @@ def test_barycentricCorrect(ad_min, ra, dec, dt, known_corr):
gs.timestamp_keys['barycentricCorrect']), "barycentricCorrect did not " \
"timestamp-mark the " \
"output file"
-
diff --git a/geminidr/ghost/tests/spect/test_dark_correct.py b/geminidr/ghost/tests/spect/test_dark_correct.py
index aada002d21..afde7b2e47 100644
--- a/geminidr/ghost/tests/spect/test_dark_correct.py
+++ b/geminidr/ghost/tests/spect/test_dark_correct.py
@@ -82,4 +82,3 @@ def test_darkCorrect(ad_min):
gs.timestamp_keys['darkCorrect']), "darkCorrect did not " \
"timestamp-mark the " \
"output file"
-
diff --git a/geminidr/ghost/tests/spect/test_get_polyfit_filename.py b/geminidr/ghost/tests/spect/test_get_polyfit_filename.py
index 29760124ab..ad6d281040 100644
--- a/geminidr/ghost/tests/spect/test_get_polyfit_filename.py
+++ b/geminidr/ghost/tests/spect/test_get_polyfit_filename.py
@@ -51,4 +51,3 @@ def test__get_polyfit_filename_errors(ad_min):
assert polyfit_file is None, "_get_polyfit_filename didn't return " \
"None when asked for a bogus " \
"model type"
-
diff --git a/geminidr/ghost/tests/spect/test_standardize_structure.py b/geminidr/ghost/tests/spect/test_standardize_structure.py
index 4b6fb575aa..fa0f59229e 100644
--- a/geminidr/ghost/tests/spect/test_standardize_structure.py
+++ b/geminidr/ghost/tests/spect/test_standardize_structure.py
@@ -27,4 +27,3 @@ def test_standardizeStructure(ad_min):
ad_orig[0].hdr == ad_out[0].hdr,
len(ad_orig) == len(ad_out),
]), "standardizeStructure is no longer a no-op primitive"
-
diff --git a/geminidr/ghost/utils/diagnostics.py b/geminidr/ghost/utils/diagnostics.py
index f16b8089d2..0be98ef08d 100644
--- a/geminidr/ghost/utils/diagnostics.py
+++ b/geminidr/ghost/utils/diagnostics.py
@@ -29,7 +29,7 @@ def plot_arcs(arc_data, thar_spec, w_map, title):
Parameters
----------
- arc_data:
+ arc_data:
"""
pl.rc('axes', prop_cycle=(cycler('color', ['b', 'r'])))
f, axes = pl.subplots(3, 1, sharex='all')
diff --git a/geminidr/ghost/utils/mkspatmod.py b/geminidr/ghost/utils/mkspatmod.py
index b393984462..27ed41ddae 100644
--- a/geminidr/ghost/utils/mkspatmod.py
+++ b/geminidr/ghost/utils/mkspatmod.py
@@ -236,6 +236,5 @@ def main(ad, ad_slitflat, flat_bin=8):
assert flat.res_mode() == "std", "Must be run on SR data"
assert {'FLAT', 'PROCESSED', 'SLIT'}.issubset(slitflat.tags), \
f"{slitflat.filename} is not a SLITFLAT"
-
+
main(flat, slitflat)
-
diff --git a/geminidr/gmos/lookups/CuAr_GMOS_mixord.dat b/geminidr/gmos/lookups/CuAr_GMOS_mixord.dat
index d328e09408..caf664ddb5 100644
--- a/geminidr/gmos/lookups/CuAr_GMOS_mixord.dat
+++ b/geminidr/gmos/lookups/CuAr_GMOS_mixord.dat
@@ -462,63 +462,63 @@
9784.5028
10470.0535
# 2nd order ...
-#6956.465
-#6982.488
+#6956.465
+#6982.488
##7122.061 2nd order poor fit
-7436.413 2nd order
-#7458.617
+7436.413 2nd order
+#7458.617
##7475.778 2nd order poor fit
-#7530.54
+#7530.54
## 7701.163 2nd order poor fit
-#7737.057
-#7783.958
+#7737.057
+#7783.958
7892.194 strong 2nd order
-#7989.583
-#8027.713
-#8067.619
-8088.836 2nd order
-#8105.842
+#7989.583
+#8027.713
+#8067.619
+8088.836 2nd order
+#8105.842
## 8144.77 clear 2nd order poor fit
-#8159.147
+#8159.147
## 8207.824 clear 2nd order poor fit
-#8263.447
+#8263.447
8317.181 strong 2nd order
-8363.768 2nd order
-#8382.059
-#8399.778
-#8456.316
-8474.439 2nd order
-#8518.724
+8363.768 2nd order
+#8382.059
+#8399.778
+#8456.316
+8474.439 2nd order
+#8518.724
8555.057 strong 2nd order
## 8600.201 strong 2nd order poor fit
-## 8618.479 strong 2nd order poor fit
-#8667.122
-#8696.128
+## 8618.479 strong 2nd order poor fit
+#8667.122
+#8696.128
8741.507 strong 2nd order
## 8801.973 strong 2nd order poor fit
-8897.759 2nd order
+8897.759 2nd order
8949.519 clear 2nd order
8963.621 strong 2nd order
9021.467 strong 2nd order
9090.104 strong 2nd order
-#9127.485
+#9127.485
9158.699 strong 2nd order
9179.796 clear 2nd order
-#9192.193
+#9192.193
## 9197.525 strong 2nd order poor fit
-#9219.135
-#9256.882
-#9274.466
+#9219.135
+#9256.882
+#9274.466
9315.803 strong 2nd order
9404.632 clear 2nd order
## 9453.736 strong 2nd order poor fit
9529.729 strong 2nd order
9612.041 strong 2nd order
9695.619 clear 2nd order
-#9731.821
+#9731.821
9759.727 strong 2nd order
-#9778.084
-#9809.503
+#9778.084
+#9809.503
9866.418 2nd order
9930.159 clear 2nd order
10018.67 2nd order
@@ -530,5 +530,5 @@
10375.49 2nd order
10470.0535
#10842.7
-#10903.3
-#10991.75
+#10903.3
+#10991.75
diff --git a/geminidr/gmos/lookups/bpmtab.py b/geminidr/gmos/lookups/bpmtab.py
index 3d5393ad93..54fcbc0d6f 100644
--- a/geminidr/gmos/lookups/bpmtab.py
+++ b/geminidr/gmos/lookups/bpmtab.py
@@ -1,11 +1,11 @@
"""
-This module provides some functions to regularize BPM files for DRAGONS
+This module provides some functions to regularize BPM files for DRAGONS
comsumption.
bpmify(ad) -
Fixes certain keywords for DRAGONS BPM files.
- dragons_bpm(ad) -
+ dragons_bpm(ad) -
creates a nominal DRAGONS BPM file name and writes this new filename.
tabl() -
@@ -19,7 +19,7 @@
>>> bpmtab.tabl(bpmfiles)
DIRECTORY /Users/kanderso/Gemini/GitHub/DRAGONS/geminidr/gmos/lookups/BPM/
-
+
File OBJ BININNG BITPIX Shape 0 Det Name Camera
======================
gmos-n_bpm_HAM_11_full_12amp_v1.fits BPM (1 1) 16 (4224, 544) Hamamatsu-N GMOS-N
@@ -105,7 +105,7 @@ def dragons_bpm(ad, prefix=None):
namps = '12amp'
else:
raise TypeError("Unrecognized detector name")
-
+
new_bpm_name = nbuffer.format(
ad.camera().lower(),
ad.object().lower(),
@@ -161,4 +161,4 @@ def tabl(ffiles):
ad.camera())
)
print("="*22)
- return
+ return
diff --git a/geminidr/gmos/lookups/fringe_control_pairs.py b/geminidr/gmos/lookups/fringe_control_pairs.py
index e65f364b5c..97a658ce24 100644
--- a/geminidr/gmos/lookups/fringe_control_pairs.py
+++ b/geminidr/gmos/lookups/fringe_control_pairs.py
@@ -117,4 +117,4 @@
((4382, 1800), (4434, 1782)),
((4763, 1578), (4766, 1539)),
((4868, 1914), (4928, 1908))),
-}
\ No newline at end of file
+}
diff --git a/geminidr/gmos/recipes/ql/recipes_FLAT_LS_SPECT.py b/geminidr/gmos/recipes/ql/recipes_FLAT_LS_SPECT.py
index f31598e9d2..f1659adb40 100644
--- a/geminidr/gmos/recipes/ql/recipes_FLAT_LS_SPECT.py
+++ b/geminidr/gmos/recipes/ql/recipes_FLAT_LS_SPECT.py
@@ -9,4 +9,3 @@
makeProcessedFlatNoStack)
_default = makeProcessedFlatNoStack
-
diff --git a/geminidr/gmos/recipes/ql/recipes_LS_SPECT.py b/geminidr/gmos/recipes/ql/recipes_LS_SPECT.py
index dd868c9bf8..a5042be251 100644
--- a/geminidr/gmos/recipes/ql/recipes_LS_SPECT.py
+++ b/geminidr/gmos/recipes/ql/recipes_LS_SPECT.py
@@ -74,4 +74,3 @@ def reduceStandard(p):
p.writeOutputs()
_default = reduceScience
-
diff --git a/geminidr/gmos/recipes/ql/recipes_STANDARD_LS_SPECT.py b/geminidr/gmos/recipes/ql/recipes_STANDARD_LS_SPECT.py
index 49b11e79f0..f21781ea18 100644
--- a/geminidr/gmos/recipes/ql/recipes_STANDARD_LS_SPECT.py
+++ b/geminidr/gmos/recipes/ql/recipes_STANDARD_LS_SPECT.py
@@ -9,4 +9,3 @@
from geminidr.gmos.recipes.ql.recipes_common import makeIRAFCompatible
_default = reduceStandard
-
diff --git a/geminidr/gmos/recipes/ql/tests/test_flat_ls_spect.py b/geminidr/gmos/recipes/ql/tests/test_flat_ls_spect.py
index 99afd2561a..a69bb730c9 100644
--- a/geminidr/gmos/recipes/ql/tests/test_flat_ls_spect.py
+++ b/geminidr/gmos/recipes/ql/tests/test_flat_ls_spect.py
@@ -271,7 +271,7 @@ def create_master_bias_for_tests():
bias_reduce = Reduce()
bias_reduce.files.extend(bias_paths)
bias_reduce.runr()
-
+
shutil.rmtree("calibrations/")
diff --git a/geminidr/gmos/recipes/sq/recipes_IMAGE.py b/geminidr/gmos/recipes/sq/recipes_IMAGE.py
index ebf5b5ebf3..23068eda99 100644
--- a/geminidr/gmos/recipes/sq/recipes_IMAGE.py
+++ b/geminidr/gmos/recipes/sq/recipes_IMAGE.py
@@ -184,4 +184,3 @@ def alignAndStack(p):
# p.makeIRAFCompatible()
# p.writeOutputs()
# return
-
diff --git a/geminidr/gmos/tests/image/test_apply_wcs_adjustment.py b/geminidr/gmos/tests/image/test_apply_wcs_adjustment.py
index 0eaa458cc9..cbdfa8a129 100644
--- a/geminidr/gmos/tests/image/test_apply_wcs_adjustment.py
+++ b/geminidr/gmos/tests/image/test_apply_wcs_adjustment.py
@@ -119,4 +119,4 @@ def gmos_tiled_images(astrofaker):
adinputs.append(ad)
p = GMOSImage(adinputs)
p.tileArrays(tile_all=False)
- return p.streams['main']
\ No newline at end of file
+ return p.streams['main']
diff --git a/geminidr/gmos/tests/longslit/__init__.py b/geminidr/gmos/tests/longslit/__init__.py
index 2f19568e32..748cbc1ae3 100644
--- a/geminidr/gmos/tests/longslit/__init__.py
+++ b/geminidr/gmos/tests/longslit/__init__.py
@@ -1 +1 @@
-INPUTS_ROOT_PATH = "./dragons_test_inputs/geminidr/gmos/longslit/"
\ No newline at end of file
+INPUTS_ROOT_PATH = "./dragons_test_inputs/geminidr/gmos/longslit/"
diff --git a/geminidr/gmos/tests/spect/test_adjust_wcs_to_reference.py b/geminidr/gmos/tests/spect/test_adjust_wcs_to_reference.py
index bb917cb172..4d663d2262 100644
--- a/geminidr/gmos/tests/spect/test_adjust_wcs_to_reference.py
+++ b/geminidr/gmos/tests/spect/test_adjust_wcs_to_reference.py
@@ -58,4 +58,4 @@ def test_adjust_wcs_with_correlation(files, path_to_inputs, caplog):
assert c0.separation(c).arcsecond < 0.5 * pixel_scale
-# Todo: Implement recipe to create input files
\ No newline at end of file
+# Todo: Implement recipe to create input files
diff --git a/geminidr/gmos/tests/spect/test_attach_wavelength_solution.py b/geminidr/gmos/tests/spect/test_attach_wavelength_solution.py
index 2cc272dfff..db55ed5673 100644
--- a/geminidr/gmos/tests/spect/test_attach_wavelength_solution.py
+++ b/geminidr/gmos/tests/spect/test_attach_wavelength_solution.py
@@ -211,7 +211,7 @@ def create_inputs_recipe():
from astrodata.testing import download_from_archive
from geminidr.gmos.tests.spect import CREATED_INPUTS_PATH_FOR_TESTS
from recipe_system.reduction.coreReduce import Reduce
- from recipe_system.utils.reduce_utils import normalize_ucals
+ from recipe_system.utils.reduce_utils import normalize_ucals
module_name, _ = os.path.splitext(os.path.basename(__file__))
path = os.path.join(CREATED_INPUTS_PATH_FOR_TESTS, module_name)
diff --git a/geminidr/gmos/tests/spect/test_determine_distortion.py b/geminidr/gmos/tests/spect/test_determine_distortion.py
index bfe150111d..de9bb068ef 100644
--- a/geminidr/gmos/tests/spect/test_determine_distortion.py
+++ b/geminidr/gmos/tests/spect/test_determine_distortion.py
@@ -158,7 +158,7 @@ def test_regression_for_determine_distortion_using_models_coefficients(
ref_ad = ref_ad_factory(distortion_determined_ad.filename)
assert_have_same_distortion(distortion_determined_ad, ref_ad, atol=1)
-
+
if request.config.getoption("--do-plots"):
do_plots(distortion_determined_ad, ref_ad)
diff --git a/geminidr/gmos/tests/spect/test_distortion_correct.py b/geminidr/gmos/tests/spect/test_distortion_correct.py
index 9994f91d0b..f24e17fe8b 100644
--- a/geminidr/gmos/tests/spect/test_distortion_correct.py
+++ b/geminidr/gmos/tests/spect/test_distortion_correct.py
@@ -220,7 +220,7 @@ def create_inputs_recipe():
from astrodata.testing import download_from_archive
from geminidr.gmos.tests.spect import CREATED_INPUTS_PATH_FOR_TESTS
from recipe_system.reduction.coreReduce import Reduce
- from recipe_system.utils.reduce_utils import normalize_ucals
+ from recipe_system.utils.reduce_utils import normalize_ucals
module_name, _ = os.path.splitext(os.path.basename(__file__))
path = os.path.join(CREATED_INPUTS_PATH_FOR_TESTS, module_name)
diff --git a/geminidr/gmos/tests/spect/test_distortion_correct_with_wavelength_solution.py b/geminidr/gmos/tests/spect/test_distortion_correct_with_wavelength_solution.py
index 5ac3b87544..ff91c9f021 100644
--- a/geminidr/gmos/tests/spect/test_distortion_correct_with_wavelength_solution.py
+++ b/geminidr/gmos/tests/spect/test_distortion_correct_with_wavelength_solution.py
@@ -231,7 +231,7 @@ def create_inputs_recipe():
from astrodata.testing import download_from_archive
from geminidr.gmos.tests.spect import CREATED_INPUTS_PATH_FOR_TESTS
from recipe_system.reduction.coreReduce import Reduce
- from recipe_system.utils.reduce_utils import normalize_ucals
+ from recipe_system.utils.reduce_utils import normalize_ucals
module_name, _ = os.path.splitext(os.path.basename(__file__))
path = os.path.join(CREATED_INPUTS_PATH_FOR_TESTS, module_name)
diff --git a/geminidr/gmos/tests/spect/test_extract_1d_spectra.py b/geminidr/gmos/tests/spect/test_extract_1d_spectra.py
index f3953e1351..b9d0f559f0 100644
--- a/geminidr/gmos/tests/spect/test_extract_1d_spectra.py
+++ b/geminidr/gmos/tests/spect/test_extract_1d_spectra.py
@@ -249,4 +249,3 @@ def create_inputs_recipe():
create_inputs_recipe()
else:
pytest.main()
-
diff --git a/geminidr/gnirs/lookups/MDF_XD.py b/geminidr/gnirs/lookups/MDF_XD.py
index 3d308ff747..1987525e67 100755
--- a/geminidr/gnirs/lookups/MDF_XD.py
+++ b/geminidr/gnirs/lookups/MDF_XD.py
@@ -1,103 +1,101 @@
# gnirs/lookups/MDF_XD_GNIRS.py
-#
-# This file contains a look-up table for GNIRS cross-dispersed (XD) data,
-# with information on the locations and widths of the various slits visible
-# on the detector. It is added to files in prepare(), from
-# GNIRSCrossDispersed.addMDF(). x_ccd refers to the middle of the slit at the
-# row y_ccd, which is where tracing of the edges begins in determineSlitEdges()
-# (this may need to be other than the center of the array for some configurations)
+"""This file contains a look-up table for GNIRS cross-dispersed (XD) data,
+with information on the locations and widths of the various slits visible
+on the detector. It is added to files in prepare(), from
+GNIRSCrossDispersed.addMDF(). x_ccd refers to the middle of the slit at the
+row y_ccd, which is where tracing of the edges begins in determineSlitEdges()
+(this may need to be other than the center of the array for some configurations)
+"""
# primitives_gnirs_crossdispersed imports this dictionary to find the slit
# definitions based on a key generated from the 'telescope', '_prism', 'decker',
# '_grating', and 'camera' attributes of a file.
slit_info = {
-
-# Not all configurations have data present in the archive - some notes:
-# * Long camera can be used with the SXD prism, but not the reverse.
-# * There's no reason to use the 10 l/mm grating with the Short camera.
-# * Using the Long camera is best with AO, so it was not used while GNIRS was
-# at Gemini South.
-
-# ------------------------------- Gemini North --------------------------------
-# ------------------------------- Short camera
-# North, Short, 10 l/mm, SXD
-# North, Short, 10 l/mm, LXD
-# North, Short, 32 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_ShortBlue_G5540': (
- (290, 400, 477, 550, 624, 707), # x_ccd
- 512, # y_ccd
- 47 # width_pixels
+ # Not all configurations have data present in the archive - some notes:
+ # * Long camera can be used with the SXD prism, but not the reverse.
+ # * There's no reason to use the 10 l/mm grating with the Short camera.
+ # * Using the Long camera is best with AO, so it was not used while GNIRS was
+ # at Gemini South.
+ # ------------------------------- Gemini North --------------------------------
+ # ------------------------------- Short camera
+ # North, Short, 10 l/mm, SXD
+ # North, Short, 10 l/mm, LXD
+ # North, Short, 32 l/mm, SXD
+ "Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_ShortBlue_G5540": (
+ (290, 400, 477, 550, 624, 707), # x_ccd
+ 512, # y_ccd
+ 47, # width_pixels
),
-# North, Short, 32 l/mm, LXD
-# North, Short, 111 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_111/mm_G5534_ShortBlue_G5540': (
- (275, 389, 466, 534, 607, 685), # x_ccd
- 175, # y_ccd
- 47 # width_pixels
+ # North, Short, 32 l/mm, LXD
+ # North, Short, 111 l/mm, SXD
+ "Gemini-North_SXD_G5536_SCXD_G5531_111/mm_G5534_ShortBlue_G5540": (
+ (275, 389, 466, 534, 607, 685), # x_ccd
+ 175, # y_ccd
+ 47, # width_pixels
),
-# North, Short, 111 l/mm, LXD
-# --------------------------------- Long camera -------------------------------
-# North, Long, 10 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_10/mm_G5532_LongBlue_G5542': (
- (103, 455, 683, 884), # x_ccd
- 300, # y_ccd
- 140 # width_pixels
+ # North, Short, 111 l/mm, LXD
+ # --------------------------------- Long camera -------------------------------
+ # North, Long, 10 l/mm, SXD
+ "Gemini-North_SXD_G5536_SCXD_G5531_10/mm_G5532_LongBlue_G5542": (
+ (103, 455, 683, 884), # x_ccd
+ 300, # y_ccd
+ 140, # width_pixels
),
-# North, Long, 10 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_10/mm_G5532_LongBlue_G5542': (
- (145, 381, 531, 657, 778, 916), # x_ccd
- 175, # y_ccd
- 105 # width_pixels
+ # North, Long, 10 l/mm, LXD
+ "Gemini-North_LXD_G5535_LCXD_G5531_10/mm_G5532_LongBlue_G5542": (
+ (145, 381, 531, 657, 778, 916), # x_ccd
+ 175, # y_ccd
+ 105, # width_pixels
),
-# North, Long, 32 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_LongBlue_G5542': (
- # There are only 3 slits in the IRAF MDF; the 4th is mostly off-detector
- (208, 563, 792, 995), # x_ccd
- 50, # y_ccd
- 140 # width_pixels
+ # North, Long, 32 l/mm, SXD
+ "Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_LongBlue_G5542": (
+ # There are only 3 slits in the IRAF MDF; the 4th is mostly off-detector
+ (208, 563, 792, 995), # x_ccd
+ 50, # y_ccd
+ 140, # width_pixels
),
-# North, Long, 32 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_32/mm_G5533_LongBlue_G5542': (
- (220, 430, 580, 714, 857), # x_ccd
- 512, # y_ccd
- 100 # width_pixels
+ # North, Long, 32 l/mm, LXD
+ "Gemini-North_LXD_G5535_LCXD_G5531_32/mm_G5533_LongBlue_G5542": (
+ (220, 430, 580, 714, 857), # x_ccd
+ 512, # y_ccd
+ 100, # width_pixels
),
-# North, Long, 111 l/mm, SXD
-# North, Long, 111 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_111/mm_G5534_LongBlue_G5542': (
- (198, 410, 560, 699, 850), # x_ccd
- 512, # y_ccd
- 100 # width_pixels
+ # North, Long, 111 l/mm, SXD
+ # North, Long, 111 l/mm, LXD
+ "Gemini-North_LXD_G5535_LCXD_G5531_111/mm_G5534_LongBlue_G5542": (
+ (198, 410, 560, 699, 850), # x_ccd
+ 512, # y_ccd
+ 100, # width_pixels
),
-
-# ------------------------------- Gemini South --------------------------------
-# ------------------------------- Short camera
-# South, Short, 10 l/mm, SXD
-# South, Short, 10 l/mm, LXD
-# South, Short, 32 l/mm, SXD
-'Gemini-South_SXD_G5509_SC_XD_32/mm_G5506_ShortBlue_G5521': (
- (325, 435, 512, 584, 659, 742.5), # x_ccd
- 512, # y_ccd
- 43 # width_pixels
+ # ------------------------------- Gemini South --------------------------------
+ # ------------------------------- Short camera
+ # South, Short, 10 l/mm, SXD
+ # South, Short, 10 l/mm, LXD
+ # South, Short, 32 l/mm, SXD
+ "Gemini-South_SXD_G5509_SC_XD_32/mm_G5506_ShortBlue_G5521": (
+ (325, 435, 512, 584, 659, 742.5), # x_ccd
+ 512, # y_ccd
+ 43, # width_pixels
),
-# South, Short, 32 l/mm, LXD
-# South, Short, 111 l/mm, SXD
-'Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513': (
- (326, 436, 512, 586, 667, 756), # x_ccd
- 512, # y_ccd
- 48 # width_pixels
+ # South, Short, 32 l/mm, LXD
+ # South, Short, 111 l/mm, SXD
+ "Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513": (
+ (326, 436, 512, 586, 667, 756), # x_ccd
+ 512, # y_ccd
+ 48, # width_pixels
),
-# South, Short, 111 l/mm, LXD
-# --------------------------------- Long camera -------------------------------
-# South, Long, 10 l/mm, SXD
-# South, Long, 10 l/mm, LXD
-# South, Long, 32 l/mm, SXD
-# South, Long, 32 l/mm, LXD
-# South, Long, 111 l/mm, SXD
-# South, Long, 111 l/mm, LXD
+ # South, Short, 111 l/mm, LXD
+ # --------------------------------- Long camera -------------------------------
+ # South, Long, 10 l/mm, SXD
+ # South, Long, 10 l/mm, LXD
+ # South, Long, 32 l/mm, SXD
+ # South, Long, 32 l/mm, LXD
+ # South, Long, 111 l/mm, SXD
+ # South, Long, 111 l/mm, LXD
}
# In some cases changes of components mean the generated keys will be different,
# but the configuration isn't meaningfully affected. Define such cases here.
-slit_info['Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5521'] =\
- slit_info['Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513']
+slit_info["Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5521"] = slit_info[
+ "Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513"
+]
diff --git a/geminidr/gnirs/lookups/nearIRsky.dat b/geminidr/gnirs/lookups/nearIRsky.dat
index 736a576bea..7e2f3ff701 100644
--- a/geminidr/gnirs/lookups/nearIRsky.dat
+++ b/geminidr/gnirs/lookups/nearIRsky.dat
@@ -10,7 +10,7 @@
#
# Because of the very high resolution OH line list from Rousselot et al,
# the list was then modified removing lines that could not be identified
-# with the medium resolution mode on ISAAC. Because of the lower
+# with the medium resolution mode on ISAAC. Because of the lower
# resolution R=2000 mode of GNIRS, the blended lines will be identified
# by the strongest line in the blend.
#
diff --git a/geminidr/gnirs/lookups/orders_XD.py b/geminidr/gnirs/lookups/orders_XD.py
index 76c5cea47d..585b43c89b 100644
--- a/geminidr/gnirs/lookups/orders_XD.py
+++ b/geminidr/gnirs/lookups/orders_XD.py
@@ -1,83 +1,83 @@
# gnirs/lookups/orders_XD_GNIRS.py
-#
-# This file contains a look-up table for GNRIS cross-dispersed (XD) data with
-# initial guesses for the central wavelength and dispersion of the various
-# orders in the data. These numbers were taken from nsappwave.fits from G-IRAF,
-# except for the Long camera, 111 l/mm, LXD configuration, which were calculated
-# using the table on the GNIRS webpage at
-# https://www.gemini.edu/instrumentation/gnirs/capability#Spectroscopy
+"""This file contains a look-up table for GNRIS cross-dispersed (XD) data with
+initial guesses for the central wavelength and dispersion of the various
+orders in the data. These numbers were taken from nsappwave.fits from G-IRAF,
+except for the Long camera, 111 l/mm, LXD configuration, which were calculated
+using the table on the GNIRS webpage at
+https://www.gemini.edu/instrumentation/gnirs/capability#Spectroscopy
-# primitives_gnirs_crossdispersed imports this dictionary to find the order
-# information based on a key generated from the 'telescope', '_prism', 'decker',
-# '_grating', and 'camera' attributes of a file.
+primitives_gnirs_crossdispersed imports this dictionary to find the order
+information based on a key generated from the 'telescope', '_prism', 'decker',
+'_grating', and 'camera' attributes of a file.
+"""
order_info= {
-# ------------------------------- Gemini North --------------------------------
-# ------------------------------- Short camera
-# North, Short, 10 l/mm, SXD
-# North, Short, 10 l/mm, LXD
-# North, Short, 32 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_ShortBlue_G5540': (
- (2210, 1660, 1330, 1110, 950, 830),
- (-0.645, -0.479, -0.381, -0.322, -0.273, -0.244),
- ),
-# North, Short, 32 l/mm, LXD
-# North, Short, 111 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_111/mm_G5534_ShortBlue_G5540': (
- (2210, 1660, 1330, 1110, 950, 830), # nm
- (-0.1853, -0.13882, -0.11117, -0.09242, -0.08, -0.0694), # nm/pixel
- ),
-# North, Short, 111 l/mm, LXD
-# --------------------------------- Long camera -------------------------------
-# North, Long, 10 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_10/mm_G5532_LongBlue_G5542': (
- (2210, 1660, 1330, 1110),
- (-0.645, -0.4847, -0.3895, -0.324),
- ),
-# North, Long, 10 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_10/mm_G5532_LongBlue_G5542': (
- (2210, 1660, 1330, 1110, 950, 830),
- (-0.64504, -0.4847, -0.3895, -0.322, -0.273, -0.244),
- ),
-# North, Long, 32 l/mm, SXD
-'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_LongBlue_G5542': (
- (2210, 1660, 1330, 1110),
- (-0.1853, -0.13882, -0.11117, -0.09242),
- ),
-# North, Long, 32 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_32/mm_G5533_LongBlue_G5542': (
- (2210, 1660, 1330, 1110),
- (-0.1853, -0.13882, -0.11117, -0.09242),
- ),
-# North, Long, 111 l/mm, SXD
-# North, Long, 111 l/mm, LXD
-'Gemini-North_LXD_G5535_LCXD_G5531_111/mm_G5534_LongBlue_G5542': (
- (2210, 1660, 1330, 1110, 950, 830),
- (-0.0619, -0.0455, -0.0372, -0.0309, -0.0265, -0.0232),
- ),
-# ------------------------------- Gemini South --------------------------------
-# ------------------------------- Short camera
-# South, Short, 10 l/mm, SXD
-# South, Short, 10 l/mm, LXD
-# South, Short, 32 l/mm, SXD
-'Gemini-South_SXD_G5509_SC_XD_32/mm_G5506_ShortBlue_G5521': (
- (2210, 1660, 1330, 1110, 950, 830),
- (-0.645, -0.479, -0.381, -0.322, -0.273, -0.244),
- ),
-# South, Short, 32 l/mm, LXD
-# South, Short, 111 l/mm, SXD
-'Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513': (
- (2210, 1660, 1330, 1110, 950),
- (-0.1854, -0.139, -0.1112, -0.0927, -0.08, -0.0694),
- ),
-# South, Short, 111 l/mm, LXD
-# --------------------------------- Long camera -------------------------------
-# South, Long, 10 l/mm, SXD
-# South, Long, 10 l/mm, LXD
-# South, Long, 32 l/mm, SXD
-# South, Long, 32 l/mm, LXD
-# South, Long, 111 l/mm, SXD
-# South, Long, 111 l/mm, LXD
+ # ------------------------------- Gemini North ----------------------------
+ # ------------------------------- Short camera
+ # North, Short, 10 l/mm, SXD
+ # North, Short, 10 l/mm, LXD
+ # North, Short, 32 l/mm, SXD
+ 'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_ShortBlue_G5540': (
+ (2210, 1660, 1330, 1110, 950, 830),
+ (-0.645, -0.479, -0.381, -0.322, -0.273, -0.244),
+ ),
+ # North, Short, 32 l/mm, LXD
+ # North, Short, 111 l/mm, SXD
+ 'Gemini-North_SXD_G5536_SCXD_G5531_111/mm_G5534_ShortBlue_G5540': (
+ (2210, 1660, 1330, 1110, 950, 830), # nm
+ (-0.1853, -0.13882, -0.11117, -0.09242, -0.08, -0.0694), # nm/pixel
+ ),
+ # North, Short, 111 l/mm, LXD
+ # --------------------------------- Long camera ---------------------------
+ # North, Long, 10 l/mm, SXD
+ 'Gemini-North_SXD_G5536_SCXD_G5531_10/mm_G5532_LongBlue_G5542': (
+ (2210, 1660, 1330, 1110),
+ (-0.645, -0.4847, -0.3895, -0.324),
+ ),
+ # North, Long, 10 l/mm, LXD
+ 'Gemini-North_LXD_G5535_LCXD_G5531_10/mm_G5532_LongBlue_G5542': (
+ (2210, 1660, 1330, 1110, 950, 830),
+ (-0.64504, -0.4847, -0.3895, -0.322, -0.273, -0.244),
+ ),
+ # North, Long, 32 l/mm, SXD
+ 'Gemini-North_SXD_G5536_SCXD_G5531_32/mm_G5533_LongBlue_G5542': (
+ (2210, 1660, 1330, 1110),
+ (-0.1853, -0.13882, -0.11117, -0.09242),
+ ),
+ # North, Long, 32 l/mm, LXD
+ 'Gemini-North_LXD_G5535_LCXD_G5531_32/mm_G5533_LongBlue_G5542': (
+ (2210, 1660, 1330, 1110),
+ (-0.1853, -0.13882, -0.11117, -0.09242),
+ ),
+ # North, Long, 111 l/mm, SXD
+ # North, Long, 111 l/mm, LXD
+ 'Gemini-North_LXD_G5535_LCXD_G5531_111/mm_G5534_LongBlue_G5542': (
+ (2210, 1660, 1330, 1110, 950, 830),
+ (-0.0619, -0.0455, -0.0372, -0.0309, -0.0265, -0.0232),
+ ),
+ # ------------------------------- Gemini South ----------------------------
+ # ------------------------------- Short camera
+ # South, Short, 10 l/mm, SXD
+ # South, Short, 10 l/mm, LXD
+ # South, Short, 32 l/mm, SXD
+ 'Gemini-South_SXD_G5509_SC_XD_32/mm_G5506_ShortBlue_G5521': (
+ (2210, 1660, 1330, 1110, 950, 830),
+ (-0.645, -0.479, -0.381, -0.322, -0.273, -0.244),
+ ),
+ # South, Short, 32 l/mm, LXD
+ # South, Short, 111 l/mm, SXD
+ 'Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5513': (
+ (2210, 1660, 1330, 1110, 950),
+ (-0.1854, -0.139, -0.1112, -0.0927, -0.08, -0.0694),
+ ),
+ # South, Short, 111 l/mm, LXD
+ # --------------------------------- Long camera ---------------------------
+ # South, Long, 10 l/mm, SXD
+ # South, Long, 10 l/mm, LXD
+ # South, Long, 32 l/mm, SXD
+ # South, Long, 32 l/mm, LXD
+ # South, Long, 111 l/mm, SXD
+ # South, Long, 111 l/mm, LXD
}
order_info['Gemini-South_SXD_G5509_SC_XD_111/mm_G5505_ShortBlue_G5521'] =\
diff --git a/geminidr/gnirs/parameters_gnirs_image.py b/geminidr/gnirs/parameters_gnirs_image.py
index 8160aa6a7e..7d8aa67738 100644
--- a/geminidr/gnirs/parameters_gnirs_image.py
+++ b/geminidr/gnirs/parameters_gnirs_image.py
@@ -27,7 +27,7 @@ def setDefaults(self):
self.first_pass = 2.
self.min_sources = 1
self.rotate = True
-
+
class cleanFFTReadoutConfig(parameters_nearIR.cleanFFTReadoutConfig):
# Need a larger extent to cope with a bright spectrum down the middle
diff --git a/geminidr/gnirs/recipes/qa/recipes_LS_SPECT.py b/geminidr/gnirs/recipes/qa/recipes_LS_SPECT.py
index 7c2e7f35f0..b0da2e5b32 100644
--- a/geminidr/gnirs/recipes/qa/recipes_LS_SPECT.py
+++ b/geminidr/gnirs/recipes/qa/recipes_LS_SPECT.py
@@ -7,7 +7,7 @@
def reduceScience(p):
"""
- To be updated as development continues: This recipe processes GNIRS longslit
+ To be updated as development continues: This recipe processes GNIRS longslit
spectroscopic data, currently up to basic spectral extraction without telluric correction.
Parameters
@@ -17,7 +17,7 @@ def reduceScience(p):
"""
p.prepare()
p.addDQ()
- # p.nonlinearityCorrect() # non-linearity correction tbd
+ # p.nonlinearityCorrect() # non-linearity correction tbd
p.ADUToElectrons()
p.addVAR(poisson_noise=True, read_noise=True)
p.measureIQ(display=True)
@@ -51,6 +51,6 @@ def reduceScience(p):
p.traceApertures()
p.extractSpectra()
p.plotSpectraForQA()
-
-
+
+
_default = reduceScience
diff --git a/geminidr/gsaoi/lookups/gsaoi_static_distortion_info.py b/geminidr/gsaoi/lookups/gsaoi_static_distortion_info.py
index f17f745d17..fc817d527a 100644
--- a/geminidr/gsaoi/lookups/gsaoi_static_distortion_info.py
+++ b/geminidr/gsaoi/lookups/gsaoi_static_distortion_info.py
@@ -6,18 +6,17 @@
# In degrees; these are the RA and DEC for the LMC field
__STATIC_REFERENCE_COORDS__ = {"x": 80.45476667, "y": -69.4999333}
-"""
-forward: A dictionary specifiying the information related to the default static
-transformation of pixel coordinates to projection plane coordinates.
-Containing the *linear* and *non-linear* surface fits information
-including model definition and coefficients per array per axis.
-backward: A dictionary specifying the information related to the inverse of the
-default static transformation. Containing only one model type which maps
-projection plane coordinates to pixel coordinates. The information includes
-model definition (type, domain, degree) and coefficients per array per
-axis. Recomputed by CJS 07/13/2016
-"""
+# forward: A dictionary specifiying the information related to the default static
+# transformation of pixel coordinates to projection plane coordinates.
+# Containing the *linear* and *non-linear* surface fits information
+# including model definition and coefficients per array per axis.
+#
+# backward: A dictionary specifying the information related to the inverse of the
+# default static transformation. Containing only one model type which maps
+# projection plane coordinates to pixel coordinates. The information includes
+# model definition (type, domain, degree) and coefficients per array per
+# axis. Recomputed by CJS 07/13/2016
STATIC_CORRECTIONS = {
"forward": [
# Linear model
@@ -226,22 +225,20 @@
# Static centre of rotation
# Relative to array A4 reference point
CENTER_OF_ROTATION = (-65.44, -75.154)
-"""
-Dictionary keyed by X, Y stating the relative offset in pixels for the given
-key.
-"""
+# Dictionary keyed by X, Y stating the relative offset in pixels for the given
+# key.
# Dictionary mapping date ranges to static corrections
#STATIC_CORRECTIONS_DATE_MAPPING = {(None, None):
# {"model": STATIC_CORRECTIONS,
# "cor_offset": CENTER_OF_ROTATION}}
-"""
-A dictionary mapping a date range, the key (a tuple of dates, default
-currently is None, None) to the appropriate static correction information,
-the value, a dictionary keyed by MODEL, INVERSE,
-CENTRE_OF_ROTATION_OFFSET. The MODEL and INVERSE values are dictionaries
-that contain the coefficients for the defined models for each of the defined
-arrays. The CENTRE_OF_ROTATION_OFFSET is a dictionary keyed by X, Y that
-refer to the relative offsets to apply to translate everything to the centre
-of rotation.
-"""
+#
+# A dictionary mapping a date range, the key (a tuple of dates, default
+# currently is None, None) to the appropriate static correction information,
+# the value, a dictionary keyed by MODEL, INVERSE,
+# CENTRE_OF_ROTATION_OFFSET. The MODEL and INVERSE values are dictionaries
+# that contain the coefficients for the defined models for each of the defined
+# arrays. The CENTRE_OF_ROTATION_OFFSET is a dictionary keyed by X, Y that
+# refer to the relative offsets to apply to translate everything to the centre
+# of rotation.
+#
diff --git a/geminidr/gsaoi/lookups/maskdb.py b/geminidr/gsaoi/lookups/maskdb.py
index 2b3811a9c3..4390cc1b65 100644
--- a/geminidr/gsaoi/lookups/maskdb.py
+++ b/geminidr/gsaoi/lookups/maskdb.py
@@ -6,4 +6,4 @@
bpm_dict = {
"GSAOI_11": "gsaoibpm_high_full_extra.fits",
# "GSAOI_1_1": "gsaoibpm_high_full.fits"
-}
\ No newline at end of file
+}
diff --git a/geminidr/gsaoi/primitives_gsaoi.py b/geminidr/gsaoi/primitives_gsaoi.py
index c5d301d750..6242d27720 100644
--- a/geminidr/gsaoi/primitives_gsaoi.py
+++ b/geminidr/gsaoi/primitives_gsaoi.py
@@ -225,4 +225,3 @@ def _nonlinearity_coeffs(self, ad):
def _has_valid_extensions(ad):
"""Check the AD has a valid number of extensions"""
return len(ad) == 4
-
diff --git a/geminidr/gsaoi/recipes/tests/reduce_img.sh b/geminidr/gsaoi/recipes/tests/reduce_img.sh
index 8c97c9c521..19c0f72547 100755
--- a/geminidr/gsaoi/recipes/tests/reduce_img.sh
+++ b/geminidr/gsaoi/recipes/tests/reduce_img.sh
@@ -72,4 +72,3 @@ reduce @sciset.lis -p addDQ:user_bpm=${bpm}
# Check the final result & return status. Since there's no stack here, just
# spot check the last file:
compare_file $(last_result_filename skySubtracted)
-
diff --git a/geminidr/gsaoi/recipes/tests/reduce_img_every_n.sh b/geminidr/gsaoi/recipes/tests/reduce_img_every_n.sh
index 46f807bb6f..5e7f62280c 100755
--- a/geminidr/gsaoi/recipes/tests/reduce_img_every_n.sh
+++ b/geminidr/gsaoi/recipes/tests/reduce_img_every_n.sh
@@ -56,4 +56,3 @@ reduce @sciset.lis -p addDQ:user_bpm=${bpm}
# Check the final result & return status. Since there's no stack here, just
# spot check the last file:
compare_file $(last_result_filename skySubtracted)
-
diff --git a/geminidr/gsaoi/recipes/tests/reduce_img_not_bpm.sh b/geminidr/gsaoi/recipes/tests/reduce_img_not_bpm.sh
index 11294c6abe..f62f2e772e 100755
--- a/geminidr/gsaoi/recipes/tests/reduce_img_not_bpm.sh
+++ b/geminidr/gsaoi/recipes/tests/reduce_img_not_bpm.sh
@@ -56,4 +56,3 @@ reduce @sciset.lis -p addDQ:user_bpm=${bpm}
# Check the final result & return status. Since there's no stack here, just
# spot check the last file:
compare_file $(last_result_filename skySubtracted)
-
diff --git a/geminidr/gsaoi/recipes/tests/test_H_img.sh b/geminidr/gsaoi/recipes/tests/test_H_img.sh
index b2ffc8b3e4..93bf03197a 100755
--- a/geminidr/gsaoi/recipes/tests/test_H_img.sh
+++ b/geminidr/gsaoi/recipes/tests/test_H_img.sh
@@ -11,4 +11,3 @@ start_test_set "$name"
"$script_dir/reduce_img.sh" "$name" "S20160219S01" AT2018ec 9146 20 || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/gsaoi/recipes/tests/test_J_img.sh b/geminidr/gsaoi/recipes/tests/test_J_img.sh
index 91c15157ab..22db93130c 100755
--- a/geminidr/gsaoi/recipes/tests/test_J_img.sh
+++ b/geminidr/gsaoi/recipes/tests/test_J_img.sh
@@ -11,4 +11,3 @@ start_test_set "$name"
"$script_dir/reduce_img_not_bpm.sh" "$name" "WISE0833+0052" 9146 || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/gsaoi/recipes/tests/test_Ksc_img.sh b/geminidr/gsaoi/recipes/tests/test_Ksc_img.sh
index b3d2a067ee..f2309d2ef1 100755
--- a/geminidr/gsaoi/recipes/tests/test_Ksc_img.sh
+++ b/geminidr/gsaoi/recipes/tests/test_Ksc_img.sh
@@ -12,4 +12,3 @@ start_test_set "$name"
"$script_dir/reduce_img_every_n.sh" "$name" "Sgr A* - off-centered" 9182 1 || nerr=${nerr}1
end_test_set "$name" $nerr
-
diff --git a/geminidr/interactive/INTERACTIVE.md b/geminidr/interactive/INTERACTIVE.md
index 1efc1e05ca..301e8a79ed 100644
--- a/geminidr/interactive/INTERACTIVE.md
+++ b/geminidr/interactive/INTERACTIVE.md
@@ -1,44 +1,37 @@
# Interactive Tools
-This is a guide to the interactive APIs and how to use them
-in the primitives in the recipe system. These tools depend
-on bokeh and spin up an embedded webserver to provide the
-user interface.
+This is a guide to the interactive APIs and how to use them in the primitives in
+the recipe system. These tools depend on bokeh and spin up an embedded webserver
+to provide the user interface.
## Quick Start
-The visualization is done in bokeh with an embedded web server.
-In the primitive, the code will call out to the visualization
-API with the input values/parameters. From there, the user will
-be interacting with the data in bokeh. Once the user hits a
-submit button, the code will return to the calling primitive and
-it can extract the final fit/parameters from the visualization.
-There is also a pre-done 1-D Visualizer provided to use the
-fit_1D fitter.
+The visualization is done in bokeh with an embedded web server. In the
+primitive, the code will call out to the visualization API with the input
+values/parameters. From there, the user will be interacting with the data in
+bokeh. Once the user hits a submit button, the code will return to the calling
+primitive and it can extract the final fit/parameters from the visualization.
+There is also a pre-done 1-D Visualizer provided to use the fit_1D fitter.
## Fit1DVisualizer
-This first section will outline the `Fit1DVisualizer`. For
-many primitives, this will be sufficient. Using this
-`Visualizer` implementation will save time and lead to a
-consistent interface with other interactive fits.
+This first section will outline the `Fit1DVisualizer`. For many primitives, this
+will be sufficient. Using this `Visualizer` implementation will save time and
+lead to a consistent interface with other interactive fits.
![Fit1DVisualizer for standard 1-D fits](docs/Fit1DVisualizer.png)
### Identify Coordinate inputs, Fit inputs
-Look over the primitive and see what inputs are used to
-generate the initial set of coordinates to be fit. This
-may be an expensive operation and we want to
-separate out the needed inputs accordingly in the UI.
-These inputs will be UI widgets on the far left used
-to generate the full set of coordinates/weights.
+Look over the primitive and see what inputs are used to generate the initial set
+of coordinates to be fit. This may be an expensive operation and we want to
+separate out the needed inputs accordingly in the UI. These inputs will be UI
+widgets on the far left used to generate the full set of coordinates/weights.
-The logic to generate the coordinates from those
-inputs may be placed in a method. Changes in these left
-side inputs affect all tabs and will call this provided
-function from the primitive to regenerate all input
-coordinates and weights.
+The logic to generate the coordinates from those inputs may be placed in a
+method. Changes in these left side inputs affect all tabs and will call this
+provided function from the primitive to regenerate all input coordinates and
+weights.
### Noteable Parameters
@@ -46,17 +39,17 @@ Some of the more noteable parameters to the `Fit1DVisualizer` are:
#### data_source
-This will either be actual input coordinates or a function that
-returns the input coordinates. If you have no parameters other
-than the ones being passed to the `fit_1D` fitters (`order`, etc)
-then you can just pass a list of (x, y, weights) tuples
+This will either be actual input coordinates or a function that returns the
+input coordinates. If you have no parameters other than the ones being passed to
+the `fit_1D` fitters (`order`, etc) then you can just pass a list of (x, y,
+weights) tuples
#### fitting_parameters
-This should be a list of dictionaries that will
-be sent to each `fit_1D` when doing the fits. Essentially, this will
-have the initial `order`, etc that will be used for each tab. This
-can be easily generated from the primitive parameters using:
+This should be a list of dictionaries that will be sent to each `fit_1D` when
+doing the fits. Essentially, this will have the initial `order`, etc that will
+be used for each tab. This can be easily generated from the primitive parameters
+using:
```python
fit_1D.translate_params(params)
@@ -64,22 +57,20 @@ fit_1D.translate_params(params)
### Create/Start the Fit1DVisualizer
-This is the same approach you will take with a custom
-`Visualizer` if one is needed.
+This is the same approach you will take with a custom `Visualizer` if one is
+needed.
-First you instantiate the `Fit1DVisualizer` with the
-coordinates or coordinate function and other parameters.
-Then you start the bokeh UI by calling
+First you instantiate the `Fit1DVisualizer` with the coordinates or coordinate
+function and other parameters. Then you start the bokeh UI by calling
```python
geminidr.interactive.server.interactive_fitter(visualizer)
```
-The call will block until the user hits the *Submit* button or
-closes the tab. Then the function will return and resulting
-fits are available from the `visualizer`. You can get the list
-of final `fit_1D` fits by calling the `results()` method like
-this:
+The call will block until the user hits the *Submit* button or closes the tab.
+Then the function will return and resulting fits are available from the
+`visualizer`. You can get the list of final `fit_1D` fits by calling the
+`results()` method like this:
```python
all_m_final = visualizer.results()
@@ -87,8 +78,8 @@ all_m_final = visualizer.results()
### calculateSensitivity
-The `calculateSensitivty` primitive is a good example of the common case and
-how to use the pre-done `Fit1DVisualizer` UI. The code ends up like this:
+The `calculateSensitivty` primitive is a good example of the common case and how
+to use the pre-done `Fit1DVisualizer` UI. The code ends up like this:
```python
if interactive:
@@ -101,7 +92,7 @@ if interactive:
all_shapes.append(ext.shape[0])
all_pixels.append(wave.value)
all_masked_data.append(zpt.value)
- all_weights.append(1./zpt_err.value)
+ all_weights.append(1.0 / zpt_err.value)
# Do NOT reuse the fit_1D.translate_params output for all values as the
# UI will update the dictionary and that would affect all extensions
all_fp_init.append(fit_1D.translate_params(params))
@@ -113,88 +104,95 @@ if interactive:
# Create the 1-D Fitter. The first argument is either a tuple of x, y, weight arrays
# or a function that returns a tuple of x, y, weight arrays. Each array has 1 array
# per extension. So x[0], y[0], weights[0] all belong to the first extension, etc.
- visualizer = fit1d.Fit1DVisualizer((all_pixels, all_masked_data, all_weights),
- fitting_parameters=all_fp_init,
- config=config,
- tab_name_fmt="CCD {}",
- xlabel='x', ylabel='y',
- reinit_live=True,
- domains=all_shapes,
- title="Calculate Sensitivity")
+ visualizer = fit1d.Fit1DVisualizer(
+ (all_pixels, all_masked_data, all_weights),
+ fitting_parameters=all_fp_init,
+ config=config,
+ tab_name_fmt="CCD {}",
+ xlabel="x",
+ ylabel="y",
+ reinit_live=True,
+ domains=all_shapes,
+ title="Calculate Sensitivity",
+ )
# This bit spins up bokeh and waits for the user to click 'Submit' or close the window
geminidr.interactive.server.interactive_fitter(visualizer)
-
+
# Grab the fit_1D outputs and do something
all_m_final = visualizer.results()
for ext, fit in zip(all_exts, all_m_final):
# Do something
# ...
+ ...
else:
# non-interactive variant
+ ...
```
### normalizeFlat
-The `normalizeFlat` primitive is quite expensive, so we modify the basic UI a bit. This
-primitive passes a function to access the x, y, weights. What this will do is create extra
-UI controls on the left side of the UI, outside the per-extension tabs. These controls can
-be modified to alter values of the `config`. You can also add additional parameters via the
-`reinit_extras` dictionary of name, Field pairs. The config and the values of the extras are
-then passed into the function you provided to recalculate the x, y, weights for all
-extensions.
+The `normalizeFlat` primitive is quite expensive, so we modify the basic UI a
+bit. This primitive passes a function to access the x, y, weights. What this
+will do is create extra UI controls on the left side of the UI, outside the
+per-extension tabs. These controls can be modified to alter values of the
+`config`. You can also add additional parameters via the `reinit_extras`
+dictionary of name, Field pairs. The config and the values of the extras are
+then passed into the function you provided to recalculate the x, y, weights for
+all extensions.
-In the case of normalizeFlat, this capability was used to pull out a single row from each
-extension to be fit. When the user selects a row, say `100`, the UI will call back into the
-supplied function from `normalizeFlat`. It will then extract x, y, weights for all extensions
-by pulling that row out.
+In the case of normalizeFlat, this capability was used to pull out a single row
+from each extension to be fit. When the user selects a row, say `100`, the UI
+will call back into the supplied function from `normalizeFlat`. It will then
+extract x, y, weights for all extensions by pulling that row out.
-Once the user hits Submit, the fits are not useable as-is. Instead, this primitive pulls the
-`fit_1D` parameters out of the returned fits and does a new fit with the full data using the
-same parameters.
+Once the user hits Submit, the fits are not useable as-is. Instead, this
+primitive pulls the `fit_1D` parameters out of the returned fits and does a new
+fit with the full data using the same parameters.
-It's probably best to examine this primitive as a reference should you need to do something
-similar.
+It's probably best to examine this primitive as a reference should you need to
+do something similar.
## Custom Approach
-If the fit can't be done with `fit_1D`, you can subclass
-`PrimitiveVisualizer` to do something custom.
+If the fit can't be done with `fit_1D`, you can subclass `PrimitiveVisualizer`
+to do something custom.
An example of this is the `findSourceApertures` primitive which uses
`geminidr.interactive.fit.aperture` to provide an interactive interface.
## PrimitiveVisualizer
-The `PrimitiveVisualizer` constructor expects the primitive `config` and a `title`.
-The `title` is used in the top of the HTML template shown to the user. The `config`
-will be available to your primitive as a field on the visualizer.
+The `PrimitiveVisualizer` constructor expects the primitive `config` and a
+`title`. The `title` is used in the top of the HTML template shown to the user.
+The `config` will be available to your primitive as a field on the visualizer.
-It also creates a `submit_button` field that is a bokeh `Button` to submit the results.
-You will want to add this `Button` in your custom UI for the user to submit their final
-fit.
+It also creates a `submit_button` field that is a bokeh `Button` to submit the
+results. You will want to add this `Button` in your custom UI for the user to
+submit their final fit.
### do_later
-If you are performing work outside of the bokeh event loop but you want to affect
-the UI in some way, use the `do_later` method on the `PrimitiveVisualizer`. This will
-post your function onto the bokeh event loop to be executed in that context.
+If you are performing work outside of the bokeh event loop but you want to
+affect the UI in some way, use the `do_later` method on the
+`PrimitiveVisualizer`. This will post your function onto the bokeh event loop to
+be executed in that context.
### visualize(doc)
-The method you need to implement to provide a custom UI is `visualize`. It will take
-a bokeh `Document` as it's argument and should add whatever widgets and figures you
-need. Don't forget to add the `submit_button` from the base class.
+The method you need to implement to provide a custom UI is `visualize`. It will
+take a bokeh `Document` as it's argument and should add whatever widgets and
+figures you need. Don't forget to add the `submit_button` from the base class.
### results
-The only standard method is `visualize`. You should provide a method/fields for your
-primitive to access the results of your custom fit. In the case of the `Fit1DVisualizer1`,
-this call is `results()`
+The only standard method is `visualize`. You should provide a method/fields for
+your primitive to access the results of your custom fit. In the case of the
+`Fit1DVisualizer1`, this call is `results()`
### show_user_message
-There is a helper method called `show_user_message` that will pop up a message dialog
-for the user. As an example:
+There is a helper method called `show_user_message` that will pop up a message
+dialog for the user. As an example:
```python
self.vis.show_user_message(f"Sigma slider changed to {val}")
@@ -202,18 +200,19 @@ self.vis.show_user_message(f"Sigma slider changed to {val}")
### make_modal
-There is a helper method called `make_modal` that will pop up a message in the webpage
-and block access to the UI. It takes two parameters, a `widget` and a `message`. The
-`message` will be the text displayed to the user. The `widget` is used to drive display
-of the popup. When this `widget` is disabled, the message will be shown. When the `widget`
-is re-enabled, the message will be hidden and the user will have access to the UI again.
+There is a helper method called `make_modal` that will pop up a message in the
+webpage and block access to the UI. It takes two parameters, a `widget` and a
+`message`. The `message` will be the text displayed to the user. The `widget` is
+used to drive display of the popup. When this `widget` is disabled, the message
+will be shown. When the `widget` is re-enabled, the message will be hidden and
+the user will have access to the UI again.
-This roundabout way of showing the popup is necessary due to the design of bokeh.
-Typically, you would tie it to a button that kicks off an operation that you expect to be
-slow.
+This roundabout way of showing the popup is necessary due to the design of
+bokeh. Typically, you would tie it to a button that kicks off an operation that
+you expect to be slow.
-For this to work properly, the long-running work should be queued up via
-the `do_later` method mentioned previously. The pattern works like this:
+For this to work properly, the long-running work should be queued up via the
+`do_later` method mentioned previously. The pattern works like this:
```python
self.make_modal(self.button, "This may take 20 seconds")
@@ -223,35 +222,41 @@ self.make_modal(self.button, "This may take 20 seconds")
# ... somewhere else with lots of work to do
self.button.disabled = True
+
def fn():
# do something expensive
self.button.disabled = False
+
+
self.do_later(fn)
```
### show_ok_cancel
-There is a helper method called `show_ok_cancel`. This is an updated way to make the
-bokeh show a standard javascript ok/cancel dialog and route the response, as a boolean,
-to some python code. The python callback supplied will execute on the UI thread, so
-it can safely access bokeh components.
+There is a helper method called `show_ok_cancel`. This is an updated way to make
+the bokeh show a standard javascript ok/cancel dialog and route the response, as
+a boolean, to some python code. The python callback supplied will execute on the
+UI thread, so it can safely access bokeh components.
Here is an example
```python
def im_a_callback(arg):
print(f"Callback made with {arg}")
+
+
self.show_ok_cancel("Click OK or Cancel", im_a_callback)
```
### make_ok_cancel_dialog
-There is a helper method called `make_ok_cancel_dialog`. This is called on a bokeh
-`Button`, typically right after creating it. The helper method also takes the message
-to display in the ok/cancel dialog and a callback function. The callback function should
-take a single boolean argument, which will be `True` if the user chose "OK" and `False`
-if they chose "Cancel". The helper calls the callback from inside the UI thread, so you
-don't have to add a `do_later` layer of your own.
+There is a helper method called `make_ok_cancel_dialog`. This is called on a
+bokeh `Button`, typically right after creating it. The helper method also takes
+the message to display in the ok/cancel dialog and a callback function. The
+callback function should take a single boolean argument, which will be `True` if
+the user chose "OK" and `False` if they chose "Cancel". The helper calls the
+callback from inside the UI thread, so you don't have to add a `do_later` layer
+of your own.
Here is an example from the 1-D fitter:
@@ -259,20 +264,24 @@ Here is an example from the 1-D fitter:
def reset_dialog_handler(result):
if result:
self.fitting_parameters_ui.reset_ui()
-self.reset_dialog = self.visualizer.make_ok_cancel_dialog(reset_button,
- 'Reset will change all inputs for this tab back '
- 'to their original values. Proceed?',
- reset_dialog_handler)
+
+
+self.reset_dialog = self.visualizer.make_ok_cancel_dialog(
+ reset_button,
+ "Reset will change all inputs for this tab back "
+ "to their original values. Proceed?",
+ reset_dialog_handler,
+)
```
### make_widgets_from_parameters
-The `PrimitiveVisualizer` has a `make_widgets_from_parameters` helper method. For the
-passed parameters, defined in a `UIParameters`, this will build a panel of widgets
-to update the corresponding parameters. This provides a quick and easy way to make
-a UI for the inputs to a primitive. For this to work, the `PrimitiveVisualizer` must
-be told about the parameters when it is constructed. This is done with a few lines of
-code in the primitive like so:
+The `PrimitiveVisualizer` has a `make_widgets_from_parameters` helper method.
+For the passed parameters, defined in a `UIParameters`, this will build a panel
+of widgets to update the corresponding parameters. This provides a quick and
+easy way to make a UI for the inputs to a primitive. For this to work, the
+`PrimitiveVisualizer` must be told about the parameters when it is constructed.
+This is done with a few lines of code in the primitive like so:
```python
config = self.params[self.myself()]
@@ -281,33 +290,35 @@ ui_params = UIParams(config)
# pass this config to the visualizer constructor
```
-The `UIParams` can also take a few extra arguments to fine tune it's behavior.
+The `UIParams` can also take a few extra arguments to fine tune it's behavior.
`params` is a list of all the parameters you want captured from the `Config`.
-`hidden_params` are the parameters to not automatically add in the
-`make_widgets_from_parameters`, if you want to place them elsewhere. You can add
+`hidden_params` are the parameters to not automatically add in the
+`make_widgets_from_parameters`, if you want to place them elsewhere. You can add
`title_overrides` to give a dictionary mapping of parameters to text to use in
-the UI instead of inferring them from the `Config`.
+the UI instead of inferring them from the `Config`.
## Tornado Handlers
-The embedded bokeh server uses Tornado for the web engine. It is possible to add
-additional Tornado-based handlers to the server. This can be useful, for instance,
-to create custom web service calls that the HTML UI could access. As an example, I
-have wired up a ‘version’ web service that will report back the DRAGONS version
-number. This is used in the HTML UI to set the text/link to DRAGONS in the lower
-right corner.
+The embedded bokeh server uses Tornado for the web engine. It is possible to add
+additional Tornado-based handlers to the server. This can be useful, for
+instance, to create custom web service calls that the HTML UI could access. As
+an example, I have wired up a ‘version’ web service that will report back the
+DRAGONS version number. This is used in the HTML UI to set the text/link to
+DRAGONS in the lower right corner.
-The logic that adds this handler is the extra_patterns parameter to the bokeh
+The logic that adds this handler is the extra_patterns parameter to the bokeh
Server constructor.
```python
-extra_patterns=[('/version', VersionHandler),]
+extra_patterns = [
+ ("/version", VersionHandler),
+]
```
## Custom Callbacks
-There is a dedicated web endpoint setup to handle custom web calls as a convenience.
-You can register a method for access via web callbacks by using
+There is a dedicated web endpoint setup to handle custom web calls as a
+convenience. You can register a method for access via web callbacks by using
```python
callback_id = register_callback(fn)
@@ -319,162 +330,174 @@ Later in some javascript code, such as a `CustomJS`:
$.ajax('/handle_callback?callback=' + cbid + '&...more_args...');
```
-The function will be passed the incoming arguments to the web endpoint. This
-is generally a dictionary where the values are arrays of bytes.
+The function will be passed the incoming arguments to the web endpoint. This is
+generally a dictionary where the values are arrays of bytes.
## Key Passing
-Bokeh provides no way to pass key presses naturally to the python. As a workaround,
-I added a custom bokeh endpoint that takes key presses as URL parameters. This is
-wired up to the `handle_key` URL endpoint in the bokeh Server. Supported keys must
-be intercepted in the javascript in `index.html`. Then they will come in through
-`handle_key`.
+Bokeh provides no way to pass key presses naturally to the python. As a
+workaround, I added a custom bokeh endpoint that takes key presses as URL
+parameters. This is wired up to the `handle_key` URL endpoint in the bokeh
+Server. Supported keys must be intercepted in the javascript in `index.html`.
+Then they will come in through `handle_key`.
-Note that this code path is outside the bokeh event loop, so if you
-need to change the UI in response to a key press, you will want to use the
-`do_later` function provided in `PrimitiveVisualizer`
+Note that this code path is outside the bokeh event loop, so if you need to
+change the UI in response to a key press, you will want to use the `do_later`
+function provided in `PrimitiveVisualizer`
## Controller/Tasks/Handlers
-The key passing is currently used for working with selection bands and apertures.
-The bands interface is built into the Fit1DVisualizer, but may be useful in building
-more custom visualizers as well.
+The key passing is currently used for working with selection bands and
+apertures. The bands interface is built into the Fit1DVisualizer, but may be
+useful in building more custom visualizers as well.
-There are two places this interface is visible. The first is in the plot itself,
-where bands are seen here as shaded bluish stripes. The second is below the
-mask/unmask where some help text is displayed with the currently available key
-commands. Let’s take a look at the code. Note that we will show bands here,
-but Apertures work similarly.
+There are two places this interface is visible. The first is in the plot itself,
+where bands are seen here as shaded bluish stripes. The second is below the
+mask/unmask where some help text is displayed with the currently available key
+commands. Let’s take a look at the code. Note that we will show bands here, but
+Apertures work similarly.
![Controller/Task UI](docs/ControllerAndTask.png)
-First, in the visualizer for each tab a region model is created. This is a data
-structure that keeps track of all the regions, can check if a given coordinate is
-‘selected’ by the regions, and notifies registered listeners whenever the bands
-change. This last is used by Fit1DVisualizer to recalculate the masked points
-and redo the fit, for instance.
+First, in the visualizer for each tab a region model is created. This is a data
+structure that keeps track of all the regions, can check if a given coordinate
+is ‘selected’ by the regions, and notifies registered listeners whenever the
+bands change. This last is used by Fit1DVisualizer to recalculate the masked
+points and redo the fit, for instance.
```python
self.region_model = GIRegionModel()
```
-Next, in the UI below the mask/unmask buttons we add a bokeh `Div`. This `Div` is
-going to be updated with help text for the active task.
+Next, in the UI below the mask/unmask buttons we add a bokeh `Div`. This `Div`
+is going to be updated with help text for the active task.
```python
controller_div = Div()
controls = column(..., controller_div)
```
-Then we create a visualization of the bands on the bokeh `Figure`. This can be
-done with a simple utility function. The None here refers to an optional
-`GIApertureModel`. Note that we can call this multiple times to connect the
-`GIRegionModel` to multiple `Figure`s (and indeed in this example there are two).
+Then we create a visualization of the bands on the bokeh `Figure`. This can be
+done with a simple utility function. The None here refers to an optional
+`GIApertureModel`. Note that we can call this multiple times to connect the
+`GIRegionModel` to multiple `Figure`s (and indeed in this example there are
+two).
```python
connect_figure_extras(figure, None, self.region_model)
```
-To get updates on the bands so we know to recalculate the masked points, we add
-a listener to the `GIRegionModel`. Note there is a lot of custom code for
-`Fit1DVisualizer` behind this and we would need to do something custom for any
+To get updates on the bands so we know to recalculate the masked points, we add
+a listener to the `GIRegionModel`. Note there is a lot of custom code for
+`Fit1DVisualizer` behind this and we would need to do something custom for any
new interfaces.
```python
self.region_model.add_listener(some_listener)
```
-Lastly, we setup a `Controller`. There is one for the top figure in each of the
-tabs in this example UI. The `Controller` detects when the mouse enters a
-figure and routes mouse coordinates and key presses to a `RegionTask` to modify the
-bands as directed. We don’t need to do anything additional for that, we just
+Lastly, we setup a `Controller`. There is one for the top figure in each of the
+tabs in this example UI. The `Controller` detects when the mouse enters a figure
+and routes mouse coordinates and key presses to a `RegionTask` to modify the
+bands as directed. We don’t need to do anything additional for that, we just
create the `Controller` and let it manage everything.
```python
Controller(figure, None, self.band_model, controller_div)
```
-There is also a helper class called `RegionEditor`. If you create an instance of
-this, it will make a text input that is linked to the `GIRegionModel`. Just call
-`get_widget()` on the `RegionEditor` after you make it to get a widget you can add
-to a bokeh layout.
+There is also a helper class called `RegionEditor`. If you create an instance of
+this, it will make a text input that is linked to the `GIRegionModel`. Just call
+`get_widget()` on the `RegionEditor` after you make it to get a widget you can
+add to a bokeh layout.
### Handlers
-You can also define custom key handlers for the controller. These allow you to
+You can also define custom key handlers for the controller. These allow you to
map a key press over the figure to a function, along with some help text you
-want shown in the small help text in `controller_div`. The function in your
+want shown in the small help text in `controller_div`. The function in your
`Handler` should have a signature like `fn(key, x, y)`.
```python
def fn(key, x, y):
print(f"{key}: ({x}, {y})")
-h = Handler('q', 'Do something', fn)
-Controller(figure, None, None, controller_div, handlers=[h,])
-```
+h = Handler("q", "Do something", fn)
+Controller(
+ figure,
+ None,
+ None,
+ controller_div,
+ handlers=[
+ h,
+ ],
+)
+```
## TabsTurboInjector
-The `Tabs` in `bokeh` do a poor job of managing the DOM. If you have many tabs
-with content, it can drastically impair the performance. As a workaround, you
-can initialize your tabs using the provided `TabsTurboInjector` in the `interactive`
-module. First, you instantiate one of these helpers passing an empty bokeh `Tabs`
-to it to be managed. Then, instead of adding child tab `Panel`s to your `Tabs`,
-you call the injector's helper method to add the child with a passed title.
+The `Tabs` in `bokeh` do a poor job of managing the DOM. If you have many tabs
+with content, it can drastically impair the performance. As a workaround, you
+can initialize your tabs using the provided `TabsTurboInjector` in the
+`interactive` module. First, you instantiate one of these helpers passing an
+empty bokeh `Tabs` to it to be managed. Then, instead of adding child tab
+`Panel`s to your `Tabs`, you call the injector's helper method to add the child
+with a passed title.
-A side effect of the injector is that, on tab changes, you'll get a momentary blank tab.
+A side effect of the injector is that, on tab changes, you'll get a momentary
+blank tab.
## Modules
-The top-level module is for the bokeh server and for custom UI elements and helpers. It
-has the base PrimitiveVisualizer class that you should subclass if you need a
-custom UI.
+The top-level module is for the bokeh server and for custom UI elements and
+helpers. It has the base PrimitiveVisualizer class that you should subclass if
+you need a custom UI.
-The `fit` module holds the custom `PrimitiveVisualizer` implementations. This keeps
-them from cluttering up the top level as we add more.
+The `fit` module holds the custom `PrimitiveVisualizer` implementations. This
+keeps them from cluttering up the top level as we add more.
The `templates` folder holds HTML and styling information.
The `deprecated` folder holds code that is being retired as a result of a large
-refactor. I have kept it around for now in case it is useful for reference.
+refactor. I have kept it around for now in case it is useful for reference.
### Top Level
#### server
-The server has two calls, `interactive_fitter` and `stop_server`. The `interactive_fitter`
-is called with a `PrimitiveVisualizer` instance and will run the UI interaction
-in a browser until the UI is stopped. `stop_server` is generally called by the
-user clicking the Submit button or closing the browser tab.
+The server has two calls, `interactive_fitter` and `stop_server`. The
+`interactive_fitter` is called with a `PrimitiveVisualizer` instance and will
+run the UI interaction in a browser until the UI is stopped. `stop_server` is
+generally called by the user clicking the Submit button or closing the browser
+tab.
### interactive
-`interactive` has the abstract base class, `PrimitiveVisualizer`. It also has some
-helper methods for building slider/text box widgets and some code for displaying and
-managing bands (range-selections with plot shading) and apertures (also with plot
-shading).
+`interactive` has the abstract base class, `PrimitiveVisualizer`. It also has
+some helper methods for building slider/text box widgets and some code for
+displaying and managing bands (range-selections with plot shading) and apertures
+(also with plot shading).
### controls
-`controls` has code that is wired up to key presses in the browser. This includes
-a `Controller` that listens for key presses and passes control to various `Task`
-managers. For instance, one such `Task` is for bands and it allows a user to
-use the mouse to add, resize, or delete the band selections.
+`controls` has code that is wired up to key presses in the browser. This
+includes a `Controller` that listens for key presses and passes control to
+various `Task` managers. For instance, one such `Task` is for bands and it
+allows a user to use the mouse to add, resize, or delete the band selections.
The easiest way to make use of this logic is to use the helper function to
-connect a `GIRegionModel` and/or `GIApertureModel` to a bokeh `Figure` and `Div`.
-The connected `Figure` will show the selected areas and the `Div` will show
-help text for the currently active task (such as `RegionTask`).
+connect a `GIRegionModel` and/or `GIApertureModel` to a bokeh `Figure` and
+`Div`. The connected `Figure` will show the selected areas and the `Div` will
+show help text for the currently active task (such as `RegionTask`).
-Connecting the models to a `Figure` is done with
+Connecting the models to a `Figure` is done with
`connect_figure_extras(fig, aperture_model, band_model)`
-To cause a figure to respond to key presses and connect a help `Div` area,
-you build a `Controller` like: `Controller(fig, aperture_model, band_model, helptext)`.
-Note that `aperture_model` or `band_model` may be passed as None if it
-is not relevant.
+To cause a figure to respond to key presses and connect a help `Div` area, you
+build a `Controller` like:
+`Controller(fig, aperture_model, band_model, helptext)`. Note that
+`aperture_model` or `band_model` may be passed as None if it is not relevant.
## fit
diff --git a/geminidr/interactive/README.md b/geminidr/interactive/README.md
index 89323da428..8b0333c419 100644
--- a/geminidr/interactive/README.md
+++ b/geminidr/interactive/README.md
@@ -1,19 +1,19 @@
# Interactive Tools
-This is a guide to using the interactive tools for data reduction.
-For information on developing new interactive interfaces, see
+This is a guide to using the interactive tools for data reduction. For
+information on developing new interactive interfaces, see
[INTERACTIVE.md](INTERACTIVE.md)
## Normalize Flat
-The step to normalize flats can be done interactively. This happens
-as part of the `makeProcessedFlat` recipe. To turn on interactive mode,
-pass the `interactive` parameter. Here is an example.
+The step to normalize flats can be done interactively. This happens as part of
+the `makeProcessedFlat` recipe. To turn on interactive mode, pass the
+`interactive` parameter. Here is an example.
### Step 1: Get Data
-For this example, you will need to download `N20200520S0141.fits`. You
-can do this in your browser by browsing to:
+For this example, you will need to download `N20200520S0141.fits`. You can do
+this in your browser by browsing to:
@@ -29,26 +29,26 @@ curl -O https://archive.gemini.edu/file/N20200520S0141.fits
reduce -p interactive=True -p do_bias=False N20200520S0141.fits
```
-This should select the `makeProcessedFlat` recipe. The `do_bias` parameter
-just drops that step so we can focus on the `normalizeFlat` interactivity.
-The user interface should automatically start in your web browser and will
-look as follows:
+This should select the `makeProcessedFlat` recipe. The `do_bias` parameter just
+drops that step so we can focus on the `normalizeFlat` interactivity. The user
+interface should automatically start in your web browser and will look as
+follows:
### Step 3a: Alter Inputs As Desired
![Normalize Flat Input Descriptions](docs/NormalizeFlatInputCallouts.png)
-There are two sets of inputs. The left-most are applied across all of the
-CCDs. This is the fit function (i.e. spline) to perform and a row of data to sample.
-The fit is too expensive to preview on all of the data, so this allows for
-a responsive interface. The inputs to the fit are available per-extension
-and on each tab.
+There are two sets of inputs. The left-most are applied across all of the CCDs.
+This is the fit function (i.e. spline) to perform and a row of data to sample.
+The fit is too expensive to preview on all of the data, so this allows for a
+responsive interface. The inputs to the fit are available per-extension and on
+each tab.
### Step 3b: Alter Regions As Desired
-The regions can be specified as well. This narrows the points used as input
-to the fit. This can be done interactively, or via the text input below
-each plot. Regions are also set per-CCD.
+The regions can be specified as well. This narrows the points used as input to
+the fit. This can be done interactively, or via the text input below each plot.
+Regions are also set per-CCD.
### Step 4: Submit Parameters
@@ -57,56 +57,54 @@ continue, using the inputs and fit function you specified.
### Step 5: Check Output
-After finishing, the result of the reduction will be available as
+After finishing, the result of the reduction will be available as
`N20200520S0141_flat.fits`
## Calculate Sensitivity
-The `calculateSensitivity` primitive has also been set up for interactive
-use. Here are steps to test it out.
+The `calculateSensitivity` primitive has also been set up for interactive use.
+Here are steps to test it out.
### Step 1: Get Data
-For this example, we are going to run the primitive explicitly. To do this,
-I have pulled out a file from just before this step during reduce. You can
-get the file at this URL (Google Drive). You must be logged in to your
-Gemini account, so a browser is recommended.
+For this example, we are going to run the primitive explicitly. To do this, I
+have pulled out a file from just before this step during reduce. You can get the
+file at this URL (Google Drive). You must be logged in to your Gemini account,
+so a browser is recommended.
-
### Step 2: Call `reduce` With `interactive` And Specify Primitive
```bash
reduce -p interactive=True -r calculateSensitivity N20201022S0006_align.fits
```
-This should directly call the `calculateSensitivity` primitive.
-The user interface should automatically start in your web browser and will
-look as follows:
+This should directly call the `calculateSensitivity` primitive. The user
+interface should automatically start in your web browser and will look as
+follows:
### Step 3a: Alter Inputs As Desired
![Calculate Sensitivity Visualizer](docs/CalculateSensitivityCallouts.png)
-There are two sets of inputs. The left-most are applied across all of the
-CCDs. This is the fit function (i.e. spline) to perform on the data.
-The inputs to the fit are available per-extension
-and on each tab.
+There are two sets of inputs. The left-most are applied across all of the CCDs.
+This is the fit function (i.e. spline) to perform on the data. The inputs to the
+fit are available per-extension and on each tab.
### Step 3b: Alter Regions As Desired
-The regions can be specified as well. This narrows the points used as input
-to the fit. This can be done interactively, or via the text input below
-each plot. Regions are also set per-CCD.
+The regions can be specified as well. This narrows the points used as input to
+the fit. This can be done interactively, or via the text input below each plot.
+Regions are also set per-CCD.
### Step 3c: Mask Arbitrary Points As Desired
-This primitive allows the selection of arbitrary points. This can be done
-by clicking directly on a point, by using the box select tool, or by using the
-lasso free select tool. Then you either use the 'M' and 'U' keys or the
-buttons to mask or unmask those points. This was not feasable for the
-normalize flat UI since it can only show one row at a time.
+This primitive allows the selection of arbitrary points. This can be done by
+clicking directly on a point, by using the box select tool, or by using the
+lasso free select tool. Then you either use the 'M' and 'U' keys or the buttons
+to mask or unmask those points. This was not feasable for the normalize flat UI
+since it can only show one row at a time.
### Step 4: Submit Parameters
@@ -115,42 +113,41 @@ continue, using the inputs and fit function you specified.
### Step 5: Check Output
-After finishing, the result of the reduction will be available as
+After finishing, the result of the reduction will be available as
`N20201022S0006_sensitivityCalculated.fits`
## Find Source Apertures
-The `findSourceApertures` primitive has also been set up for interactive
-use. Here are steps to test it out.
+The `findSourceApertures` primitive has also been set up for interactive use.
+Here are steps to test it out.
### Step 1: Get Data
-For this example, we are going to run the primitive explicitly. To do this,
-I have pulled out a file from just before this step during reduce. You can
-get the file at this URL (Google Drive). You must be logged in to your
-Gemini account, so a browser is recommended.
+For this example, we are going to run the primitive explicitly. To do this, I
+have pulled out a file from just before this step during reduce. You can get the
+file at this URL (Google Drive). You must be logged in to your Gemini account,
+so a browser is recommended.
-
### Step 2: Call `reduce` With `interactive` And Specify Primitive
```bash
reduce -p interactive=True -r findSourceApertures S20200201S0031_aperturesTraced.fits
```
-This should directly call the `findSourceApertures` primitive.
-The user interface should automatically start in your web browser and will
-look as follows:
+This should directly call the `findSourceApertures` primitive. The user
+interface should automatically start in your web browser and will look as
+follows:
### Step 3: Alter Inputs As Desired
![Find Source Apertures Visualizer](docs/FindSourceAperturesCallouts.png)
-The inputs to the primitive are in the top left. Altering these will cause the
-apertures to be regenerated. Then, you can modify, add, or delete apertures using
-the controls below. You can also edit the apertures by hovering the mouse over
-the plot and using the key commands as described on the bottom left.
+The inputs to the primitive are in the top left. Altering these will cause the
+apertures to be regenerated. Then, you can modify, add, or delete apertures
+using the controls below. You can also edit the apertures by hovering the mouse
+over the plot and using the key commands as described on the bottom left.
### Step 4: Submit Parameters
@@ -159,5 +156,5 @@ continue, using the currently defined apertures.
### Step 5: Check Output
-After finishing, the result of the reduction will be available as
+After finishing, the result of the reduction will be available as
`S20200201S0031_aperturesFound.fits`
diff --git a/geminidr/interactive/__init__.py b/geminidr/interactive/__init__.py
index e976cd3ba5..25e890e4a4 100644
--- a/geminidr/interactive/__init__.py
+++ b/geminidr/interactive/__init__.py
@@ -1 +1 @@
-# __all__ = ["interactive", "controls", "server"]
\ No newline at end of file
+# __all__ = ["interactive", "controls", "server"]
diff --git a/geminidr/interactive/docs/index.rst b/geminidr/interactive/docs/index.rst
index 1fdecb155d..b60a4fd800 100644
--- a/geminidr/interactive/docs/index.rst
+++ b/geminidr/interactive/docs/index.rst
@@ -137,10 +137,10 @@ it. This is not always consistent throughout models, for example,
This means you will need to check the bokeh documentation for the component
you are adding to see if it accepts a `stylesheet` attribute, or you need to
-test it yourself should it not be specified. Generally, err on the side of
+test it yourself should it not be specified. Generally, err on the side of
assuming it does accept a stylesheet and debugging as needed.
-Bokeh does have a `GlobalImportedStyleSheet` class that does not work with the
+Bokeh does have a `GlobalImportedStyleSheet` class that does not work with the
current version of bokeh and DRAGONS. Instead, this method links the shadow
elements within a component to the stylesheet. This means that the stylesheet
is applied to the component, but it is not applied globally. This is a
@@ -181,7 +181,7 @@ strings that specify how the component should be sized. The strings are
+-----------------+---------------------------------------------------------+
Bokeh models also often have `width_policy` and `height_policy` attributes,
-but these should be avoided in the interactive module. See
+but these should be avoided in the interactive module. See
[bokeh's reference](https://docs.bokeh.org/en/latest/docs/reference/models/layouts.html#bokeh.models.Column)
for more details on what these attributes do and when to use them.
@@ -197,7 +197,7 @@ The `margin` attribute is used to specify the margins around a component. The
`margin` attribute accepts a tuple of four integers that specify the margins
in the order (top, right, bottom, left). The margins are specified in pixels.
Margins can be used to change where a component is positioned within its own
-'box' on the page.
+'box' on the page.
If you are creating a widget, it is best practice to use margin to add a
static margin around the widget, and `Spacer` to add a dynamic margin between
@@ -273,4 +273,4 @@ base class that defines the interface for all visualizers, including some
:members:
:undoc-members:
:show-inheritance:
- :exclude-members: __init__
\ No newline at end of file
+ :exclude-members: __init__
diff --git a/geminidr/interactive/fit/help.py b/geminidr/interactive/fit/help.py
index ec7f1343ed..e4a52f2c0b 100644
--- a/geminidr/interactive/fit/help.py
+++ b/geminidr/interactive/fit/help.py
@@ -1,29 +1,61 @@
-
-
-__all__ = ["PLOT_TOOLS_WITH_SELECT_HELP_SUBTEXT", "PLOT_TOOLS_HELP_SUBTEXT", "REGION_EDITING_HELP_SUBTEXT",
- "CALCULATE_SENSITIVITY_HELP_TEXT", "DETERMINE_WAVELENGTH_SOLUTION_HELP_TEXT",
- "NORMALIZE_FLAT_HELP_TEXT", "DEFAULT_HELP", "TRACE_APERTURES", "SKY_CORRECT_FROM_SLIT_HELP_TEXT"]
+__all__ = [
+ "PLOT_TOOLS_WITH_SELECT_HELP_SUBTEXT",
+ "PLOT_TOOLS_HELP_SUBTEXT",
+ "REGION_EDITING_HELP_SUBTEXT",
+ "CALCULATE_SENSITIVITY_HELP_TEXT",
+ "DETERMINE_WAVELENGTH_SOLUTION_HELP_TEXT",
+ "NORMALIZE_FLAT_HELP_TEXT",
+ "DEFAULT_HELP",
+ "TRACE_APERTURES",
+ "SKY_CORRECT_FROM_SLIT_HELP_TEXT",
+]
def _plot_tool(name, icon):
- return '' + name + '
'
+ return (
+ ''
+ + name
+ + "
"
+ )
tools_with_select = (
- ("Move", 'move', 'drag the plot around to reposition it'),
- ("Free-Select", 'lasso_select', 'draw an arbitrary area to select points for masking/unmasking
also works with shift'),
- ('Box Zoom', 'box_zoom', 'drag a rectangle to zoom into that area of the plot'),
- ('Box Select', 'box_select', 'drag a rectangle to select points for masking/unmasking
also works with shift'),
- ('Scroll Wheel Zoom', 'wheel_zoom', 'enable the scroll wheel to zoom the plot in or out'),
- ('Point Select', 'tap_select', 'click on individual points to select or unselect for masking/unmasking.
also works with shift'),
- ('Reset', 'reset', 'Reset the view, clearing any zoom or moves')
+ ("Move", "move", "drag the plot around to reposition it"),
+ (
+ "Free-Select",
+ "lasso_select",
+ "draw an arbitrary area to select points for masking/unmasking
also works with shift",
+ ),
+ ("Box Zoom", "box_zoom", "drag a rectangle to zoom into that area of the plot"),
+ (
+ "Box Select",
+ "box_select",
+ "drag a rectangle to select points for masking/unmasking
also works with shift",
+ ),
+ (
+ "Scroll Wheel Zoom",
+ "wheel_zoom",
+ "enable the scroll wheel to zoom the plot in or out",
+ ),
+ (
+ "Point Select",
+ "tap_select",
+ "click on individual points to select or unselect for masking/unmasking.
also works with shift",
+ ),
+ ("Reset", "reset", "Reset the view, clearing any zoom or moves"),
)
tools_without_select = (
- ("Move", 'move', 'drag the plot around to reposition it'),
- ('Box Zoom', 'box_zoom', 'drag a rectangle to zoom into that area of the plot'),
- ('Scroll Wheel Zoom', 'wheel_zoom', 'enable the scroll wheel to zoom the plot in or out'),
- ('Reset', 'reset', 'Reset the view, clearing any zoom or moves')
+ ("Move", "move", "drag the plot around to reposition it"),
+ ("Box Zoom", "box_zoom", "drag a rectangle to zoom into that area of the plot"),
+ (
+ "Scroll Wheel Zoom",
+ "wheel_zoom",
+ "enable the scroll wheel to zoom the plot in or out",
+ ),
+ ("Reset", "reset", "Reset the view, clearing any zoom or moves"),
)
@@ -49,50 +81,59 @@ def _plot_tool(name, icon):
"""
-FIT1D_PARAMETERS_HELP_WITH_GROW = FIT1D_PARAMETERS_HELP_WITHOUT_GROW + """
+FIT1D_PARAMETERS_HELP_WITH_GROW = (
+ FIT1D_PARAMETERS_HELP_WITHOUT_GROW
+ + """
Grow
Radius within which reject pixels adjacent to sigma-clipped pixels
"""
+)
-PLOT_TOOLS_WITH_SELECT_HELP_SUBTEXT = """
+PLOT_TOOLS_WITH_SELECT_HELP_SUBTEXT = (
+ """
Plot Tools
-