lfast-etc 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lfast_etc-0.1.0/LICENSE +28 -0
- lfast_etc-0.1.0/PKG-INFO +135 -0
- lfast_etc-0.1.0/README.md +102 -0
- lfast_etc-0.1.0/pyproject.toml +51 -0
- lfast_etc-0.1.0/setup.cfg +4 -0
- lfast_etc-0.1.0/src/lfast_etc/__init__.py +27 -0
- lfast_etc-0.1.0/src/lfast_etc/constants.py +23 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_1200_28p7_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_1200_28p7_o2.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_316_63p4_o9.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_316_7p0_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_316_7p0_o2.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_3300vph_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_400_4p2_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_600_13p9_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_600_13p9_o2.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_740vph_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_740vph_o2.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_860_30p9_o1.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_860_30p9_o2.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_860_30p9_o3.toml +18 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/bench_r1800.toml +20 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/cshell_r18000.toml +19 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/cshell_r21500.toml +17 -0
- lfast_etc-0.1.0/src/lfast_etc/data/config/cshell_r43000.toml +17 -0
- lfast_etc-0.1.0/src/lfast_etc/data/sky/skytable_secz1.3.fits +9516 -31
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Eta_fib_value_18.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Eta_fib_value_50.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Eta_fib_wavelength.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Kopt_value_18.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Kopt_value_50.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/data/throughput/Kopt_wavelength.npy +0 -0
- lfast_etc-0.1.0/src/lfast_etc/etc.py +466 -0
- lfast_etc-0.1.0/src/lfast_etc/instrument.py +116 -0
- lfast_etc-0.1.0/src/lfast_etc/plotting.py +203 -0
- lfast_etc-0.1.0/src/lfast_etc/sky.py +77 -0
- lfast_etc-0.1.0/src/lfast_etc/source.py +197 -0
- lfast_etc-0.1.0/src/lfast_etc/telescope.py +164 -0
- lfast_etc-0.1.0/src/lfast_etc/web/__init__.py +0 -0
- lfast_etc-0.1.0/src/lfast_etc/web/app.py +248 -0
- lfast_etc-0.1.0/src/lfast_etc/web/templates/index.html +148 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/PKG-INFO +135 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/SOURCES.txt +47 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/dependency_links.txt +1 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/entry_points.txt +2 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/requires.txt +24 -0
- lfast_etc-0.1.0/src/lfast_etc.egg-info/top_level.txt +1 -0
- lfast_etc-0.1.0/tests/test_etc.py +404 -0
- lfast_etc-0.1.0/tests/test_web.py +104 -0
lfast_etc-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Schmidt Observatories
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
lfast_etc-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lfast-etc
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Exposure Time Calculator for the LFAST telescope array (WIYN Bench spectrograph and CSHELL).
|
|
5
|
+
Author-email: Gudmundur Stefansson <gstefansson@schmidtsciences.org>
|
|
6
|
+
License-Expression: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/schmidt-observatories/lfast-etc
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Requires-Dist: numpy>=2.0
|
|
12
|
+
Requires-Dist: scipy>=1.10
|
|
13
|
+
Requires-Dist: astropy>=5.3
|
|
14
|
+
Requires-Dist: matplotlib>=3.7
|
|
15
|
+
Provides-Extra: web
|
|
16
|
+
Requires-Dist: flask>=3; extra == "web"
|
|
17
|
+
Requires-Dist: bokeh>=3.4; extra == "web"
|
|
18
|
+
Provides-Extra: docs
|
|
19
|
+
Requires-Dist: sphinx>=7; extra == "docs"
|
|
20
|
+
Requires-Dist: pydata-sphinx-theme>=0.15; extra == "docs"
|
|
21
|
+
Requires-Dist: nbsphinx; extra == "docs"
|
|
22
|
+
Requires-Dist: sphinx-design; extra == "docs"
|
|
23
|
+
Requires-Dist: sphinx-copybutton; extra == "docs"
|
|
24
|
+
Requires-Dist: myst-parser; extra == "docs"
|
|
25
|
+
Requires-Dist: ipykernel; extra == "docs"
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest; extra == "dev"
|
|
28
|
+
Requires-Dist: nbformat; extra == "dev"
|
|
29
|
+
Requires-Dist: nbclient; extra == "dev"
|
|
30
|
+
Requires-Dist: ipykernel; extra == "dev"
|
|
31
|
+
Requires-Dist: jupyter; extra == "dev"
|
|
32
|
+
Dynamic: license-file
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
# lfast-etc
|
|
37
|
+
|
|
38
|
+
Exposure Time Calculator for the **LFAST** telescope array at Kitt Peak (nominally 20 x 0.726 m
|
|
39
|
+
unit telescopes feeding one spectrograph through an 18 um fiber combiner), with two instruments:
|
|
40
|
+
the **WIYN Bench** spectrograph (visible; the 15 grating/order modes of the
|
|
41
|
+
[WIYN configuration table](https://www.wiyn.org/Instruments/wiynbench.html) that reach 400 nm, scaled from the
|
|
42
|
+
reference 600 @ 10.1 deg mode by `scripts/build_bench_presets.py`) and **CSHELL** (1.08-1.75 um, R up to 43,000).
|
|
43
|
+
|
|
44
|
+
The number of telescopes, the fiber, and every instrument parameter are plain inputs, so the
|
|
45
|
+
calculator follows the array design as it evolves. The physics is the per-resolution-element model
|
|
46
|
+
of the reference LFAST ETC notebook (2026-10-12) with the Choi et al. (2026, SPIE 14147)
|
|
47
|
+
throughput model; the test-suite reproduces that notebook to 1e-6.
|
|
48
|
+
|
|
49
|
+
## Install
|
|
50
|
+
|
|
51
|
+
Requires Python >= 3.11 and numpy >= 2.0.
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
git clone git@github.com:schmidt-observatories/lfast-etc.git
|
|
55
|
+
cd lfast-etc
|
|
56
|
+
pip install -e . # core
|
|
57
|
+
pip install -e ".[web]" # + browser ETC
|
|
58
|
+
pip install -e ".[docs]" # + Sphinx docs
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Quick start
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
from lfast_etc import LFASTETC, Source, Telescope
|
|
65
|
+
|
|
66
|
+
etc = LFASTETC("bench_r1800", n_telescopes=20) # presets: list_instruments()
|
|
67
|
+
star = Source.blackbody(5800, mag=15, band="V")
|
|
68
|
+
res = etc.exptime(star, snr=50) # per resolution element
|
|
69
|
+
res.plot(); res.summary(); res.at(550.0); res.to_table()
|
|
70
|
+
|
|
71
|
+
res = etc.snr(star, exptime=600, n_exp=3) # SNR for 600 s in 3 reads
|
|
72
|
+
res.plot_noise_budget(); res.plot_spectrum() # what limits you; what the spectrum looks like
|
|
73
|
+
etc.plot_throughput(); etc.plot_sky(); star.plot()
|
|
74
|
+
etc.limiting_magnitude(star, exptime=900, snr=10, wavelength=(500, 650))
|
|
75
|
+
etc.snr_grid(star, mags, exptimes, wavelength=(500, 650)) # sensitivity map
|
|
76
|
+
|
|
77
|
+
# scale the array
|
|
78
|
+
LFASTETC("cshell_r43000", telescope=Telescope(n_telescopes=40, fiber="18um"),
|
|
79
|
+
wavelength_min_nm=1081, wavelength_max_nm=1086)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Everything is per resolution element; SNR per pixel is lower by about `sqrt(pixels_per_resel)`.
|
|
83
|
+
The bundled sky is grey time (moon up), so faint-end numbers are 0.3-0.5 mag pessimistic for
|
|
84
|
+
dark time. The docs (`docs/`, build with `make html`) have a quick start, the concepts, every
|
|
85
|
+
preset, the physics and its known limitations, and a plot gallery.
|
|
86
|
+
|
|
87
|
+
## Browser ETC
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
pip install -e ".[web]"
|
|
91
|
+
lfast-etc-web --port 5000 # http://127.0.0.1:5000 (JSON at /api/calc?...)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Notebooks
|
|
95
|
+
|
|
96
|
+
`notebooks/` holds executed examples, written as a walkthrough for someone new to the package.
|
|
97
|
+
Start with 01 (the whole API, with checks and exercises at the end). 01-05 are rebuilt with
|
|
98
|
+
`python scripts/build_notebooks.py`: quick start, sensitivity maps and array scaling, stellar
|
|
99
|
+
metallicity, transient classification, exoplanet atmospheres (He 10830) with CSHELL. 06-10
|
|
100
|
+
(`python scripts/build_science_notebooks.py`) compare science cases versus the array size
|
|
101
|
+
(20 telescopes, 10 m equivalent = 200, 30 m equivalent = 1720): array-scaling overview,
|
|
102
|
+
LSST-era time domain, Galactic archaeology, stellar activity and flares, CSHELL NIR science.
|
|
103
|
+
The notebooks are generated from those scripts; edit the scripts, not the `.ipynb` files.
|
|
104
|
+
|
|
105
|
+
## Docs
|
|
106
|
+
|
|
107
|
+
```sh
|
|
108
|
+
pip install -e ".[docs]"
|
|
109
|
+
cd docs && make html # needs pandoc on PATH for the notebooks
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Tests
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
pytest
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
CI (GitHub Actions) runs the tests on Python 3.11-3.13 and builds the docs on every push and
|
|
119
|
+
pull request. Bugs and planned features are tracked in the
|
|
120
|
+
[issues](https://github.com/schmidt-observatories/lfast-etc/issues), labelled by area and priority.
|
|
121
|
+
|
|
122
|
+
## Layout
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
src/lfast_etc/ package (etc.py, source.py, telescope.py, instrument.py, sky.py, plotting.py)
|
|
126
|
+
src/lfast_etc/data/ throughput curves, SkyCalc table, instrument presets (TOML)
|
|
127
|
+
src/lfast_etc/web/ Flask + Bokeh browser ETC
|
|
128
|
+
notebooks/ executed example notebooks
|
|
129
|
+
docs/ Sphinx site
|
|
130
|
+
tests/ pytest, including the regression test against the reference notebook
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
BSD 3-Clause. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# lfast-etc
|
|
4
|
+
|
|
5
|
+
Exposure Time Calculator for the **LFAST** telescope array at Kitt Peak (nominally 20 x 0.726 m
|
|
6
|
+
unit telescopes feeding one spectrograph through an 18 um fiber combiner), with two instruments:
|
|
7
|
+
the **WIYN Bench** spectrograph (visible; the 15 grating/order modes of the
|
|
8
|
+
[WIYN configuration table](https://www.wiyn.org/Instruments/wiynbench.html) that reach 400 nm, scaled from the
|
|
9
|
+
reference 600 @ 10.1 deg mode by `scripts/build_bench_presets.py`) and **CSHELL** (1.08-1.75 um, R up to 43,000).
|
|
10
|
+
|
|
11
|
+
The number of telescopes, the fiber, and every instrument parameter are plain inputs, so the
|
|
12
|
+
calculator follows the array design as it evolves. The physics is the per-resolution-element model
|
|
13
|
+
of the reference LFAST ETC notebook (2026-10-12) with the Choi et al. (2026, SPIE 14147)
|
|
14
|
+
throughput model; the test-suite reproduces that notebook to 1e-6.
|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
Requires Python >= 3.11 and numpy >= 2.0.
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
git clone git@github.com:schmidt-observatories/lfast-etc.git
|
|
22
|
+
cd lfast-etc
|
|
23
|
+
pip install -e . # core
|
|
24
|
+
pip install -e ".[web]" # + browser ETC
|
|
25
|
+
pip install -e ".[docs]" # + Sphinx docs
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
from lfast_etc import LFASTETC, Source, Telescope
|
|
32
|
+
|
|
33
|
+
etc = LFASTETC("bench_r1800", n_telescopes=20) # presets: list_instruments()
|
|
34
|
+
star = Source.blackbody(5800, mag=15, band="V")
|
|
35
|
+
res = etc.exptime(star, snr=50) # per resolution element
|
|
36
|
+
res.plot(); res.summary(); res.at(550.0); res.to_table()
|
|
37
|
+
|
|
38
|
+
res = etc.snr(star, exptime=600, n_exp=3) # SNR for 600 s in 3 reads
|
|
39
|
+
res.plot_noise_budget(); res.plot_spectrum() # what limits you; what the spectrum looks like
|
|
40
|
+
etc.plot_throughput(); etc.plot_sky(); star.plot()
|
|
41
|
+
etc.limiting_magnitude(star, exptime=900, snr=10, wavelength=(500, 650))
|
|
42
|
+
etc.snr_grid(star, mags, exptimes, wavelength=(500, 650)) # sensitivity map
|
|
43
|
+
|
|
44
|
+
# scale the array
|
|
45
|
+
LFASTETC("cshell_r43000", telescope=Telescope(n_telescopes=40, fiber="18um"),
|
|
46
|
+
wavelength_min_nm=1081, wavelength_max_nm=1086)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Everything is per resolution element; SNR per pixel is lower by about `sqrt(pixels_per_resel)`.
|
|
50
|
+
The bundled sky is grey time (moon up), so faint-end numbers are 0.3-0.5 mag pessimistic for
|
|
51
|
+
dark time. The docs (`docs/`, build with `make html`) have a quick start, the concepts, every
|
|
52
|
+
preset, the physics and its known limitations, and a plot gallery.
|
|
53
|
+
|
|
54
|
+
## Browser ETC
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
pip install -e ".[web]"
|
|
58
|
+
lfast-etc-web --port 5000 # http://127.0.0.1:5000 (JSON at /api/calc?...)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Notebooks
|
|
62
|
+
|
|
63
|
+
`notebooks/` holds executed examples, written as a walkthrough for someone new to the package.
|
|
64
|
+
Start with 01 (the whole API, with checks and exercises at the end). 01-05 are rebuilt with
|
|
65
|
+
`python scripts/build_notebooks.py`: quick start, sensitivity maps and array scaling, stellar
|
|
66
|
+
metallicity, transient classification, exoplanet atmospheres (He 10830) with CSHELL. 06-10
|
|
67
|
+
(`python scripts/build_science_notebooks.py`) compare science cases versus the array size
|
|
68
|
+
(20 telescopes, 10 m equivalent = 200, 30 m equivalent = 1720): array-scaling overview,
|
|
69
|
+
LSST-era time domain, Galactic archaeology, stellar activity and flares, CSHELL NIR science.
|
|
70
|
+
The notebooks are generated from those scripts; edit the scripts, not the `.ipynb` files.
|
|
71
|
+
|
|
72
|
+
## Docs
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
pip install -e ".[docs]"
|
|
76
|
+
cd docs && make html # needs pandoc on PATH for the notebooks
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Tests
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
pytest
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
CI (GitHub Actions) runs the tests on Python 3.11-3.13 and builds the docs on every push and
|
|
86
|
+
pull request. Bugs and planned features are tracked in the
|
|
87
|
+
[issues](https://github.com/schmidt-observatories/lfast-etc/issues), labelled by area and priority.
|
|
88
|
+
|
|
89
|
+
## Layout
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
src/lfast_etc/ package (etc.py, source.py, telescope.py, instrument.py, sky.py, plotting.py)
|
|
93
|
+
src/lfast_etc/data/ throughput curves, SkyCalc table, instrument presets (TOML)
|
|
94
|
+
src/lfast_etc/web/ Flask + Bokeh browser ETC
|
|
95
|
+
notebooks/ executed example notebooks
|
|
96
|
+
docs/ Sphinx site
|
|
97
|
+
tests/ pytest, including the regression test against the reference notebook
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## License
|
|
101
|
+
|
|
102
|
+
BSD 3-Clause. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "lfast-etc"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
authors = [{ name = "Gudmundur Stefansson", email = "gstefansson@schmidtsciences.org" }]
|
|
9
|
+
description = "Exposure Time Calculator for the LFAST telescope array (WIYN Bench spectrograph and CSHELL)."
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
license = "BSD-3-Clause"
|
|
12
|
+
requires-python = ">=3.11"
|
|
13
|
+
dependencies = [
|
|
14
|
+
"numpy>=2.0",
|
|
15
|
+
"scipy>=1.10",
|
|
16
|
+
"astropy>=5.3",
|
|
17
|
+
"matplotlib>=3.7",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
web = ["flask>=3", "bokeh>=3.4"]
|
|
22
|
+
docs = [
|
|
23
|
+
"sphinx>=7", "pydata-sphinx-theme>=0.15", "nbsphinx", "sphinx-design",
|
|
24
|
+
"sphinx-copybutton", "myst-parser", "ipykernel",
|
|
25
|
+
] # plus the pandoc binary on PATH
|
|
26
|
+
dev = ["pytest", "nbformat", "nbclient", "ipykernel", "jupyter"]
|
|
27
|
+
|
|
28
|
+
[project.scripts]
|
|
29
|
+
lfast-etc-web = "lfast_etc.web.app:main"
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
Homepage = "https://github.com/schmidt-observatories/lfast-etc"
|
|
33
|
+
|
|
34
|
+
[tool.setuptools]
|
|
35
|
+
package-dir = { "" = "src" }
|
|
36
|
+
include-package-data = true
|
|
37
|
+
|
|
38
|
+
[tool.setuptools.packages.find]
|
|
39
|
+
where = ["src"]
|
|
40
|
+
|
|
41
|
+
[tool.setuptools.package-data]
|
|
42
|
+
"lfast_etc" = [
|
|
43
|
+
"data/throughput/*.npy",
|
|
44
|
+
"data/sky/*.fits",
|
|
45
|
+
"data/config/*.toml",
|
|
46
|
+
"web/templates/*.html",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
[tool.pytest.ini_options]
|
|
50
|
+
testpaths = ["tests"]
|
|
51
|
+
pythonpath = ["tests"]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""lfast_etc: Exposure Time Calculator for the LFAST telescope array.
|
|
2
|
+
|
|
3
|
+
Quick start::
|
|
4
|
+
|
|
5
|
+
from lfast_etc import LFASTETC, Source
|
|
6
|
+
etc = LFASTETC("bench_r1800", n_telescopes=20)
|
|
7
|
+
src = Source.blackbody(5800, mag=15, band="V")
|
|
8
|
+
res = etc.exptime(src, snr=50)
|
|
9
|
+
res.plot()
|
|
10
|
+
"""
|
|
11
|
+
import importlib.metadata
|
|
12
|
+
|
|
13
|
+
try:
|
|
14
|
+
__version__ = importlib.metadata.version("lfast-etc")
|
|
15
|
+
except importlib.metadata.PackageNotFoundError: # pragma: no cover
|
|
16
|
+
__version__ = "0.0.0"
|
|
17
|
+
|
|
18
|
+
from .instrument import Instrument, list_instruments
|
|
19
|
+
from .telescope import Telescope
|
|
20
|
+
from .source import Source, BANDS
|
|
21
|
+
from .sky import Sky
|
|
22
|
+
from .etc import LFASTETC, ETCResult
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"__version__", "LFASTETC", "ETCResult", "Instrument", "list_instruments",
|
|
26
|
+
"Telescope", "Source", "Sky", "BANDS",
|
|
27
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Physical constants (SI) and package data paths."""
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
H_PLANCK = 6.62607015e-34 # J s
|
|
6
|
+
C_LIGHT = 2.99792458e8 # m/s
|
|
7
|
+
K_BOLTZMANN = 1.380649e-23 # J/K
|
|
8
|
+
|
|
9
|
+
DATA_DIR = Path(__file__).parent / "data"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def positive(name, value, allow_zero=False):
|
|
13
|
+
"""Validate a scalar parameter at the public boundary; returns it as float."""
|
|
14
|
+
try:
|
|
15
|
+
v = float(value)
|
|
16
|
+
except (TypeError, ValueError):
|
|
17
|
+
raise ValueError(f"{name} must be a number, got {value!r}") from None
|
|
18
|
+
if not np.isfinite(v) or v < 0 or (v == 0 and not allow_zero):
|
|
19
|
+
raise ValueError(f"{name} must be {'>= 0' if allow_zero else '> 0'}, got {value!r}")
|
|
20
|
+
return v
|
|
21
|
+
THROUGHPUT_DIR = DATA_DIR / "throughput"
|
|
22
|
+
SKY_DIR = DATA_DIR / "sky"
|
|
23
|
+
CONFIG_DIR = DATA_DIR / "config"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 1200 @ 28.7 grating, order 1, blaze peak 7500 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 1231 A, red-cable resolution 1.19 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_1200_28p7_o1"
|
|
7
|
+
description = "WIYN Bench, 1200 @ 28.7 deg, order 1, 688-812 nm, R~6910"
|
|
8
|
+
wavelength_min_nm = 688.5
|
|
9
|
+
wavelength_max_nm = 811.5
|
|
10
|
+
resolving_power = 6910
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.229 # grating peak efficiency 55% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 1200 @ 28.7 grating, order 2, blaze peak 4000 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 615 A, red-cable resolution 0.58 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_1200_28p7_o2"
|
|
7
|
+
description = "WIYN Bench, 1200 @ 28.7 deg, order 2, 400-431 nm, R~7560 (clipped at 400 nm)"
|
|
8
|
+
wavelength_min_nm = 400.0
|
|
9
|
+
wavelength_max_nm = 430.8
|
|
10
|
+
resolving_power = 7561
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.229 # grating peak efficiency 55% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 316 @ 63.4 grating, order 9, blaze peak 6563 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 250 A, red-cable resolution 0.23 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_316_63p4_o9"
|
|
7
|
+
description = "WIYN Bench, 316 @ 63.4 deg, order 9, 644-669 nm, R~31280"
|
|
8
|
+
wavelength_min_nm = 643.8
|
|
9
|
+
wavelength_max_nm = 668.8
|
|
10
|
+
resolving_power = 31284
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.208 # grating peak efficiency 50% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 316 @ 7.0 grating, order 1, blaze peak 7500 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 5290 A, red-cable resolution 5.72 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_316_7p0_o1"
|
|
7
|
+
description = "WIYN Bench, 316 @ 7.0 deg, order 1, 486-1014 nm, R~1440"
|
|
8
|
+
wavelength_min_nm = 485.5
|
|
9
|
+
wavelength_max_nm = 1014.5
|
|
10
|
+
resolving_power = 1438
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.292 # grating peak efficiency 70% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 316 @ 7.0 grating, order 2, blaze peak 3750 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 2645 A, red-cable resolution 2.86 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_316_7p0_o2"
|
|
7
|
+
description = "WIYN Bench, 316 @ 7.0 deg, order 2, 400-507 nm, R~1440 (clipped at 400 nm)"
|
|
8
|
+
wavelength_min_nm = 400.0
|
|
9
|
+
wavelength_max_nm = 507.2
|
|
10
|
+
resolving_power = 1438
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.292 # grating peak efficiency 70% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 3300 VPH grating, order 1, blaze peak 5120 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 273 A, red-cable resolution 0.31 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_3300vph_o1"
|
|
7
|
+
description = "WIYN Bench, 3300 VPH, order 1, 498-526 nm, R~18110"
|
|
8
|
+
wavelength_min_nm = 498.4
|
|
9
|
+
wavelength_max_nm = 525.6
|
|
10
|
+
resolving_power = 18108
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.300 # no peak efficiency listed for the VPH gratings: anchor value kept
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 400 @ 4.2 grating, order 1, blaze peak 5000 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 4199 A, red-cable resolution 4.56 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_400_4p2_o1"
|
|
7
|
+
description = "WIYN Bench, 400 @ 4.2 deg, order 1, 400-710 nm, R~1200 (clipped at 400 nm) (not recommended by WIYN: hard to focus over the range)"
|
|
8
|
+
wavelength_min_nm = 400.0
|
|
9
|
+
wavelength_max_nm = 710.0
|
|
10
|
+
resolving_power = 1202
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.292 # grating peak efficiency 70% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 600 @ 13.9 grating, order 1, blaze peak 7500 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 2724 A, red-cable resolution 2.86 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_600_13p9_o1"
|
|
7
|
+
description = "WIYN Bench, 600 @ 13.9 deg, order 1, 614-886 nm, R~2880"
|
|
8
|
+
wavelength_min_nm = 613.8
|
|
9
|
+
wavelength_max_nm = 886.2
|
|
10
|
+
resolving_power = 2875
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.292 # grating peak efficiency 70% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 600 @ 13.9 grating, order 2, blaze peak 3800 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 1362 A, red-cable resolution 1.43 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_600_13p9_o2"
|
|
7
|
+
description = "WIYN Bench, 600 @ 13.9 deg, order 2, 400-448 nm, R~2910 (clipped at 400 nm)"
|
|
8
|
+
wavelength_min_nm = 400.0
|
|
9
|
+
wavelength_max_nm = 448.1
|
|
10
|
+
resolving_power = 2913
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.292 # grating peak efficiency 70% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 740 VPH grating, order 1, blaze peak 8798 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 2152 A, red-cable resolution 2.68 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_740vph_o1"
|
|
7
|
+
description = "WIYN Bench, 740 VPH, order 1, 772-987 nm, R~3600"
|
|
8
|
+
wavelength_min_nm = 772.2
|
|
9
|
+
wavelength_max_nm = 987.4
|
|
10
|
+
resolving_power = 3599
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.300 # no peak efficiency listed for the VPH gratings: anchor value kept
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 740 VPH grating, order 2, blaze peak 5000 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 1076 A, red-cable resolution 1.34 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_740vph_o2"
|
|
7
|
+
description = "WIYN Bench, 740 VPH, order 2, 446-554 nm, R~4090"
|
|
8
|
+
wavelength_min_nm = 446.2
|
|
9
|
+
wavelength_max_nm = 553.8
|
|
10
|
+
resolving_power = 4091
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.300 # no peak efficiency listed for the VPH gratings: anchor value kept
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 860 @ 30.9 grating, order 1, blaze peak 10800 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 1680 A, red-cable resolution 1.64 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_860_30p9_o1"
|
|
7
|
+
description = "WIYN Bench, 860 @ 30.9 deg, order 1, 996-1164 nm, R~7220"
|
|
8
|
+
wavelength_min_nm = 996.0
|
|
9
|
+
wavelength_max_nm = 1164.0
|
|
10
|
+
resolving_power = 7220
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.271 # grating peak efficiency 65% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 860 @ 30.9 grating, order 2, blaze peak 6000 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 840 A, red-cable resolution 0.77 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_860_30p9_o2"
|
|
7
|
+
description = "WIYN Bench, 860 @ 30.9 deg, order 2, 558-642 nm, R~8540"
|
|
8
|
+
wavelength_min_nm = 558.0
|
|
9
|
+
wavelength_max_nm = 642.0
|
|
10
|
+
resolving_power = 8543
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.271 # grating peak efficiency 65% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# WIYN Bench spectrograph, 860 @ 30.9 grating, order 3, blaze peak 4000 A.
|
|
2
|
+
# Row of https://www.wiyn.org/Instruments/wiynbench.html; generated by
|
|
3
|
+
# scripts/build_bench_presets.py from the bench_r1800 anchor (see that script).
|
|
4
|
+
# Table coverage 560 A, red-cable resolution 0.52 A at 2x2 binning.
|
|
5
|
+
[instrument]
|
|
6
|
+
name = "bench_860_30p9_o3"
|
|
7
|
+
description = "WIYN Bench, 860 @ 30.9 deg, order 3, 400-428 nm, R~8430 (clipped at 400 nm)"
|
|
8
|
+
wavelength_min_nm = 400.0
|
|
9
|
+
wavelength_max_nm = 428.0
|
|
10
|
+
resolving_power = 8434
|
|
11
|
+
pixels_per_resel = 2.2 # dispersion direction only, as bench_r1800
|
|
12
|
+
spectrograph_efficiency = 0.271 # grating peak efficiency 65% vs 72% for the 600 @ 10.1 anchor
|
|
13
|
+
slit_throughput = 1.0
|
|
14
|
+
qe = 0.75 # placeholder flat QE, as bench_r1800
|
|
15
|
+
dark_current = 3.0e-4 # e-/s/pix
|
|
16
|
+
read_noise = 3.7 # e-/pix
|
|
17
|
+
full_well = 100000.0 # placeholder
|
|
18
|
+
min_exptime = 1.0
|