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.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin Class Reference
Inheritance diagram for lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin:
lsst.meas.base.sfm.SingleFramePlugin lsst.meas.base.baseMeasurement.BaseMeasurementPlugin lsst.meas.base.pluginsBase.BasePlugin

Public Member Functions

 getExecutionOrder (cls)
 
 __init__ (self, config, name, schema, metadata, logName=None)
 
 measure (self, measRecord, exposure)
 
 fail (self, measRecord, error=None)
 

Public Attributes

 keyXC
 
 keyYC
 
 keyX0
 
 keyY0
 
 keyX1
 
 keyY1
 
 keyLength
 
 keyTheta
 
 keyFlux
 
 keyRChiSq
 
 FAILURE
 
 NON_CONVERGE
 
 NO_NAIVE
 
 flagHandler
 
 centroidExtractor
 

Static Public Attributes

 ConfigClass = SingleFrameVeresTrailConfig
 

Detailed Description

Veres trailed source characterization plugin.

Measures the length, angle, flux, centroid, and end points of a trailed
source using the Veres et al. 2012 model [1]_.

Parameters
----------
config: `SingleFrameNaiveTrailConfig`
    Plugin configuration.
name: `str`
    Plugin name.
schema: `lsst.afw.table.Schema`
    Schema for the output catalog.
metadata: `lsst.daf.base.PropertySet`
    Metadata to be attached to output catalog.

Notes
-----
This plugin is designed to refine the measurements of trail length,
angle, and end points from `NaivePlugin`, and of flux and centroid from
previous measurement algorithms. Vereš et al. 2012 [1]_ derive a model for
the flux in a given image pixel by convolving an axisymmetric Gaussian with
a line. The model is parameterized by the total flux, trail length, angle
from the x-axis, and the centroid. The best estimates are computed using a
chi-squared minimization.

References
----------
.. [1] Vereš, P., et al. "Improved Asteroid Astrometry and Photometry with
   Trail Fitting" PASP, vol. 124, 2012.

See also
--------
lsst.meas.base.SingleFramePlugin

Definition at line 52 of file VeresPlugin.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.__init__ ( self,
config,
name,
schema,
metadata,
logName = None )

Reimplemented from lsst.meas.base.sfm.SingleFramePlugin.

Definition at line 97 of file VeresPlugin.py.

97 def __init__(self, config, name, schema, metadata, logName=None):
98 super().__init__(config, name, schema, metadata, logName=logName)
99
100 self.keyXC = schema.addField(
101 name + "_centroid_x", type="D", doc="Trail centroid X coordinate.", units="pixel")
102 self.keyYC = schema.addField(
103 name + "_centroid_y", type="D", doc="Trail centroid Y coordinate.", units="pixel")
104 self.keyX0 = schema.addField(name + "_x0", type="D", doc="Trail head X coordinate.", units="pixel")
105 self.keyY0 = schema.addField(name + "_y0", type="D", doc="Trail head Y coordinate.", units="pixel")
106 self.keyX1 = schema.addField(name + "_x1", type="D", doc="Trail tail X coordinate.", units="pixel")
107 self.keyY1 = schema.addField(name + "_y1", type="D", doc="Trail tail Y coordinate.", units="pixel")
108 self.keyLength = schema.addField(name + "_length", type="D", doc="Length of trail.", units="pixel")
109 self.keyTheta = schema.addField(name + "_angle", type="D", doc="Angle of trail from +x-axis.")
110 self.keyFlux = schema.addField(name + "_flux", type="D", doc="Trailed source flux.", units="count")
111 self.keyRChiSq = schema.addField(name + "_rChiSq", type="D", doc="Reduced chi-squared of fit")
112
113 flagDefs = FlagDefinitionList()
114 self.FAILURE = flagDefs.addFailureFlag("No trailed-sources measured")
115 self.NON_CONVERGE = flagDefs.add("flag_nonConvergence", "Optimizer did not converge")
116 self.NO_NAIVE = flagDefs.add("flag_noNaive", "Naive measurement contains NaNs")
117 self.flagHandler = FlagHandler.addFields(schema, name, flagDefs)
118
119 self.centroidExtractor = SafeCentroidExtractor(schema, name)
120

Member Function Documentation

◆ fail()

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.fail ( self,
measRecord,
error = None )
Record failure

See also
--------
lsst.meas.base.SingleFramePlugin.fail

Reimplemented from lsst.meas.base.pluginsBase.BasePlugin.

Definition at line 187 of file VeresPlugin.py.

187 def fail(self, measRecord, error=None):
188 """Record failure
189
190 See also
191 --------
192 lsst.meas.base.SingleFramePlugin.fail
193 """
194 if error is None:
195 self.flagHandler.handleFailure(measRecord)
196 else:
197 self.flagHandler.handleFailure(measRecord, error.cpp)

◆ getExecutionOrder()

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.getExecutionOrder ( cls)
Get the relative execution order of this plugin.

Must be reimplemented as a class method by concrete derived classes.

Reimplemented from lsst.meas.base.pluginsBase.BasePlugin.

Definition at line 92 of file VeresPlugin.py.

92 def getExecutionOrder(cls):
93 # Needs centroids, shape, flux, and NaivePlugin measurements.
94 # Make sure this always runs after NaivePlugin.
95 return SingleFrameNaiveTrailPlugin.getExecutionOrder() + 0.1
96

◆ measure()

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.measure ( self,
measRecord,
exposure )
Run the Veres trailed source measurement plugin.

Parameters
----------
measRecord : `lsst.afw.table.SourceRecord`
    Record describing the object being measured.
exposure : `lsst.afw.image.Exposure`
    Pixel data to be measured.

See also
--------
lsst.meas.base.SingleFramePlugin.measure

Reimplemented from lsst.meas.base.sfm.SingleFramePlugin.

Definition at line 121 of file VeresPlugin.py.

121 def measure(self, measRecord, exposure):
122 """Run the Veres trailed source measurement plugin.
123
124 Parameters
125 ----------
126 measRecord : `lsst.afw.table.SourceRecord`
127 Record describing the object being measured.
128 exposure : `lsst.afw.image.Exposure`
129 Pixel data to be measured.
130
131 See also
132 --------
133 lsst.meas.base.SingleFramePlugin.measure
134 """
135 xc, yc = self.centroidExtractor(measRecord, self.flagHandler)
136
137 # Look at measRecord for Naive measurements
138 # ASSUMES NAIVE ALREADY RAN
139 flux = measRecord.get("ext_trailedSources_Naive_flux")
140 length = measRecord.get("ext_trailedSources_Naive_length")
141 theta = measRecord.get("ext_trailedSources_Naive_angle")
142 if not np.isfinite(flux) or not np.isfinite(length) or not np.isfinite(theta):
143 self.flagHandler.setValue(measRecord, self.NO_NAIVE.number)
144 self.flagHandler.setValue(measRecord, self.FAILURE.number)
145 return
146
147 # Get exposure cutout
148 # sigma = exposure.getPsf().getSigma()
149 # cutout = getMeasurementCutout(exposure, xc, yc, length, sigma)
150 cutout = getMeasurementCutout(measRecord, exposure)
151
152 # Make VeresModel
153 model = VeresModel(cutout)
154
155 # Do optimization with scipy
156 params = np.array([xc, yc, flux, length, theta])
157 results = sciOpt.minimize(
158 model, params, method=self.config.optimizerMethod, jac=model.gradient)
159
160 # Check if optimizer converged
161 if not results.success:
162 self.flagHandler.setValue(measRecord, self.NON_CONVERGE.number)
163 self.flagHandler.setValue(measRecord, self.FAILURE.number)
164 return
165
166 # Calculate end points and reduced chi-squared
167 xc_fit, yc_fit, flux_fit, length_fit, theta_fit = results.x
168 a = length_fit/2
169 x0_fit = xc_fit - a * np.cos(theta_fit)
170 y0_fit = yc_fit - a * np.sin(theta_fit)
171 x1_fit = xc_fit + a * np.cos(theta_fit)
172 y1_fit = yc_fit + a * np.sin(theta_fit)
173 rChiSq = results.fun / (cutout.image.array.size - 6)
174
175 # Set keys
176 measRecord.set(self.keyXC, xc_fit)
177 measRecord.set(self.keyYC, yc_fit)
178 measRecord.set(self.keyX0, x0_fit)
179 measRecord.set(self.keyY0, y0_fit)
180 measRecord.set(self.keyX1, x1_fit)
181 measRecord.set(self.keyY1, y1_fit)
182 measRecord.set(self.keyFlux, flux_fit)
183 measRecord.set(self.keyLength, length_fit)
184 measRecord.set(self.keyTheta, theta_fit)
185 measRecord.set(self.keyRChiSq, rChiSq)
186

Member Data Documentation

◆ centroidExtractor

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.centroidExtractor

Definition at line 119 of file VeresPlugin.py.

◆ ConfigClass

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.ConfigClass = SingleFrameVeresTrailConfig
static

Definition at line 89 of file VeresPlugin.py.

◆ FAILURE

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.FAILURE

Definition at line 114 of file VeresPlugin.py.

◆ flagHandler

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.flagHandler

Definition at line 117 of file VeresPlugin.py.

◆ keyFlux

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyFlux

Definition at line 110 of file VeresPlugin.py.

◆ keyLength

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyLength

Definition at line 108 of file VeresPlugin.py.

◆ keyRChiSq

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyRChiSq

Definition at line 111 of file VeresPlugin.py.

◆ keyTheta

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyTheta

Definition at line 109 of file VeresPlugin.py.

◆ keyX0

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyX0

Definition at line 104 of file VeresPlugin.py.

◆ keyX1

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyX1

Definition at line 106 of file VeresPlugin.py.

◆ keyXC

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyXC

Definition at line 100 of file VeresPlugin.py.

◆ keyY0

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyY0

Definition at line 105 of file VeresPlugin.py.

◆ keyY1

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyY1

Definition at line 107 of file VeresPlugin.py.

◆ keyYC

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.keyYC

Definition at line 102 of file VeresPlugin.py.

◆ NO_NAIVE

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.NO_NAIVE

Definition at line 116 of file VeresPlugin.py.

◆ NON_CONVERGE

lsst.meas.extensions.trailedSources.VeresPlugin.SingleFrameVeresTrailPlugin.NON_CONVERGE

Definition at line 115 of file VeresPlugin.py.


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