PyDIET 0.9.3__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.
- pydiet/__init__.py +12 -0
- pydiet/api_client/__init__.py +6 -0
- pydiet/api_client/client.py +57 -0
- pydiet/cmd/__init__.py +9 -0
- pydiet/cmd/start.py +107 -0
- pydiet/data/data_config.toml +242 -0
- pydiet/data/description.txt +1 -0
- pydiet/data/instruments/description.txt +1 -0
- pydiet/data/instruments/megacam/default +0 -0
- pydiet/data/instruments/megacam/description.txt +1 -0
- pydiet/data/instruments/megacam/detector/description.txt +1 -0
- pydiet/data/instruments/megacam/detector/qe/MegaCam_QE.average.fits +0 -0
- pydiet/data/instruments/megacam/detector/qe/description.txt +2 -0
- pydiet/data/instruments/megacam/filters/CaHK.MP9303.fits +0 -0
- pydiet/data/instruments/megacam/filters/Ha.MP9603.fits +0 -0
- pydiet/data/instruments/megacam/filters/HaOFF.MP9604.fits +0 -0
- pydiet/data/instruments/megacam/filters/M4112.MP9403.fits +0 -0
- pydiet/data/instruments/megacam/filters/M4376.MP9404.fits +0 -0
- pydiet/data/instruments/megacam/filters/OIII.MP9501.fits +0 -0
- pydiet/data/instruments/megacam/filters/OIIIOFF.MP9502.fits +0 -0
- pydiet/data/instruments/megacam/filters/description.txt +1 -0
- pydiet/data/instruments/megacam/filters/g.MP9402.fits +0 -0
- pydiet/data/instruments/megacam/filters/gri.MP9605.fits +0 -0
- pydiet/data/instruments/megacam/filters/i.MP9703.fits +0 -0
- pydiet/data/instruments/megacam/filters/r.MP9602.fits +0 -0
- pydiet/data/instruments/megacam/filters/u.MP9302.fits +0 -0
- pydiet/data/instruments/megacam/filters/z.MP9901.fits +0 -0
- pydiet/data/instruments/megacam/optics/description.txt +2 -0
- pydiet/data/instruments/megacam/optics/transmission/MegaPrime_transmission.fits +0 -0
- pydiet/data/instruments/megacam/optics/transmission/description.txt +2 -0
- pydiet/data/instruments/wircam/description.txt +1 -0
- pydiet/data/instruments/wircam/detector/description.txt +1 -0
- pydiet/data/instruments/wircam/detector/qe/WIRCam_QE.average.fits +0 -0
- pydiet/data/instruments/wircam/detector/qe/description.txt +2 -0
- pydiet/data/instruments/wircam/filters/BrG.WC8305.fits +0 -0
- pydiet/data/instruments/wircam/filters/CH4Off.WC8204.fits +0 -0
- pydiet/data/instruments/wircam/filters/CH4On.WC8203.fits +0 -0
- pydiet/data/instruments/wircam/filters/CO.WC8306.fits +0 -0
- pydiet/data/instruments/wircam/filters/H.WC8201.fits +0 -0
- pydiet/data/instruments/wircam/filters/H.WC8202.fits +0 -0
- pydiet/data/instruments/wircam/filters/H2.WC8304.fits +0 -0
- pydiet/data/instruments/wircam/filters/J.WC8101.fits +0 -0
- pydiet/data/instruments/wircam/filters/J.WC8103.fits +0 -0
- pydiet/data/instruments/wircam/filters/Kcont.WC8303.fits +0 -0
- pydiet/data/instruments/wircam/filters/Ks.WC8301.fits +0 -0
- pydiet/data/instruments/wircam/filters/Ks.WC8302.fits +0 -0
- pydiet/data/instruments/wircam/filters/LowOH1.WC8104.fits +0 -0
- pydiet/data/instruments/wircam/filters/LowOH2.WC8102.fits +0 -0
- pydiet/data/instruments/wircam/filters/W.WC8105.fits +0 -0
- pydiet/data/instruments/wircam/filters/Y.WC8002.fits +0 -0
- pydiet/data/instruments/wircam/filters/description.txt +1 -0
- pydiet/data/instruments/wircam/optics/description.txt +2 -0
- pydiet/data/instruments/wircam/optics/transmission/WIRCam_transmission.fits +0 -0
- pydiet/data/instruments/wircam/optics/transmission/description.txt +2 -0
- pydiet/data/sites/description.txt +1 -0
- pydiet/data/sites/mko/default +0 -0
- pydiet/data/sites/mko/description.txt +2 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.1.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.2.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.3.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.4.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.6.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.7.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.8.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM1.9.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM2.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM2.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.bright.AM3.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.1.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.2.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.3.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.4.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.6.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.7.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.8.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM1.9.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM2.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM2.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.dark.AM3.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.1.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.2.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.3.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.4.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.6.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.7.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.8.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM1.9.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM2.0.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM2.5.fits +0 -0
- pydiet/data/sites/mko/emission/MKO_emission.grey.AM3.0.fits +0 -0
- pydiet/data/sites/mko/emission/description.txt +5 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.0.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.1.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.2.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.3.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.4.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.5.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.6.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.7.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.8.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM1.9.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM2.0.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM2.5.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM3.0.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM3.5.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM4.0.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM4.5.fits +0 -0
- pydiet/data/sites/mko/transmission/MKO_transmission.AM5.0.fits +0 -0
- pydiet/data/sites/mko/transmission/description.txt +5 -0
- pydiet/data/telescopes/cfht/default +0 -0
- pydiet/data/telescopes/cfht/description.txt +1 -0
- pydiet/data/telescopes/cfht/emission/description.txt +2 -0
- pydiet/data/telescopes/cfht/transmission/CFHT_M1_transmission.fits +0 -0
- pydiet/data/telescopes/cfht/transmission/description.txt +1 -0
- pydiet/data/telescopes/description.txt +1 -0
- pydiet/package.py +55 -0
- pydiet/py.typed +0 -0
- pydiet/server/__init__.py +9 -0
- pydiet/server/app.py +369 -0
- pydiet/server/config/__init__.py +51 -0
- pydiet/server/config/config.py +330 -0
- pydiet/server/config/fields.py +49 -0
- pydiet/server/config/settings.py +166 -0
- pydiet/server/data.py +31 -0
- pydiet/server/datafiles.py +367 -0
- pydiet/server/image.py +342 -0
- pydiet/server/models/__init__.py +34 -0
- pydiet/server/models/dataconfig.py +195 -0
- pydiet/server/models/default.py +9 -0
- pydiet/server/models/exceptions.py +9 -0
- pydiet/server/models/instrument.py +314 -0
- pydiet/server/models/query.py +172 -0
- pydiet/server/models/response.py +97 -0
- pydiet/server/models/types.py +35 -0
- pydiet/server/photsys.py +71 -0
- pydiet/server/response.py +237 -0
- pydiet/server/types/__init__.py +8 -0
- pydiet/server/types/quantity.py +532 -0
- pydiet/server/types/string.py +318 -0
- pydiet/templates/common/base.html +80 -0
- pydiet/templates/common/plot_filter.html +17 -0
- pydiet/templates/common/privacy.html +132 -0
- pydiet/templates/common/settings.html +23 -0
- pydiet/templates/common/terms.html +101 -0
- pydiet/templates/megacam/etc_form.html +319 -0
- pydiet/templates/megacam/etc_results.html +190 -0
- pydiet/templates/wircam/etc_form.html +319 -0
- pydiet/templates/wircam/etc_results.html +190 -0
- pydiet/web_client/css/style.css +221 -0
- pydiet/web_client/dist/pydiet.js +31 -0
- pydiet/web_client/images/logo.svg +6 -0
- pydiet/web_client/images/megacam/background.jpg +0 -0
- pydiet/web_client/images/megacam/logo.png +0 -0
- pydiet/web_client/images/wircam/background.jpg +0 -0
- pydiet/web_client/images/wircam/logo.png +0 -0
- pydiet/web_client/js/dom.js +51 -0
- pydiet/web_client/js/etc.js +63 -0
- pydiet/web_client/js/fetch.js +49 -0
- pydiet/web_client/js/instrument.js +62 -0
- pydiet/web_client/js/main.js +15 -0
- pydiet/web_client/js/plot.js +88 -0
- pydiet/web_client/js/settings.js +57 -0
- pydiet/web_client/js/theme.js +43 -0
- pydiet/web_client/js/url.js +12 -0
- pydiet/web_client/jsdoc.json +20 -0
- pydiet/web_client/package.json +83 -0
- pydiet-0.9.3.dist-info/METADATA +118 -0
- pydiet-0.9.3.dist-info/RECORD +177 -0
- pydiet-0.9.3.dist-info/WHEEL +4 -0
- pydiet-0.9.3.dist-info/entry_points.txt +5 -0
- pydiet-0.9.3.dist-info/licenses/LICENSE +21 -0
pydiet/__init__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""
|
|
2
|
+
PyDIET
|
|
3
|
+
======
|
|
4
|
+
|
|
5
|
+
[CFHT](https://www.cfht.hawaii.edu)'s new Direct Imaging Exposure Time calculator.
|
|
6
|
+
"""
|
|
7
|
+
# Copyright CFHT/CNRS
|
|
8
|
+
# Licensed under the MIT license
|
|
9
|
+
|
|
10
|
+
from .api_client.client import Client
|
|
11
|
+
from .server.models import ETCQueryModel, ETCResponseModel
|
|
12
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#! /usr/bin/python3
|
|
2
|
+
"""
|
|
3
|
+
Python client functions for harvesting results from the PyDIET ETC
|
|
4
|
+
"""
|
|
5
|
+
# Copyright (c) 2024 - 2026 CFHT/CNRS/CEA-AIM/OSUPS-UParisSaclay
|
|
6
|
+
# Licensed under the MIT licence
|
|
7
|
+
|
|
8
|
+
from typing import Optional
|
|
9
|
+
|
|
10
|
+
import httpx
|
|
11
|
+
from pydantic import ValidationError
|
|
12
|
+
|
|
13
|
+
from ..server.models.query import ETCQueryModel
|
|
14
|
+
from ..server.models.response import ETCResponseModel
|
|
15
|
+
from ..server.config import settings
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Client:
|
|
19
|
+
def __init__(self, api_url: Optional[str]=None) -> None:
|
|
20
|
+
self.api_url = f"http://{settings['host']}" \
|
|
21
|
+
f":{settings['port']}{settings['api_path']}" if api_url is None \
|
|
22
|
+
else api_url
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def query(
|
|
26
|
+
self,
|
|
27
|
+
query: ETCQueryModel,
|
|
28
|
+
timeout: float=10.) -> ETCResponseModel:
|
|
29
|
+
headers: dict[str, str] = {"Accept": "application/json"}
|
|
30
|
+
print(f"{self.api_url}/{query.instrument.value}")
|
|
31
|
+
try:
|
|
32
|
+
with httpx.Client(timeout=timeout, headers=headers) as client:
|
|
33
|
+
response = client.get(
|
|
34
|
+
f"{self.api_url}/{query.instrument.value}",
|
|
35
|
+
params=query.model_dump(
|
|
36
|
+
exclude={"instrument"},
|
|
37
|
+
exclude_none=True,
|
|
38
|
+
mode="json"
|
|
39
|
+
)
|
|
40
|
+
)
|
|
41
|
+
response.raise_for_status()
|
|
42
|
+
payload = response.json()
|
|
43
|
+
except httpx.HTTPStatusError as exc:
|
|
44
|
+
raise RuntimeError(
|
|
45
|
+
f"HTTP error {exc.response.status_code}: {exc.response.text}"
|
|
46
|
+
) from exc
|
|
47
|
+
except httpx.HTTPError as exc:
|
|
48
|
+
raise RuntimeError(f"Transport error: {exc}") from exc
|
|
49
|
+
except ValueError as exc:
|
|
50
|
+
raise RuntimeError("Response was not valid JSON") from exc
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
return ETCResponseModel.model_validate(payload)
|
|
54
|
+
except ValidationError as exc:
|
|
55
|
+
raise RuntimeError(f"Invalid response schema: {exc}") from exc
|
|
56
|
+
|
|
57
|
+
|
pydiet/cmd/__init__.py
ADDED
pydiet/cmd/start.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#! /usr/bin/python3
|
|
2
|
+
"""
|
|
3
|
+
Start script (renamed as :program:`pydiet`).
|
|
4
|
+
"""
|
|
5
|
+
# Copyright CFHT/CNRS/CEA/UParisSaclay
|
|
6
|
+
# Licensed under the MIT licence
|
|
7
|
+
from sys import exit
|
|
8
|
+
from threading import Thread
|
|
9
|
+
from time import sleep
|
|
10
|
+
from urllib.request import urlopen
|
|
11
|
+
from urllib.error import URLError
|
|
12
|
+
import webbrowser
|
|
13
|
+
|
|
14
|
+
from uvicorn import run
|
|
15
|
+
|
|
16
|
+
from pydiet.server import config
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def start_server(
|
|
20
|
+
app: str="pydiet.server.app:create_app",
|
|
21
|
+
host: str="localhost",
|
|
22
|
+
port: int=8009,
|
|
23
|
+
root_path: str="",
|
|
24
|
+
workers: int=4,
|
|
25
|
+
access_log: bool=False,
|
|
26
|
+
reload: bool=True
|
|
27
|
+
):
|
|
28
|
+
"""
|
|
29
|
+
Start the Uvicorn server in application factory mode.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
app: str, optional
|
|
34
|
+
Name of the ASGI app callable.
|
|
35
|
+
host: str, optional
|
|
36
|
+
Host name or IP address.
|
|
37
|
+
port: int, optional
|
|
38
|
+
Port.
|
|
39
|
+
root_path: str | ~pathlib.Path, optional
|
|
40
|
+
ASGI root_path.
|
|
41
|
+
workers: int, optional
|
|
42
|
+
Number of workers.
|
|
43
|
+
access_log: bool, optional
|
|
44
|
+
Display access log.
|
|
45
|
+
reload: bool, optional
|
|
46
|
+
Enable auto-reload (turns off multiple workers).
|
|
47
|
+
"""
|
|
48
|
+
run(
|
|
49
|
+
app,
|
|
50
|
+
host=host,
|
|
51
|
+
port=port,
|
|
52
|
+
root_path=root_path,
|
|
53
|
+
access_log=access_log,
|
|
54
|
+
workers=workers,
|
|
55
|
+
reload=reload,
|
|
56
|
+
factory=True
|
|
57
|
+
)
|
|
58
|
+
return
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def open_browser_when_ready(host: str, port: int, root_path: str, api_path: str):
|
|
62
|
+
"""
|
|
63
|
+
Start a browser session once the server is up and running.
|
|
64
|
+
"""
|
|
65
|
+
link = f"http://{host}:{port}{root_path or ''}"
|
|
66
|
+
f"{config.settings['root_path'] or ''}"
|
|
67
|
+
while True:
|
|
68
|
+
try:
|
|
69
|
+
# succeeds only when server is actually up
|
|
70
|
+
urlopen(f"{link}{api_path}/health", timeout=2)
|
|
71
|
+
break
|
|
72
|
+
except URLError:
|
|
73
|
+
sleep(0.5)
|
|
74
|
+
webbrowser.open(link)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def main() -> int:
|
|
78
|
+
"""
|
|
79
|
+
Set up configuration and start the PyDIET server.
|
|
80
|
+
"""
|
|
81
|
+
if config.settings["browser"]:
|
|
82
|
+
# Start watcher thread to open browser when server is ready
|
|
83
|
+
Thread(
|
|
84
|
+
target=open_browser_when_ready,
|
|
85
|
+
args=(
|
|
86
|
+
config.settings["host"],
|
|
87
|
+
config.settings["port"],
|
|
88
|
+
config.settings["root_path"],
|
|
89
|
+
config.settings["api_path"]
|
|
90
|
+
),
|
|
91
|
+
daemon=True,
|
|
92
|
+
).start()
|
|
93
|
+
|
|
94
|
+
# Start the server itself
|
|
95
|
+
start_server(
|
|
96
|
+
host=config.settings["host"],
|
|
97
|
+
port=config.settings["port"],
|
|
98
|
+
root_path=config.settings["root_path"],
|
|
99
|
+
access_log=config.settings["access_log"],
|
|
100
|
+
reload=config.settings["reload"],
|
|
101
|
+
workers=config.settings["workers"]
|
|
102
|
+
)
|
|
103
|
+
return 0
|
|
104
|
+
|
|
105
|
+
if __name__ == "__main__":
|
|
106
|
+
exit(main())
|
|
107
|
+
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Data configuration for PyDIET
|
|
3
|
+
#
|
|
4
|
+
# The format is TOML (https://toml.io)
|
|
5
|
+
# Numerical quantities must be written as strings and support physical units
|
|
6
|
+
|
|
7
|
+
# Parent path for all data files
|
|
8
|
+
path = "data"
|
|
9
|
+
|
|
10
|
+
####################### Table array of observatory sites ######################
|
|
11
|
+
|
|
12
|
+
[[sites]]
|
|
13
|
+
default = true
|
|
14
|
+
id = 'mko'
|
|
15
|
+
name = "Mauna Kea Observatories"
|
|
16
|
+
description = "Mauna Kea Observatories, Hawaii, USA"
|
|
17
|
+
altitude = "4205 m"
|
|
18
|
+
path = "sites/mko"
|
|
19
|
+
[sites.transmission]
|
|
20
|
+
# Atmospheric transmission at Mauna Kea Observatories at various airmasses:
|
|
21
|
+
# - Computed by E.Bertin (2025) using MODTRAN6, using the default "tropical"
|
|
22
|
+
# atmosphere and the "rural" aerosol model settings.
|
|
23
|
+
# - Pointing upward from an altitude of 4204m.
|
|
24
|
+
# - CO2 concentration set to 430ppm.
|
|
25
|
+
path = "transmission"
|
|
26
|
+
files = [
|
|
27
|
+
{ vars = {am = 1.0}, file = "MKO_transmission.AM1.0.fits", default=true },
|
|
28
|
+
{ vars = {am = 1.1}, file = "MKO_transmission.AM1.1.fits" },
|
|
29
|
+
{ vars = {am = 1.2}, file = "MKO_transmission.AM1.2.fits" },
|
|
30
|
+
{ vars = {am = 1.3}, file = "MKO_transmission.AM1.3.fits" },
|
|
31
|
+
{ vars = {am = 1.4}, file = "MKO_transmission.AM1.4.fits" },
|
|
32
|
+
{ vars = {am = 1.5}, file = "MKO_transmission.AM1.5.fits" },
|
|
33
|
+
{ vars = {am = 1.6}, file = "MKO_transmission.AM1.6.fits" },
|
|
34
|
+
{ vars = {am = 1.7}, file = "MKO_transmission.AM1.7.fits" },
|
|
35
|
+
{ vars = {am = 1.8}, file = "MKO_transmission.AM1.8.fits" },
|
|
36
|
+
{ vars = {am = 1.9}, file = "MKO_transmission.AM1.9.fits" },
|
|
37
|
+
{ vars = {am = 2.0}, file = "MKO_transmission.AM2.0.fits" },
|
|
38
|
+
{ vars = {am = 2.5}, file = "MKO_transmission.AM2.5.fits" },
|
|
39
|
+
{ vars = {am = 3.0}, file = "MKO_transmission.AM3.0.fits" },
|
|
40
|
+
{ vars = {am = 3.5}, file = "MKO_transmission.AM3.5.fits" },
|
|
41
|
+
{ vars = {am = 4.0}, file = "MKO_transmission.AM4.0.fits" },
|
|
42
|
+
{ vars = {am = 4.5}, file = "MKO_transmission.AM4.5.fits" },
|
|
43
|
+
{ vars = {am = 5.0}, file = "MKO_transmission.AM5.0.fits" }
|
|
44
|
+
]
|
|
45
|
+
[sites.emission]
|
|
46
|
+
# Sky emission models
|
|
47
|
+
path = "emission"
|
|
48
|
+
files = [
|
|
49
|
+
# ESO SkyCalc sky emission model computed with default settings
|
|
50
|
+
# (except for the Moon set at -90 deg elevation).
|
|
51
|
+
{ vars = {sky='dark', am=1.0}, file = "MKO_emission.dark.AM1.0.fits", default=true },
|
|
52
|
+
{ vars = {sky='dark', am=1.1}, file = "MKO_emission.dark.AM1.1.fits" },
|
|
53
|
+
{ vars = {sky='dark', am=1.2}, file = "MKO_emission.dark.AM1.2.fits" },
|
|
54
|
+
{ vars = {sky='dark', am=1.3}, file = "MKO_emission.dark.AM1.3.fits" },
|
|
55
|
+
{ vars = {sky='dark', am=1.4}, file = "MKO_emission.dark.AM1.4.fits" },
|
|
56
|
+
{ vars = {sky='dark', am=1.5}, file = "MKO_emission.dark.AM1.5.fits" },
|
|
57
|
+
{ vars = {sky='dark', am=1.6}, file = "MKO_emission.dark.AM1.6.fits" },
|
|
58
|
+
{ vars = {sky='dark', am=1.7}, file = "MKO_emission.dark.AM1.7.fits" },
|
|
59
|
+
{ vars = {sky='dark', am=1.8}, file = "MKO_emission.dark.AM1.8.fits" },
|
|
60
|
+
{ vars = {sky='dark', am=1.9}, file = "MKO_emission.dark.AM1.9.fits" },
|
|
61
|
+
{ vars = {sky='dark', am=2.0}, file = "MKO_emission.dark.AM2.0.fits" },
|
|
62
|
+
{ vars = {sky='dark', am=2.5}, file = "MKO_emission.dark.AM2.5.fits" },
|
|
63
|
+
{ vars = {sky='dark', am=3.0}, file = "MKO_emission.dark.AM3.0.fits" },
|
|
64
|
+
# ESO SkyCalc sky emission model with 30% Moon component
|
|
65
|
+
# (66.4 deg phase at 45 deg elevation and 45 deg distance).
|
|
66
|
+
{ vars = {sky='grey', am=1.0}, file = "MKO_emission.grey.AM1.0.fits" },
|
|
67
|
+
{ vars = {sky='grey', am=1.1}, file = "MKO_emission.grey.AM1.1.fits" },
|
|
68
|
+
{ vars = {sky='grey', am=1.2}, file = "MKO_emission.grey.AM1.2.fits" },
|
|
69
|
+
{ vars = {sky='grey', am=1.3}, file = "MKO_emission.grey.AM1.3.fits" },
|
|
70
|
+
{ vars = {sky='grey', am=1.4}, file = "MKO_emission.grey.AM1.4.fits" },
|
|
71
|
+
{ vars = {sky='grey', am=1.5}, file = "MKO_emission.grey.AM1.5.fits" },
|
|
72
|
+
{ vars = {sky='grey', am=1.6}, file = "MKO_emission.grey.AM1.6.fits" },
|
|
73
|
+
{ vars = {sky='grey', am=1.7}, file = "MKO_emission.grey.AM1.7.fits" },
|
|
74
|
+
{ vars = {sky='grey', am=1.8}, file = "MKO_emission.grey.AM1.8.fits" },
|
|
75
|
+
{ vars = {sky='grey', am=1.9}, file = "MKO_emission.grey.AM1.9.fits" },
|
|
76
|
+
{ vars = {sky='grey', am=2.0}, file = "MKO_emission.grey.AM2.0.fits" },
|
|
77
|
+
{ vars = {sky='grey', am=2.5}, file = "MKO_emission.grey.AM2.5.fits" },
|
|
78
|
+
{ vars = {sky='grey', am=3.0}, file = "MKO_emission.grey.AM3.0.fits" },
|
|
79
|
+
# ESO SkyCalc sky emission model with 60% Moon component
|
|
80
|
+
# (101.5 deg phase, at 45 deg elevation and 45 deg distance).
|
|
81
|
+
{ vars = {sky='bright', am=1.0}, file = "MKO_emission.bright.AM1.0.fits", default=true },
|
|
82
|
+
{ vars = {sky='bright', am=1.1}, file = "MKO_emission.bright.AM1.1.fits" },
|
|
83
|
+
{ vars = {sky='bright', am=1.2}, file = "MKO_emission.bright.AM1.2.fits" },
|
|
84
|
+
{ vars = {sky='bright', am=1.3}, file = "MKO_emission.bright.AM1.3.fits" },
|
|
85
|
+
{ vars = {sky='bright', am=1.4}, file = "MKO_emission.bright.AM1.4.fits" },
|
|
86
|
+
{ vars = {sky='bright', am=1.5}, file = "MKO_emission.bright.AM1.5.fits" },
|
|
87
|
+
{ vars = {sky='bright', am=1.6}, file = "MKO_emission.bright.AM1.6.fits" },
|
|
88
|
+
{ vars = {sky='bright', am=1.7}, file = "MKO_emission.bright.AM1.7.fits" },
|
|
89
|
+
{ vars = {sky='bright', am=1.8}, file = "MKO_emission.bright.AM1.8.fits" },
|
|
90
|
+
{ vars = {sky='bright', am=1.9}, file = "MKO_emission.bright.AM1.9.fits" },
|
|
91
|
+
{ vars = {sky='bright', am=2.0}, file = "MKO_emission.bright.AM2.0.fits" },
|
|
92
|
+
{ vars = {sky='bright', am=2.5}, file = "MKO_emission.bright.AM2.5.fits" },
|
|
93
|
+
{ vars = {sky='bright', am=3.0}, file = "MKO_emission.bright.AM3.0.fits" }
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
######################### Table array of telescopes ###########################
|
|
98
|
+
|
|
99
|
+
[[telescopes]]
|
|
100
|
+
default = true
|
|
101
|
+
id = 'cfht'
|
|
102
|
+
name = "CFHT"
|
|
103
|
+
description = "Canada-France-Hawaii 3.6m telescope"
|
|
104
|
+
path = "telescopes/cfht"
|
|
105
|
+
# Full collecting area _including_ possible mirror hole and spider branches
|
|
106
|
+
collecting_area = "10.134 m2" # from CFHT's observatory manual: 3.592m diameter
|
|
107
|
+
# Default obstruction area (only used if not specified for the instrument)
|
|
108
|
+
obstruction_area = "0.974 m2" # 0.951m diameter hole and 4x5cm spider branches
|
|
109
|
+
[telescopes.transmission]
|
|
110
|
+
# Transmission curves for the CFHT 3.6m telescope
|
|
111
|
+
path = "transmission"
|
|
112
|
+
files = [ {file = "CFHT_M1_transmission.fits"} ]
|
|
113
|
+
[telescopes.emission]
|
|
114
|
+
# Emission curves for the CFHT 3.6m telescope
|
|
115
|
+
temperatures = ["273 K"]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
########################## Table array of instruments #########################
|
|
119
|
+
|
|
120
|
+
[[instruments]]
|
|
121
|
+
# MegaCam/MegaPrime instrument. All infos derived from the MegaCam web pages at
|
|
122
|
+
# https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/index.html
|
|
123
|
+
default = true
|
|
124
|
+
id = 'megacam'
|
|
125
|
+
name = "MegaCam"
|
|
126
|
+
description = "The MegaPrime/MegaCam instrument"
|
|
127
|
+
path = "instruments/megacam"
|
|
128
|
+
wavelength_range = "[250., 1050.] nm"
|
|
129
|
+
obstruction_area = "2.112 m2" # Forged by subtracting
|
|
130
|
+
overhead = "40 s"
|
|
131
|
+
site_id = 'mko'
|
|
132
|
+
telescope_id = 'cfht'
|
|
133
|
+
[instruments.optics]
|
|
134
|
+
# MegaPrime/MegaCam optical properties
|
|
135
|
+
path = "optics"
|
|
136
|
+
[instruments.optics.transmission]
|
|
137
|
+
# Transmission as a function of wavelength for all MegaPrime optical components
|
|
138
|
+
path = "transmission"
|
|
139
|
+
files = [ {file = "MegaPrime_transmission.fits"} ]
|
|
140
|
+
[instruments.optics.emission]
|
|
141
|
+
# Emission as a function of wavelength for all MegaPrime optical components
|
|
142
|
+
temperatures = ["273 K"] # Typical temperature of the corrector optics
|
|
143
|
+
[instruments.filters]
|
|
144
|
+
path = "filters"
|
|
145
|
+
[instruments.filters.transmission]
|
|
146
|
+
vars = ['id']
|
|
147
|
+
files = [
|
|
148
|
+
{id = 'u', name = "u", file = "u.MP9302.fits"},
|
|
149
|
+
{id = 'g', name = "g", file = "g.MP9402.fits"},
|
|
150
|
+
{id = 'r', name = "r", file = "r.MP9602.fits", default=true},
|
|
151
|
+
{id = 'i', name = "i", file = "i.MP9703.fits"},
|
|
152
|
+
{id = 'z', name = "z", file = "z.MP9901.fits"},
|
|
153
|
+
{id = 'gri', name = "gri", file = "gri.MP9605.fits"},
|
|
154
|
+
{id = 'cahk', name = "CaHK", file = "CaHK.MP9303.fits"},
|
|
155
|
+
{id = 'oiii', name = "OIII", file = "OIII.MP9501.fits"},
|
|
156
|
+
{id = 'oiiioff', name = "OIII off", file = "OIIIOFF.MP9502.fits"},
|
|
157
|
+
{id = 'ha', name = "Ha", file = "Ha.MP9603.fits"},
|
|
158
|
+
{id = 'haoff', name = "Ha off", file = "HaOFF.MP9604.fits"},
|
|
159
|
+
{id = 'm4112', name = "M4112", file = "M4112.MP9403.fits"},
|
|
160
|
+
{id = 'm4376', name = "M4376", file = "M4376.MP9404.fits"}
|
|
161
|
+
]
|
|
162
|
+
[instruments.filters.emission]
|
|
163
|
+
# Emission as a function of wavelength for all MegaPrime optical components
|
|
164
|
+
temperatures = ["273 K"] # Typical temperature of the corrector optics
|
|
165
|
+
[instruments.detector]
|
|
166
|
+
# Average MegaCam E2V CCD characteristics
|
|
167
|
+
path = "detector"
|
|
168
|
+
gain = "1.62 electron/adu"
|
|
169
|
+
ron = "5. electron"
|
|
170
|
+
scale = "[0.186, 0.186] arcsec/pix"
|
|
171
|
+
full_well = "240000 electron"
|
|
172
|
+
range = "65536 adu"
|
|
173
|
+
bias = "1200. adu"
|
|
174
|
+
[instruments.detector.transmission]
|
|
175
|
+
path = "qe"
|
|
176
|
+
# Average MegaCam CCD quantum efficiency as a function of wavelength
|
|
177
|
+
files = [ {file = "MegaCam_QE.average.fits"} ]
|
|
178
|
+
[instruments.detector.emission]
|
|
179
|
+
temperatures = ["153 K"]
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
[[instruments]]
|
|
183
|
+
# WIRCam instrument. Most infos derived from the WIRCam web pages at
|
|
184
|
+
# https://www.cfht.hawaii.edu/Instruments/Imaging/WIRCam/
|
|
185
|
+
id = 'wircam'
|
|
186
|
+
name = "WIRCam"
|
|
187
|
+
description = "The WIRCam instrument"
|
|
188
|
+
path = "instruments/wircam"
|
|
189
|
+
wavelength_range = "[900., 2600.] nm"
|
|
190
|
+
obstruction_area = "1.734 m2" # Forged by subtracting 8.4m2 from 10.134 m2
|
|
191
|
+
overhead = "10. s"
|
|
192
|
+
site_id = 'mko'
|
|
193
|
+
telescope_id = 'cfht'
|
|
194
|
+
[instruments.optics]
|
|
195
|
+
# WIRCam optical properties
|
|
196
|
+
path = "optics"
|
|
197
|
+
[instruments.optics.transmission]
|
|
198
|
+
# Transmission as a function of wavelength for all WIRCam optical components
|
|
199
|
+
path = "transmission"
|
|
200
|
+
files = [ {file = "WIRCam_transmission.fits"} ]
|
|
201
|
+
[instruments.optics.emission]
|
|
202
|
+
# Emission as a function of wavelength for all WIRCam optical components
|
|
203
|
+
temperatures = ["273 K"]
|
|
204
|
+
[instruments.filters]
|
|
205
|
+
path = "filters"
|
|
206
|
+
[instruments.filters.transmission]
|
|
207
|
+
vars = ['id']
|
|
208
|
+
files = [
|
|
209
|
+
{id = 'y', name = "Y", file = "Y.WC8002.fits", default=true},
|
|
210
|
+
{id = 'j', name = "J", file = "J.WC8103.fits"},
|
|
211
|
+
{id = 'h', name = "H", file = "H.WC8202.fits"},
|
|
212
|
+
{id = 'ks', name = "Ks", file = "Ks.WC8302.fits"},
|
|
213
|
+
{id = 'h2', name = "H2 (1-0)", file = "H2.WC8304.fits"},
|
|
214
|
+
{id = 'lowoh1', name = "Low OH1", file = "LowOH1.WC8104.fits"},
|
|
215
|
+
{id = 'lowoh2', name = "Low OH2", file = "LowOH2.WC8102.fits"},
|
|
216
|
+
{id = 'ch4on', name = "CH4 on", file = "CH4On.WC8203.fits"},
|
|
217
|
+
{id = 'ch4off', name = "CH4 off", file = "CH4Off.WC8204.fits"},
|
|
218
|
+
{id = 'kcont', name = "K cont.", file = "Kcont.WC8303.fits"},
|
|
219
|
+
{id = 'brg', name = "Br.gamma", file = "BrG.WC8305.fits"},
|
|
220
|
+
{id = 'w', name = "W", file = "W.WC8105.fits"}
|
|
221
|
+
]
|
|
222
|
+
[instruments.filters.emission]
|
|
223
|
+
temperatures = ["80 K"]
|
|
224
|
+
[instruments.detector]
|
|
225
|
+
# Average WIRCam Hawaii-2RG CMOS characteristics
|
|
226
|
+
gain = "3.7 electron/adu"
|
|
227
|
+
ron = "30. electron"
|
|
228
|
+
scale = "[0.306, 0.306] arcsec/pix"
|
|
229
|
+
path = "detector"
|
|
230
|
+
full_well = "130000 electron"
|
|
231
|
+
range = "65536 adu"
|
|
232
|
+
bias = "0. adu"
|
|
233
|
+
[instruments.detector.transmission]
|
|
234
|
+
path = "qe"
|
|
235
|
+
# Average Hawaii-2RG quantum efficiency as a function of wavelength from the
|
|
236
|
+
# science-grade sample of Finger+2006, which has a 2.5 μm cut-off; see
|
|
237
|
+
# https://info.cfht.hawaii.edu/display/~bertin/WIRCam+quantum+efficiency+curve
|
|
238
|
+
files = [ {file = "WIRCam_QE.average.fits"} ]
|
|
239
|
+
[instruments.detector.emission]
|
|
240
|
+
temperatures = ["80 K"]
|
|
241
|
+
|
|
242
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Root folder for PyDIET data.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Instrument data.
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
The MegaPrime/MegaCam instrument.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MegaCam CCD and readout electronics properties.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
MegaPrime/MegaCam filter set.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
The WIRCam camera.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
WIRCam detector and readout electronics properties.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
WIRCam filter set.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Observation site data.
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|