LSST Applications g0b6bd0c080+a72a5dd7e6,g1182afd7b4+2a019aa3bb,g17e5ecfddb+2b8207f7de,g1d67935e3f+06cf436103,g38293774b4+ac198e9f13,g396055baef+6a2097e274,g3b44f30a73+6611e0205b,g480783c3b1+98f8679e14,g48ccf36440+89c08d0516,g4b93dc025c+98f8679e14,g5c4744a4d9+a302e8c7f0,g613e996a0d+e1c447f2e0,g6c8d09e9e7+25247a063c,g7271f0639c+98f8679e14,g7a9cd813b8+124095ede6,g9d27549199+a302e8c7f0,ga1cf026fa3+ac198e9f13,ga32aa97882+7403ac30ac,ga786bb30fb+7a139211af,gaa63f70f4e+9994eb9896,gabf319e997+ade567573c,gba47b54d5d+94dc90c3ea,gbec6a3398f+06cf436103,gc6308e37c7+07dd123edb,gc655b1545f+ade567573c,gcc9029db3c+ab229f5caf,gd01420fc67+06cf436103,gd877ba84e5+06cf436103,gdb4cecd868+6f279b5b48,ge2d134c3d5+cc4dbb2e3f,ge448b5faa6+86d1ceac1d,gecc7e12556+98f8679e14,gf3ee170dca+25247a063c,gf4ac96e456+ade567573c,gf9f5ea5b4d+ac198e9f13,gff490e6085+8c2580be5c,w.2022.27
LSST Data Management Base Package
_exposureSummaryStats.py
Go to the documentation of this file.
1# This file is part of afw.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
21from __future__ import annotations
22
23from dataclasses import dataclass, asdict, field
24from typing import List
25import yaml
26import warnings
27
28from ..typehandling import Storable, StorableHelperFactory
29
30
31__all__ = ("ExposureSummaryStats", )
32
33
34def _default_corners():
35 return [float('nan')]*4
36
37
38@dataclass
40 _persistence_name = 'ExposureSummaryStats'
41
42 _factory = StorableHelperFactory(__name__, _persistence_name)
43
44 version: int = 0
45 # PSF determinant radius (pixels)
46 psfSigma: float = float('nan')
47 # PSF effective area (pixels**2)
48 psfArea: float = float('nan')
49 # PSF shape Ixx (pixels**2)
50 psfIxx: float = float('nan')
51 # PSF shape Iyy (pixels**2)
52 psfIyy: float = float('nan')
53 # PSF shape Ixy (pixels**2)
54 psfIxy: float = float('nan')
55 # Bounding box center Right Ascension (degrees)
56 ra: float = float('nan')
57 # Bounding box center Declination (degrees)
58 decl: float = float('nan')
59 # Bounding box center zenith distance (degrees)
60 zenithDistance: float = float('nan')
61 # Mean zeropoint in detector (mag)
62 zeroPoint: float = float('nan')
63 # Average sky background (ADU)
64 skyBg: float = float('nan')
65 # Average sky noise (ADU)
66 skyNoise: float = float('nan')
67 # Mean variance of the weight plane (ADU**2)
68 meanVar: float = float('nan')
69 # Right Ascension of bounding box corners (degrees)
70 raCorners: List[float] = field(default_factory=_default_corners)
71 # Declination of bounding box corners (degrees)
72 decCorners: List[float] = field(default_factory=_default_corners)
73 # Astrometry match offset mean
74 astromOffsetMean: float = float('nan')
75 # Astrometry match offset stddev
76 astromOffsetStd: float = float('nan')
77 # Number of stars used for psf model
78 nPsfStar: int = 0
79 # Psf stars median E1 residual (starE1 - psfE1)
80 psfStarDeltaE1Median: float = float('nan')
81 # Psf stars median E2 residual (starE2 - psfE2)
82 psfStarDeltaE2Median: float = float('nan')
83 # Psf stars MAD E1 scatter (starE1 - psfE1)
84 psfStarDeltaE1Scatter: float = float('nan')
85 # Psf stars MAD E2 scatter (starE2 - psfE2)
86 psfStarDeltaE2Scatter: float = float('nan')
87 # Psf stars median size residual (starSize - psfSize)
88 psfStarDeltaSizeMedian: float = float('nan')
89 # Psf stars MAD size scatter (starSize - psfSize)
90 psfStarDeltaSizeScatter: float = float('nan')
91 # Psf stars MAD size scatter scaled by psfSize**2
92 psfStarScaledDeltaSizeScatter: float = float('nan')
93
94 def __post_init__(self):
95 Storable.__init__(self)
96
97 def isPersistable(self):
98 return True
99
100 def _getPersistenceName(self):
101 return self._persistence_name_persistence_name
102
103 def _getPythonModule(self):
104 return __name__
105
106 def _write(self):
107 return yaml.dump(asdict(self), encoding='utf-8')
108
109 @staticmethod
110 def _read(bytes):
111 yamlDict = yaml.load(bytes, Loader=yaml.SafeLoader)
112 # For forwards compatibility, filter out any fields that are
113 # not defined in the dataclass.
114 droppedFields = []
115 for _field in list(yamlDict.keys()):
116 if _field not in ExposureSummaryStats.__dataclass_fields__:
117 droppedFields.append(_field)
118 yamlDict.pop(_field)
119 if len(droppedFields) > 0:
120 droppedFieldString = ', '.join([str(f) for f in droppedFields])
121 warnings.warn((f"Could not read summary fields [{droppedFieldString}]. "
122 "Please use a newer stack."), FutureWarning)
123 return ExposureSummaryStats(**yamlDict)
virtual bool isPersistable() const noexcept
Return true if this particular object can be persisted using afw::table::io.
Definition: Persistable.h:102
Interface supporting iteration over heterogenous containers.
Definition: Storable.h:58
daf::base::PropertyList * list
Definition: fits.cc:913