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.
@@ -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
@@ -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]
@@ -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
+ [![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#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,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.43.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py2-none-any
5
+ Tag: py3-none-any
6
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ surveycodex = surveycodex.__main__:main
3
+
@@ -0,0 +1 @@
1
+ surveycodex