asteroid_spinprops 0.2.20__py3-none-any.whl → 0.2.22__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/.ruff_cache/.gitignore +2 -0
- asteroid_spinprops/ssolib/.ruff_cache/0.13.2/1980339045096230685 +0 -0
- asteroid_spinprops/ssolib/.ruff_cache/CACHEDIR.TAG +1 -0
- asteroid_spinprops/ssolib/periodest.py +127 -12
- {asteroid_spinprops-0.2.20.dist-info → asteroid_spinprops-0.2.22.dist-info}/METADATA +1 -1
- {asteroid_spinprops-0.2.20.dist-info → asteroid_spinprops-0.2.22.dist-info}/RECORD +7 -4
- {asteroid_spinprops-0.2.20.dist-info → asteroid_spinprops-0.2.22.dist-info}/WHEEL +0 -0
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Signature: 8a477f597d28d172789f06886806bc55
|
|
@@ -86,6 +86,109 @@ def get_period_estimate(residuals_dataframe, p_min=0.03, p_max=2):
|
|
|
86
86
|
)
|
|
87
87
|
|
|
88
88
|
|
|
89
|
+
def get_multiband_period_estimate(
|
|
90
|
+
residuals_dataframe, p_min=0.03, p_max=2, k_free=True, k_val=None
|
|
91
|
+
):
|
|
92
|
+
period_min, period_max = p_min, p_max
|
|
93
|
+
period_range = (period_min, period_max)
|
|
94
|
+
results = []
|
|
95
|
+
residuals = np.zeros(len(residuals_dataframe["filters"].values))
|
|
96
|
+
bands = np.unique(residuals_dataframe["filters"].values)
|
|
97
|
+
if k_free:
|
|
98
|
+
for k in range(1, 11):
|
|
99
|
+
model = LombScargleMultiband(
|
|
100
|
+
residuals_dataframe["jd"].values,
|
|
101
|
+
residuals_dataframe["residuals"].values,
|
|
102
|
+
residuals_dataframe["filters"].values,
|
|
103
|
+
residuals_dataframe["sigma"].values,
|
|
104
|
+
normalization="standard",
|
|
105
|
+
fit_mean=True,
|
|
106
|
+
nterms_base=k,
|
|
107
|
+
nterms_band=1,
|
|
108
|
+
)
|
|
109
|
+
frequency, power = model.autopower(
|
|
110
|
+
method="fast",
|
|
111
|
+
sb_method="fastnifty_chi2",
|
|
112
|
+
minimum_frequency=1 / period_range[1],
|
|
113
|
+
maximum_frequency=1 / period_range[0],
|
|
114
|
+
samples_per_peak=5,
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
f_best = frequency[np.argmax(power)]
|
|
118
|
+
y_model = model.model(
|
|
119
|
+
residuals_dataframe["jd"].values, f_best, bands_fit=bands
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# y_model.shape is (n_bands, len(time))
|
|
123
|
+
|
|
124
|
+
for n, f in enumerate(bands):
|
|
125
|
+
bindex = np.where(residuals_dataframe["filters"].values == f)
|
|
126
|
+
residuals[bindex] = (
|
|
127
|
+
residuals_dataframe["residuals"].values[bindex] - y_model[n][bindex]
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
rms = np.sqrt(np.mean(residuals**2))
|
|
131
|
+
n_params = 2 * k + 1 + 3 * len(bands)
|
|
132
|
+
dof = len(residuals) - n_params
|
|
133
|
+
|
|
134
|
+
results.append((k, f_best, rms, dof, n_params))
|
|
135
|
+
|
|
136
|
+
model_comparison = pd.DataFrame()
|
|
137
|
+
|
|
138
|
+
for i in range(len(results) - 1):
|
|
139
|
+
k, f_best, rss, dof, n_params = results[i]
|
|
140
|
+
k_next, f_best_next, rss_next, dof_next, n_params_next = results[i + 1]
|
|
141
|
+
F = ((rss - rss_next) / (dof - dof_next)) / (rss_next / dof_next)
|
|
142
|
+
|
|
143
|
+
# Here crit = Fstat value for which model_2 (more complex) is in fact better than model_1 (less complex)
|
|
144
|
+
crit = f.ppf(
|
|
145
|
+
q=0.99,
|
|
146
|
+
dfn=n_params_next - n_params,
|
|
147
|
+
dfd=len(residuals) - n_params_next,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
model_comparison.loc[i, "k"] = k
|
|
151
|
+
model_comparison.loc[i, "k_next"] = k_next
|
|
152
|
+
model_comparison.loc[i, "f_best"] = f_best
|
|
153
|
+
model_comparison.loc[i, "Fstat"] = F
|
|
154
|
+
model_comparison.loc[i, "alpha_crit"] = crit
|
|
155
|
+
|
|
156
|
+
cond = model_comparison["Fstat"] > model_comparison["alpha_crit"]
|
|
157
|
+
model_comparison = model_comparison[
|
|
158
|
+
~cond
|
|
159
|
+
] # don't go for the more complex model
|
|
160
|
+
f_chosen = model_comparison[
|
|
161
|
+
model_comparison.k == model_comparison.k.min()
|
|
162
|
+
].f_best[0] # Simplest model
|
|
163
|
+
k_val = model_comparison[model_comparison.k == model_comparison.k.min()].k[
|
|
164
|
+
0
|
|
165
|
+
] # Simplest model
|
|
166
|
+
if not k_free:
|
|
167
|
+
model = LombScargleMultiband(
|
|
168
|
+
residuals_dataframe["jd"].values,
|
|
169
|
+
residuals_dataframe["residuals"].values,
|
|
170
|
+
residuals_dataframe["filters"].values,
|
|
171
|
+
residuals_dataframe["sigma"].values,
|
|
172
|
+
normalization="standard",
|
|
173
|
+
fit_mean=True,
|
|
174
|
+
nterms_base=k_val,
|
|
175
|
+
nterms_band=1,
|
|
176
|
+
)
|
|
177
|
+
frequency, power = model.autopower(
|
|
178
|
+
method="fast",
|
|
179
|
+
sb_method="fastnifty_chi2",
|
|
180
|
+
minimum_frequency=1 / period_range[1],
|
|
181
|
+
maximum_frequency=1 / period_range[0],
|
|
182
|
+
samples_per_peak=5,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
f_best = frequency[np.argmax(power)]
|
|
186
|
+
f_chosen = f_best
|
|
187
|
+
period_in = 2 * (1 / f_chosen)
|
|
188
|
+
|
|
189
|
+
return period_in, k_val
|
|
190
|
+
|
|
191
|
+
|
|
89
192
|
def plot_periodograms(signal, window, name=None, axis="frequency"):
|
|
90
193
|
if name is not None:
|
|
91
194
|
r = rocks.Rock(name, datacloud="spins")
|
|
@@ -231,18 +334,30 @@ def plot_periodograms(signal, window, name=None, axis="frequency"):
|
|
|
231
334
|
plt.tight_layout()
|
|
232
335
|
|
|
233
336
|
|
|
234
|
-
def perform_residual_resampling(resid_df):
|
|
235
|
-
|
|
236
|
-
|
|
337
|
+
def perform_residual_resampling(resid_df, p_min, p_max, k=1):
|
|
338
|
+
if k == 1:
|
|
339
|
+
sg, w, _ = get_period_estimate(resid_df)
|
|
340
|
+
Pog = 48 / sg[2][0] # in hours
|
|
237
341
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
cond = np.abs(Pog - Pbs) / Pog < 1e-2
|
|
246
|
-
Nbs = np.sum(np.ones(25)[cond])
|
|
342
|
+
# Bootstrap residuals:
|
|
343
|
+
Pbs = np.zeros(25)
|
|
344
|
+
for n in range(25):
|
|
345
|
+
BS_df = resid_df.sample(n=len(resid_df), replace=True)
|
|
346
|
+
sg, w, _ = get_period_estimate(BS_df)
|
|
347
|
+
Pbs[n] = 48 / sg[2][0]
|
|
247
348
|
|
|
349
|
+
cond = np.abs(Pog - Pbs) / Pog < 1e-2
|
|
350
|
+
Nbs = np.sum(np.ones(25)[cond])
|
|
351
|
+
if k > 1:
|
|
352
|
+
Pog = 24 / get_multiband_period_estimate(
|
|
353
|
+
resid_df, p_min=p_min, p_max=p_max, k_free=False, k_val=k
|
|
354
|
+
)
|
|
355
|
+
Pbs = np.zeros(25)
|
|
356
|
+
for n in range(25):
|
|
357
|
+
BS_df = resid_df.sample(n=len(resid_df), replace=True)
|
|
358
|
+
Pbs[n] = 24 / get_multiband_period_estimate(
|
|
359
|
+
BS_df, p_min=p_min, p_max=p_max, k_free=False, k_val=k
|
|
360
|
+
)
|
|
361
|
+
cond = np.abs(Pog - Pbs) / Pog < 1e-2
|
|
362
|
+
Nbs = np.sum(np.ones(25)[cond])
|
|
248
363
|
return BS_df, Nbs
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
asteroid_spinprops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
asteroid_spinprops/ssolib/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
|
|
3
|
+
asteroid_spinprops/ssolib/.ruff_cache/0.13.2/1980339045096230685,sha256=sdFMPj-MpFBvqh6kNKbA3DLSABPaYn625V6O9z99A5U,99
|
|
4
|
+
asteroid_spinprops/ssolib/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
|
|
2
5
|
asteroid_spinprops/ssolib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
6
|
asteroid_spinprops/ssolib/dataprep.py,sha256=s4bXDCU15IsdIg9uLwFuO2VEGCxewrXkFIQolG8mKao,18716
|
|
4
7
|
asteroid_spinprops/ssolib/modelfit.py,sha256=uPtWthzuiYVbabxIy_osQkKZQ6v6G8KYhY0nrMpJpy8,18826
|
|
5
|
-
asteroid_spinprops/ssolib/periodest.py,sha256=
|
|
8
|
+
asteroid_spinprops/ssolib/periodest.py,sha256=9OhjMwiawdjA_p3XaaTU9EFbWQvLtEv5v4cYjmWq6vk,11026
|
|
6
9
|
asteroid_spinprops/ssolib/pipetools.py,sha256=DNu4mg8M69c2SHc2KHR5lsshNdsskeB7vNsZad_H0mo,5338
|
|
7
10
|
asteroid_spinprops/ssolib/ssptools.py,sha256=DlSgYtXenztRAtEV9d4itzp5OZMjkbXkW2yZ_Qumu4U,4490
|
|
8
11
|
asteroid_spinprops/ssolib/testing/atlas_x_ztf_testing/test_pqfile_1.parquet,sha256=qVTCAlpBZLNxCwuKAMwKdjh9yeHFvfrQcr-ebFMQOVI,56455
|
|
@@ -23,6 +26,6 @@ asteroid_spinprops/ssolib/testing/ephemeris_testing/Poullain,sha256=_KgyYqgy01zK
|
|
|
23
26
|
asteroid_spinprops/ssolib/testing/ephemeris_testing/Sonneberga,sha256=ER9ysLNa0kpGP78jM4SpHLLIbHpiDlIAXJ88eqw3gRU,700347
|
|
24
27
|
asteroid_spinprops/ssolib/testing/testing_ssoname_keys.pkl,sha256=-gnpow_I4uTpPXlF9sLcVJ2YixWp5YXJHkVHIMjtOzo,241
|
|
25
28
|
asteroid_spinprops/ssolib/utils.py,sha256=Re8VQMikHFxGX9PPnIGTPBuwJvuX6pMyujaNnfSCwVE,12390
|
|
26
|
-
asteroid_spinprops-0.2.
|
|
27
|
-
asteroid_spinprops-0.2.
|
|
28
|
-
asteroid_spinprops-0.2.
|
|
29
|
+
asteroid_spinprops-0.2.22.dist-info/METADATA,sha256=Z9SNXT7wrb9SqBs1G1iUpUXy4aldyVDSvkkotYXo1yE,2831
|
|
30
|
+
asteroid_spinprops-0.2.22.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
31
|
+
asteroid_spinprops-0.2.22.dist-info/RECORD,,
|
|
File without changes
|