diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b905b087..27b39360 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -27,7 +27,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
- python-version: ["3.9", "3.10", "3.11", "3.12"]
+ python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
@@ -63,7 +63,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
- python-version: 3.9
+ python-version: "3.10"
cache: pip
- run: pip install --upgrade coverage[toml]
- uses: actions/download-artifact@v4
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 8c83c31b..05b5aefb 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,7 +18,7 @@ jobs:
- name: Set up Python ubuntu-latest
uses: actions/setup-python@v4
with:
- python-version: '3.9' # Should always be the minimum supported Python version
+ python-version: '3.10' # Should always be the minimum supported Python version
cache: 'pip'
cache-dependency-path': 'requirements.txt'
- name: Install dependencies
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index c19064c9..dde8d987 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,12 +1,12 @@
---
# See https://pre-commit.com for more information
default_language_version:
- python: python3.9
+ python: python3.10
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: 'https://github.com/pre-commit/pre-commit-hooks'
- rev: v4.6.0
+ rev: v5.0.0
hooks:
- id: trailing-whitespace
exclude: '(notebooks|attic|benchmark|testdata)/.*'
@@ -30,7 +30,7 @@ repos:
- id: isort
exclude: '(notebooks|attic|benchmark|testdata)/.*'
- repo: 'https://github.com/psf/black'
- rev: 24.8.0
+ rev: 24.10.0
hooks:
- id: black
exclude: '(notebooks|attic|benchmark|testdata)/.*'
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index e0652ef0..e2a2913c 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -9,7 +9,7 @@ version: 2
build:
os: ubuntu-22.04
tools:
- python: "3.9"
+ python: "3.10"
# You can also specify other tool versions:
# nodejs: "19"
# rust: "1.64"
diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css
index 15a41eca..961ef3bc 100644
--- a/docs/source/_static/css/custom.css
+++ b/docs/source/_static/css/custom.css
@@ -1,11 +1,95 @@
/* Remove width restriction on content so that diagrams
- are more visible */
- .wy-nav-content {
- max-width: none;
- }
-
- /* Override the logo/searchbar background color;
- it conflicts with the logo color */
- .wy-side-nav-search {
- background-color: #C6B9D2;
- }
+are more visible */
+.wy-nav-content {
+ max-width: none;
+}
+
+/* Override the logo/searchbar background color;
+ it conflicts with the logo color */
+.wy-side-nav-search {
+ background-color: #C6B9D2;
+}
+
+.black {
+ color: black;
+}
+
+.gray {
+ color: gray;
+}
+
+.grey {
+ color: gray;
+}
+
+.silver {
+ color: silver;
+}
+
+.white {
+ color: white;
+}
+
+.maroon {
+ color: maroon;
+}
+
+.red {
+ color: red;
+}
+
+.magenta {
+ color: magenta;
+}
+
+.fuchsia {
+ color: fuchsia;
+}
+
+.pink {
+ color: pink;
+}
+
+.orange {
+ color: orange;
+}
+
+.yellow {
+ color: yellow;
+}
+
+.lime {
+ color: lime;
+}
+
+.green {
+ color: green;
+}
+
+.olive {
+ color: olive;
+}
+
+.teal {
+ color: teal;
+}
+
+.cyan {
+ color: cyan;
+}
+
+.aqua {
+ color: aqua;
+}
+
+.blue {
+ color: blue;
+}
+
+.navy {
+ color: navy;
+}
+
+.purple {
+ color: purple;
+}
diff --git a/docs/source/_static/icon/UMD_Globe_Icon_Large.png b/docs/source/_static/icon/UMD_Globe_Icon_Large.png
new file mode 100644
index 00000000..972364cb
Binary files /dev/null and b/docs/source/_static/icon/UMD_Globe_Icon_Large.png differ
diff --git a/docs/source/background/gbo_context.rst b/docs/source/background/gbo_context.rst
deleted file mode 100644
index c394d61a..00000000
--- a/docs/source/background/gbo_context.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-**************************
-Context Within GBO Systems
-**************************
-
-Background
-==========
-
-GBTIDL
-------
-
-`GBTIDL` is the current software used to calibrate SDFITS files from the GBT.
-
-Requirements
-============
-
-At its core, `dysh` needs to read in an SDFITS file and ultimately output calibrated data.
-
-.. mermaid::
-
- flowchart LR
- A[SDFITS File] --> B[Dysh]
- B --> C[Output Data]
diff --git a/docs/source/background/img/.gitkeep b/docs/source/background/img/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/docs/source/background/index.rst b/docs/source/background/index.rst
deleted file mode 100644
index c546dc11..00000000
--- a/docs/source/background/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-**********
-Background
-**********
-
-Why does this exist?
-
-.. toctree::
- :maxdepth: 2
-
- gbo_context
- sdfits_files/index
diff --git a/docs/source/conf.py b/docs/source/conf.py
index f53bf87e..83a9e822 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -58,6 +58,7 @@
"sphinxcontrib.mermaid",
"numpydoc",
"sphinx_inline_tabs",
+ "sphinx_design",
]
numpydoc_show_class_members = True
@@ -75,6 +76,11 @@
# TODO: These appear to have no effect
mermaid_verbose = True
+# Mermaid configuration
+# https://github.com/mgaitan/sphinxcontrib-mermaid
+mermaid_version = "11.2.0"
+mermaid_params = ["--theme", "dark"]
+
# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]
@@ -101,7 +107,7 @@
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path .
-exclude_patterns = []
+exclude_patterns = ["examples/output"]
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = "sphinx"
@@ -120,11 +126,25 @@
# documentation.
#
html_theme_options = {
+ "repository_url": "https://github.com/GreenBankObservatory/dysh",
+ "repository_branch": "main",
"logo": {
"image_light": "_static/icon/dysh_logo_lightmode.png",
"image_dark": "_static/icon/dysh_logo_darkmode.png",
},
+ # "show_toc_level": 2,
+ "use_source_button": True,
+ "use_issues_button": True,
+ "use_download_button": True,
+ "use_sidenotes": True,
"show_toc_level": 2,
+ "icon_links": [
+ {
+ "name": "GitHub",
+ "url": "https://github.com/GreenBankObservatory/dysh",
+ "icon": "fa-brands fa-github",
+ },
+ ],
}
# Add any paths that contain custom static files (such as style sheets) here,
diff --git a/docs/source/examples b/docs/source/examples
deleted file mode 120000
index dc9f6698..00000000
--- a/docs/source/examples
+++ /dev/null
@@ -1 +0,0 @@
-../../notebooks/examples/
\ No newline at end of file
diff --git a/docs/source/explanations/index.rst b/docs/source/explanations/index.rst
new file mode 100644
index 00000000..3c9841c2
--- /dev/null
+++ b/docs/source/explanations/index.rst
@@ -0,0 +1,58 @@
+.. _explanations:
+
+###############################################
+:octicon:`repo;2em;purple` Explanation Material
+###############################################
+
+Big-picture explanations of higher-level concepts. Most useful for building understanding of a particular topic.
+
+dysh
+====
+
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`container;3em;green` **ScanBlock**
+
+ What is a ScanBlock?
+
+ .. button-link:: scanblock/index.html
+ :color: primary
+ :tooltip: Details of what is a ScanBlock
+ :outline:
+ :click-parent:
+
+ ScanBlock
+
+
+SDFITS
+======
+
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`file;3em;green` **SDFITS**
+
+ What are SDFITS files?
+
+ .. button-link:: sdfits/index.html
+ :color: primary
+ :tooltip: SDFITS details
+ :outline:
+ :click-parent:
+
+ SDFITS
+
+
+.. toctree::
+ :hidden:
+ :maxdepth: 3
+
+ scanblock/index
+ sdfits/index
diff --git a/docs/source/explanations/scanblock/index.rst b/docs/source/explanations/scanblock/index.rst
new file mode 100644
index 00000000..1d4988e4
--- /dev/null
+++ b/docs/source/explanations/scanblock/index.rst
@@ -0,0 +1,42 @@
+.. _scanblocks:
+
+#########
+ScanBlock
+#########
+
+.. mermaid::
+
+ flowchart TD
+
+ subgraph newLines[GBTFITSLoad
+ 50 Scans
+ Position Switching
+ Dual Linear Polarization
+ 1 Beam
+ 4 Frequency Windows
+ 100 integrations each
+ ]
+
+
+
+
+ end
+
+
+ newLines -- getps( scan=45, plnum=1, ifnum=0 ) --> ScanBlock1
+ newLines -- gettp( scan=[17,18,19], intnum=np.r_[50:100], ifnum=2 ) --> ScanBlock2
+
+
+
+ subgraph ScanBlock1[ScanBlock]
+ psscan["spectra.scan.PSScan
scans = 44,45
plnum = 1
ifnum = 0
intnum = (0,100)"]
+ end
+ subgraph ScanBlock2[ScanBlock]
+ tpscan1["spectra.scan.TPScan
scan=17
plnum = 0
ifnum = 2
intnum=(50,100)"]
+ tpscan2["spectra.scan.TPScan
scan=18
plnum = 0
ifnum = 2
intnum=(50,100)"]
+ tpscan3["spectra.scan.TPScan
scan=19
plnum = 0
ifnum = 2
intnum=(50,100)"]
+
+ end
+
+ ScanBlock1[Scan Block] -- timeaverage() --->spectrum1[Spectrum]
+ ScanBlock2[Scan Block] -- timeaverage() --->spectrum2[Spectrum]
diff --git a/docs/source/explanations/sdfits/index.rst b/docs/source/explanations/sdfits/index.rst
new file mode 100644
index 00000000..a57d6d7b
--- /dev/null
+++ b/docs/source/explanations/sdfits/index.rst
@@ -0,0 +1,7 @@
+.. _sdfits-explanation:
+
+############
+SDFITS Files
+############
+
+This section is empty for now, but you can check the column definitions :ref:`here `, or the SDFITS convention as defined in `AIPS++ `_ or at `ADASS IX `_, or `the registered SDFITS convention `_.
diff --git a/docs/source/for_beta_testers/beta_testing.rst b/docs/source/for_beta_testers/beta_testing.rst
index 44e24315..6898e9e3 100644
--- a/docs/source/for_beta_testers/beta_testing.rst
+++ b/docs/source/for_beta_testers/beta_testing.rst
@@ -70,7 +70,7 @@ We provide steps for working in one of `GBO data reduction hosts `_,
+`numpy `_,
+`scipy `_,
+`pandas `_,
+`specutils `_, and
+`matplotlib `_.
- install
- tutorials/index
+We strongly recommend the use of a virtual environment for installing `dysh`.
+
+With `pip` from PyPi
+--------------------
+
+``dysh`` is most easily installed with ``pip``, which will take care of
+any dependencies. The packaged code is hosted at the `Python Packaging
+Index `_.
+
+.. code::
+
+ $ pip install dysh
+
+.. warning::
+ `dysh` is currently in development and the above command will install the latest stable version of `dysh` which might not reflect the contents of the documentation.
+ For beta testing please see :ref:`beta-install`.
+
+From GitHub
+-----------
+
+Installing from GitHub will allow you to install the latest, albeit unstable, version of `dysh`.
+To install the main branch of `dysh` with all extra dependencies from GitHub:
+
+.. code::
+
+ $ pip install "dysh[all] @ git+https://github.com/GreenBankObservatory/dysh"
diff --git a/docs/source/getting_started/install.rst b/docs/source/getting_started/install.rst
deleted file mode 100644
index 077407f1..00000000
--- a/docs/source/getting_started/install.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-*******************
-Installing ``dysh``
-*******************
-
-``dysh`` requires Python 3.9+ and recent versions of
-`astropy `_,
-`numpy `_,
-`scipy `_,
-`pandas `_,
-`specutils `_, and
-`matplotlib `_.
-
-With `pip` from PyPi
-====================
-
-``dysh`` is most easily installed with ``pip``, which will take care of
-any dependencies. The packaged code is hosted at the `Python Packaging
-Index `_.
-
-.. code::
-
- $ pip install dysh
-
-.. warning::
- `dysh` is currently in development and the above command will install the latest stable version of `dysh` which might not reflect the contents of the documentation. For beta testing please see :ref:`beta-install`.
-
-From github
-===========
-
-To install from github without creating a separate virtual environment:
-
-.. code::
-
- $ git clone git@github.com:GreenBankObservatory/dysh.git
- $ cd dysh
- $ pip install -e .
-
-If you wish to install using a virtual environment, which we strongly recommend if you plan to contribute to the code, see :doc:`installation instructions for developers <../for_developers/install>`.
diff --git a/docs/source/how-tos/examples b/docs/source/how-tos/examples
new file mode 120000
index 00000000..d4789f2c
--- /dev/null
+++ b/docs/source/how-tos/examples
@@ -0,0 +1 @@
+../../../notebooks/examples/
\ No newline at end of file
diff --git a/docs/source/how-tos/index.rst b/docs/source/how-tos/index.rst
new file mode 100644
index 00000000..84737709
--- /dev/null
+++ b/docs/source/how-tos/index.rst
@@ -0,0 +1,97 @@
+.. _howtos:
+
+#####################################
+:octicon:`terminal;2em;green` Recipes
+#####################################
+
+Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.
+
+
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`rocket;3em;green` **Velocity Definitions and Rest Frames**
+
+ How to change velocity definitions and reference frames
+
+ .. button-link:: examples/velocity_frames.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Velocity & Frames
+
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`file;3em;green` **Metadata Management**
+
+ How to interact with the metadata of an SDFITS file
+
+ .. button-link:: examples/metadata_management.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Metadata Management
+
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`pulse;3em;green` **Smoothing**
+
+ How to smooth data
+
+ .. button-link:: examples/smoothing.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Smoothing
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :material-outlined:`save;3em;green` **Data IO**
+
+ How to read and save data
+
+ .. button-link:: examples/dataIO.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Data IO
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :material-outlined:`compare_arrows;3em;green` **Align Spectra**
+
+ How to read and save data
+
+ .. button-link:: examples/align_spectra.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Align Spectra
+
+.. toctree::
+ :maxdepth: 4
+ :hidden:
+
+ examples/velocity_frames
+ examples/metadata_management
+ examples/smoothing
+ examples/dataIO
+ examples/align_spectra
diff --git a/docs/source/index.rst b/docs/source/index.rst
index f3841dac..7dba9adf 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -6,28 +6,100 @@
`Green Bank Observatory `_
and the Laboratory for Millimeter-Wave Astronomy (LMA)
at the `University of Maryland (UMD) `_.
-It is intended to replace `GBTIDL `_, GBO's current spectral line data reduction package.
+It is intended to replace `GBTIDL `_, GBO's current spectral line data reduction package.
Contents
===============
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`mortar-board;3em;orange` **Tutorials**
+
+ Learning-oriented lessons take you through a series
+ of steps to complete a project.
+
+ Most useful when you want to get started reducing your data.
+
+ .. button-link:: tutorials/index.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to Tutorials
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`terminal;3em;green` **Recipes**
+
+ Practical step-by-step guides to help you achieve a specific goal.
+
+ Most useful when you're trying to get something done.
+
+
+ .. button-link:: how-tos/index.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to Recipes
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`repo;3em;purple` **Explanation**
+
+ Big-picture explanations of higher-level concepts.
+
+ Most useful for building understanding of a particular topic.
+
+
+ .. button-link:: explanations/index.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to Explanation Material
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ :octicon:`tools;3em;sd-text-primary` **References**
+
+ Nitty-gritty technical descriptions of how `dysh` works.
+
+ Most useful when you need detailed information about the API or how to
+ contribute.
+
+
+ .. button-link:: reference/index.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to Reference Material
+
+
.. toctree::
:maxdepth: 2
+ :hidden:
whatsnew/0.3.rst
- background/index
getting_started/index
- examples/index
- modules/index
+ tutorials/index
+ how-tos/index
+ explanations/index
+ reference/index
for_beta_testers/index
for_developers/index
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
Reporting Issues
================
@@ -48,4 +120,4 @@ Dev Team
| Peter Teuben (UMD)
| Pedro Salas (GBO)
| Evan Smith (GBO)
-| Thomas Chamberlain (GBO)
+| Thomas Chamberlin (GBO)
diff --git a/docs/source/modules/index.rst b/docs/source/modules/index.rst
deleted file mode 100644
index f2ea3fc3..00000000
--- a/docs/source/modules/index.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-****************
-Modules and APIs
-****************
-
-.. toctree::
- :maxdepth: 2
-
- dysh.fits
- dysh.spectra
- dysh.plot
- dysh.util
diff --git a/docs/source/reference/index.rst b/docs/source/reference/index.rst
new file mode 100644
index 00000000..a9f80fe7
--- /dev/null
+++ b/docs/source/reference/index.rst
@@ -0,0 +1,48 @@
+.. _references:
+
+
+#####################################################
+:octicon:`tools;2em;sd-text-primary` Reference Guides
+#####################################################
+
+
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **Modules**
+
+ dysh modules and functions
+
+ .. button-link:: modules/index.html
+ :color: primary
+ :tooltip: Reference materials for dysh modules
+ :outline:
+ :click-parent:
+
+ Modules
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **SDFITS files**
+
+ SDFITS files
+
+ .. button-link:: sdfits_files/index.html
+ :color: primary
+ :tooltip: Reference materials for SDFITS files
+ :outline:
+ :click-parent:
+
+ SDFITS files
+
+.. toctree::
+ :maxdepth: 3
+ :hidden:
+
+ modules/index
+ sdfits_files/index
diff --git a/docs/source/reference/modules/dysh.coordinates.rst b/docs/source/reference/modules/dysh.coordinates.rst
new file mode 100644
index 00000000..37389e18
--- /dev/null
+++ b/docs/source/reference/modules/dysh.coordinates.rst
@@ -0,0 +1,14 @@
+Spatial and Velocity Coordinates and Reference Frames
+=====================================================
+
+.. automodule:: dysh.coordinates
+ :members:
+ :undoc-members:
+ :show-inheritance:
+
+Core Functions and Classes
+--------------------------
+.. automodule:: dysh.coordinates.core
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/source/modules/dysh.fits.rst b/docs/source/reference/modules/dysh.fits.rst
similarity index 100%
rename from docs/source/modules/dysh.fits.rst
rename to docs/source/reference/modules/dysh.fits.rst
diff --git a/docs/source/modules/dysh.plot.rst b/docs/source/reference/modules/dysh.plot.rst
similarity index 100%
rename from docs/source/modules/dysh.plot.rst
rename to docs/source/reference/modules/dysh.plot.rst
diff --git a/docs/source/modules/dysh.spectra.rst b/docs/source/reference/modules/dysh.spectra.rst
similarity index 100%
rename from docs/source/modules/dysh.spectra.rst
rename to docs/source/reference/modules/dysh.spectra.rst
diff --git a/docs/source/modules/dysh.util.rst b/docs/source/reference/modules/dysh.util.rst
similarity index 100%
rename from docs/source/modules/dysh.util.rst
rename to docs/source/reference/modules/dysh.util.rst
diff --git a/docs/source/reference/modules/index.rst b/docs/source/reference/modules/index.rst
new file mode 100644
index 00000000..36346350
--- /dev/null
+++ b/docs/source/reference/modules/index.rst
@@ -0,0 +1,80 @@
+****************
+Modules and APIs
+****************
+
+.. grid:: 1 2 2 2
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **fits**
+
+ .. button-link:: dysh.fits.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to dysh.fits
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **spectra**
+
+ .. button-link:: dysh.spectra.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to dysh.spectra
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **plot**
+
+ .. button-link:: dysh.plot.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to dysh.plot
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **coordinates**
+
+ .. button-link:: dysh.coordinates.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to dysh.coordinates
+
+ .. grid-item-card::
+ :shadow: md
+ :margin: 2 2 0 0
+
+ **util**
+
+ .. button-link:: dysh.util.html
+ :color: primary
+ :outline:
+ :click-parent:
+
+ Go to dysh.util
+
+.. toctree::
+ :maxdepth: 2
+ :hidden:
+
+ dysh.fits
+ dysh.spectra
+ dysh.plot
+ dysh.coordinates
+ dysh.util
diff --git a/docs/source/background/sdfits_files/gbt_sdfits.rst b/docs/source/reference/sdfits_files/gbt_sdfits.rst
similarity index 96%
rename from docs/source/background/sdfits_files/gbt_sdfits.rst
rename to docs/source/reference/sdfits_files/gbt_sdfits.rst
index 32694006..66bd4e80 100644
--- a/docs/source/background/sdfits_files/gbt_sdfits.rst
+++ b/docs/source/reference/sdfits_files/gbt_sdfits.rst
@@ -1,3 +1,5 @@
+.. _sdfits-reference:
+
****************
GBT SDFITS Files
****************
@@ -9,7 +11,12 @@ The single-dish FITS (SDFITS) convention is used for observer-facing GBT data. T
HDU 0 (PRIMARY)
---------------
-.. list-table:: Header
+.. _primary-sdfits-header:
+
+Header
+^^^^^^
+
+.. list-table::
:widths: 25 25 50
:header-rows: 1
@@ -38,7 +45,12 @@ HDU 0 (PRIMARY)
HDU 1 (SINGLE DISH)
-------------------
-.. list-table:: Header
+.. _singledish-sdfits-header:
+
+Header
+^^^^^^
+
+.. list-table::
:widths: 25 25 50
:header-rows: 1
@@ -91,7 +103,10 @@ HDU 1 (SINGLE DISH)
- "SINGLE DISH"
- The name of this binary table extension
-.. list-table:: Data
+Data
+^^^^
+
+.. list-table::
:widths: 20 20 20 40
:header-rows: 1
@@ -630,4 +645,4 @@ Flag files indicate the data that should be ignored. For example, these flags ca
Other Resources
===============
-The full SDFITS documentation for GBO can be found here: `The GBT SDFITS Project Wiki `_
+The full SDFITS documentation for GBO can be found on `the GBT SDFITS Project Wiki `_. However, this page is out of date and requires a login to view.
diff --git a/docs/source/background/sdfits_files/index.rst b/docs/source/reference/sdfits_files/index.rst
similarity index 100%
rename from docs/source/background/sdfits_files/index.rst
rename to docs/source/reference/sdfits_files/index.rst
diff --git a/docs/source/tutorials/examples b/docs/source/tutorials/examples
new file mode 120000
index 00000000..d4789f2c
--- /dev/null
+++ b/docs/source/tutorials/examples
@@ -0,0 +1 @@
+../../../notebooks/examples/
\ No newline at end of file
diff --git a/docs/source/tutorials/index.rst b/docs/source/tutorials/index.rst
new file mode 100644
index 00000000..e10cc460
--- /dev/null
+++ b/docs/source/tutorials/index.rst
@@ -0,0 +1,37 @@
+.. _tutorials:
+
+
+############################################
+:octicon:`mortar-board;2em;orange` Tutorials
+############################################
+
+Learning-oriented lessons take you through a series of steps to complete a project.
+Most useful when you want to get started reducing your data.
+
+
+.. card-carousel:: 2
+
+ .. card:: Position Switched Data
+ :link: examples/positionswitch.html
+
+ - Calibrate the data.
+
+ .. card:: Frequency Switched Data
+ :link: examples/frequencyswitch.html
+
+ - Calibrate the data.
+
+ .. card:: Sub Beam Nod Data
+ :link: examples/subbeamnod.html
+
+ .. card:: Nodding Data
+ :link: examples/nodding.html
+
+.. toctree::
+ :maxdepth: 4
+ :hidden:
+
+ examples/positionswitch
+ examples/frequencyswitch
+ examples/subbeamnod
+ examples/nodding
diff --git a/notebooks/examples/align_spectra.ipynb b/notebooks/examples/align_spectra.ipynb
new file mode 100644
index 00000000..2ae61aec
--- /dev/null
+++ b/notebooks/examples/align_spectra.ipynb
@@ -0,0 +1,421 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "9359fc63-3229-4fd3-8631-09c181e6a27b",
+ "metadata": {},
+ "source": [
+ "# Aligning Spectra\n",
+ "\n",
+ "This guide shows how to align spectra before they can be averaged.\n",
+ "\n",
+ "We use an observation with a mixed observing strategy; position switching and frequency switching.\n",
+ "In this case the on and off source observations also switch the signal in the frequency domain between a signal and a reference state, so there are four switching states: signal with the noise diode, signal without the noise diode, reference with the noise diode and reference without the noise diode.\n",
+ "\n",
+ "We will calibrate the signal and reference states independently, using position switching. Then, we'll look at the calibrated spectra as a function of channel and vizualize the shift between the signal and reference states. Finally we will shift the reference state and average it with the signal state."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "e34b86e9-6438-4e84-8503-d6dd1699e243",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from pathlib import Path\n",
+ "import matplotlib.pyplot as plt\n",
+ "from dysh.util.download import from_url\n",
+ "from dysh.fits.gbtfitsload import GBTFITSLoad\n",
+ "from dysh.spectra import average_spectra"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "74f02c88-5632-4f64-abda-6e70f63ff0fd",
+ "metadata": {},
+ "source": [
+ "## Data Retrieval\n",
+ "\n",
+ "Download the example SDFITS data, if necessary."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "cf801734-2ba0-48cd-a664-3ca15ce58890",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Starting download...\n",
+ "TGBT24B_613_04.raw.vegas.trim.fits already downloaded at /home/sandboxes/psalas/Dysh/dysh/notebooks/examples/data\n"
+ ]
+ }
+ ],
+ "source": [
+ "url = \"http://www.gb.nrao.edu/dysh/example_data/mixed-fs-ps/data/TGBT24B_613_04.raw.vegas.trim.fits\"\n",
+ "savepath = Path.cwd() / \"data\"\n",
+ "filename = from_url(url, savepath)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "66d69520-58ac-46ac-be99-071c5812217c",
+ "metadata": {},
+ "source": [
+ "## Data Loading\n",
+ "\n",
+ "Next, we use `GBTFITSLoad` to load the data, and then its `summary` method to inspect its contents."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "fb10b18f-4510-4707-ad2a-70a1ec2b4d79",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sdf = GBTFITSLoad(filename)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "62f47e96-7553-48c9-9dfb-032d2af60897",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " SCAN | \n",
+ " OBJECT | \n",
+ " VELOCITY | \n",
+ " PROC | \n",
+ " PROCSEQN | \n",
+ " RESTFREQ | \n",
+ " DOPFREQ | \n",
+ " # IF | \n",
+ " # POL | \n",
+ " # INT | \n",
+ " # FEED | \n",
+ " AZIMUTH | \n",
+ " ELEVATIO | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 35 | \n",
+ " MESSIER32 | \n",
+ " -200.0 | \n",
+ " OnOff | \n",
+ " 1 | \n",
+ " 1.420406 | \n",
+ " 1.420406 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 73.115543 | \n",
+ " 62.295527 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 36 | \n",
+ " MESSIER32 | \n",
+ " -200.0 | \n",
+ " OnOff | \n",
+ " 2 | \n",
+ " 1.420406 | \n",
+ " 1.420406 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 5 | \n",
+ " 1 | \n",
+ " 72.308676 | \n",
+ " 59.322465 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " SCAN OBJECT VELOCITY PROC PROCSEQN RESTFREQ DOPFREQ # IF # POL \\\n",
+ "0 35 MESSIER32 -200.0 OnOff 1 1.420406 1.420406 1 1 \n",
+ "1 36 MESSIER32 -200.0 OnOff 2 1.420406 1.420406 1 1 \n",
+ "\n",
+ " # INT # FEED AZIMUTH ELEVATIO \n",
+ "0 5 1 73.115543 62.295527 \n",
+ "1 5 1 72.308676 59.322465 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "sdf.summary()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "17ac95ab-15f2-4f45-80cd-cc9d6ca0f001",
+ "metadata": {},
+ "source": [
+ "## Data Reduction\n",
+ "\n",
+ "### Position Switched Calibration\n",
+ "\n",
+ "We calibrate the signal and reference states independently."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "d076291b-e69e-4018-ac95-718a7fa3c350",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Signal.\n",
+ "ps_sig = sdf.getps(scan=35, sig=\"T\").timeaverage()\n",
+ "# Reference.\n",
+ "ps_ref = sdf.getps(scan=35, sig=\"F\").timeaverage()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5d0d337f-68b5-4efb-a0f4-cc16eec85a74",
+ "metadata": {},
+ "source": [
+ "Plot the signal and reference spectra as a function of channel."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "0960e4d5-b2e1-4946-a9af-9d2816f2e43a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "