LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
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: