LSST Applications  21.0.0-147-g0e635eb1+1acddb5be5,22.0.0+052faf71bd,22.0.0+1ea9a8b2b2,22.0.0+6312710a6c,22.0.0+729191ecac,22.0.0+7589c3a021,22.0.0+9f079a9461,22.0.1-1-g7d6de66+b8044ec9de,22.0.1-1-g87000a6+536b1ee016,22.0.1-1-g8e32f31+6312710a6c,22.0.1-10-gd060f87+016f7cdc03,22.0.1-12-g9c3108e+df145f6f68,22.0.1-16-g314fa6d+c825727ab8,22.0.1-19-g93a5c75+d23f2fb6d8,22.0.1-19-gb93eaa13+aab3ef7709,22.0.1-2-g8ef0a89+b8044ec9de,22.0.1-2-g92698f7+9f079a9461,22.0.1-2-ga9b0f51+052faf71bd,22.0.1-2-gac51dbf+052faf71bd,22.0.1-2-gb66926d+6312710a6c,22.0.1-2-gcb770ba+09e3807989,22.0.1-20-g32debb5+b8044ec9de,22.0.1-23-gc2439a9a+fb0756638e,22.0.1-3-g496fd5d+09117f784f,22.0.1-3-g59f966b+1e6ba2c031,22.0.1-3-g849a1b8+f8b568069f,22.0.1-3-gaaec9c0+c5c846a8b1,22.0.1-32-g5ddfab5d3+60ce4897b0,22.0.1-4-g037fbe1+64e601228d,22.0.1-4-g8623105+b8044ec9de,22.0.1-5-g096abc9+d18c45d440,22.0.1-5-g15c806e+57f5c03693,22.0.1-7-gba73697+57f5c03693,master-g6e05de7fdc+c1283a92b8,master-g72cdda8301+729191ecac,w.2021.39
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 
78  def __post_init__(self):
79  Storable.__init__(self)
80 
81  def isPersistable(self):
82  return True
83 
84  def _getPersistenceName(self):
85  return self._persistence_name_persistence_name
86 
87  def _getPythonModule(self):
88  return __name__
89 
90  def _write(self):
91  return yaml.dump(asdict(self), encoding='utf-8')
92 
93  @staticmethod
94  def _read(bytes):
95  yamlDict = yaml.load(bytes, Loader=yaml.SafeLoader)
96  # For forwards compatibility, filter out any fields that are
97  # not defined in the dataclass.
98  droppedFields = []
99  for _field in list(yamlDict.keys()):
100  if _field not in ExposureSummaryStats.__dataclass_fields__:
101  droppedFields.append(_field)
102  yamlDict.pop(_field)
103  if len(droppedFields) > 0:
104  droppedFieldString = ', '.join([str(f) for f in droppedFields])
105  warnings.warn((f"Could not read summary fields [{droppedFieldString}]. "
106  "Please use a newer stack."), FutureWarning)
107  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