Skip to content

Commit a321ba0

Browse files
committed
Avoid independent definition of "FIT_PARAMS"
We had defined "FIT_PARAMS" independently as all the keys from the dict returned by "moments" except "flux". That is not DRY. So better to define both "FIT_PARAMS" and the keys of the dict returned by "moments" from a common source, in the case an "Enum" class.
1 parent 7e97847 commit a321ba0

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

sourcefinder/measuring.py

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""Source measuring routines."""
22

3+
from enum import Enum
34
import math
45

56
import numpy as np
@@ -14,7 +15,21 @@
1415
complement_gaussian_args,
1516
)
1617

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+
)
1833

1934

2035
@njit
@@ -114,13 +129,13 @@ def moments(data, fudge_max_pix_factor, beam, beamsize, threshold=0):
114129

115130
if semiminor_tmp <= 0:
116131
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],
124139
}
125140
if abs(semimajor_tmp - semiminor_tmp) < 0.01:
126141
# 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):
210225
# NB: a dict should give us a bit more flexibility about arguments;
211226
# however, all those here are ***REQUIRED***.
212227
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,
220235
}
221236

222237

0 commit comments

Comments
 (0)