lfast-etc 0.1.0__py3-none-any.whl

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.
Files changed (42) hide show
  1. lfast_etc/__init__.py +27 -0
  2. lfast_etc/constants.py +23 -0
  3. lfast_etc/data/config/bench_1200_28p7_o1.toml +18 -0
  4. lfast_etc/data/config/bench_1200_28p7_o2.toml +18 -0
  5. lfast_etc/data/config/bench_316_63p4_o9.toml +18 -0
  6. lfast_etc/data/config/bench_316_7p0_o1.toml +18 -0
  7. lfast_etc/data/config/bench_316_7p0_o2.toml +18 -0
  8. lfast_etc/data/config/bench_3300vph_o1.toml +18 -0
  9. lfast_etc/data/config/bench_400_4p2_o1.toml +18 -0
  10. lfast_etc/data/config/bench_600_13p9_o1.toml +18 -0
  11. lfast_etc/data/config/bench_600_13p9_o2.toml +18 -0
  12. lfast_etc/data/config/bench_740vph_o1.toml +18 -0
  13. lfast_etc/data/config/bench_740vph_o2.toml +18 -0
  14. lfast_etc/data/config/bench_860_30p9_o1.toml +18 -0
  15. lfast_etc/data/config/bench_860_30p9_o2.toml +18 -0
  16. lfast_etc/data/config/bench_860_30p9_o3.toml +18 -0
  17. lfast_etc/data/config/bench_r1800.toml +20 -0
  18. lfast_etc/data/config/cshell_r18000.toml +19 -0
  19. lfast_etc/data/config/cshell_r21500.toml +17 -0
  20. lfast_etc/data/config/cshell_r43000.toml +17 -0
  21. lfast_etc/data/sky/skytable_secz1.3.fits +9516 -31
  22. lfast_etc/data/throughput/Eta_fib_value_18.npy +0 -0
  23. lfast_etc/data/throughput/Eta_fib_value_50.npy +0 -0
  24. lfast_etc/data/throughput/Eta_fib_wavelength.npy +0 -0
  25. lfast_etc/data/throughput/Kopt_value_18.npy +0 -0
  26. lfast_etc/data/throughput/Kopt_value_50.npy +0 -0
  27. lfast_etc/data/throughput/Kopt_wavelength.npy +0 -0
  28. lfast_etc/etc.py +466 -0
  29. lfast_etc/instrument.py +116 -0
  30. lfast_etc/plotting.py +203 -0
  31. lfast_etc/sky.py +77 -0
  32. lfast_etc/source.py +197 -0
  33. lfast_etc/telescope.py +164 -0
  34. lfast_etc/web/__init__.py +0 -0
  35. lfast_etc/web/app.py +248 -0
  36. lfast_etc/web/templates/index.html +148 -0
  37. lfast_etc-0.1.0.dist-info/METADATA +135 -0
  38. lfast_etc-0.1.0.dist-info/RECORD +42 -0
  39. lfast_etc-0.1.0.dist-info/WHEEL +5 -0
  40. lfast_etc-0.1.0.dist-info/entry_points.txt +2 -0
  41. lfast_etc-0.1.0.dist-info/licenses/LICENSE +28 -0
  42. lfast_etc-0.1.0.dist-info/top_level.txt +1 -0
lfast_etc/__init__.py ADDED
@@ -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
+ ]
lfast_etc/constants.py ADDED
@@ -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
@@ -0,0 +1,20 @@
1
+ # WIYN Bench spectrograph, sample moderate-resolution visible configuration.
2
+ # 600 lpm grating @ 10.1 deg, lambda_central = 5500 A, delta_lambda = 2763 A.
3
+ # Only 1-2 Bench configurations will be offered at the start of operations;
4
+ # the spectrograph cannot be reconfigured during the night. LFAST uses 1x1 binning.
5
+ # The other Bench modes (bench_*.toml) are generated from this one by
6
+ # scripts/build_bench_presets.py from the WIYN configuration table.
7
+ [instrument]
8
+ name = "bench_r1800"
9
+ description = "WIYN Bench, 600 @ 10.1 deg, order 1, 412-686 nm, R~1800 (reference notebook)"
10
+ wavelength_min_nm = 412.0
11
+ wavelength_max_nm = 686.0 # config spans to 688 nm; K_opt drops to ~5e-9 at 687 nm (O2 B band)
12
+ resolving_power = 1800.0
13
+ pixels_per_resel = 2.2 # dispersion direction only (reference notebook); x fiber-image height when known
14
+ spectrograph_efficiency = 0.3
15
+ slit_throughput = 1.0
16
+ qe = 0.75 # placeholder flat QE
17
+ dark_current = 3.0e-4 # e-/s/pix
18
+ read_noise = 3.7 # e-/pix
19
+ full_well = 100000.0 # placeholder
20
+ min_exptime = 1.0
@@ -0,0 +1,19 @@
1
+ # CSHELL, native resolution using the input fiber alone (no slit).
2
+ # CSHELL covers ~1.08-1.75 um. Free spectral range is small: ~2.5e-3 lambda
3
+ # (39 A at 1.555 um, 27 A at 1.08 um, 44 A at 1.75 um), so one setup covers
4
+ # only a narrow window; set wavelength limits to the window of interest.
5
+ [instrument]
6
+ name = "cshell_r18000"
7
+ description = "CSHELL, native fiber resolution R=18,000, 1.08-1.75 um"
8
+ wavelength_min_nm = 1080.0
9
+ wavelength_max_nm = 1750.0
10
+ resolving_power = 18000.0
11
+ pixels_per_resel = 2.5 # dispersion direction only (reference notebook); x fiber-image height when known
12
+ spectrograph_efficiency = 0.1
13
+ slit_throughput = 1.0
14
+ qe = 0.8 # placeholder flat QE
15
+ dark_current = 0.5 # e-/s/pix
16
+ read_noise = 22.0 # e-/pix, Fowler sampling with total exposure > 8 s
17
+ full_well = 80000.0 # placeholder
18
+ min_exptime = 8.0
19
+ free_spectral_range_frac = 2.5e-3
@@ -0,0 +1,17 @@
1
+ # CSHELL with the 200 um slit. Slit throughput loss is TBD ("XX%" in the
2
+ # reference notebook); 0.75 is a placeholder -- update when measured.
3
+ [instrument]
4
+ name = "cshell_r21500"
5
+ description = "CSHELL, 200 um slit, R=21,500, 1.08-1.75 um (slit loss placeholder)"
6
+ wavelength_min_nm = 1080.0
7
+ wavelength_max_nm = 1750.0
8
+ resolving_power = 21500.0
9
+ pixels_per_resel = 2.5 # dispersion direction only (reference notebook); x fiber-image height when known
10
+ spectrograph_efficiency = 0.1
11
+ slit_throughput = 0.75 # PLACEHOLDER
12
+ qe = 0.8
13
+ dark_current = 0.5
14
+ read_noise = 22.0
15
+ full_well = 80000.0
16
+ min_exptime = 8.0
17
+ free_spectral_range_frac = 2.5e-3
@@ -0,0 +1,17 @@
1
+ # CSHELL with the 100 um slit. Slit throughput loss is TBD ("YY%" in the
2
+ # reference notebook); 0.5 is a placeholder -- update when measured.
3
+ [instrument]
4
+ name = "cshell_r43000"
5
+ description = "CSHELL, 100 um slit, R=43,000, 1.08-1.75 um (slit loss placeholder)"
6
+ wavelength_min_nm = 1080.0
7
+ wavelength_max_nm = 1750.0
8
+ resolving_power = 43000.0
9
+ pixels_per_resel = 2.5 # dispersion direction only (reference notebook); x fiber-image height when known
10
+ spectrograph_efficiency = 0.1
11
+ slit_throughput = 0.5 # PLACEHOLDER
12
+ qe = 0.8
13
+ dark_current = 0.5
14
+ read_noise = 22.0
15
+ full_well = 80000.0
16
+ min_exptime = 8.0
17
+ free_spectral_range_frac = 2.5e-3