surveycodex 1.2.0__py2.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.
- surveycodex/__init__.py +53 -0
- surveycodex/__main__.py +77 -0
- surveycodex/data/CFHTLS.yaml +74 -0
- surveycodex/data/COSMOS.yaml +46 -0
- surveycodex/data/DES.yaml +67 -0
- surveycodex/data/Euclid_VIS.yaml +46 -0
- surveycodex/data/HSC.yaml +82 -0
- surveycodex/data/LSST.yaml +81 -0
- surveycodex/filter.py +71 -0
- surveycodex/helpers.py +86 -0
- surveycodex/rich.py +115 -0
- surveycodex/survey.py +148 -0
- surveycodex/utilities.py +110 -0
- surveycodex-1.2.0.dist-info/LICENSE +21 -0
- surveycodex-1.2.0.dist-info/METADATA +163 -0
- surveycodex-1.2.0.dist-info/RECORD +19 -0
- surveycodex-1.2.0.dist-info/WHEEL +6 -0
- surveycodex-1.2.0.dist-info/entry_points.txt +3 -0
- surveycodex-1.2.0.dist-info/top_level.txt +1 -0
surveycodex/__init__.py
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
r"""
|
|
2
|
+
____ ____ _
|
|
3
|
+
/ ___| _ _ _ ____ _____ _ _ / ___|___ __| | _____ __
|
|
4
|
+
\___ \| | | | '__\ \ / / _ \ | | | | / _ \ / _` |/ _ \ \/ /
|
|
5
|
+
___) | |_| | | \ V / __/ |_| | |__| (_) | (_| | __/> <
|
|
6
|
+
|____/ \__,_|_| \_/ \___|\__, |\____\___/ \__,_|\___/_/\_\
|
|
7
|
+
|___/
|
|
8
|
+
|
|
9
|
+
The tiny library of galaxy surveys
|
|
10
|
+
most useful parameters with units
|
|
11
|
+
|
|
12
|
+
The data can be viewed in a terminal with
|
|
13
|
+
|
|
14
|
+
python -m surveycodex
|
|
15
|
+
|
|
16
|
+
To access the quantities, retrieve the
|
|
17
|
+
`Survey` objects with `get_survey`.
|
|
18
|
+
|
|
19
|
+
>>> from surveycodex import get_survey
|
|
20
|
+
>>> LSST = get_survey('LSST')
|
|
21
|
+
>>> LSST.mirror_diameter
|
|
22
|
+
<Quantity 8.36 m>
|
|
23
|
+
|
|
24
|
+
Each `Survey` contains a list of filters
|
|
25
|
+
whose names can be obtained as
|
|
26
|
+
|
|
27
|
+
>>> LSST.available_filters
|
|
28
|
+
|
|
29
|
+
Each `Filter` class is accessible through
|
|
30
|
+
|
|
31
|
+
>>> u_filter = LSST.get_filter('u')
|
|
32
|
+
|
|
33
|
+
Parameter values are astropy Quantity objects
|
|
34
|
+
|
|
35
|
+
>>> u_filter.psf_fwhm
|
|
36
|
+
<Quantity 0.859 arcsec>
|
|
37
|
+
>>> u_filter.psf_fwhm.value
|
|
38
|
+
0.859
|
|
39
|
+
>>> u_filter.psf_fwhm.unit
|
|
40
|
+
Unit("arcsec")
|
|
41
|
+
|
|
42
|
+
which can be converted to any physical units
|
|
43
|
+
using the `astropy.units` scheme
|
|
44
|
+
>>> u_filter.psf_fwhm.to_value('arcmin')
|
|
45
|
+
0.014316666666666667
|
|
46
|
+
|
|
47
|
+
Feel free to contribute by submitting
|
|
48
|
+
parameter values for your surveys of
|
|
49
|
+
interest or reporting inconsistent values.
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
from surveycodex.helpers import available_surveys, get_survey # noqa
|
surveycodex/__main__.py
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
|
|
3
|
+
from surveycodex.helpers import available_surveys, print_survey
|
|
4
|
+
|
|
5
|
+
_FOOTER = "\nprovided by surveycodex <https://github.com/LSSTDESC/surveycodex>\n"
|
|
6
|
+
_LINEBREAK = "\n" + "• " * 15 + "\n"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _survey_parser():
|
|
10
|
+
parser = argparse.ArgumentParser(
|
|
11
|
+
description="Print out the main survey features present in surveycodex",
|
|
12
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
13
|
+
)
|
|
14
|
+
parser.add_argument(
|
|
15
|
+
"-s",
|
|
16
|
+
type=str,
|
|
17
|
+
default=None,
|
|
18
|
+
dest="survey_name",
|
|
19
|
+
help="Name of survey. If None, shows all available surveys.",
|
|
20
|
+
)
|
|
21
|
+
parser.add_argument(
|
|
22
|
+
"--refs",
|
|
23
|
+
action="store_true",
|
|
24
|
+
dest="show_refs",
|
|
25
|
+
help="Print the references for each parameter.",
|
|
26
|
+
)
|
|
27
|
+
parser.add_argument(
|
|
28
|
+
"--rich",
|
|
29
|
+
action="store_true",
|
|
30
|
+
dest="use_rich",
|
|
31
|
+
help="Use rich console for printing.",
|
|
32
|
+
)
|
|
33
|
+
return parser.parse_args()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def main():
|
|
37
|
+
args = _survey_parser()
|
|
38
|
+
|
|
39
|
+
use_rich = False
|
|
40
|
+
if args.use_rich:
|
|
41
|
+
try:
|
|
42
|
+
from rich.console import Console
|
|
43
|
+
|
|
44
|
+
console = Console()
|
|
45
|
+
use_rich = True
|
|
46
|
+
except ImportError:
|
|
47
|
+
print(
|
|
48
|
+
"The rich library is not installed by default with surveycodex.",
|
|
49
|
+
"In order to use rich printing, please consider installing it using pip.",
|
|
50
|
+
"`python -m pip install rich`",
|
|
51
|
+
"\nDefaulting to classic display...\n",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
if args.survey_name is None:
|
|
55
|
+
surveys = available_surveys
|
|
56
|
+
else:
|
|
57
|
+
surveys = [args.survey_name]
|
|
58
|
+
|
|
59
|
+
if use_rich:
|
|
60
|
+
from surveycodex.rich import display_references, display_survey
|
|
61
|
+
|
|
62
|
+
for survey in surveys:
|
|
63
|
+
console.print("")
|
|
64
|
+
console.print(display_survey(survey))
|
|
65
|
+
if args.show_refs:
|
|
66
|
+
console.print(display_references(survey))
|
|
67
|
+
console.print(_FOOTER)
|
|
68
|
+
else:
|
|
69
|
+
for survey in surveys:
|
|
70
|
+
print_survey(survey, show_refs=args.show_refs)
|
|
71
|
+
if survey != surveys[-1]:
|
|
72
|
+
print(_LINEBREAK)
|
|
73
|
+
print(_FOOTER)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
if __name__ == "__main__":
|
|
77
|
+
main()
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: "CFHTLS"
|
|
2
|
+
description: "Canada France Hawaii Lensing wide-field Survey (CFHTLS) done with the Canada France Hawaii Telescope (CFHT) and MegaCam"
|
|
3
|
+
pixel_scale: 0.187
|
|
4
|
+
gain: 1.67
|
|
5
|
+
mirror_diameter: 3.58
|
|
6
|
+
obscuration: 0.20309772
|
|
7
|
+
zeropoint_airmass: 1.0
|
|
8
|
+
filters:
|
|
9
|
+
u:
|
|
10
|
+
name: "u"
|
|
11
|
+
sky_brightness: 21.20
|
|
12
|
+
full_exposure_time: 3000
|
|
13
|
+
zeropoint: 25.78
|
|
14
|
+
psf_fwhm: 0.81
|
|
15
|
+
effective_wavelength: 382.329
|
|
16
|
+
g:
|
|
17
|
+
name: "g"
|
|
18
|
+
sky_brightness: 21.30
|
|
19
|
+
full_exposure_time: 2500
|
|
20
|
+
zeropoint: 27.11
|
|
21
|
+
psf_fwhm: 0.84
|
|
22
|
+
effective_wavelength: 487.737
|
|
23
|
+
r:
|
|
24
|
+
name: "r"
|
|
25
|
+
sky_brightness: 20.80
|
|
26
|
+
full_exposure_time: 2000
|
|
27
|
+
zeropoint: 26.74
|
|
28
|
+
psf_fwhm: 0.73
|
|
29
|
+
effective_wavelength: 623.062
|
|
30
|
+
i:
|
|
31
|
+
name: "i"
|
|
32
|
+
sky_brightness: 20.30
|
|
33
|
+
full_exposure_time: 4305
|
|
34
|
+
zeropoint: 26.22
|
|
35
|
+
psf_fwhm: 0.66
|
|
36
|
+
effective_wavelength: 716.766
|
|
37
|
+
z:
|
|
38
|
+
name: "z"
|
|
39
|
+
sky_brightness: 19.40
|
|
40
|
+
full_exposure_time: 3600
|
|
41
|
+
zeropoint: 25.05
|
|
42
|
+
psf_fwhm: 0.66
|
|
43
|
+
effective_wavelength: 882.798
|
|
44
|
+
references:
|
|
45
|
+
pixel_scale:
|
|
46
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/generalinformation.html"
|
|
47
|
+
comment: ""
|
|
48
|
+
gain:
|
|
49
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/generalinformation.html"
|
|
50
|
+
comment: ""
|
|
51
|
+
mirror_diameter:
|
|
52
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/specsinformation.html"
|
|
53
|
+
comment: "See section 2.3"
|
|
54
|
+
obscuration:
|
|
55
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/specsinformation.html"
|
|
56
|
+
comment: "See section 2.3, using the given effective area in cm^2, the obscuration is 1-80216/(pi*358*358/4)"
|
|
57
|
+
zeropoint_airmass:
|
|
58
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/generalinformation.html"
|
|
59
|
+
comment: ""
|
|
60
|
+
sky_brightness:
|
|
61
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/generalinformation.html"
|
|
62
|
+
comment: "taken as \"grey sky\": at zenith, 30% moon"
|
|
63
|
+
full_exposure_time:
|
|
64
|
+
link: "https://www.cfht.hawaii.edu/Science/CFHTLS/T0007"
|
|
65
|
+
comment: "taken as modes in table 31"
|
|
66
|
+
zeropoint:
|
|
67
|
+
link: "https://www.cfht.hawaii.edu/Instruments/Imaging/Megacam/generalinformation.html"
|
|
68
|
+
comment: ""
|
|
69
|
+
psf_fwhm:
|
|
70
|
+
link: "https://www.cfht.hawaii.edu/Science/CFHTLS/T0007"
|
|
71
|
+
comment: "roughly taken from figure 25"
|
|
72
|
+
effective_wavelength:
|
|
73
|
+
link: "https://cosmos.astro.caltech.edu/page/filterset"
|
|
74
|
+
comment: ""
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: "COSMOS"
|
|
2
|
+
description: "COSMOS survey done with the Hubble Space Telescope (HST) and the Advanced Camera for Surveys (ACS)"
|
|
3
|
+
pixel_scale: 0.03
|
|
4
|
+
gain: 1.0
|
|
5
|
+
mirror_diameter: 2.4
|
|
6
|
+
obscuration: 0.33
|
|
7
|
+
zeropoint_airmass: 0.0
|
|
8
|
+
filters:
|
|
9
|
+
f814w:
|
|
10
|
+
name: "f814w"
|
|
11
|
+
sky_brightness: 22
|
|
12
|
+
full_exposure_time: 2028
|
|
13
|
+
zeropoint: 25.94
|
|
14
|
+
psf_fwhm: 0.095
|
|
15
|
+
effective_wavelength: 807.343
|
|
16
|
+
references:
|
|
17
|
+
pixel_scale:
|
|
18
|
+
link: "https://iopscience.iop.org/article/10.1086/520086"
|
|
19
|
+
comment: "See section 4"
|
|
20
|
+
gain:
|
|
21
|
+
link: "https://iopscience.iop.org/article/10.1086/520086"
|
|
22
|
+
comment: "See section 2.1"
|
|
23
|
+
mirror_diameter:
|
|
24
|
+
link: "https://arxiv.org/abs/1203.0002"
|
|
25
|
+
comment: "(v1) See section 4 table 1"
|
|
26
|
+
obscuration:
|
|
27
|
+
link: "https://arxiv.org/abs/1203.0002"
|
|
28
|
+
comment: "(v1) See section 4 table 1"
|
|
29
|
+
zeropoint_airmass:
|
|
30
|
+
link: ""
|
|
31
|
+
comment: "Space telescope"
|
|
32
|
+
sky_brightness:
|
|
33
|
+
link: ""
|
|
34
|
+
comment: ""
|
|
35
|
+
full_exposure_time:
|
|
36
|
+
link: "https://iopscience.iop.org/article/10.1086/520086"
|
|
37
|
+
comment: "See section 2.2"
|
|
38
|
+
zeropoint:
|
|
39
|
+
link: "https://galsim-developers.github.io/GalSim/_build/html/real_gal.html"
|
|
40
|
+
comment: ""
|
|
41
|
+
psf_fwhm:
|
|
42
|
+
link: "https://iopscience.iop.org/article/10.1086/520086"
|
|
43
|
+
comment: "See section 5"
|
|
44
|
+
effective_wavelength:
|
|
45
|
+
link: "https://cosmos.astro.caltech.edu/page/filterset"
|
|
46
|
+
comment: ""
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: "DES"
|
|
2
|
+
description: "Dark Energy wide-field Survey (DES) done with the Victor M. Blanco telescope and the Dark Energy CAMera (DECam)"
|
|
3
|
+
pixel_scale: 0.2637
|
|
4
|
+
gain: 4.0
|
|
5
|
+
mirror_diameter: 3.934
|
|
6
|
+
obscuration: 0.17612680
|
|
7
|
+
zeropoint_airmass: 1.3
|
|
8
|
+
filters:
|
|
9
|
+
g:
|
|
10
|
+
name: "g"
|
|
11
|
+
sky_brightness: 22.01
|
|
12
|
+
full_exposure_time: 900
|
|
13
|
+
zeropoint: 26.72
|
|
14
|
+
psf_fwhm: 1.12
|
|
15
|
+
effective_wavelength: 489.004
|
|
16
|
+
r:
|
|
17
|
+
name: "r"
|
|
18
|
+
sky_brightness: 21.15
|
|
19
|
+
full_exposure_time: 900
|
|
20
|
+
zeropoint: 26.99
|
|
21
|
+
psf_fwhm: 0.96
|
|
22
|
+
effective_wavelength: 646.962
|
|
23
|
+
i:
|
|
24
|
+
name: "i"
|
|
25
|
+
sky_brightness: 19.89
|
|
26
|
+
full_exposure_time: 900
|
|
27
|
+
zeropoint: 26.86
|
|
28
|
+
psf_fwhm: 0.88
|
|
29
|
+
effective_wavelength: 784.778
|
|
30
|
+
z:
|
|
31
|
+
name: "z"
|
|
32
|
+
sky_brightness: 18.72
|
|
33
|
+
full_exposure_time: 900
|
|
34
|
+
zeropoint: 26.58
|
|
35
|
+
psf_fwhm: 0.84
|
|
36
|
+
effective_wavelength: 919.646
|
|
37
|
+
references:
|
|
38
|
+
pixel_scale:
|
|
39
|
+
link: "http://www.ctio.noirlab.edu/noao/content/DECam-What"
|
|
40
|
+
comment: ""
|
|
41
|
+
gain:
|
|
42
|
+
link: "http://www.ctio.noirlab.edu/noao/content/DECam-What"
|
|
43
|
+
comment: ""
|
|
44
|
+
mirror_diameter:
|
|
45
|
+
link: "http://www.ctio.noirlab.edu/noao/content/Basic-Optical-Parameters"
|
|
46
|
+
comment: ""
|
|
47
|
+
obscuration:
|
|
48
|
+
link: "http://www.ctio.noirlab.edu/noao/content/Basic-Optical-Parameters"
|
|
49
|
+
comment: "disk of 1.651m - obscuration is 1.651^2/3.934^2 which returns the right effective area"
|
|
50
|
+
zeropoint_airmass:
|
|
51
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#decam-2014-filters"
|
|
52
|
+
comment: ""
|
|
53
|
+
sky_brightness:
|
|
54
|
+
link: "https://arxiv.org/abs/1801.03181"
|
|
55
|
+
comment: "(v3) See table 1"
|
|
56
|
+
full_exposure_time:
|
|
57
|
+
link: "https://arxiv.org/abs/1801.03181"
|
|
58
|
+
comment: "(v3) See section 2.2 page 5. Coadds of 10 x 90s exposures"
|
|
59
|
+
zeropoint:
|
|
60
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#decam-2014-filters"
|
|
61
|
+
comment: "computed with speclite – see scripts/check_zeropoints.py"
|
|
62
|
+
psf_fwhm:
|
|
63
|
+
link: "https://arxiv.org/abs/1801.03181"
|
|
64
|
+
comment: "(v3) See table 1"
|
|
65
|
+
effective_wavelength:
|
|
66
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#decam-2014-filters"
|
|
67
|
+
comment: "computed with speclite – see scripts/check_effective_wavelength.py"
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: "Euclid_VIS"
|
|
2
|
+
description: "Euclid wide-field survey done with the Euclid space telescope and the visible instrument (VIS)"
|
|
3
|
+
pixel_scale: 0.10
|
|
4
|
+
gain: 3.1
|
|
5
|
+
mirror_diameter: 1.2
|
|
6
|
+
obscuration: 0.13
|
|
7
|
+
zeropoint_airmass: 0.0
|
|
8
|
+
filters:
|
|
9
|
+
IE:
|
|
10
|
+
name: "IE"
|
|
11
|
+
sky_brightness: 22.3203
|
|
12
|
+
full_exposure_time: 565
|
|
13
|
+
zeropoint: 25.91
|
|
14
|
+
psf_fwhm: 0.17
|
|
15
|
+
effective_wavelength: 750.637
|
|
16
|
+
references:
|
|
17
|
+
pixel_scale:
|
|
18
|
+
link: "https://arxiv.org/abs/1110.3193"
|
|
19
|
+
comment: "(v1) See page 3"
|
|
20
|
+
gain:
|
|
21
|
+
link: "https://www.mssl.ucl.ac.uk/~smn2/instrument.html"
|
|
22
|
+
comment: ""
|
|
23
|
+
mirror_diameter:
|
|
24
|
+
link: "https://arxiv.org/abs/1608.08603"
|
|
25
|
+
comment: "(v1) See section 3.1"
|
|
26
|
+
obscuration:
|
|
27
|
+
link: "https://arxiv.org/abs/1608.08603"
|
|
28
|
+
comment: "(v1) See section 3.1"
|
|
29
|
+
zeropoint_airmass:
|
|
30
|
+
link: ""
|
|
31
|
+
comment: "Space telescope"
|
|
32
|
+
sky_brightness:
|
|
33
|
+
link: "https://www.mssl.ucl.ac.uk/~smn2/instrument.html"
|
|
34
|
+
comment: ""
|
|
35
|
+
full_exposure_time:
|
|
36
|
+
link: "https://arxiv.org/abs/1608.08603"
|
|
37
|
+
comment: "(v1) See section 6"
|
|
38
|
+
zeropoint:
|
|
39
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html"
|
|
40
|
+
comment: "computed with speclite – see scripts/check_zeropoints.py"
|
|
41
|
+
psf_fwhm:
|
|
42
|
+
link: "https://arxiv.org/abs/1608.08603"
|
|
43
|
+
comment: "(v1) See section 8"
|
|
44
|
+
effective_wavelength:
|
|
45
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html"
|
|
46
|
+
comment: "computed with speclite – see scripts/check_effective_wavelength.py"
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: "HSC"
|
|
2
|
+
description: "Hyper Suprime-Cam (HSC) wide-field survey done with the Subaru telescope and the Hyper Suprime-Cam (HSC)"
|
|
3
|
+
pixel_scale: 0.168
|
|
4
|
+
gain: 3.0
|
|
5
|
+
mirror_diameter: 8.3
|
|
6
|
+
obscuration: 0.02090289
|
|
7
|
+
zeropoint_airmass: 1.2
|
|
8
|
+
filters:
|
|
9
|
+
g:
|
|
10
|
+
name: "g"
|
|
11
|
+
sky_brightness: 21.4
|
|
12
|
+
full_exposure_time: 600
|
|
13
|
+
zeropoint: 28.90
|
|
14
|
+
psf_fwhm: 0.79
|
|
15
|
+
effective_wavelength: 484.370
|
|
16
|
+
r:
|
|
17
|
+
name: "r"
|
|
18
|
+
sky_brightness: 20.6
|
|
19
|
+
full_exposure_time: 600
|
|
20
|
+
zeropoint: 28.86
|
|
21
|
+
psf_fwhm: 0.75
|
|
22
|
+
effective_wavelength: 625.889
|
|
23
|
+
i:
|
|
24
|
+
name: "i"
|
|
25
|
+
sky_brightness: 19.7
|
|
26
|
+
full_exposure_time: 1200
|
|
27
|
+
zeropoint: 28.61
|
|
28
|
+
psf_fwhm: 0.61
|
|
29
|
+
effective_wavelength: 773.009
|
|
30
|
+
z:
|
|
31
|
+
name: "z"
|
|
32
|
+
sky_brightness: 18.3
|
|
33
|
+
full_exposure_time: 1200
|
|
34
|
+
zeropoint: 27.68
|
|
35
|
+
psf_fwhm: 0.68
|
|
36
|
+
effective_wavelength: 891.239
|
|
37
|
+
y:
|
|
38
|
+
name: "y"
|
|
39
|
+
sky_brightness: 17.9
|
|
40
|
+
full_exposure_time: 1200
|
|
41
|
+
zeropoint: 27.33
|
|
42
|
+
psf_fwhm: 0.68
|
|
43
|
+
effective_wavelength: 978.695
|
|
44
|
+
references:
|
|
45
|
+
pixel_scale:
|
|
46
|
+
link: "https://hsc-release.mtk.nao.ac.jp/doc/index.php/survey/"
|
|
47
|
+
comment: ""
|
|
48
|
+
gain:
|
|
49
|
+
link: "https://www.naoj.org/Observing/Instruments/HSC/parameters.html"
|
|
50
|
+
comment: ""
|
|
51
|
+
mirror_diameter:
|
|
52
|
+
link: "https://carlkop.home.xs4all.nl/subaru.html"
|
|
53
|
+
comment: ""
|
|
54
|
+
obscuration:
|
|
55
|
+
link: "https://carlkop.home.xs4all.nl/subaru.html"
|
|
56
|
+
comment: "central hole of 1.2m so that the obscuration is 1.2^2/8.3^2 (confirmed by an expert contacted by H. Miyatake)"
|
|
57
|
+
zeropoint_airmass:
|
|
58
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#hsc-filters"
|
|
59
|
+
comment: ""
|
|
60
|
+
sky_brightness:
|
|
61
|
+
link: "https://www.naoj.org/Observing/Instruments/SCam/exptime.html"
|
|
62
|
+
comment: ""
|
|
63
|
+
full_exposure_time:
|
|
64
|
+
link: "https://arxiv.org/abs/2108.13045"
|
|
65
|
+
comment: "(v1) See \"Wide\" in table 1"
|
|
66
|
+
zeropoint:
|
|
67
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#hsc-filters"
|
|
68
|
+
comment: "computed with speclite – see scripts/check_zeropoints.py"
|
|
69
|
+
psf_fwhm:
|
|
70
|
+
link: "https://arxiv.org/abs/2108.13045"
|
|
71
|
+
comment: "(v1) See \"Wide\" in table 1"
|
|
72
|
+
effective_wavelength:
|
|
73
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#hsc-filters"
|
|
74
|
+
comment: "computed with speclite – see scripts/check_effective_wavelength.py"
|
|
75
|
+
|
|
76
|
+
# Notes
|
|
77
|
+
# -----
|
|
78
|
+
# The reference link for sky_brightness for Suprime-Cam, should be approximately okay.
|
|
79
|
+
# Here is the updated version for HSC as of July 2021
|
|
80
|
+
# https://www.subarutelescope.org/Observing/Instruments/HSC/hsc_etc_report.html.
|
|
81
|
+
# We could update the numbers to this version, although we need to
|
|
82
|
+
# convert the unit from ADU/sec to mag/arcsec^2.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
name: "LSST"
|
|
2
|
+
description: "Legacy Survey of Space and Time (LSST) done with the Simonyi survey telescope and the LSST camera"
|
|
3
|
+
pixel_scale: 0.2
|
|
4
|
+
gain: 1.0
|
|
5
|
+
mirror_diameter: 8.36
|
|
6
|
+
obscuration: 0.39257227
|
|
7
|
+
zeropoint_airmass: 1.2
|
|
8
|
+
filters:
|
|
9
|
+
u:
|
|
10
|
+
name: "u"
|
|
11
|
+
sky_brightness: 22.99
|
|
12
|
+
full_exposure_time: 1680
|
|
13
|
+
zeropoint: 26.40
|
|
14
|
+
psf_fwhm: 0.90
|
|
15
|
+
effective_wavelength: 368.141
|
|
16
|
+
g:
|
|
17
|
+
name: "g"
|
|
18
|
+
sky_brightness: 22.26
|
|
19
|
+
full_exposure_time: 2400
|
|
20
|
+
zeropoint: 28.26
|
|
21
|
+
psf_fwhm: 0.86
|
|
22
|
+
effective_wavelength: 486.412
|
|
23
|
+
r:
|
|
24
|
+
name: "r"
|
|
25
|
+
sky_brightness: 21.20
|
|
26
|
+
full_exposure_time: 5520
|
|
27
|
+
zeropoint: 28.10
|
|
28
|
+
psf_fwhm: 0.81
|
|
29
|
+
effective_wavelength: 624.976
|
|
30
|
+
i:
|
|
31
|
+
name: "i"
|
|
32
|
+
sky_brightness: 20.48
|
|
33
|
+
full_exposure_time: 5520
|
|
34
|
+
zeropoint: 27.78
|
|
35
|
+
psf_fwhm: 0.79
|
|
36
|
+
effective_wavelength: 756.469
|
|
37
|
+
z:
|
|
38
|
+
name: "z"
|
|
39
|
+
sky_brightness: 19.60
|
|
40
|
+
full_exposure_time: 4800
|
|
41
|
+
zeropoint: 27.39
|
|
42
|
+
psf_fwhm: 0.77
|
|
43
|
+
effective_wavelength: 870.164
|
|
44
|
+
y:
|
|
45
|
+
name: "y"
|
|
46
|
+
sky_brightness: 18.61
|
|
47
|
+
full_exposure_time: 4800
|
|
48
|
+
zeropoint: 26.56
|
|
49
|
+
psf_fwhm: 0.76
|
|
50
|
+
effective_wavelength: 972.202
|
|
51
|
+
references:
|
|
52
|
+
pixel_scale:
|
|
53
|
+
link: "https://www.lsst.org/about/camera/features"
|
|
54
|
+
comment: "See Technical details."
|
|
55
|
+
gain:
|
|
56
|
+
link: "https://github.com/LSSTDESC/imSim/blob/main/imsim/stamp.py#L416"
|
|
57
|
+
comment: ""
|
|
58
|
+
mirror_diameter:
|
|
59
|
+
link: "https://www.lsst.org/about/tel-site/optical_design"
|
|
60
|
+
comment: ""
|
|
61
|
+
obscuration:
|
|
62
|
+
link: "https://arxiv.org/abs/0805.2366"
|
|
63
|
+
comment: "(v5) The paper mentions an effective diameter of ~6.5m. See https://github.com/LSSTDESC/surveycodex/issues/38 for discussions on how to calculate obscuration from effective diameter."
|
|
64
|
+
zeropoint_airmass:
|
|
65
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#lsst-filters"
|
|
66
|
+
comment: ""
|
|
67
|
+
sky_brightness:
|
|
68
|
+
link: "https://arxiv.org/abs/0805.2366"
|
|
69
|
+
comment: "(v5) See Table 2, first row."
|
|
70
|
+
full_exposure_time:
|
|
71
|
+
link: "https://arxiv.org/abs/0805.2366"
|
|
72
|
+
comment: "(v5) See Table 1 'Mean number of visits' and in the paper it is mentioned that the visit exposure time is 30s (section 2.2.2). So, for example, for u band 56 * 30 = 1680."
|
|
73
|
+
zeropoint:
|
|
74
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#lsst-filters"
|
|
75
|
+
comment: "Computed with speclite – see scripts/check_zeropoints.py"
|
|
76
|
+
psf_fwhm:
|
|
77
|
+
link: "https://arxiv.org/abs/0805.2366"
|
|
78
|
+
comment: "(v5) Computed from second row of Table 2 by multiplying times airmass**0.6 where airmass=1.2 (used throughout paper in e.g. Figure 4)"
|
|
79
|
+
effective_wavelength:
|
|
80
|
+
link: "https://speclite.readthedocs.io/en/latest/filters.html#lsst-filters"
|
|
81
|
+
comment: "computed with speclite – see scripts/check_effective_wavelength.py"
|
surveycodex/filter.py
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
import astropy.units as u
|
|
5
|
+
from astropy.units import Quantity
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass(frozen=True)
|
|
9
|
+
class Filter:
|
|
10
|
+
"""A dataclass containing the main filter parameters"""
|
|
11
|
+
|
|
12
|
+
name: str
|
|
13
|
+
"The filter name"
|
|
14
|
+
psf_fwhm: Quantity
|
|
15
|
+
"The full-width at half maximum of the PSF"
|
|
16
|
+
zeropoint: Quantity
|
|
17
|
+
"The zeropoint magnitude computed with the speclite library"
|
|
18
|
+
sky_brightness: Quantity
|
|
19
|
+
"Mean sky brightness"
|
|
20
|
+
full_exposure_time: Quantity
|
|
21
|
+
"Mean time spent on the sky on a random survey location"
|
|
22
|
+
effective_wavelength: Optional[Quantity] = None
|
|
23
|
+
"Filter effective wavelength computed from the complete throughput information"
|
|
24
|
+
|
|
25
|
+
@classmethod
|
|
26
|
+
def from_dict(cls, filter_info):
|
|
27
|
+
"""Constructor for the Filter dataclass
|
|
28
|
+
|
|
29
|
+
Makes sure each of the filter attributes gets the appropriate units
|
|
30
|
+
to improve definition and avoid confusion and conversion issues.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
filter_info: dict
|
|
35
|
+
Dictionary with the filter informations
|
|
36
|
+
|
|
37
|
+
Returns
|
|
38
|
+
-------
|
|
39
|
+
Filter
|
|
40
|
+
A Filter object filled with the given information
|
|
41
|
+
|
|
42
|
+
"""
|
|
43
|
+
name = filter_info["name"]
|
|
44
|
+
psf_fwhm = filter_info["psf_fwhm"] * u.arcsec
|
|
45
|
+
zeropoint = filter_info["zeropoint"] * u.mag
|
|
46
|
+
sky_brightness = filter_info["sky_brightness"] * (u.mag / u.arcsec**2)
|
|
47
|
+
full_exposure_time = filter_info["full_exposure_time"] * u.s
|
|
48
|
+
wavelength = filter_info.get("effective_wavelength")
|
|
49
|
+
wavelength = wavelength if wavelength is None else wavelength * u.nm
|
|
50
|
+
|
|
51
|
+
return cls(
|
|
52
|
+
name,
|
|
53
|
+
psf_fwhm,
|
|
54
|
+
zeropoint,
|
|
55
|
+
sky_brightness,
|
|
56
|
+
full_exposure_time,
|
|
57
|
+
wavelength,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
def __str__(self):
|
|
61
|
+
filter_repr = f"-= {self.name} filter =-\n"
|
|
62
|
+
printed_params = [
|
|
63
|
+
f" {key:<20} = {val}"
|
|
64
|
+
for key, val in self.__dict__.items()
|
|
65
|
+
if key not in ("name",)
|
|
66
|
+
]
|
|
67
|
+
filter_repr += "\n".join(printed_params)
|
|
68
|
+
return filter_repr
|
|
69
|
+
|
|
70
|
+
def __repr__(self):
|
|
71
|
+
return f"Filter {self.name}"
|
surveycodex/helpers.py
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from surveycodex.survey import Survey
|
|
4
|
+
|
|
5
|
+
_BASEDIR = Path(__file__).parent.resolve()
|
|
6
|
+
_survey_info = {
|
|
7
|
+
path.stem: Survey.from_yaml(path) for path in _BASEDIR.glob("data/*.yaml")
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
available_surveys = list(_survey_info.keys())
|
|
11
|
+
"List of available surveys in surveycodex"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_survey(survey_name):
|
|
15
|
+
"""Get the dataclass corresponding to the survey
|
|
16
|
+
|
|
17
|
+
Parameters
|
|
18
|
+
----------
|
|
19
|
+
survey_name : str
|
|
20
|
+
Name of a survey among the `available_surveys`
|
|
21
|
+
|
|
22
|
+
Returns
|
|
23
|
+
-------
|
|
24
|
+
Survey
|
|
25
|
+
The corresponding Survey dataclass
|
|
26
|
+
|
|
27
|
+
Raises
|
|
28
|
+
------
|
|
29
|
+
ValueError
|
|
30
|
+
When the input survey is not (currently) available
|
|
31
|
+
|
|
32
|
+
"""
|
|
33
|
+
if survey_name not in available_surveys:
|
|
34
|
+
raise ValueError(
|
|
35
|
+
"Please check the survey name. "
|
|
36
|
+
f"The available surveys are {available_surveys}"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
return _survey_info[survey_name]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def print_survey(survey, show_refs=False):
|
|
43
|
+
"""Print information on a given survey
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
survey : str or Survey
|
|
48
|
+
The survey name or Survey instance
|
|
49
|
+
show_refs : bool
|
|
50
|
+
Print the references for each parameter.
|
|
51
|
+
|
|
52
|
+
"""
|
|
53
|
+
if not isinstance(survey, Survey):
|
|
54
|
+
survey = get_survey(survey)
|
|
55
|
+
|
|
56
|
+
print(survey)
|
|
57
|
+
for filter_name in survey.available_filters:
|
|
58
|
+
print(survey.get_filter(filter_name))
|
|
59
|
+
if show_refs:
|
|
60
|
+
print_references(survey.references)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def print_references(references):
|
|
64
|
+
"""Pretty print the references of the survey and filter parameters
|
|
65
|
+
|
|
66
|
+
The references are composed of a link and a sentence for comments.
|
|
67
|
+
|
|
68
|
+
Parameters
|
|
69
|
+
----------
|
|
70
|
+
references : dict
|
|
71
|
+
Dictionary with the references for each parameter
|
|
72
|
+
|
|
73
|
+
"""
|
|
74
|
+
name_size = max(len(name) for name in references)
|
|
75
|
+
link_size = max(len(param["link"]) for param in references.values())
|
|
76
|
+
comment_size = max(len(param["comment"]) for param in references.values())
|
|
77
|
+
header = f"{'Parameter name':<{name_size}} | {'Reference link':<{link_size}} | {'Comments':<{comment_size}}"
|
|
78
|
+
|
|
79
|
+
print("\n-=[ References ]=-\n")
|
|
80
|
+
print(header)
|
|
81
|
+
print("-" * len(header))
|
|
82
|
+
for name, param in references.items():
|
|
83
|
+
print(
|
|
84
|
+
f"{name:<{name_size}} | {param['link']:<{link_size}} | {param['comment']:<{comment_size}}"
|
|
85
|
+
)
|
|
86
|
+
print("-" * len(header))
|
surveycodex/rich.py
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import textwrap
|
|
2
|
+
|
|
3
|
+
from surveycodex.helpers import Survey, get_survey
|
|
4
|
+
|
|
5
|
+
_SATELLITE = "🛰️️ "
|
|
6
|
+
_TELESCOPE = "🔭️ "
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _rich_survey_name(survey):
|
|
10
|
+
if survey.name in ["Euclid_VIS", "COSMOS"]:
|
|
11
|
+
icon = _SATELLITE
|
|
12
|
+
else:
|
|
13
|
+
icon = _TELESCOPE
|
|
14
|
+
|
|
15
|
+
return f"{icon} [b]{survey.name}[/b]"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def display_survey(survey):
|
|
19
|
+
from rich.console import Group
|
|
20
|
+
from rich.panel import Panel
|
|
21
|
+
from rich.text import Text
|
|
22
|
+
|
|
23
|
+
if not isinstance(survey, Survey):
|
|
24
|
+
survey = get_survey(survey)
|
|
25
|
+
|
|
26
|
+
survey_desc = Text(
|
|
27
|
+
textwrap.fill(survey.description, 40), no_wrap=False, justify="left"
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
survey_info = _survey_table(survey)
|
|
31
|
+
|
|
32
|
+
filters_info = [
|
|
33
|
+
_filter_panel(survey.get_filter(filter)) for filter in survey.available_filters
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
display_info = [
|
|
37
|
+
survey_desc,
|
|
38
|
+
"\n",
|
|
39
|
+
survey_info,
|
|
40
|
+
"\n",
|
|
41
|
+
"[b]Filter info:",
|
|
42
|
+
] + filters_info
|
|
43
|
+
|
|
44
|
+
return Panel(
|
|
45
|
+
Group(*display_info),
|
|
46
|
+
padding=1,
|
|
47
|
+
expand=False,
|
|
48
|
+
title=_rich_survey_name(survey),
|
|
49
|
+
title_align="center",
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def _survey_table(survey):
|
|
54
|
+
from rich.table import Table
|
|
55
|
+
|
|
56
|
+
survey_info = Table.grid()
|
|
57
|
+
survey_info.add_column(justify="left")
|
|
58
|
+
survey_info.add_column(justify="left")
|
|
59
|
+
|
|
60
|
+
survey_info.add_row("Pixel scale: ", f"{survey.pixel_scale:.3f}")
|
|
61
|
+
survey_info.add_row("Mirror diameter: ", f"{survey.mirror_diameter:.2f}")
|
|
62
|
+
survey_info.add_row("Effective area: ", f"{survey.effective_area:.2f}")
|
|
63
|
+
survey_info.add_row("Obscuration: ", f"{survey.obscuration:.2f}")
|
|
64
|
+
survey_info.add_row("Gain: ", f"{survey.gain:.2f}")
|
|
65
|
+
survey_info.add_row("Zeropoint airmass: ", f"{survey.zeropoint_airmass:.1f}")
|
|
66
|
+
survey_info.add_row("Available filters: ", ", ".join(survey.available_filters))
|
|
67
|
+
|
|
68
|
+
return survey_info
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _filter_panel(filter):
|
|
72
|
+
from rich.panel import Panel
|
|
73
|
+
from rich.table import Table
|
|
74
|
+
|
|
75
|
+
filter_info = Table.grid()
|
|
76
|
+
filter_info.add_column(justify="left")
|
|
77
|
+
filter_info.add_column(justify="left")
|
|
78
|
+
|
|
79
|
+
filter_info.add_row("PSF FWHM: ", f"{filter.psf_fwhm:.2f}")
|
|
80
|
+
filter_info.add_row("Zeropoint: ", f"{filter.zeropoint:.2f}")
|
|
81
|
+
filter_info.add_row("Sky brightness: ", f"{filter.sky_brightness:.2f}")
|
|
82
|
+
filter_info.add_row("Full exposure time: ", f"{filter.full_exposure_time:0.0f}")
|
|
83
|
+
filter_info.add_row("Effective wavelength: ", f"{filter.effective_wavelength:.1f}")
|
|
84
|
+
|
|
85
|
+
return Panel(
|
|
86
|
+
filter_info,
|
|
87
|
+
padding=0,
|
|
88
|
+
expand=False,
|
|
89
|
+
title=f"[b]{filter.name}[/]",
|
|
90
|
+
title_align="left",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def display_references(survey):
|
|
95
|
+
from rich.box import HEAVY_HEAD
|
|
96
|
+
from rich.table import Table
|
|
97
|
+
|
|
98
|
+
if not isinstance(survey, Survey):
|
|
99
|
+
survey = get_survey(survey)
|
|
100
|
+
|
|
101
|
+
ref_table = Table(
|
|
102
|
+
"Parameter",
|
|
103
|
+
"Source",
|
|
104
|
+
"Comments",
|
|
105
|
+
title=f"[b]{survey.name} references[/]",
|
|
106
|
+
# show_lines=True,
|
|
107
|
+
box=HEAVY_HEAD,
|
|
108
|
+
)
|
|
109
|
+
for name, param in survey.references.items():
|
|
110
|
+
link = param["link"]
|
|
111
|
+
source = f"[u cyan link={link}]{link}"
|
|
112
|
+
comment = textwrap.fill(param["comment"], 60)
|
|
113
|
+
ref_table.add_row(name, source, comment)
|
|
114
|
+
|
|
115
|
+
return ref_table
|
surveycodex/survey.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import math
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import Dict, List
|
|
4
|
+
|
|
5
|
+
import astropy.units as u
|
|
6
|
+
import yaml
|
|
7
|
+
from astropy.units import Quantity
|
|
8
|
+
|
|
9
|
+
from surveycodex.filter import Filter
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(frozen=True)
|
|
13
|
+
class Survey:
|
|
14
|
+
"""A dataclass for storing the parameters of a survey"""
|
|
15
|
+
|
|
16
|
+
name: str
|
|
17
|
+
"The survey name"
|
|
18
|
+
description: str
|
|
19
|
+
"The survey description with telescope/instrument information"
|
|
20
|
+
_filters: Dict[str, Filter]
|
|
21
|
+
"A private dictionary containing the survey filters"
|
|
22
|
+
pixel_scale: Quantity
|
|
23
|
+
"The pixel scale of the survey"
|
|
24
|
+
mirror_diameter: Quantity
|
|
25
|
+
"The mirror diameter"
|
|
26
|
+
gain: Quantity
|
|
27
|
+
"The gain in electron/ADU"
|
|
28
|
+
obscuration: Quantity
|
|
29
|
+
"The total obscuration created by the instrument pieces"
|
|
30
|
+
zeropoint_airmass: Quantity
|
|
31
|
+
"The zeropoint airmass"
|
|
32
|
+
available_filters: List[str] = field(init=False)
|
|
33
|
+
"The list of survey filters"
|
|
34
|
+
effective_area: Quantity = field(init=False)
|
|
35
|
+
"The survey instrument effective area on the sky computed from the obscuration"
|
|
36
|
+
references: Dict[str, Dict[str, str]]
|
|
37
|
+
"Dictionary of references for each parameter specified in surveycodex"
|
|
38
|
+
|
|
39
|
+
@classmethod
|
|
40
|
+
def from_yaml(cls, yaml_file: str):
|
|
41
|
+
"""Constructor for the Survey class
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
yaml_file: pathlike
|
|
46
|
+
Filepath to YAML file containing the survey info
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
Survey
|
|
51
|
+
A `Survey` instance filled with the information as attributes
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
with open(yaml_file) as f:
|
|
55
|
+
data = yaml.safe_load(f)
|
|
56
|
+
|
|
57
|
+
filters = Survey._construct_filter_dict(data)
|
|
58
|
+
pixel_scale = data["pixel_scale"] * u.arcsec
|
|
59
|
+
mirror_diameter = data["mirror_diameter"] * u.m
|
|
60
|
+
gain = data["gain"] * u.electron / u.adu
|
|
61
|
+
obscuration = data["obscuration"] * u.dimensionless_unscaled
|
|
62
|
+
zeropoint_airmass = data["zeropoint_airmass"] * u.dimensionless_unscaled
|
|
63
|
+
|
|
64
|
+
return cls(
|
|
65
|
+
data["name"],
|
|
66
|
+
data["description"],
|
|
67
|
+
filters,
|
|
68
|
+
pixel_scale,
|
|
69
|
+
mirror_diameter,
|
|
70
|
+
gain,
|
|
71
|
+
obscuration,
|
|
72
|
+
zeropoint_airmass,
|
|
73
|
+
data["references"],
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
def __str__(self):
|
|
77
|
+
n = len(self.name)
|
|
78
|
+
survey_repr = "-" * (n + 4) + "\n"
|
|
79
|
+
survey_repr += f"| {self.name} |"
|
|
80
|
+
survey_repr += f" {self.description}\n"
|
|
81
|
+
survey_repr += "-" * (n + 4) + "\n"
|
|
82
|
+
printed_params = [
|
|
83
|
+
f" {key:<20} = {val}"
|
|
84
|
+
for key, val in self.__dict__.items()
|
|
85
|
+
if key not in ("name", "description", "_filters", "references")
|
|
86
|
+
]
|
|
87
|
+
survey_repr += "\n".join(printed_params)
|
|
88
|
+
return survey_repr
|
|
89
|
+
|
|
90
|
+
def __repr__(self):
|
|
91
|
+
return f"Survey {self.name}"
|
|
92
|
+
|
|
93
|
+
@staticmethod
|
|
94
|
+
def _construct_filter_dict(survey_dict):
|
|
95
|
+
"""Create a custom dictionary for the survey filters
|
|
96
|
+
|
|
97
|
+
Parameters
|
|
98
|
+
----------
|
|
99
|
+
survey_dict: dict
|
|
100
|
+
Dictionnary of the survey parameters, including the definition of the filters
|
|
101
|
+
|
|
102
|
+
Returns
|
|
103
|
+
-------
|
|
104
|
+
dict
|
|
105
|
+
Dictionary of the survey Filter instances
|
|
106
|
+
|
|
107
|
+
"""
|
|
108
|
+
return {
|
|
109
|
+
fname: Filter.from_dict(fdict)
|
|
110
|
+
for fname, fdict in survey_dict["filters"].items()
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
def __post_init__(self):
|
|
114
|
+
"""Set attributes computed after class is constructed"""
|
|
115
|
+
available_filters = list(self._filters.keys())
|
|
116
|
+
object.__setattr__(self, "available_filters", available_filters)
|
|
117
|
+
|
|
118
|
+
total_area = math.pi * (self.mirror_diameter * 0.5) ** 2
|
|
119
|
+
effective_area = total_area * (1 - self.obscuration)
|
|
120
|
+
object.__setattr__(self, "effective_area", effective_area)
|
|
121
|
+
|
|
122
|
+
def get_filter(self, filter_name):
|
|
123
|
+
"""Getter method to retrieve a Filter object
|
|
124
|
+
|
|
125
|
+
Parameters
|
|
126
|
+
----------
|
|
127
|
+
filter_name : str
|
|
128
|
+
Name of a filter chosen among the `available_filters` attribute
|
|
129
|
+
|
|
130
|
+
Returns
|
|
131
|
+
-------
|
|
132
|
+
Filter
|
|
133
|
+
Corresponding `Filter` dataclass
|
|
134
|
+
|
|
135
|
+
Raises
|
|
136
|
+
------
|
|
137
|
+
ValueError
|
|
138
|
+
The requested filter does not exist or is not available in surveycodex
|
|
139
|
+
|
|
140
|
+
"""
|
|
141
|
+
if filter_name not in self.available_filters:
|
|
142
|
+
raise ValueError(
|
|
143
|
+
"Please check the filter name. "
|
|
144
|
+
f"The available filters for {self.name} "
|
|
145
|
+
f"are {self.available_filters}"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
return self._filters[filter_name]
|
surveycodex/utilities.py
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import astropy.units as u
|
|
2
|
+
|
|
3
|
+
from surveycodex.filter import Filter
|
|
4
|
+
from surveycodex.helpers import get_survey
|
|
5
|
+
from surveycodex.survey import Survey
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def mag2counts(magnitude, survey, filter, exposure_time=None):
|
|
9
|
+
"""Convert source magnitude to electron counts for a given survey filter
|
|
10
|
+
|
|
11
|
+
To perform the computation, we use the filter zeropoint computed
|
|
12
|
+
with `speclite` at a given airmass under classical atmospheric
|
|
13
|
+
conditions and by default integrated over the survey lifetime.
|
|
14
|
+
|
|
15
|
+
An exposure time can be provided to compute the corresponding counts
|
|
16
|
+
instead of the full filter exposure time.
|
|
17
|
+
|
|
18
|
+
Expect a rough estimate from this calculation since e.g. it does not
|
|
19
|
+
take into account the atmospheric extinction. Therefore the result
|
|
20
|
+
is cast to an integer.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
magnitude: float
|
|
25
|
+
magnitude of source
|
|
26
|
+
survey: str or Survey
|
|
27
|
+
Name of a given survey or Survey instance
|
|
28
|
+
filter: str or Filter
|
|
29
|
+
Name of the survey filter or Filter instance
|
|
30
|
+
exposure_time: float or Quantity[float] (optional)
|
|
31
|
+
Exposure time of the filter in seconds.
|
|
32
|
+
If not provided, the full filter exposure time is used.
|
|
33
|
+
|
|
34
|
+
Returns
|
|
35
|
+
-------
|
|
36
|
+
Quantity[int]
|
|
37
|
+
The corresponding flux in electron counts
|
|
38
|
+
|
|
39
|
+
Example
|
|
40
|
+
-------
|
|
41
|
+
>>> from surveycodex.utilities import mag2counts
|
|
42
|
+
>>> mag2counts(24, "LSST", "g")
|
|
43
|
+
<Quantity 121397 ct>
|
|
44
|
+
|
|
45
|
+
References
|
|
46
|
+
----------
|
|
47
|
+
The `WeakLensingDeblending` package
|
|
48
|
+
https://github.com/LSSTDESC/WeakLensingDeblending
|
|
49
|
+
|
|
50
|
+
"""
|
|
51
|
+
if not isinstance(magnitude, u.Quantity):
|
|
52
|
+
magnitude *= u.mag(u.electron / u.s)
|
|
53
|
+
else:
|
|
54
|
+
magnitude = magnitude.value * u.mag(u.electron / u.s)
|
|
55
|
+
|
|
56
|
+
if not isinstance(survey, Survey):
|
|
57
|
+
survey = get_survey(survey)
|
|
58
|
+
|
|
59
|
+
if not isinstance(filter, Filter):
|
|
60
|
+
filter = survey.get_filter(filter)
|
|
61
|
+
|
|
62
|
+
flux = (magnitude - filter.zeropoint).to(u.electron / u.s)
|
|
63
|
+
|
|
64
|
+
exposure_time = exposure_time or filter.full_exposure_time
|
|
65
|
+
if not isinstance(exposure_time, u.Quantity):
|
|
66
|
+
exposure_time *= u.s
|
|
67
|
+
|
|
68
|
+
counts = flux * exposure_time
|
|
69
|
+
|
|
70
|
+
return counts.astype(int)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def mean_sky_level(survey, filter):
|
|
74
|
+
"""Computes the mean sky level for a given survey and a filter
|
|
75
|
+
|
|
76
|
+
This computation uses the sky brightness parameter from surveycodex,
|
|
77
|
+
expressed as a magnitude per sky area, weights it by the
|
|
78
|
+
pixel area and converts it to electron counts.
|
|
79
|
+
|
|
80
|
+
Parameters
|
|
81
|
+
----------
|
|
82
|
+
survey: str or Survey
|
|
83
|
+
Name of a given survey or Survey instance
|
|
84
|
+
filter: str or Filter
|
|
85
|
+
Name of the survey filter of Filter instance
|
|
86
|
+
|
|
87
|
+
Returns
|
|
88
|
+
-------
|
|
89
|
+
Quantity[float]
|
|
90
|
+
The corresponding mean sky level in electron counts
|
|
91
|
+
|
|
92
|
+
Example
|
|
93
|
+
-------
|
|
94
|
+
>>> from surveycodex.utilities import mean_sky_level
|
|
95
|
+
>>> mean_sky_level("LSST", "g")
|
|
96
|
+
<Quantity 23241.84 ct>
|
|
97
|
+
|
|
98
|
+
"""
|
|
99
|
+
if not isinstance(survey, Survey):
|
|
100
|
+
survey = get_survey(survey)
|
|
101
|
+
|
|
102
|
+
if not isinstance(filter, Filter):
|
|
103
|
+
filter = survey.get_filter(filter)
|
|
104
|
+
|
|
105
|
+
sky_brightness_counts = mag2counts(filter.sky_brightness, survey, filter)
|
|
106
|
+
pixel_area = survey.pixel_scale.to_value(u.arcsec) ** 2
|
|
107
|
+
|
|
108
|
+
mean_sky_level = sky_brightness_counts * pixel_area
|
|
109
|
+
|
|
110
|
+
return mean_sky_level
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 BlendingToolkit developers
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: surveycodex
|
|
3
|
+
Version: 1.2.0
|
|
4
|
+
Summary: Tiny library of galaxy surveys most useful parameters with units
|
|
5
|
+
Home-page: https://github.com/LSSTDESC/surveycodex
|
|
6
|
+
Author: Alexandre Boucaud
|
|
7
|
+
Author-email: aboucaud@apc.in2p3.fr
|
|
8
|
+
License: MIT
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/LSSTDESC/surveycodex/issues
|
|
10
|
+
Platform: any
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
20
|
+
Classifier: Development Status :: 3 - Alpha
|
|
21
|
+
Requires-Python: >=3.7
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: astropy >=4.3
|
|
25
|
+
Requires-Dist: pyyaml >=5.1
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pre-commit >=2.17 ; extra == 'dev'
|
|
28
|
+
Requires-Dist: pytest >=6.0 ; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-cov >=3.0 ; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest-astropy-header >=0.2 ; extra == 'dev'
|
|
31
|
+
Requires-Dist: rich >=13.7 ; extra == 'dev'
|
|
32
|
+
Provides-Extra: docs
|
|
33
|
+
Requires-Dist: mkdocs >=1.2 ; extra == 'docs'
|
|
34
|
+
Requires-Dist: mkdocs-material >=8.2 ; extra == 'docs'
|
|
35
|
+
Requires-Dist: mkdocstrings >=0.18 ; extra == 'docs'
|
|
36
|
+
Requires-Dist: mkdocstrings-python >=1.9 ; extra == 'docs'
|
|
37
|
+
Requires-Dist: pytkdocs[numpy-style] >=0.16 ; extra == 'docs'
|
|
38
|
+
Provides-Extra: scripts
|
|
39
|
+
Requires-Dist: speclite >=0.15 ; extra == 'scripts'
|
|
40
|
+
|
|
41
|
+
[**Main documentation**](https://aboucaud.github.io/galcheat/) | [**Getting started**](#getting-started) | [**CLI**](#cli) | [**API**](#api) | [**Contributing**](#contributing) | [**License**](#license)
|
|
42
|
+
|
|
43
|
+
<!-- <br>
|
|
44
|
+
<img src="docs/images/surveycodex_logo.png" alt="surveycodex" height=200px>
|
|
45
|
+
</p> -->
|
|
46
|
+
|
|
47
|
+
# SurveyCodex
|
|
48
|
+
|
|
49
|
+
[![Python package][gh-workflow-badge]][gh-workflow]
|
|
50
|
+
[![License][license-badge]](LICENSE)
|
|
51
|
+
![Python supported versions][pyversion-badge]
|
|
52
|
+
[![PyPI][pypi-badge]][pypi]<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
53
|
+
[](#contributors-)
|
|
54
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
55
|
+
|
|
56
|
+
[gh-workflow]: https://github.com/LSSTDESC/surveycodex/actions/workflows/python-package.yml
|
|
57
|
+
[gh-workflow-badge]: https://github.com/LSSTDESC/surveycodex/actions/workflows/python-package.yml/badge.svg
|
|
58
|
+
[license-badge]: https://img.shields.io/github/license/LSSTDESC/surveycodex?color=blue
|
|
59
|
+
[pyversion-badge]: https://img.shields.io/pypi/pyversions/surveycodex?color=yellow&logo=pypi
|
|
60
|
+
[pypi-badge]: https://badge.fury.io/py/surveycodex.svg
|
|
61
|
+
[pypi]: https://pypi.org/project/surveycodex/
|
|
62
|
+
|
|
63
|
+
Tiny package containing useful parameters from main galaxy surveys (**with units**).
|
|
64
|
+
|
|
65
|
+
The goal of this project is to provide a Python library with minimal dependencies that centralises galaxy survey properties with adequate reference. Such information tends to be scattered in many places or is often copy/pasted without all of the relevant information like units or sources.
|
|
66
|
+
|
|
67
|
+
The current parameters and the corresponding units are specified in the [documentation](https://aboucaud.github.io/galcheat/parameters.html)
|
|
68
|
+
|
|
69
|
+
Getting started
|
|
70
|
+
---------------
|
|
71
|
+
Install the latest version of the library
|
|
72
|
+
```sh
|
|
73
|
+
pip install -U surveycodex
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
CLI
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
Print the available surveys and associated filters
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
surveycodex
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Options
|
|
86
|
+
- **`-s <survey>`**: print information for a given survey
|
|
87
|
+
- **`--refs`**: print the source for each parameter
|
|
88
|
+
- **`--rich`**: use pretty printing for the terminal (needs the `rich` library installed)
|
|
89
|
+
- **`-h, --help`**: get help
|
|
90
|
+
|
|
91
|
+
### Examples
|
|
92
|
+
```sh
|
|
93
|
+
surveycodex -s LSST # LSST info
|
|
94
|
+
surveycodex --refs # all surveys info with refs
|
|
95
|
+
surveycodex --refs -s HSC # HSC info with refs
|
|
96
|
+
surveycodex -s LSST --rich # pretty print rich terminal output for LSST info
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
API
|
|
100
|
+
---
|
|
101
|
+
```python
|
|
102
|
+
import surveycodex
|
|
103
|
+
|
|
104
|
+
# Start with the list of available surveys
|
|
105
|
+
surveycodex.available_surveys
|
|
106
|
+
|
|
107
|
+
# Retrieve a Survey instance
|
|
108
|
+
LSST = surveycodex.get_survey("LSST")
|
|
109
|
+
|
|
110
|
+
# List the available survey filters
|
|
111
|
+
LSST.available_filters
|
|
112
|
+
|
|
113
|
+
# Pick a Filter instance
|
|
114
|
+
u_band = LSST.get_filter("u")
|
|
115
|
+
|
|
116
|
+
# Both Survey and Filter objects have physical attributes
|
|
117
|
+
LSST.mirror_diameter
|
|
118
|
+
|
|
119
|
+
u_band.full_exposure_time
|
|
120
|
+
|
|
121
|
+
# These attributes are Astropy Quantity objects
|
|
122
|
+
# whose value can be retrieved in any desired unit
|
|
123
|
+
u_band.psf_fwhm.to_value('arcmin')
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Contributing ✨
|
|
127
|
+
|
|
128
|
+
This project was started in the context of the [BlendingToolKit (BTK)][github-btk] and [WeakLensingDeblending][github-wld] projects and has received contributions from these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
|
|
129
|
+
|
|
130
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
131
|
+
<!-- prettier-ignore-start -->
|
|
132
|
+
<!-- markdownlint-disable -->
|
|
133
|
+
<table>
|
|
134
|
+
<tr>
|
|
135
|
+
<td align="center"><a href="https://aboucaud.github.io"><img src="https://avatars.githubusercontent.com/u/3065310?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexandre Boucaud</b></sub></a><br /><a href="https://github.com/LSSTDESC/surveycodex/commits?author=aboucaud" title="Code">💻</a> <a href="#ideas-aboucaud" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-aboucaud" title="Maintenance">🚧</a> <a href="https://github.com/LSSTDESC/surveycodex/pulls?q=is%3Apr+reviewed-by%3ALSSTDESC" title="Reviewed Pull Requests">👀</a></td>
|
|
136
|
+
<td align="center"><a href="https://github.com/mpaillassa"><img src="https://avatars.githubusercontent.com/u/9745094?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mpaillassa</b></sub></a><br /><a href="https://github.com/LSSTDESC/surveycodex/commits?author=mpaillassa" title="Code">💻</a> <a href="https://github.com/LSSTDESC/surveycodex/pulls?q=is%3Apr+reviewed-by%3Ampaillassa" title="Reviewed Pull Requests">👀</a> <a href="#data-mpaillassa" title="Data">🔣</a></td>
|
|
137
|
+
<td align="center"><a href="https://ismael-mendoza.github.io/"><img src="https://avatars.githubusercontent.com/u/11745764?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ismael Mendoza</b></sub></a><br /><a href="#ideas-ismael-mendoza" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/LSSTDESC/surveycodex/pulls?q=is%3Apr+reviewed-by%3Aismael-mendoza" title="Reviewed Pull Requests">👀</a> <a href="#data-ismael-mendoza" title="Data">🔣</a></td>
|
|
138
|
+
<td align="center"><a href="https://github.com/HironaoMiyatake"><img src="https://avatars.githubusercontent.com/u/1507529?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hironao Miyatake</b></sub></a><br /><a href="https://github.com/LSSTDESC/surveycodex/commits?author=HironaoMiyatake" title="Code">💻</a> <a href="#data-HironaoMiyatake" title="Data">🔣</a></td>
|
|
139
|
+
<td align="center"><a href="https://github.com/aguinot"><img src="https://avatars.githubusercontent.com/u/39480528?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Axel Guinot</b></sub></a><br /><a href="#data-aguinot" title="Data">🔣</a></td>
|
|
140
|
+
<td align="center"><a href="https://github.com/thuiop"><img src="https://avatars.githubusercontent.com/u/1338337?v=4?s=100" width="100px;" alt=""/><br /><sub><b>thuiop</b></sub></a><br /><a href="#ideas-thuiop" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
141
|
+
<td align="center"><a href="https://remyjoseph.wordpress.com/"><img src="https://avatars.githubusercontent.com/u/16084926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rémy Joseph</b></sub></a><br /><a href="#ideas-herjy" title="Ideas, Planning, & Feedback">🤔</a></td>
|
|
142
|
+
</tr>
|
|
143
|
+
</table>
|
|
144
|
+
|
|
145
|
+
<!-- markdownlint-restore -->
|
|
146
|
+
<!-- prettier-ignore-end -->
|
|
147
|
+
|
|
148
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
149
|
+
|
|
150
|
+
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification.
|
|
151
|
+
|
|
152
|
+
A number is missing? An error slipped into the files? A survey is not included in the list and you can provide the relevant information or some of it?
|
|
153
|
+
|
|
154
|
+
Contributions of any kind are welcome! Head over to the [contributing guidelines](CONTRIBUTING.md) to learn how to participate into making this library more robust and complete.
|
|
155
|
+
|
|
156
|
+
[github-wld]: https://github.com/LSSTDESC/WeakLensingDeblending
|
|
157
|
+
[github-btk]: https://github.com/LSSTDESC/BlendingToolKit
|
|
158
|
+
|
|
159
|
+
License
|
|
160
|
+
-------
|
|
161
|
+
This project is developed under an MIT-license. See [LICENSE file](LICENSE) for more information.
|
|
162
|
+
|
|
163
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
surveycodex/__init__.py,sha256=Ahc3pl8g5IDnh_42xBe4rC8tw6mT0kPwCTsXpqRnXys,1410
|
|
2
|
+
surveycodex/__main__.py,sha256=WB9qg3QvDiww4rktLUYnv9ub76PmbT5zoIFcBAO6d74,2159
|
|
3
|
+
surveycodex/filter.py,sha256=ZeDlm-oKS6GJczTJuUHgdYBqvomobsa_cEw3c69hhj8,2177
|
|
4
|
+
surveycodex/helpers.py,sha256=1el8Sj6K-BB32o7m8XonuRzTpYpr57rqsptonV8Vrbk,2319
|
|
5
|
+
surveycodex/rich.py,sha256=lBMaqAmmz1EAO4nafdEPbL7zp_3aXKT6-gDB-WzNBjs,3169
|
|
6
|
+
surveycodex/survey.py,sha256=QpKfxrtqMyF5IfaiHfYNEhZmQH6JI7nbZhG6ipQ6VNw,4509
|
|
7
|
+
surveycodex/utilities.py,sha256=MDDy9KQC8ZJfARx-wKXScEOcCFvNWk03iRQRgL_F6o0,3264
|
|
8
|
+
surveycodex/data/CFHTLS.yaml,sha256=R6qRi7RMmWRD4SvqXRqNfNbYAWUkLCy9F7TgfDqyEVc,2368
|
|
9
|
+
surveycodex/data/COSMOS.yaml,sha256=tK10LlESCYvhnpr2sbfIBJ1zUXJw-5AcrmKPxd9kKOU,1347
|
|
10
|
+
surveycodex/data/DES.yaml,sha256=uaBUecOTpFpBXr_rqSdw4FFxQNj_YJqAOx8YcqUDpzE,2153
|
|
11
|
+
surveycodex/data/Euclid_VIS.yaml,sha256=WkaQMbyQA-bdJa8r4RulD7dpN3l2W-v0i4egySZz7a8,1443
|
|
12
|
+
surveycodex/data/HSC.yaml,sha256=AS0CGV7reh12CNr_ZGN90cVb4XhkULOdrkFxl7lQRbY,2609
|
|
13
|
+
surveycodex/data/LSST.yaml,sha256=KffpRdp93YfnGhzXvvcZV4t_Rg_l8YF3sq3vV6Rm-S0,2730
|
|
14
|
+
surveycodex-1.2.0.dist-info/LICENSE,sha256=QNl4s8pFtjZy_S6HwuUrpXPYIO3QW6lMHQf1P0tyO78,1083
|
|
15
|
+
surveycodex-1.2.0.dist-info/METADATA,sha256=60wgK2pN3asutB2ILYnVp0EpHauEeA2jYrdfZizST9E,8481
|
|
16
|
+
surveycodex-1.2.0.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
17
|
+
surveycodex-1.2.0.dist-info/entry_points.txt,sha256=TL62-U-xsd4XoFwm78WUBu-N0MCdkAhsdrRWSyBxpYk,59
|
|
18
|
+
surveycodex-1.2.0.dist-info/top_level.txt,sha256=lBYTilCfDgb76sb1GJHSFhI_RcleCEdV0omylfZ5k64,12
|
|
19
|
+
surveycodex-1.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
surveycodex
|