67 config: SingleFrameCompensatedGaussianFluxConfig,
74 super().
__init__(config, name, schema, metadata, logName, **kwds)
76 flagDefs = FlagDefinitionList()
83 for width
in config.kernel_widths:
84 base_key = f
"{name}_{width}"
87 flux_str = f
"{base_key}_instFlux"
88 flux_key = schema.addField(
91 doc=
"Compensated Gaussian flux measurement.",
96 err_str = f
"{base_key}_instFluxErr"
97 err_key = schema.addField(
100 doc=
"Compensated Gaussian flux error.",
105 mask_str = f
"{base_key}_mask_bits"
106 mask_key = schema.addField(mask_str, type=np.int32, doc=
"Mask bits set within aperture.")
109 failure_flag = flagDefs.add(f
"{width}_flag",
"Compensated Gaussian measurement failed")
110 oob_flag = flagDefs.add(f
"{width}_flag_bounds",
"Compensated Gaussian out-of-bounds")
112 self.
width_keys[width] = (flux_key, err_key, mask_key, failure_flag, oob_flag)
113 self.
_rads[width] = math.ceil(sps.norm.ppf((0.995,), scale=width * config.t)[0])
131 center = measRecord.getCentroid()
132 bbox = exposure.getBBox()
134 y = center.getY() - bbox.beginY
135 x = center.getX() - bbox.beginX
137 y_floor = math.floor(y)
138 x_floor = math.floor(x)
140 for width, (flux_key, err_key, mask_key, failure_flag, oob_flag)
in self.
width_keys.items():
141 rad = self.
_rads[width]
143 if Point2I(center)
not in exposure.getBBox().erodedBy(rad):
144 self.
flagHandler.setValue(measRecord, failure_flag.number,
True)
145 self.
flagHandler.setValue(measRecord, oob_flag.number,
True)
148 y_slice = slice(y_floor - rad, y_floor + rad + 1, 1)
149 x_slice = slice(x_floor - rad, x_floor + rad + 1, 1)
150 y_mean = y - y_floor + rad
151 x_mean = x - x_floor + rad
153 sub_im = exposure.image.array[y_slice, x_slice]
154 sub_var = exposure.variance.array[y_slice, x_slice]
156 if sub_im.size == 0
or sub_im.shape[0] != sub_im.shape[1]
or (sub_im.shape[0] % 2) == 0:
157 self.
flagHandler.setValue(measRecord, failure_flag.number,
True)
158 self.
flagHandler.setValue(measRecord, oob_flag.number,
True)
161 flux, var = _compensatedGaussianFiltInnerProduct(
170 measRecord.set(flux_key, flux)
171 measRecord.set(err_key, np.sqrt(var))
172 measRecord.set(mask_key, np.bitwise_or.reduce(exposure.mask.array[y_slice, x_slice], axis=
None))