|
1 | 1 | """Source measuring routines.""" |
2 | 2 |
|
| 3 | +from enum import Enum |
3 | 4 | import math |
4 | 5 |
|
5 | 6 | import numpy as np |
|
14 | 15 | complement_gaussian_args, |
15 | 16 | ) |
16 | 17 |
|
17 | | -FIT_PARAMS = ("peak", "xbar", "ybar", "semimajor", "semiminor", "theta") |
| 18 | + |
| 19 | +class MomentParam(str, Enum): |
| 20 | + PEAK = "peak" |
| 21 | + FLUX = "flux" |
| 22 | + XBAR = "xbar" |
| 23 | + YBAR = "ybar" |
| 24 | + SEMIMAJOR = "semimajor" |
| 25 | + SEMIMINOR = "semiminor" |
| 26 | + THETA = "theta" |
| 27 | + |
| 28 | + |
| 29 | +# Parameters that are fitted for in Gaussian fitting. |
| 30 | +FIT_PARAMS = tuple( |
| 31 | + member.value for member in MomentParam if member.value != "flux" |
| 32 | +) |
18 | 33 |
|
19 | 34 |
|
20 | 35 | @njit |
@@ -114,13 +129,13 @@ def moments(data, fudge_max_pix_factor, beam, beamsize, threshold=0): |
114 | 129 |
|
115 | 130 | if semiminor_tmp <= 0: |
116 | 131 | return { |
117 | | - "peak": peak, |
118 | | - "flux": total, |
119 | | - "xbar": xbar, |
120 | | - "ybar": ybar, |
121 | | - "semimajor": beam[0], |
122 | | - "semiminor": beam[1], |
123 | | - "theta": beam[2], |
| 132 | + MomentParam.PEAK: peak, |
| 133 | + MomentParam.FLUX: total, |
| 134 | + MomentParam.XBAR: xbar, |
| 135 | + MomentParam.YBAR: ybar, |
| 136 | + MomentParam.SEMIMAJOR: beam[0], |
| 137 | + MomentParam.SEMIMINOR: beam[1], |
| 138 | + MomentParam.THETA: beam[2], |
124 | 139 | } |
125 | 140 | if abs(semimajor_tmp - semiminor_tmp) < 0.01: |
126 | 141 | # In this case the island is very thin in at least one dimension. |
@@ -210,13 +225,13 @@ def moments(data, fudge_max_pix_factor, beam, beamsize, threshold=0): |
210 | 225 | # NB: a dict should give us a bit more flexibility about arguments; |
211 | 226 | # however, all those here are ***REQUIRED***. |
212 | 227 | return { |
213 | | - "peak": peak, |
214 | | - "flux": np.pi * peak * semimajor * semiminor / beamsize, |
215 | | - "xbar": xbar, |
216 | | - "ybar": ybar, |
217 | | - "semimajor": semimajor, |
218 | | - "semiminor": semiminor, |
219 | | - "theta": theta, |
| 228 | + MomentParam.PEAK: peak, |
| 229 | + MomentParam.FLUX: np.pi * peak * semimajor * semiminor / beamsize, |
| 230 | + MomentParam.XBAR: xbar, |
| 231 | + MomentParam.YBAR: ybar, |
| 232 | + MomentParam.SEMIMAJOR: semimajor, |
| 233 | + MomentParam.SEMIMINOR: semiminor, |
| 234 | + MomentParam.THETA: theta, |
220 | 235 | } |
221 | 236 |
|
222 | 237 |
|
|
0 commit comments