LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
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/>.
21 from __future__ import annotations
22 
23 from dataclasses import dataclass, asdict, field
24 from typing import List
25 import yaml
26 import warnings
27 
28 from ..typehandling import Storable, StorableHelperFactory
29 
30 
31 __all__ = ("ExposureSummaryStats", )
32 
33 
34 def _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