LSST Applications g070148d5b3+33e5256705,g0d53e28543+25c8b88941,g0da5cf3356+2dd1178308,g1081da9e2a+62d12e78cb,g17e5ecfddb+7e422d6136,g1c76d35bf8+ede3a706f7,g295839609d+225697d880,g2e2c1a68ba+cc1f6f037e,g2ffcdf413f+853cd4dcde,g38293774b4+62d12e78cb,g3b44f30a73+d953f1ac34,g48ccf36440+885b902d19,g4b2f1765b6+7dedbde6d2,g5320a0a9f6+0c5d6105b6,g56b687f8c9+ede3a706f7,g5c4744a4d9+ef6ac23297,g5ffd174ac0+0c5d6105b6,g6075d09f38+66af417445,g667d525e37+2ced63db88,g670421136f+2ced63db88,g71f27ac40c+2ced63db88,g774830318a+463cbe8d1f,g7876bc68e5+1d137996f1,g7985c39107+62d12e78cb,g7fdac2220c+0fd8241c05,g96f01af41f+368e6903a7,g9ca82378b8+2ced63db88,g9d27549199+ef6ac23297,gabe93b2c52+e3573e3735,gb065e2a02a+3dfbe639da,gbc3249ced9+0c5d6105b6,gbec6a3398f+0c5d6105b6,gc9534b9d65+35b9f25267,gd01420fc67+0c5d6105b6,geee7ff78d7+a14128c129,gf63283c776+ede3a706f7,gfed783d017+0c5d6105b6,w.2022.47
LSST Data Management Base Package
Loading...
Searching...
No Matches
_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
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:928