asteroid_spinprops 1.2.0__py3-none-any.whl → 1.2.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- asteroid_spinprops/ssolib/modelfit.py +17 -9
- asteroid_spinprops/ssolib/periodest.py +4 -3
- asteroid_spinprops/ssolib/utils.py +16 -0
- {asteroid_spinprops-1.2.0.dist-info → asteroid_spinprops-1.2.2.dist-info}/METADATA +26 -11
- asteroid_spinprops-1.2.2.dist-info/RECORD +10 -0
- asteroid_spinprops-1.2.0.dist-info/RECORD +0 -10
- {asteroid_spinprops-1.2.0.dist-info → asteroid_spinprops-1.2.2.dist-info}/WHEEL +0 -0
|
@@ -51,13 +51,16 @@ def get_fit_params(
|
|
|
51
51
|
period_blind : bool, optional
|
|
52
52
|
If True, perform a small grid search over initial periods. Default True.
|
|
53
53
|
pole_blind : bool, optional
|
|
54
|
-
If True, perform a grid search over initial poles. Default True.
|
|
54
|
+
If True, perform a grid search over 12 initial poles all over a sphere. Default True.
|
|
55
|
+
If False, produce the sHG1G2 rms error landscape and initialize SOCCA poles on its local minima
|
|
55
56
|
p0 : list, optional
|
|
56
57
|
Initial guess parameters for the fit. Required if `shg1g2_constrained=False`.
|
|
57
58
|
alt_spin : bool, optional
|
|
58
59
|
For SOCCA constrained fits, use the antipodal spin solution. Default False.
|
|
59
60
|
period_in : float, optional
|
|
60
61
|
Input synodic period (days) to override automatic estimation. Default None.
|
|
62
|
+
period_quality_flag : bool, optional
|
|
63
|
+
Provide bootstrap score, alias/true (0/1) flags and period fit rms for the period estimates
|
|
61
64
|
terminator : bool, optional
|
|
62
65
|
If True, include self-shading in the fit. Default False.
|
|
63
66
|
|
|
@@ -119,7 +122,7 @@ def get_fit_params(
|
|
|
119
122
|
data, model_parameters=shg1g2_params
|
|
120
123
|
)
|
|
121
124
|
except Exception:
|
|
122
|
-
SOCCA_opt = {"Failed at period search preliminary steps":
|
|
125
|
+
SOCCA_opt = {"Failed at period search preliminary steps": 1}
|
|
123
126
|
return SOCCA_opt
|
|
124
127
|
if period_in is None:
|
|
125
128
|
# Period search boundaries (in days)
|
|
@@ -148,8 +151,11 @@ def get_fit_params(
|
|
|
148
151
|
resid_df=residuals_dataframe, p_min=pmin, p_max=pmax, k=int(k_val)
|
|
149
152
|
)
|
|
150
153
|
except Exception:
|
|
151
|
-
SOCCA_opt = {"Failed at period search after":
|
|
154
|
+
SOCCA_opt = {"Failed at period search after": 1}
|
|
152
155
|
return SOCCA_opt
|
|
156
|
+
except IndexError:
|
|
157
|
+
SOCCA_opt = {"Failed at bootsrap sampling": 1}
|
|
158
|
+
return SOCCA_opt
|
|
153
159
|
period_sy = p_in
|
|
154
160
|
else:
|
|
155
161
|
period_sy = period_in
|
|
@@ -194,9 +200,9 @@ def get_fit_params(
|
|
|
194
200
|
C = func_hg1g2_with_spin(pha, H, G1, G2, R,
|
|
195
201
|
np.radians(ra0), np.radians(dec0))
|
|
196
202
|
|
|
197
|
-
|
|
203
|
+
Obs = data["cmred"].values[0][cond_ff]
|
|
198
204
|
|
|
199
|
-
all_residuals.append(
|
|
205
|
+
all_residuals.append(Obs - C)
|
|
200
206
|
|
|
201
207
|
all_residuals = np.concatenate(all_residuals)
|
|
202
208
|
rms_landscape[j, i] = np.sqrt(np.mean(all_residuals**2))
|
|
@@ -256,14 +262,16 @@ def get_fit_params(
|
|
|
256
262
|
)
|
|
257
263
|
alias_flag = (DeltaF1 - y_trumpet) * 100
|
|
258
264
|
if alias_flag < 1:
|
|
259
|
-
SOCCA_opt["Period_class"] =
|
|
265
|
+
SOCCA_opt["Period_class"] = 1 # True
|
|
260
266
|
else:
|
|
261
|
-
SOCCA_opt["Period_class"] =
|
|
267
|
+
SOCCA_opt["Period_class"] = 0 # Alias
|
|
262
268
|
SOCCA_opt["Nbs"] = Nbs
|
|
263
269
|
except Exception:
|
|
264
|
-
SOCCA_opt["Period_class"] =
|
|
270
|
+
SOCCA_opt["Period_class"] = -1 # Classification error
|
|
271
|
+
SOCCA_opt["prms"] = p_rms
|
|
272
|
+
SOCCA_opt["k_terms"] = k_val
|
|
265
273
|
except Exception:
|
|
266
|
-
SOCCA_opt = {"Failed at SOCCA inversion":
|
|
274
|
+
SOCCA_opt = {"Failed at SOCCA inversion": 1}
|
|
267
275
|
return SOCCA_opt
|
|
268
276
|
else:
|
|
269
277
|
period_si_t, alt_period_si_t, _ = utils.estimate_sidereal_period(
|
|
@@ -123,7 +123,7 @@ def get_period_estimate(residuals_dataframe, p_min=0.03, p_max=2):
|
|
|
123
123
|
|
|
124
124
|
|
|
125
125
|
def get_multiterm_period_estimate(
|
|
126
|
-
residuals_dataframe, p_min=0.03, p_max=2, k_free=True, k_val=None
|
|
126
|
+
residuals_dataframe, p_min=0.03, p_max=2, k_free=True, k_val=None, k_max=4
|
|
127
127
|
):
|
|
128
128
|
"""
|
|
129
129
|
Estimate the period of a multiband time series using a multiband Lomb-Scargle model.
|
|
@@ -148,7 +148,8 @@ def get_multiterm_period_estimate(
|
|
|
148
148
|
If True, automatically scan multiple base-term complexities to choose optimal model. Default True.
|
|
149
149
|
k_val : int, optional
|
|
150
150
|
Fixed number of base terms to use if `k_free=False`. Default None.
|
|
151
|
-
|
|
151
|
+
k_max : int
|
|
152
|
+
Maximum number of terms to use for the multiterm LS periodogram. Default 4
|
|
152
153
|
Returns
|
|
153
154
|
-------
|
|
154
155
|
tuple
|
|
@@ -175,7 +176,7 @@ def get_multiterm_period_estimate(
|
|
|
175
176
|
residuals = np.zeros(len(residuals_dataframe["filters"].values))
|
|
176
177
|
bands = np.unique(residuals_dataframe["filters"].values)
|
|
177
178
|
if k_free:
|
|
178
|
-
for k in range(1,
|
|
179
|
+
for k in range(1, k_max + 1):
|
|
179
180
|
model = LombScargleMultiband(
|
|
180
181
|
residuals_dataframe["jd"].values,
|
|
181
182
|
residuals_dataframe["residuals"].values,
|
|
@@ -459,6 +459,22 @@ def detect_local_minima(arr):
|
|
|
459
459
|
return np.where(detected_minima)
|
|
460
460
|
|
|
461
461
|
def trumpet(peak_diff_1, f_feat, f_obs):
|
|
462
|
+
"""
|
|
463
|
+
Implementation of the alias/true flagging algorithm.
|
|
464
|
+
|
|
465
|
+
Parameters
|
|
466
|
+
----------
|
|
467
|
+
peak_diff_1 : float
|
|
468
|
+
The difference between the 2nd and 3rd highest peaks of the periodogram
|
|
469
|
+
f_feat : float
|
|
470
|
+
The feature frequency.
|
|
471
|
+
f_obs : float
|
|
472
|
+
The 1st highest peak if the periodogram
|
|
473
|
+
Returns
|
|
474
|
+
-------
|
|
475
|
+
The assumed true frequency peak difference value if the peak is true,
|
|
476
|
+
otherwise zero.
|
|
477
|
+
"""
|
|
462
478
|
if peak_diff_1 > 0 and f_obs > f_feat:
|
|
463
479
|
return 2 * f_feat
|
|
464
480
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: asteroid_spinprops
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: Collection of tools used for fitting sHG1G2 and SOCCA photometric models to sparse asteroid photometry
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Odysseas
|
|
@@ -111,13 +111,13 @@ pdf["jd_ltc"] = pdf["cjd"] - pdf["Observer_SSO_distance_column"] / c_kmday # li
|
|
|
111
111
|
|
|
112
112
|
Your input DataFrame must therefore include:
|
|
113
113
|
|
|
114
|
-
- time of observation
|
|
115
|
-
- PSF magnitude and uncertainty
|
|
116
|
-
- filter ID
|
|
117
|
-
- RA, Dec
|
|
118
|
-
- phase angle
|
|
119
|
-
- heliocentric distance
|
|
120
|
-
- observer-centric distance
|
|
114
|
+
- time of observation (JD)
|
|
115
|
+
- PSF magnitude and uncertainty
|
|
116
|
+
- filter ID
|
|
117
|
+
- RA, Dec (Degrees)
|
|
118
|
+
- phase angle
|
|
119
|
+
- heliocentric distance (AU)
|
|
120
|
+
- observer-centric distance (AU)
|
|
121
121
|
|
|
122
122
|
The preprocessing step renames these fields to the Fink schema, computes reduced magnitudes, and applies the light-time correction to the observation timestamps.
|
|
123
123
|
|
|
@@ -138,10 +138,23 @@ numeric_filter = inv + 1
|
|
|
138
138
|
pdf_s["cfid"].values[0] = numeric_filter
|
|
139
139
|
|
|
140
140
|
# --- Data cleaning and filtering ---
|
|
141
|
-
clean_data, errorbar_rejects = dataprep.errorbar_filtering(data=pdf_s, mlimit=0.7928)
|
|
141
|
+
clean_data, errorbar_rejects = dataprep.errorbar_filtering(data=pdf_s, mlimit=0.7928) # mag limit from the LCDB
|
|
142
142
|
clean_data, projection_rejects = dataprep.projection_filtering(data=clean_data)
|
|
143
143
|
clean_data, iterative_rejects = dataprep.iterative_filtering(data=clean_data)
|
|
144
144
|
|
|
145
|
+
# --- Fit SOCCA ---
|
|
146
|
+
SOCCA_params = modelfit.get_fit_params(
|
|
147
|
+
data=clean_data,
|
|
148
|
+
flavor="SOCCA",
|
|
149
|
+
shg1g2_constrained=True,
|
|
150
|
+
pole_blind=False,
|
|
151
|
+
period_blind=True,
|
|
152
|
+
period_in=None,
|
|
153
|
+
period_quality_flag=True
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
## --- Or step-by-step --- ##
|
|
145
158
|
# --- Fit SHG1G2 model ---
|
|
146
159
|
shg1g2_params = modelfit.get_fit_params(
|
|
147
160
|
data=clean_data,
|
|
@@ -167,13 +180,15 @@ _, Nbs = periodest.perform_residual_resampling(
|
|
|
167
180
|
k=int(k_val)
|
|
168
181
|
)
|
|
169
182
|
|
|
170
|
-
# --- Fit
|
|
183
|
+
# --- Fit SOCCA model ---
|
|
171
184
|
SOCCA_params = modelfit.get_fit_params(
|
|
172
185
|
data=clean_data,
|
|
173
186
|
flavor="SSHG1G2",
|
|
174
187
|
shg1g2_constrained=True,
|
|
175
|
-
|
|
188
|
+
period_blind=False,
|
|
189
|
+
pole_blind=False,
|
|
176
190
|
period_in=p_in,
|
|
191
|
+
period_quality_flag=False
|
|
177
192
|
)
|
|
178
193
|
```
|
|
179
194
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
asteroid_spinprops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
asteroid_spinprops/ssolib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
asteroid_spinprops/ssolib/dataprep.py,sha256=7PfkVNpLjPERkhr8dZQfN8haFCFmoeXB3fWuTSBLVuc,7848
|
|
4
|
+
asteroid_spinprops/ssolib/modelfit.py,sha256=mEuCiUKivGOpLUPxBuP1E4yaWXcZtsFKpgS6Frose2g,20223
|
|
5
|
+
asteroid_spinprops/ssolib/periodest.py,sha256=iql2HhpxN6dFwRmNchomv2m4M_JPULNrHLz5fvc5zYY,13330
|
|
6
|
+
asteroid_spinprops/ssolib/ssptools.py,sha256=DlSgYtXenztRAtEV9d4itzp5OZMjkbXkW2yZ_Qumu4U,4490
|
|
7
|
+
asteroid_spinprops/ssolib/utils.py,sha256=Na0EAgCCeBrvY3-KwfU7PuaoDGLjw5jGP9oi19lY490,13344
|
|
8
|
+
asteroid_spinprops-1.2.2.dist-info/METADATA,sha256=5LhKQ7oWPxdDet1X5oBH--ijlMhcF7GQiP3NhHh3uCU,6143
|
|
9
|
+
asteroid_spinprops-1.2.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
10
|
+
asteroid_spinprops-1.2.2.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
asteroid_spinprops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
asteroid_spinprops/ssolib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
asteroid_spinprops/ssolib/dataprep.py,sha256=7PfkVNpLjPERkhr8dZQfN8haFCFmoeXB3fWuTSBLVuc,7848
|
|
4
|
-
asteroid_spinprops/ssolib/modelfit.py,sha256=-EA0Ha0fUh9CPqqh_f9kuoZWTVmSP-XMITUHJ3OsCy4,19698
|
|
5
|
-
asteroid_spinprops/ssolib/periodest.py,sha256=kDWEB0fPRd5paqxNjJmigsocrAd4rydYLwxNh5sMV2U,13216
|
|
6
|
-
asteroid_spinprops/ssolib/ssptools.py,sha256=DlSgYtXenztRAtEV9d4itzp5OZMjkbXkW2yZ_Qumu4U,4490
|
|
7
|
-
asteroid_spinprops/ssolib/utils.py,sha256=Cv1TYSaUsWLbeQyrdqou6YnrPv4VijDP6GB9HAXtzKA,12902
|
|
8
|
-
asteroid_spinprops-1.2.0.dist-info/METADATA,sha256=6j5gC6L3ptLRtFfAQIDUQfuY5y6LmLGOiao0VsMdi48,5635
|
|
9
|
-
asteroid_spinprops-1.2.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
10
|
-
asteroid_spinprops-1.2.0.dist-info/RECORD,,
|
|
File without changes
|