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
Public Member Functions | Public Attributes | List of all members
lsst.pipe.tasks.extended_psf.ExtendedPsf Class Reference

Public Member Functions

def __init__ (self, default_extended_psf=None)
 
def add_regional_extended_psf (self, extended_psf_image, region_name, detector_list)
 
def __call__ (self, detector=None)
 
def __len__ (self)
 
def get_regional_extended_psf (self, region_name=None, detector=None)
 
def write_fits (self, filename)
 
def writeFits (self, filename)
 
def read_fits (cls, filename)
 
def readFits (cls, filename)
 

Public Attributes

 default_extended_psf
 
 focal_plane_regions
 
 detectors_focal_plane_regions
 

Detailed Description

Extended PSF model.

Each instance may contain a default extended PSF, a set of extended PSFs
that correspond to different focal plane regions, or both. At this time,
focal plane regions are always defined as a subset of detectors.

Parameters
----------
default_extended_psf : `lsst.afw.image.MaskedImageF`
    Extended PSF model to be used as default (or only) extended PSF model.

Definition at line 58 of file extended_psf.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.__init__ (   self,
  default_extended_psf = None 
)

Definition at line 70 of file extended_psf.py.

70  def __init__(self, default_extended_psf=None):
71  self.default_extended_psf = default_extended_psf
72  self.focal_plane_regions = {}
73  self.detectors_focal_plane_regions = {}
74 

Member Function Documentation

◆ __call__()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.__call__ (   self,
  detector = None 
)
Return the appropriate extended PSF.

If the instance contains no extended PSF defined over focal plane
regions, the default extended PSF will be returned regardless of
whether a detector ID was passed as argument.

Parameters
----------
detector : `int`, optional
    Detector ID. If focal plane region PSFs are defined, is used to
    determine which model to return.

Returns
-------
extendedPsfImage : `lsst.afw.image.MaskedImageF`
    The extended PSF model. If this instance contains extended PSFs
    defined over focal plane regions, the extended PSF model for the
    region that contains ``detector`` is returned. If not, the default
    extended PSF is returned.

Definition at line 96 of file extended_psf.py.

96  def __call__(self, detector=None):
97  """Return the appropriate extended PSF.
98 
99  If the instance contains no extended PSF defined over focal plane
100  regions, the default extended PSF will be returned regardless of
101  whether a detector ID was passed as argument.
102 
103  Parameters
104  ----------
105  detector : `int`, optional
106  Detector ID. If focal plane region PSFs are defined, is used to
107  determine which model to return.
108 
109  Returns
110  -------
111  extendedPsfImage : `lsst.afw.image.MaskedImageF`
112  The extended PSF model. If this instance contains extended PSFs
113  defined over focal plane regions, the extended PSF model for the
114  region that contains ``detector`` is returned. If not, the default
115  extended PSF is returned.
116  """
117  if detector is None:
118  if self.default_extended_psf is None:
119  raise ValueError("No default extended PSF available; please provide detector number.")
120  return self.default_extended_psf
121  elif not self.focal_plane_regions:
122  return self.default_extended_psf
123  return self.get_regional_extended_psf(detector=detector)
124 

◆ __len__()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.__len__ (   self)
Returns the number of extended PSF models present in the instance.

Note that if the instance contains both a default model and a set of
focal plane region models, the length of the instance will be the
number of regional models, plus one (the default). This is true even
in the case where the default model is one of the focal plane
region-specific models.

Definition at line 125 of file extended_psf.py.

125  def __len__(self):
126  """Returns the number of extended PSF models present in the instance.
127 
128  Note that if the instance contains both a default model and a set of
129  focal plane region models, the length of the instance will be the
130  number of regional models, plus one (the default). This is true even
131  in the case where the default model is one of the focal plane
132  region-specific models.
133  """
134  n_regions = len(self.focal_plane_regions)
135  if self.default_extended_psf is not None:
136  n_regions += 1
137  return n_regions
138 

◆ add_regional_extended_psf()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.add_regional_extended_psf (   self,
  extended_psf_image,
  region_name,
  detector_list 
)
Add a new focal plane region, along wit hits extended PSF, to the
ExtendedPsf instance.

Parameters
----------
extended_psf_image : `lsst.afw.image.MaskedImageF`
    Extended PSF model for the region.
region_name : `str`
    Name of the focal plane region. Will be converted to all-uppercase.
detector_list : `list` [`int`]
    List of IDs for the detectors that define the focal plane region.

Definition at line 75 of file extended_psf.py.

75  def add_regional_extended_psf(self, extended_psf_image, region_name, detector_list):
76  """Add a new focal plane region, along wit hits extended PSF, to the
77  ExtendedPsf instance.
78 
79  Parameters
80  ----------
81  extended_psf_image : `lsst.afw.image.MaskedImageF`
82  Extended PSF model for the region.
83  region_name : `str`
84  Name of the focal plane region. Will be converted to all-uppercase.
85  detector_list : `list` [`int`]
86  List of IDs for the detectors that define the focal plane region.
87  """
88  region_name = region_name.upper()
89  if region_name in self.focal_plane_regions:
90  raise ValueError(f"Region name {region_name} is already used by this ExtendedPsf instance.")
91  self.focal_plane_regions[region_name] = FocalPlaneRegionExtendedPsf(
92  extended_psf_image=extended_psf_image, detector_list=detector_list)
93  for det in detector_list:
94  self.detectors_focal_plane_regions[det] = region_name
95 

◆ get_regional_extended_psf()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.get_regional_extended_psf (   self,
  region_name = None,
  detector = None 
)
Returns the extended PSF for a focal plane region.

The region can be identified either by name, or through a detector ID.

Parameters
----------
region_name : `str` or `None`, optional
    Name of the region for which the extended PSF should be retrieved.
    Ignored if  ``detector`` is provided. Must be provided if
    ``detector`` is None.
detector : `int` or `None`, optional
    If provided, returns the extended PSF for the focal plane region
    that includes this detector.

Raises
------
ValueError
    Raised if neither ``detector`` nor ``regionName`` is provided.

Definition at line 139 of file extended_psf.py.

139  def get_regional_extended_psf(self, region_name=None, detector=None):
140  """Returns the extended PSF for a focal plane region.
141 
142  The region can be identified either by name, or through a detector ID.
143 
144  Parameters
145  ----------
146  region_name : `str` or `None`, optional
147  Name of the region for which the extended PSF should be retrieved.
148  Ignored if ``detector`` is provided. Must be provided if
149  ``detector`` is None.
150  detector : `int` or `None`, optional
151  If provided, returns the extended PSF for the focal plane region
152  that includes this detector.
153 
154  Raises
155  ------
156  ValueError
157  Raised if neither ``detector`` nor ``regionName`` is provided.
158  """
159  if detector is None:
160  if region_name is None:
161  raise ValueError("One of either a regionName or a detector number must be provided.")
162  return self.focal_plane_regions[region_name].extended_psf_image
163  return self.focal_plane_regions[self.detectors_focal_plane_regions[detector]].extended_psf_image
164 

◆ read_fits()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.read_fits (   cls,
  filename 
)
Build an instance of this class from a file.

Parameters
----------
filename : `str`
    Name of the file to read.

Definition at line 208 of file extended_psf.py.

208  def read_fits(cls, filename):
209  """Build an instance of this class from a file.
210 
211  Parameters
212  ----------
213  filename : `str`
214  Name of the file to read.
215  """
216  # Extract info from metadata.
217  global_metadata = afwFits.readMetadata(filename, hdu=0)
218  has_default = global_metadata.getBool("HAS_DEFAULT")
219  if global_metadata.getBool("HAS_REGIONS"):
220  focal_plane_region_names = global_metadata.getArray("REGION_NAMES")
221  else:
222  focal_plane_region_names = []
223  f = afwFits.Fits(filename, "r")
224  n_extensions = f.countHdus()
225  extended_psf_parts = {}
226  for j in range(1, n_extensions):
227  md = afwFits.readMetadata(filename, hdu=j)
228  if has_default and md["REGION"] == "DEFAULT":
229  if md["EXTNAME"] == "IMAGE":
230  default_image = afwImage.ImageF(filename, hdu=j)
231  elif md["EXTNAME"] == "MASK":
232  default_mask = afwImage.MaskX(filename, hdu=j)
233  continue
234  if md["EXTNAME"] == "IMAGE":
235  extended_psf_part = afwImage.ImageF(filename, hdu=j)
236  elif md["EXTNAME"] == "MASK":
237  extended_psf_part = afwImage.MaskX(filename, hdu=j)
238  extended_psf_parts.setdefault(md["REGION"], {})[md["EXTNAME"].lower()] = extended_psf_part
239  # Handle default if present.
240  if has_default:
241  extended_psf = cls(afwImage.MaskedImageF(default_image, default_mask))
242  else:
243  extended_psf = cls()
244  # Ensure we recovered an extended PSF for all focal plane regions.
245  if len(extended_psf_parts) != len(focal_plane_region_names):
246  raise ValueError(f"Number of per-region extended PSFs read ({len(extended_psf_parts)}) does not "
247  "match with the number of regions recorded in the metadata "
248  f"({len(focal_plane_region_names)}).")
249  # Generate extended PSF regions mappings.
250  for r_name in focal_plane_region_names:
251  extended_psf_image = afwImage.MaskedImageF(**extended_psf_parts[r_name])
252  detector_list = global_metadata.getArray(r_name)
253  extended_psf.add_regional_extended_psf(extended_psf_image, r_name, detector_list)
254  # Instantiate ExtendedPsf.
255  return extended_psf
256 

◆ readFits()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.readFits (   cls,
  filename 
)
Alias for ``readFits``; exists for compatibility with the Butler.

Definition at line 258 of file extended_psf.py.

258  def readFits(cls, filename):
259  """Alias for ``readFits``; exists for compatibility with the Butler.
260  """
261  return cls.read_fits(filename)
262 
263 

◆ write_fits()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.write_fits (   self,
  filename 
)
Write this object to a file.

Parameters
----------
filename : `str`
    Name of file to write.

Definition at line 165 of file extended_psf.py.

165  def write_fits(self, filename):
166  """Write this object to a file.
167 
168  Parameters
169  ----------
170  filename : `str`
171  Name of file to write.
172  """
173  # Create primary HDU with global metadata.
174  metadata = PropertyList()
175  metadata["HAS_DEFAULT"] = self.default_extended_psf is not None
176  if self.focal_plane_regions:
177  metadata["HAS_REGIONS"] = True
178  metadata["REGION_NAMES"] = list(self.focal_plane_regions.keys())
179  for region, e_psf_region in self.focal_plane_regions.items():
180  metadata[region] = e_psf_region.detector_list
181  else:
182  metadata["HAS_REGIONS"] = False
183  fits_primary = afwFits.Fits(filename, "w")
184  fits_primary.createEmpty()
185  fits_primary.writeMetadata(metadata)
186  fits_primary.closeFile()
187  # Write default extended PSF.
188  if self.default_extended_psf is not None:
189  default_hdu_metadata = PropertyList()
190  default_hdu_metadata.update({"REGION": "DEFAULT", "EXTNAME": "IMAGE"})
191  self.default_extended_psf.image.writeFits(filename, metadata=default_hdu_metadata, mode="a")
192  default_hdu_metadata.update({"REGION": "DEFAULT", "EXTNAME": "MASK"})
193  self.default_extended_psf.mask.writeFits(filename, metadata=default_hdu_metadata, mode="a")
194  # Write extended PSF for each focal plane region.
195  for j, (region, e_psf_region) in enumerate(self.focal_plane_regions.items()):
196  metadata = PropertyList()
197  metadata.update({"REGION": region, "EXTNAME": "IMAGE"})
198  e_psf_region.extended_psf_image.image.writeFits(filename, metadata=metadata, mode="a")
199  metadata.update({"REGION": region, "EXTNAME": "MASK"})
200  e_psf_region.extended_psf_image.mask.writeFits(filename, metadata=metadata, mode="a")
201 
std::vector< SchemaItem< Flag > > * items
daf::base::PropertyList * list
Definition: fits.cc:913

◆ writeFits()

def lsst.pipe.tasks.extended_psf.ExtendedPsf.writeFits (   self,
  filename 
)
Alias for ``write_fits``; exists for compatibility with the Butler.

Definition at line 202 of file extended_psf.py.

202  def writeFits(self, filename):
203  """Alias for ``write_fits``; exists for compatibility with the Butler.
204  """
205  self.write_fits(filename)
206 
def writeFits(filename, stamps, metadata, type_name, write_mask, write_variance, write_archive=False)
Definition: stamps.py:42

Member Data Documentation

◆ default_extended_psf

lsst.pipe.tasks.extended_psf.ExtendedPsf.default_extended_psf

Definition at line 71 of file extended_psf.py.

◆ detectors_focal_plane_regions

lsst.pipe.tasks.extended_psf.ExtendedPsf.detectors_focal_plane_regions

Definition at line 73 of file extended_psf.py.

◆ focal_plane_regions

lsst.pipe.tasks.extended_psf.ExtendedPsf.focal_plane_regions

Definition at line 72 of file extended_psf.py.


The documentation for this class was generated from the following file: