LSST Applications g0265f82a02+c6dfa2ddaf,g1162b98a3f+b2075782a9,g2079a07aa2+1b2e822518,g2bbee38e9b+c6dfa2ddaf,g337abbeb29+c6dfa2ddaf,g3ddfee87b4+a60788ef87,g50ff169b8f+2eb0e556e8,g52b1c1532d+90ebb246c7,g555ede804d+a60788ef87,g591dd9f2cf+ba8caea58f,g5ec818987f+864ee9cddb,g858d7b2824+9ee1ab4172,g876c692160+a40945ebb7,g8a8a8dda67+90ebb246c7,g8cdfe0ae6a+4fd9e222a8,g99cad8db69+5e309b7bc6,g9ddcbc5298+a1346535a5,ga1e77700b3+df8f93165b,ga8c6da7877+aa12a14d27,gae46bcf261+c6dfa2ddaf,gb0e22166c9+8634eb87fb,gb3f2274832+d0da15e3be,gba4ed39666+1ac82b564f,gbb8dafda3b+5dfd9c994b,gbeb006f7da+97157f9740,gc28159a63d+c6dfa2ddaf,gc86a011abf+9ee1ab4172,gcf0d15dbbd+a60788ef87,gdaeeff99f8+1cafcb7cd4,gdc0c513512+9ee1ab4172,ge79ae78c31+c6dfa2ddaf,geb67518f79+ba1859f325,geb961e4c1e+f9439d1e6f,gee10cc3b42+90ebb246c7,gf1cff7945b+9ee1ab4172,w.2024.12
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Static Public Attributes | List of all members
lsst.meas.algorithms.brightStarStamps.BrightStarStamp Class Reference
Inheritance diagram for lsst.meas.algorithms.brightStarStamps.BrightStarStamp:
lsst.meas.algorithms.stamps.AbstractStamp

Public Member Functions

 factory (cls, stamp_im, metadata, idx, archive_element=None, minValidAnnulusFraction=0.0)
 
 measureAndNormalize (self, SpanSet annulus, StatisticsControl statsControl=StatisticsControl(), Property statsFlag=stringToStatisticsProperty("MEAN"), Collection[str] badMaskPlanes=("BAD", "SAT", "NO_DATA"))
 

Public Attributes

 stamp_im
 
 validAnnulusFraction
 
 minValidAnnulusFraction
 
 annularFlux
 

Static Public Attributes

MaskedImageF stamp_im
 
float gaiaGMag
 
int gaiaId
 
Point2I position
 
Persistable archive_element = None
 
float annularFlux = None
 
float minValidAnnulusFraction = 0.0
 
float validAnnulusFraction = None
 
int optimalInnerRadius = None
 
int optimalOuterRadius = None
 

Detailed Description

Single stamp centered on a bright star, normalized by its annularFlux.

Parameters
----------
stamp_im : `~lsst.afw.image.MaskedImage`
    Pixel data for this postage stamp
gaiaGMag : `float`
    Gaia G magnitude for the object in this stamp
gaiaId : `int`
    Gaia object identifier
position : `~lsst.geom.Point2I`
    Origin of the stamps in its origin exposure (pixels)
archive_element : `~lsst.afw.table.io.Persistable` or None, optional
    Archive element (e.g. Transform or WCS) associated with this stamp.
annularFlux : `float` or None, optional
    Flux in an annulus around the object

Definition at line 45 of file brightStarStamps.py.

Member Function Documentation

◆ factory()

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.factory ( cls,
stamp_im,
metadata,
idx,
archive_element = None,
minValidAnnulusFraction = 0.0 )
This method is needed to service the FITS reader. We need a standard
interface to construct objects like this. Parameters needed to
construct this object are passed in via a metadata dictionary and then
passed to the constructor of this class.  This particular factory
method requires keys: G_MAGS, GAIA_IDS, and ANNULAR_FLUXES. They should
each point to lists of values.

Parameters
----------
stamp_im : `~lsst.afw.image.MaskedImage`
    Pixel data to pass to the constructor
metadata : `dict`
    Dictionary containing the information
    needed by the constructor.
idx : `int`
    Index into the lists in ``metadata``
archive_element : `~lsst.afw.table.io.Persistable` or None, optional
    Archive element (e.g. Transform or WCS) associated with this stamp.
minValidAnnulusFraction : `float`, optional
    The fraction of valid pixels within the normalization annulus of a
    star.

Returns
-------
brightstarstamp : `BrightStarStamp`
    An instance of this class

Reimplemented from lsst.meas.algorithms.stamps.AbstractStamp.

Definition at line 76 of file brightStarStamps.py.

76 def factory(cls, stamp_im, metadata, idx, archive_element=None, minValidAnnulusFraction=0.0):
77 """This method is needed to service the FITS reader. We need a standard
78 interface to construct objects like this. Parameters needed to
79 construct this object are passed in via a metadata dictionary and then
80 passed to the constructor of this class. This particular factory
81 method requires keys: G_MAGS, GAIA_IDS, and ANNULAR_FLUXES. They should
82 each point to lists of values.
83
84 Parameters
85 ----------
86 stamp_im : `~lsst.afw.image.MaskedImage`
87 Pixel data to pass to the constructor
88 metadata : `dict`
89 Dictionary containing the information
90 needed by the constructor.
91 idx : `int`
92 Index into the lists in ``metadata``
93 archive_element : `~lsst.afw.table.io.Persistable` or None, optional
94 Archive element (e.g. Transform or WCS) associated with this stamp.
95 minValidAnnulusFraction : `float`, optional
96 The fraction of valid pixels within the normalization annulus of a
97 star.
98
99 Returns
100 -------
101 brightstarstamp : `BrightStarStamp`
102 An instance of this class
103 """
104 if "X0S" in metadata and "Y0S" in metadata:
105 x0 = metadata.getArray("X0S")[idx]
106 y0 = metadata.getArray("Y0S")[idx]
107 position = Point2I(x0, y0)
108 else:
109 position = None
110 return cls(
111 stamp_im=stamp_im,
112 gaiaGMag=metadata.getArray("G_MAGS")[idx],
113 gaiaId=metadata.getArray("GAIA_IDS")[idx],
114 position=position,
115 archive_element=archive_element,
116 annularFlux=metadata.getArray("ANNULAR_FLUXES")[idx],
117 minValidAnnulusFraction=minValidAnnulusFraction,
118 validAnnulusFraction=metadata.getArray("VALID_PIXELS_FRACTION")[idx],
119 )
120

◆ measureAndNormalize()

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.measureAndNormalize ( self,
SpanSet annulus,
StatisticsControl statsControl = StatisticsControl(),
Property statsFlag = stringToStatisticsProperty("MEAN"),
Collection[str] badMaskPlanes = ("BAD", "SAT", "NO_DATA") )
Compute "annularFlux", the integrated flux within an annulus
around an object's center, and normalize it.

Since the center of bright stars are saturated and/or heavily affected
by ghosts, we measure their flux in an annulus with a large enough
inner radius to avoid the most severe ghosts and contain enough
non-saturated pixels.

Parameters
----------
annulus : `~lsst.afw.geom.spanSet.SpanSet`
    SpanSet containing the annulus to use for normalization.
statsControl : `~lsst.afw.math.statistics.StatisticsControl`, optional
    StatisticsControl to be used when computing flux over all pixels
    within the annulus.
statsFlag : `~lsst.afw.math.statistics.Property`, optional
    statsFlag to be passed on to ``afwMath.makeStatistics`` to compute
    annularFlux. Defaults to a simple MEAN.
badMaskPlanes : `collections.abc.Collection` [`str`]
    Collection of mask planes to ignore when computing annularFlux.

Definition at line 121 of file brightStarStamps.py.

127 ):
128 """Compute "annularFlux", the integrated flux within an annulus
129 around an object's center, and normalize it.
130
131 Since the center of bright stars are saturated and/or heavily affected
132 by ghosts, we measure their flux in an annulus with a large enough
133 inner radius to avoid the most severe ghosts and contain enough
134 non-saturated pixels.
135
136 Parameters
137 ----------
138 annulus : `~lsst.afw.geom.spanSet.SpanSet`
139 SpanSet containing the annulus to use for normalization.
140 statsControl : `~lsst.afw.math.statistics.StatisticsControl`, optional
141 StatisticsControl to be used when computing flux over all pixels
142 within the annulus.
143 statsFlag : `~lsst.afw.math.statistics.Property`, optional
144 statsFlag to be passed on to ``afwMath.makeStatistics`` to compute
145 annularFlux. Defaults to a simple MEAN.
146 badMaskPlanes : `collections.abc.Collection` [`str`]
147 Collection of mask planes to ignore when computing annularFlux.
148 """
149 stampSize = self.stamp_im.getDimensions()
150 # Create image: science pixel values within annulus, NO_DATA elsewhere
151 maskPlaneDict = self.stamp_im.mask.getMaskPlaneDict()
152 annulusImage = MaskedImageF(stampSize, planeDict=maskPlaneDict)
153 annulusMask = annulusImage.mask
154 annulusMask.array[:] = 2 ** maskPlaneDict["NO_DATA"]
155 annulus.copyMaskedImage(self.stamp_im, annulusImage)
156 # Set mask planes to be ignored.
157 andMask = reduce(ior, (annulusMask.getPlaneBitMask(bm) for bm in badMaskPlanes))
158 statsControl.setAndMask(andMask)
159
160 annulusStat = makeStatistics(annulusImage, statsFlag, statsControl)
161 # Determine the number of valid (unmasked) pixels within the annulus.
162 unMasked = annulusMask.array.size - np.count_nonzero(annulusMask.array)
163 self.validAnnulusFraction = unMasked / annulus.getArea()
164 logger.info(
165 "The Star's annulus contains %s valid pixels and the annulus itself contains %s pixels.",
166 unMasked,
167 annulus.getArea(),
168 )
169 if unMasked > (annulus.getArea() * self.minValidAnnulusFraction):
170 # Compute annularFlux.
171 self.annularFlux = annulusStat.getValue()
172 logger.info("Annular flux is: %s", self.annularFlux)
173 else:
174 raise RuntimeError(
175 f"Less than {self.minValidAnnulusFraction * 100}% of pixels within the annulus are valid."
176 )
177 if np.isnan(self.annularFlux):
178 raise RuntimeError("Annular flux computation failed, likely because there are no valid pixels.")
179 if self.annularFlux < 0:
180 raise RuntimeError("The annular flux is negative. The stamp can not be normalized!")
181 # Normalize stamps.
182 self.stamp_im.image.array /= self.annularFlux
183 return None
184
185

Member Data Documentation

◆ annularFlux [1/2]

float lsst.meas.algorithms.brightStarStamps.BrightStarStamp.annularFlux = None
static

Definition at line 69 of file brightStarStamps.py.

◆ annularFlux [2/2]

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.annularFlux

Definition at line 171 of file brightStarStamps.py.

◆ archive_element

Persistable lsst.meas.algorithms.brightStarStamps.BrightStarStamp.archive_element = None
static

Definition at line 68 of file brightStarStamps.py.

◆ gaiaGMag

float lsst.meas.algorithms.brightStarStamps.BrightStarStamp.gaiaGMag
static

Definition at line 65 of file brightStarStamps.py.

◆ gaiaId

int lsst.meas.algorithms.brightStarStamps.BrightStarStamp.gaiaId
static

Definition at line 66 of file brightStarStamps.py.

◆ minValidAnnulusFraction [1/2]

float lsst.meas.algorithms.brightStarStamps.BrightStarStamp.minValidAnnulusFraction = 0.0
static

Definition at line 70 of file brightStarStamps.py.

◆ minValidAnnulusFraction [2/2]

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.minValidAnnulusFraction

Definition at line 169 of file brightStarStamps.py.

◆ optimalInnerRadius

int lsst.meas.algorithms.brightStarStamps.BrightStarStamp.optimalInnerRadius = None
static

Definition at line 72 of file brightStarStamps.py.

◆ optimalOuterRadius

int lsst.meas.algorithms.brightStarStamps.BrightStarStamp.optimalOuterRadius = None
static

Definition at line 73 of file brightStarStamps.py.

◆ position

Point2I lsst.meas.algorithms.brightStarStamps.BrightStarStamp.position
static

Definition at line 67 of file brightStarStamps.py.

◆ stamp_im [1/2]

MaskedImageF lsst.meas.algorithms.brightStarStamps.BrightStarStamp.stamp_im
static

Definition at line 64 of file brightStarStamps.py.

◆ stamp_im [2/2]

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.stamp_im

Definition at line 155 of file brightStarStamps.py.

◆ validAnnulusFraction [1/2]

float lsst.meas.algorithms.brightStarStamps.BrightStarStamp.validAnnulusFraction = None
static

Definition at line 71 of file brightStarStamps.py.

◆ validAnnulusFraction [2/2]

lsst.meas.algorithms.brightStarStamps.BrightStarStamp.validAnnulusFraction

Definition at line 163 of file brightStarStamps.py.


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