astro-nest 0.5.0__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.
- NEST/NEST.py +412 -0
- NEST/__init__.py +1 -0
- NEST/domain.pkl +0 -0
- NEST/models/BaSTI.sav +0 -0
- NEST/models/BaSTI2.sav +0 -0
- NEST/models/BaSTI2_BPRP.sav +0 -0
- NEST/models/BaSTI_BPRP.sav +0 -0
- NEST/models/Dartmouth.sav +0 -0
- NEST/models/Dartmouth_BPRP.sav +0 -0
- NEST/models/MIST.sav +0 -0
- NEST/models/MIST_BPRP.sav +0 -0
- NEST/models/NN_BaSTI.json +1 -0
- NEST/models/NN_BaSTI.sav +0 -0
- NEST/models/NN_BaSTI.sav.old +0 -0
- NEST/models/NN_BaSTI_BPRP.json +1 -0
- NEST/models/NN_BaSTI_BPRP.sav +0 -0
- NEST/models/NN_BaSTI_HST_BPRP.json +1 -0
- NEST/models/NN_BaSTI_HST_BPRP.sav +0 -0
- NEST/models/NN_BaSTI_HST_alpha_zero_BPRP.json +1 -0
- NEST/models/NN_BaSTI_HST_alpha_zero_BPRP.sav +0 -0
- NEST/models/NN_BaSTI_cut.json +1 -0
- NEST/models/NN_BaSTI_cut.sav +0 -0
- NEST/models/NN_BaSTI_cut_BPRP.json +1 -0
- NEST/models/NN_BaSTI_cut_BPRP.sav +0 -0
- NEST/models/NN_Dartmouth.json +1 -0
- NEST/models/NN_Dartmouth.sav +0 -0
- NEST/models/NN_Dartmouth_BPRP.json +1 -0
- NEST/models/NN_Dartmouth_BPRP.sav +0 -0
- NEST/models/NN_MIST.json +1 -0
- NEST/models/NN_MIST.sav +0 -0
- NEST/models/NN_MIST_BPRP.json +1 -0
- NEST/models/NN_MIST_BPRP.sav +0 -0
- NEST/models/NN_PARSEC.json +1 -0
- NEST/models/NN_PARSEC.sav +0 -0
- NEST/models/NN_PARSEC_BPRP.json +1 -0
- NEST/models/NN_PARSEC_BPRP.sav +0 -0
- NEST/models/NN_SYCLIST.json +1 -0
- NEST/models/NN_SYCLIST.sav +0 -0
- NEST/models/NN_SYCLIST_BPRP.json +1 -0
- NEST/models/NN_SYCLIST_BPRP.sav +0 -0
- NEST/models/NN_YaPSI.json +1 -0
- NEST/models/NN_YaPSI.sav +0 -0
- NEST/models/NN_YaPSI_BPRP.json +1 -0
- NEST/models/NN_YaPSI_BPRP.sav +0 -0
- NEST/models/PARSEC.sav +0 -0
- NEST/models/PARSEC_BPRP.sav +0 -0
- NEST/models/SYCLIST.sav +0 -0
- NEST/models/SYCLIST_BPRP.sav +0 -0
- NEST/models/YaPSI.sav +0 -0
- NEST/models/YaPSI_BPRP.sav +0 -0
- NEST/models/scaler_BaSTI.sav +0 -0
- NEST/models/scaler_BaSTI_BPRP.sav +0 -0
- NEST/models/scaler_BaSTI_BPRP_cut.sav +0 -0
- NEST/models/scaler_BaSTI_HST_BPRP.sav +0 -0
- NEST/models/scaler_BaSTI_HST_alpha_zero_BPRP.sav +0 -0
- NEST/models/scaler_BaSTI_cut.sav +0 -0
- NEST/models/scaler_BaSTI_cut_BPRP.sav +0 -0
- NEST/models/scaler_Dartmouth.sav +0 -0
- NEST/models/scaler_Dartmouth_BPRP.sav +0 -0
- NEST/models/scaler_MIST.sav +0 -0
- NEST/models/scaler_MIST_BPRP.sav +0 -0
- NEST/models/scaler_PARSEC.sav +0 -0
- NEST/models/scaler_PARSEC_BPRP.sav +0 -0
- NEST/models/scaler_SYCLIST.sav +0 -0
- NEST/models/scaler_SYCLIST_BPRP.sav +0 -0
- NEST/models/scaler_YaPSI.sav +0 -0
- NEST/models/scaler_YaPSI_BPRP.sav +0 -0
- NEST/tutorial.ipynb +566 -0
- astro_nest-0.5.0.dist-info/METADATA +25 -0
- astro_nest-0.5.0.dist-info/RECORD +72 -0
- astro_nest-0.5.0.dist-info/WHEEL +5 -0
- astro_nest-0.5.0.dist-info/top_level.txt +1 -0
NEST/tutorial.ipynb
ADDED
@@ -0,0 +1,566 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"# NEST\n",
|
8
|
+
"**NEST** (**N**eural network **E**stimator of **S**tellar **T**imes) is a python package designed to make the use of pre-trained neural networks for stellar age estimation easy.\n",
|
9
|
+
"\n",
|
10
|
+
"It is based on the paper [Boin et al. 2025](https://www.aanda.org/articles/aa/pdf/2024/12/aa51486-24.pdf).\n",
|
11
|
+
"\n",
|
12
|
+
"With it, you can estimate the ages of stars based on their position in the Color-Magnitude Diagram and their metallicity. It contains a suite of Neural Networks trained on different stellar evolutionary grids. If observational uncertainties are provided, it can compute age uncertainties."
|
13
|
+
]
|
14
|
+
},
|
15
|
+
{
|
16
|
+
"cell_type": "code",
|
17
|
+
"execution_count": null,
|
18
|
+
"metadata": {
|
19
|
+
"tags": [
|
20
|
+
"remove-output"
|
21
|
+
]
|
22
|
+
},
|
23
|
+
"outputs": [],
|
24
|
+
"source": [
|
25
|
+
"import NEST"
|
26
|
+
]
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"cell_type": "markdown",
|
30
|
+
"metadata": {},
|
31
|
+
"source": [
|
32
|
+
"# List of available models\n",
|
33
|
+
"Each model is a neural network trained on a different evolutionary stellar grid."
|
34
|
+
]
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"cell_type": "code",
|
38
|
+
"execution_count": 2,
|
39
|
+
"metadata": {},
|
40
|
+
"outputs": [
|
41
|
+
{
|
42
|
+
"name": "stdout",
|
43
|
+
"output_type": "stream",
|
44
|
+
"text": [
|
45
|
+
"BaSTIModel (http://basti-iac.oa-abruzzo.inaf.it/)\n",
|
46
|
+
"PARSECModel (https://stev.oapd.inaf.it/PARSEC/)\n",
|
47
|
+
"MISTModel (https://waps.cfa.harvard.edu/MIST/)\n",
|
48
|
+
"GenevaModel (https://www.unige.ch/sciences/astro/evolution/en/database/syclist)\n",
|
49
|
+
"DartmouthModel (https://rcweb.dartmouth.edu/stellar/)\n",
|
50
|
+
"YaPSIModel (http://www.astro.yale.edu/yapsi/)\n"
|
51
|
+
]
|
52
|
+
}
|
53
|
+
],
|
54
|
+
"source": [
|
55
|
+
"NEST.available_models()"
|
56
|
+
]
|
57
|
+
},
|
58
|
+
{
|
59
|
+
"cell_type": "markdown",
|
60
|
+
"metadata": {},
|
61
|
+
"source": [
|
62
|
+
"# Load BaSTI model\n",
|
63
|
+
"By default, the age models use sklearn to run the neural networks. If you do not have it installed, or don't want to use it, you can pass the argument `use_sklearn=False` to switch to a numpy version..\n",
|
64
|
+
"\n",
|
65
|
+
"<div class=\"alert alert-block alert-info\">\n",
|
66
|
+
"Be aware though, in this mode it becomes significantly slower once you run the models on more than ~100 stars\n",
|
67
|
+
"</div>"
|
68
|
+
]
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"cell_type": "code",
|
72
|
+
"execution_count": 4,
|
73
|
+
"metadata": {},
|
74
|
+
"outputs": [],
|
75
|
+
"source": [
|
76
|
+
"age_model = NEST.BaSTIModel(use_tqdm=False)\n",
|
77
|
+
"#age_model = NNSA.BaSTIModel(use_sklearn=False)"
|
78
|
+
]
|
79
|
+
},
|
80
|
+
{
|
81
|
+
"cell_type": "markdown",
|
82
|
+
"metadata": {},
|
83
|
+
"source": [
|
84
|
+
"# Estimate the age of a single star using [Fe/H],mag,col\n",
|
85
|
+
"To estimate the age of a star, use the `ages_prediction()` method, and pass it a metallicity met, magnitude mag and color col. Note that, with only these values provided, the return value is a np.array of shape (1,1). The reason will be clear if you check later uses. "
|
86
|
+
]
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"cell_type": "code",
|
90
|
+
"execution_count": 8,
|
91
|
+
"metadata": {},
|
92
|
+
"outputs": [
|
93
|
+
{
|
94
|
+
"data": {
|
95
|
+
"text/plain": [
|
96
|
+
"array([[1.72104573]])"
|
97
|
+
]
|
98
|
+
},
|
99
|
+
"execution_count": 8,
|
100
|
+
"metadata": {},
|
101
|
+
"output_type": "execute_result"
|
102
|
+
}
|
103
|
+
],
|
104
|
+
"source": [
|
105
|
+
"age_model.ages_prediction(met=0.0,mag=2.0,col=1.0)"
|
106
|
+
]
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"cell_type": "markdown",
|
110
|
+
"metadata": {},
|
111
|
+
"source": [
|
112
|
+
"You can use the `check_domain()` method to verify that the star is within the bounds of the isochrones points used for training the neural networks. The function only checks for this in the HR Diagram, so you pass it a metallicity met, magnitude mag and color col."
|
113
|
+
]
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"cell_type": "code",
|
117
|
+
"execution_count": 9,
|
118
|
+
"metadata": {},
|
119
|
+
"outputs": [
|
120
|
+
{
|
121
|
+
"data": {
|
122
|
+
"text/plain": [
|
123
|
+
"array([ True])"
|
124
|
+
]
|
125
|
+
},
|
126
|
+
"execution_count": 9,
|
127
|
+
"metadata": {},
|
128
|
+
"output_type": "execute_result"
|
129
|
+
}
|
130
|
+
],
|
131
|
+
"source": [
|
132
|
+
"age_model.check_domain(met=0.0,mag=2.0,col=1.0)"
|
133
|
+
]
|
134
|
+
},
|
135
|
+
{
|
136
|
+
"cell_type": "markdown",
|
137
|
+
"metadata": {},
|
138
|
+
"source": [
|
139
|
+
"# Estimate the age of a single star using [Fe/H],mag,col,GBP & GRP\n",
|
140
|
+
"If you are using Gaia magnitudes and colors, you can also pass the red GRP and blue GBP magnitudes separately as additional inputs. This generally results in better estimations."
|
141
|
+
]
|
142
|
+
},
|
143
|
+
{
|
144
|
+
"cell_type": "code",
|
145
|
+
"execution_count": 10,
|
146
|
+
"metadata": {
|
147
|
+
"tags": [
|
148
|
+
"hide-output"
|
149
|
+
]
|
150
|
+
},
|
151
|
+
"outputs": [
|
152
|
+
{
|
153
|
+
"data": {
|
154
|
+
"text/plain": [
|
155
|
+
"array([[1.34888727]])"
|
156
|
+
]
|
157
|
+
},
|
158
|
+
"execution_count": 10,
|
159
|
+
"metadata": {},
|
160
|
+
"output_type": "execute_result"
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"source": [
|
164
|
+
"age_model.ages_prediction(met=0.0,mag=2.0,col=1.0,GBP=2.0,GRP=1.0)"
|
165
|
+
]
|
166
|
+
},
|
167
|
+
{
|
168
|
+
"cell_type": "markdown",
|
169
|
+
"metadata": {},
|
170
|
+
"source": [
|
171
|
+
"# Estimate the age of multiple stars\n",
|
172
|
+
"If you pass lists of values of size N as inputs instead of single values, the return value of the `ages_prediction()` method will be a np.array of shape (N,1). Again, the reason for the 2D shape will be clear by checking later uses.\n",
|
173
|
+
"<div class=\"alert alert-block alert-success\">\n",
|
174
|
+
"If you have tqdm installed, you can display the progress of the age predictions. By default, this display is on, but you can turn it off when you initiate the age_model by passing the argument `use_tqdm=False`.\n",
|
175
|
+
"</div>"
|
176
|
+
]
|
177
|
+
},
|
178
|
+
{
|
179
|
+
"cell_type": "code",
|
180
|
+
"execution_count": null,
|
181
|
+
"metadata": {
|
182
|
+
"tags": [
|
183
|
+
"hide-output"
|
184
|
+
]
|
185
|
+
},
|
186
|
+
"outputs": [
|
187
|
+
{
|
188
|
+
"data": {
|
189
|
+
"text/plain": [
|
190
|
+
"array([[1.72104573],\n",
|
191
|
+
" [5.97925446]])"
|
192
|
+
]
|
193
|
+
},
|
194
|
+
"execution_count": 11,
|
195
|
+
"metadata": {},
|
196
|
+
"output_type": "execute_result"
|
197
|
+
}
|
198
|
+
],
|
199
|
+
"source": [
|
200
|
+
"age_model.ages_prediction(\n",
|
201
|
+
" met=[0.0,-1.0],\n",
|
202
|
+
" mag=[2.0,3.0],\n",
|
203
|
+
" col=[1.0,0.5]\n",
|
204
|
+
")"
|
205
|
+
]
|
206
|
+
},
|
207
|
+
{
|
208
|
+
"cell_type": "code",
|
209
|
+
"execution_count": null,
|
210
|
+
"metadata": {
|
211
|
+
"tags": [
|
212
|
+
"hide-output"
|
213
|
+
]
|
214
|
+
},
|
215
|
+
"outputs": [
|
216
|
+
{
|
217
|
+
"data": {
|
218
|
+
"text/plain": [
|
219
|
+
"array([[1.34888727],\n",
|
220
|
+
" [2.20902813]])"
|
221
|
+
]
|
222
|
+
},
|
223
|
+
"execution_count": 12,
|
224
|
+
"metadata": {},
|
225
|
+
"output_type": "execute_result"
|
226
|
+
}
|
227
|
+
],
|
228
|
+
"source": [
|
229
|
+
"age_model.ages_prediction(\n",
|
230
|
+
" met=[0.0,-1.0],\n",
|
231
|
+
" mag=[2.0,3.0],\n",
|
232
|
+
" col=[1.0,0.5],\n",
|
233
|
+
" GBP=[2.0,1.0],\n",
|
234
|
+
" GRP=[1.0,0.5]\n",
|
235
|
+
")"
|
236
|
+
]
|
237
|
+
},
|
238
|
+
{
|
239
|
+
"cell_type": "markdown",
|
240
|
+
"metadata": {},
|
241
|
+
"source": [
|
242
|
+
"You can also check if the stars are within the training domain all at once by passing lists of metallicity met, magnitude mag & col values col."
|
243
|
+
]
|
244
|
+
},
|
245
|
+
{
|
246
|
+
"cell_type": "code",
|
247
|
+
"execution_count": null,
|
248
|
+
"metadata": {
|
249
|
+
"tags": [
|
250
|
+
"hide-output"
|
251
|
+
]
|
252
|
+
},
|
253
|
+
"outputs": [
|
254
|
+
{
|
255
|
+
"data": {
|
256
|
+
"text/plain": [
|
257
|
+
"array([ True, True])"
|
258
|
+
]
|
259
|
+
},
|
260
|
+
"execution_count": 8,
|
261
|
+
"metadata": {},
|
262
|
+
"output_type": "execute_result"
|
263
|
+
}
|
264
|
+
],
|
265
|
+
"source": [
|
266
|
+
"age_model.check_domain(\n",
|
267
|
+
" met=[0.0,-1.0],\n",
|
268
|
+
" mag=[2.0,3.0],\n",
|
269
|
+
" col=[1.0,0.5]\n",
|
270
|
+
")"
|
271
|
+
]
|
272
|
+
},
|
273
|
+
{
|
274
|
+
"cell_type": "markdown",
|
275
|
+
"metadata": {},
|
276
|
+
"source": [
|
277
|
+
"That way, you can crossmatch both outputs to only keep stars whose age estimates we can reliably trust:"
|
278
|
+
]
|
279
|
+
},
|
280
|
+
{
|
281
|
+
"cell_type": "code",
|
282
|
+
"execution_count": 13,
|
283
|
+
"metadata": {},
|
284
|
+
"outputs": [
|
285
|
+
{
|
286
|
+
"name": "stdout",
|
287
|
+
"output_type": "stream",
|
288
|
+
"text": [
|
289
|
+
"[[1.34888727]\n",
|
290
|
+
" [2.20902813]\n",
|
291
|
+
" [3.38402904]\n",
|
292
|
+
" [6.08718654]]\n",
|
293
|
+
"[ True True True False]\n",
|
294
|
+
"[[1.34888727]\n",
|
295
|
+
" [2.20902813]\n",
|
296
|
+
" [3.38402904]]\n"
|
297
|
+
]
|
298
|
+
}
|
299
|
+
],
|
300
|
+
"source": [
|
301
|
+
"met = [0.0,-1.0,-2.0,-3.0]\n",
|
302
|
+
"mag = [2.0,3.0,3.0,5.0]\n",
|
303
|
+
"col = [1.0,0.5,0.5,0.5]\n",
|
304
|
+
"GBP = [2.0,1.0,1.0,1.0]\n",
|
305
|
+
"GRP = [1.0,0.5,0.5,0.5]\n",
|
306
|
+
"ages = age_model.ages_prediction(met=met,mag=mag,col=col,GBP=GBP,GRP=GRP)\n",
|
307
|
+
"print(ages)\n",
|
308
|
+
"outside_domain = age_model.check_domain(met=met,mag=mag,col=col)\n",
|
309
|
+
"print(outside_domain)\n",
|
310
|
+
"ages = ages[outside_domain]#Only keep ages of stars within the training domain of the NN\n",
|
311
|
+
"print(ages)"
|
312
|
+
]
|
313
|
+
},
|
314
|
+
{
|
315
|
+
"cell_type": "markdown",
|
316
|
+
"metadata": {},
|
317
|
+
"source": [
|
318
|
+
"# Estimate the age of a single star with n=10 Monte Carlo realisations using uncertainties\n",
|
319
|
+
"If you have uncertainty values for a star, you can pass them to the `ages_prediction()` method by adding values for emet, emag & ecol. The idea is that multiple age predictions will be made by offsetting the star's metallicity met, magnitude mag & col col by adding a random gaussian offset of width (emet,emag,ecol). The number of realisations made is controlled by the parameter n. The output of the method will then be a np.array of shape (1,n)."
|
320
|
+
]
|
321
|
+
},
|
322
|
+
{
|
323
|
+
"cell_type": "code",
|
324
|
+
"execution_count": 14,
|
325
|
+
"metadata": {
|
326
|
+
"tags": [
|
327
|
+
"hide-output"
|
328
|
+
]
|
329
|
+
},
|
330
|
+
"outputs": [
|
331
|
+
{
|
332
|
+
"data": {
|
333
|
+
"text/plain": [
|
334
|
+
"array([[1.7256106 , 2.00334378, 1.85396521, 1.75088056, 1.9097981 ,\n",
|
335
|
+
" 1.6040866 , 1.65672647, 1.94882322, 1.99593322, 1.88873856]])"
|
336
|
+
]
|
337
|
+
},
|
338
|
+
"execution_count": 14,
|
339
|
+
"metadata": {},
|
340
|
+
"output_type": "execute_result"
|
341
|
+
}
|
342
|
+
],
|
343
|
+
"source": [
|
344
|
+
"age_model.ages_prediction(met=0.0,mag=2.0,col=1.0,emet=0.1,emag=0.05,ecol=0.05,n=10)"
|
345
|
+
]
|
346
|
+
},
|
347
|
+
{
|
348
|
+
"cell_type": "markdown",
|
349
|
+
"metadata": {},
|
350
|
+
"source": [
|
351
|
+
"Once the ages have been predicted for each star n times, you can call statistical methods `model.mean_ages()`, `model.median_ages()`, `model.mode_ages()` and `model.std_ages()`"
|
352
|
+
]
|
353
|
+
},
|
354
|
+
{
|
355
|
+
"cell_type": "code",
|
356
|
+
"execution_count": 20,
|
357
|
+
"metadata": {},
|
358
|
+
"outputs": [
|
359
|
+
{
|
360
|
+
"name": "stdout",
|
361
|
+
"output_type": "stream",
|
362
|
+
"text": [
|
363
|
+
"[1.68963035]\n",
|
364
|
+
"[1.68409769]\n",
|
365
|
+
"[1.60851594]\n",
|
366
|
+
"[0.09283736]\n"
|
367
|
+
]
|
368
|
+
}
|
369
|
+
],
|
370
|
+
"source": [
|
371
|
+
"print(age_model.mean_ages())\n",
|
372
|
+
"print(age_model.median_ages())\n",
|
373
|
+
"print(age_model.mode_ages())\n",
|
374
|
+
"print(age_model.std_ages())"
|
375
|
+
]
|
376
|
+
},
|
377
|
+
{
|
378
|
+
"cell_type": "markdown",
|
379
|
+
"metadata": {},
|
380
|
+
"source": [
|
381
|
+
"# Estimate the age of multiple stars with n=10 Monte Carlo realisations using uncertainties\n",
|
382
|
+
"Finally, you can combine multiple (N) stars age estimations and added uncertainties, with n Monte Carlo realisations. The output of the `ages_prediction()` method will then be a np.array of shape (N,n). A value of n=100 seems to be a good middle ground between speed and accurate predictions. If the number of stars is low, n>=1000 gives enough realisations to draw a PDF."
|
383
|
+
]
|
384
|
+
},
|
385
|
+
{
|
386
|
+
"cell_type": "code",
|
387
|
+
"execution_count": null,
|
388
|
+
"metadata": {
|
389
|
+
"tags": [
|
390
|
+
"hide-output"
|
391
|
+
]
|
392
|
+
},
|
393
|
+
"outputs": [
|
394
|
+
{
|
395
|
+
"data": {
|
396
|
+
"text/plain": [
|
397
|
+
"array([[1.71462611, 1.94582103, 1.89940169, 2.97884081, 2.08031333,\n",
|
398
|
+
" 1.58125759, 1.59831936, 1.83501568, 2.13068263, 1.74986554],\n",
|
399
|
+
" [5.20361322, 6.03242598, 6.830097 , 5.96518632, 6.54942971,\n",
|
400
|
+
" 3.71275077, 6.11190383, 4.557374 , 5.16837155, 5.88224765]])"
|
401
|
+
]
|
402
|
+
},
|
403
|
+
"execution_count": 15,
|
404
|
+
"metadata": {},
|
405
|
+
"output_type": "execute_result"
|
406
|
+
}
|
407
|
+
],
|
408
|
+
"source": [
|
409
|
+
"age_model.ages_prediction(\n",
|
410
|
+
" met=[0.0,-1.0],\n",
|
411
|
+
" mag=[2.0,3.0],\n",
|
412
|
+
" col=[1.0,0.5],\n",
|
413
|
+
" emet=[0.1,0.1],\n",
|
414
|
+
" emag=[0.05,0.05],\n",
|
415
|
+
" ecol=[0.05,0.05],\n",
|
416
|
+
" n=10\n",
|
417
|
+
")"
|
418
|
+
]
|
419
|
+
},
|
420
|
+
{
|
421
|
+
"cell_type": "code",
|
422
|
+
"execution_count": 22,
|
423
|
+
"metadata": {},
|
424
|
+
"outputs": [
|
425
|
+
{
|
426
|
+
"name": "stdout",
|
427
|
+
"output_type": "stream",
|
428
|
+
"text": [
|
429
|
+
"[1.80196219 5.54847086]\n",
|
430
|
+
"[1.67774137 5.32251073]\n",
|
431
|
+
"[1.6429014 4.87189199]\n",
|
432
|
+
"[0.32414629 0.85262662]\n"
|
433
|
+
]
|
434
|
+
}
|
435
|
+
],
|
436
|
+
"source": [
|
437
|
+
"print(age_model.mean_ages())\n",
|
438
|
+
"print(age_model.median_ages())\n",
|
439
|
+
"print(age_model.mode_ages())\n",
|
440
|
+
"print(age_model.std_ages())"
|
441
|
+
]
|
442
|
+
},
|
443
|
+
{
|
444
|
+
"cell_type": "markdown",
|
445
|
+
"metadata": {},
|
446
|
+
"source": [
|
447
|
+
"# Working with big datasets\n",
|
448
|
+
"In the event you are working with big datasets, you might not want to store every sampled age for every star, as you might run out of memory to store all this information.\n",
|
449
|
+
"In this case, you can pass the argument ` store_samples=False ` to the ` age_prediction() ` method. Instead of returning a (N,n) np.array, the method will return a dict with keys ` mean `, ` median `, ` mode ` and ` std `, which each contain a (N) np.array with the given statistical property.\n",
|
450
|
+
"\n",
|
451
|
+
"<div class=\"alert alert-block alert-info\">\n",
|
452
|
+
"Keep in mind this will cause a significant slowdown, as the statistical properties have to be computed for each star individually before discarding all its samples.\n",
|
453
|
+
"</div>"
|
454
|
+
]
|
455
|
+
},
|
456
|
+
{
|
457
|
+
"cell_type": "code",
|
458
|
+
"execution_count": null,
|
459
|
+
"metadata": {
|
460
|
+
"tags": [
|
461
|
+
"hide-output"
|
462
|
+
]
|
463
|
+
},
|
464
|
+
"outputs": [
|
465
|
+
{
|
466
|
+
"data": {
|
467
|
+
"text/plain": [
|
468
|
+
"{'mean': array([2.09471423, 6.01643673]),\n",
|
469
|
+
" 'median': array([1.75520015, 6.15407341]),\n",
|
470
|
+
" 'mode': array([1.75, 6.37]),\n",
|
471
|
+
" 'std': array([1.13576418, 0.7743602 ])}"
|
472
|
+
]
|
473
|
+
},
|
474
|
+
"execution_count": 16,
|
475
|
+
"metadata": {},
|
476
|
+
"output_type": "execute_result"
|
477
|
+
}
|
478
|
+
],
|
479
|
+
"source": [
|
480
|
+
"age_model.ages_prediction(\n",
|
481
|
+
" met=[0.0,-1.0],\n",
|
482
|
+
" mag=[2.0,3.0],\n",
|
483
|
+
" col=[1.0,0.5],\n",
|
484
|
+
" emet=[0.1,0.1],\n",
|
485
|
+
" emag=[0.05,0.05],\n",
|
486
|
+
" ecol=[0.05,0.05],\n",
|
487
|
+
" n=100,\n",
|
488
|
+
" store_samples=False\n",
|
489
|
+
")"
|
490
|
+
]
|
491
|
+
},
|
492
|
+
{
|
493
|
+
"cell_type": "markdown",
|
494
|
+
"metadata": {},
|
495
|
+
"source": [
|
496
|
+
"# Age model properties\n",
|
497
|
+
"- `age_model.samples` returns an (N,n,m) np.array of the latest samples used for the age predictions, if they were stored.\n",
|
498
|
+
"- `age_model.ages` returns an (N,n) np.array of the latest age predictions ran.\n",
|
499
|
+
"N : number of stars, n : number of samples, m : inputs dimension (3 if using metallicity,magnitude & color, 5 if using GBP & GRP in addition)."
|
500
|
+
]
|
501
|
+
},
|
502
|
+
{
|
503
|
+
"cell_type": "code",
|
504
|
+
"execution_count": 8,
|
505
|
+
"metadata": {},
|
506
|
+
"outputs": [
|
507
|
+
{
|
508
|
+
"data": {
|
509
|
+
"image/png": "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lQwaNIgbbrgBgMTERCZNmsSaNWuqPd9isWCxWCq/zsvLq6fohWh6esTG8t3NN/Pe+vXM372borIyYkNCuKlbN27u0cOnR1F0Xcem6xhV33+hF77J1Z2MZRfkBpabmwtAZGSk3XMGDhzIJ598wtq1a+nbty8HDx7kxx9/5Oabb672/OnTp/Pss882SLxCNEVtIiJ4ftQonh81Ck3XfX658fG8PN7ZuI6vdu2gqKyMyIAAJnVJ5bYevQj3D/B0eEI0KYrupTs8aZrGFVdcQU5ODitWrHB47htvvMHf/vY3dF3HarXy5z//mZkzZ1Z7bnUjKfHx8eTm5hIaGlqv34MQvirHUsyc/VuYf2gn+WUWksKiual9D4a3ateoO8juyTrNdV/OobC0tLIpHZRPX8WFhPLFtZNoFijLZpuyvLw8wsLCGvQ9o+I5nls7HP/guo8llBRYebLvrz79/ua1Iyn33HMP27dvrzFBWbp0KS+88AJvvfUW/fr1Y//+/TzwwAM899xzPPnkkxecbzabMZuleEsIew7kZnHdz7PJKimsbMOVXpjHkuMHuCKxE/8adDmGRjgFous69y/4/oIEBcq7ox7Pz+OZpb/yn0vHeShC0dTIdI+XJin33nsv33//PcuXLycuLs7huU8++SQ333wzt99+OwBdu3alsLCQO+64g//7v/9DbYQvpkI0FE3XuX3Jl2Rbiqr0Ca14055/eCddIltwR+d+ngmwAW3MSGffmSy7x226zsID+zhVWEizIBlNEcIdvOodXNd17r33XubNm8evv/5KmzZtanxMUVHRBYmIwWCovJ4QwnnL0w9xKD/7gpGEc72/ax22Gvqj+KKdp07VuNOJpuvsyTrtlniEsAE2FBduvs+rRlLuueceZs+ezbfffktISAgZGRkAhIWFERBQXrA2efJkWrVqxfTp0wEYN24cr776Kj169Kic7nnyyScZN25cZbIihHDO2sw0jIqKVbefhJwsLuB4YR6tQ8LdF5gbmAwGp3buNcnrinATme7xsiSlotj14osvrnL/rFmzuOWWWwA4evRolZGTJ554AkVReOKJJzh+/DjNmjVj3LhxPP/88+4KWwjRCAxpnYiqKGgORpHCzGa6tWjpxqhEUyYbDHpZkuLM9MzSpUurfG00Gnn66ad5+umnGygqIZqOvs3jeWv7KofntAgIplWQb64U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",
|
510
|
+
"text/plain": [
|
511
|
+
"<Figure size 640x480 with 2 Axes>"
|
512
|
+
]
|
513
|
+
},
|
514
|
+
"metadata": {},
|
515
|
+
"output_type": "display_data"
|
516
|
+
}
|
517
|
+
],
|
518
|
+
"source": [
|
519
|
+
"#Here is an example on how you can retrieve the samples\n",
|
520
|
+
"#of the age predictions to investigate individual predictions\n",
|
521
|
+
"age_model.ages_prediction(\n",
|
522
|
+
" met=[0.0,-1.0],\n",
|
523
|
+
" mag=[2.0,3.0],\n",
|
524
|
+
" col=[1.0,0.5],\n",
|
525
|
+
" emet=[0.1,0.1],\n",
|
526
|
+
" emag=[0.1,0.1],\n",
|
527
|
+
" ecol=[0.1,0.1],\n",
|
528
|
+
" n=100\n",
|
529
|
+
")\n",
|
530
|
+
"\n",
|
531
|
+
"star_i = 1#Select the second star\n",
|
532
|
+
"magnitudes = age_model.samples[star_i,:,1]\n",
|
533
|
+
"colors = age_model.samples[star_i,:,2]\n",
|
534
|
+
"ages = age_model.ages[star_i]\n",
|
535
|
+
"\n",
|
536
|
+
"import matplotlib.pyplot as plt\n",
|
537
|
+
"plt.scatter(colors,magnitudes,c=ages)\n",
|
538
|
+
"plt.colorbar(label='Age [Gyr]')\n",
|
539
|
+
"plt.xlabel(r'$G_{BP}$ - $G_{RP}$ [mag]')\n",
|
540
|
+
"plt.ylabel(r'$M_G$ [mag]')\n",
|
541
|
+
"plt.ylim(plt.ylim()[::-1]);"
|
542
|
+
]
|
543
|
+
}
|
544
|
+
],
|
545
|
+
"metadata": {
|
546
|
+
"kernelspec": {
|
547
|
+
"display_name": "Python 3",
|
548
|
+
"language": "python",
|
549
|
+
"name": "python3"
|
550
|
+
},
|
551
|
+
"language_info": {
|
552
|
+
"codemirror_mode": {
|
553
|
+
"name": "ipython",
|
554
|
+
"version": 3
|
555
|
+
},
|
556
|
+
"file_extension": ".py",
|
557
|
+
"mimetype": "text/x-python",
|
558
|
+
"name": "python",
|
559
|
+
"nbconvert_exporter": "python",
|
560
|
+
"pygments_lexer": "ipython3",
|
561
|
+
"version": "3.13.3"
|
562
|
+
}
|
563
|
+
},
|
564
|
+
"nbformat": 4,
|
565
|
+
"nbformat_minor": 2
|
566
|
+
}
|