LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
LSST Data Management Base Package
Classes | Functions
lsst.meas.algorithms.stamps Namespace Reference

Classes

class  AbstractStamp
 
class  Stamp
 
class  StampsBase
 
class  Stamps
 

Functions

def writeFits (filename, stamp_ims, metadata, type_name, write_mask, write_variance)
 
def readFitsWithOptions (filename, stamp_factory, options)
 

Function Documentation

◆ readFitsWithOptions()

def lsst.meas.algorithms.stamps.readFitsWithOptions (   filename,
  stamp_factory,
  options 
)
Read stamps from FITS file, allowing for only a
subregion of the stamps to be read.

Parameters
----------
filename : `str`
    A string indicating the file to read
stamp_factory : classmethod
    A factory function defined on a dataclass for constructing
    stamp objects a la `lsst.meas.alrogithm.Stamp`
options : `PropertyList` or `dict`
    A collection of parameters. If it contains a bounding box
    (``bbox`` key), or if certain other keys (``llcX``, ``llcY``,
    ``width``, ``height``) are available for one to be  constructed,
    the bounding box is passed to the ``FitsReader`` in order to
    return a sub-image.

Returns
-------
stamps : `list` of dataclass objects like `Stamp`, PropertyList
    A tuple of a list of `Stamp`-like objects
metadata : `PropertyList`
    The metadata

Definition at line 88 of file stamps.py.

88 def readFitsWithOptions(filename, stamp_factory, options):
89  """Read stamps from FITS file, allowing for only a
90  subregion of the stamps to be read.
91 
92  Parameters
93  ----------
94  filename : `str`
95  A string indicating the file to read
96  stamp_factory : classmethod
97  A factory function defined on a dataclass for constructing
98  stamp objects a la `lsst.meas.alrogithm.Stamp`
99  options : `PropertyList` or `dict`
100  A collection of parameters. If it contains a bounding box
101  (``bbox`` key), or if certain other keys (``llcX``, ``llcY``,
102  ``width``, ``height``) are available for one to be constructed,
103  the bounding box is passed to the ``FitsReader`` in order to
104  return a sub-image.
105 
106  Returns
107  -------
108  stamps : `list` of dataclass objects like `Stamp`, PropertyList
109  A tuple of a list of `Stamp`-like objects
110  metadata : `PropertyList`
111  The metadata
112  """
113  # extract necessary info from metadata
114  metadata = afwFits.readMetadata(filename, hdu=0)
115  f = afwFits.Fits(filename, 'r')
116  nExtensions = f.countHdus()
117  nStamps = metadata["N_STAMPS"]
118  # check if a bbox was provided
119  kwargs = {}
120  if options:
121  # gen3 API
122  if "bbox" in options.keys():
123  kwargs["bbox"] = options["bbox"]
124  # gen2 API
125  elif "llcX" in options.keys():
126  llcX = options["llcX"]
127  llcY = options["llcY"]
128  width = options["width"]
129  height = options["height"]
130  bbox = Box2I(Point2I(llcX, llcY), Extent2I(width, height))
131  kwargs["bbox"] = bbox
132  stamp_parts = {}
133  # We need to be careful because nExtensions includes the primary
134  # header data unit
135  for idx in range(nExtensions-1):
136  md = afwFits.readMetadata(filename, hdu=idx+1)
137  if md['EXTNAME'] in ('IMAGE', 'VARIANCE'):
138  reader = afwImage.ImageFitsReader(filename, hdu=idx+1)
139  elif md['EXTNAME'] == 'MASK':
140  reader = afwImage.MaskFitsReader(filename, hdu=idx+1)
141  else:
142  raise ValueError(f"Unknown extension type: {md['EXTNAME']}")
143  stamp_parts.setdefault(md['EXTVER'], {})[md['EXTNAME'].lower()] = reader.read(**kwargs)
144  if len(stamp_parts) != nStamps:
145  raise ValueError(f'Number of stamps read ({len(stamp_parts)}) does not agree with the '
146  f'number of stamps recorded in the metadata ({nStamps}).')
147  # construct stamps themselves
148  stamps = []
149  for k in range(nStamps):
150  # Need to increment by one since EXTVER starts at 1
151  maskedImage = afwImage.MaskedImageF(**stamp_parts[k+1])
152  stamps.append(stamp_factory(maskedImage, metadata, k))
153 
154  return stamps, metadata
155 
156 
157 @dataclass
A FITS reader class for regular Images.
A FITS reader class for Masks.
Extent< int, 2 > Extent2I
Definition: Extent.h:397
Point< int, 2 > Point2I
Definition: Point.h:321
def readFitsWithOptions(filename, stamp_factory, options)
Definition: stamps.py:88

◆ writeFits()

def lsst.meas.algorithms.stamps.writeFits (   filename,
  stamp_ims,
  metadata,
  type_name,
  write_mask,
  write_variance 
)
Write a single FITS file containing all stamps.

Parameters
----------
filename : `str`
    A string indicating the output filename
stamps_ims : iterable of `lsst.afw.image.MaskedImageF`
    An iterable of masked images
metadata : `PropertyList`
    A collection of key, value metadata pairs to be
    written to the primary header
type_name : `str`
    Python type name of the StampsBase subclass to use
write_mask : `bool`
    Write the mask data to the output file?
write_variance : `bool`
    Write the variance data to the output file?

Definition at line 40 of file stamps.py.

40 def writeFits(filename, stamp_ims, metadata, type_name, write_mask, write_variance):
41  """Write a single FITS file containing all stamps.
42 
43  Parameters
44  ----------
45  filename : `str`
46  A string indicating the output filename
47  stamps_ims : iterable of `lsst.afw.image.MaskedImageF`
48  An iterable of masked images
49  metadata : `PropertyList`
50  A collection of key, value metadata pairs to be
51  written to the primary header
52  type_name : `str`
53  Python type name of the StampsBase subclass to use
54  write_mask : `bool`
55  Write the mask data to the output file?
56  write_variance : `bool`
57  Write the variance data to the output file?
58  """
59  metadata['HAS_MASK'] = write_mask
60  metadata['HAS_VARIANCE'] = write_variance
61  metadata['N_STAMPS'] = len(stamp_ims)
62  metadata['STAMPCLS'] = type_name
63  # Record version number in case of future code changes
64  metadata['VERSION'] = 1
65  # create primary HDU with global metadata
66  fitsPrimary = afwFits.Fits(filename, "w")
67  fitsPrimary.createEmpty()
68  fitsPrimary.writeMetadata(metadata)
69  fitsPrimary.closeFile()
70 
71  # add all pixel data optionally writing mask and variance information
72  for i, stamp in enumerate(stamp_ims):
73  metadata = PropertyList()
74  # EXTVER should be 1-based, the index from enumerate is 0-based
75  metadata.update({'EXTVER': i+1, 'EXTNAME': 'IMAGE'})
76  stamp.getImage().writeFits(filename, metadata=metadata, mode='a')
77  if write_mask:
78  metadata = PropertyList()
79  metadata.update({'EXTVER': i+1, 'EXTNAME': 'MASK'})
80  stamp.getMask().writeFits(filename, metadata=metadata, mode='a')
81  if write_variance:
82  metadata = PropertyList()
83  metadata.update({'EXTVER': i+1, 'EXTNAME': 'VARIANCE'})
84  stamp.getVariance().writeFits(filename, metadata=metadata, mode='a')
85  return None
86 
87 
def writeFits(filename, stamp_ims, metadata, type_name, write_mask, write_variance)
Definition: stamps.py:40