isochrones
Timothy Morton (Princeton)
#knowthystar
Your local spectroscopist hands you some parameters, but you want to know stellar mass/radius. What do you do next?
~$ pip install isochrones
~$ ipython
In [1]: from isochrones.dartmouth import Dartmouth_Isochrone
In [2]: from isochrones import StarModel
In [3]: dar = Dartmouth_Isochrone()
In [4]: model = StarModel(dar, Teff=(5700, 100),
logg=(4.5, 0.1), feh=(0.0, 0.1))
In [5]: model.fit()
from python terminal/script:
Teff = 5700, 100
logg = 4.5, 0.1
feh = 0.0, 0.1
mystar/star.ini
$ starfit mystar
From command line:
mystar/star.ini
$ starfit mystar
Also:
Teff = 5700, 100
logg = 4.5, 0.1
feh = 0.0, 0.1
J = 8.71, 0.03
H = 8.39, 0.03
K = 8.34, 0.03
broadband
photometry --->
mass, age, feh, distance, A_V
spectroscopic properties, broadband photometry,
parallax (mas), stellar density, nu_max/delta_nu, ...
In [1]: from isochrones.mist import MIST_Isochrone
In [2]: mist = MIST_Isochrone()
In [3]: mass, age, feh = (1.0, 9.6, 0.0)
In [4]: mist.radius(mass, age, feh)
Out[4]: 1.0021006303717472
In [5]: mist.density(mass, age, feh)
Out[5]: 1.4009789196927942
In [6]: mist.delta_nu(mass, age, feh)
Out[6]: 134.45611369338567
In [7]: distance, AV = (100, 0.1)
In [8]: mist.mag['J'](mass, age, feh, distance, AV)
Out[8]: 8.659777868892867
mystar/star.ini
$ starfit mystar --binary
Teff = 5700, 100
logg = 4.5, 0.1
feh = 0.0, 0.1
J = 8.71, 0.03
H = 8.39, 0.03
K = 8.34, 0.03
In [1]: from isochrones import StarModel, get_ichrone
In [2]: dar = get_ichrone('dartmouth')
In [3]: props = dict(Teff=(5700, 100),
logg=(4.5, 0.1),
feh=(0.0, 0.1),
J=(8.72, 0.03),
H=(8.39, 0.03),
K=(8.34, 0.03))
In [4]: binary_model = BinaryStarModel(dar, **props)
In [5]: binary_model.fit()
In[7]: binary_model.print_ascii()
root
╚═ J=(8.72, 0.03) @(0.00, 0 [99.00])
╚═ H=(8.39, 0.03) @(0.00, 0 [99.00])
╚═ K=(8.34, 0.03) @(0.00, 0 [99.00])
╠═ 0_0, Teff=(5700, 100), logg=(4.5, 0.1), feh=(0.0, 0.1)
╚═ 0_1
What if you take an AO image and
resolve a binary system?
maxAV = 1.216
RA = 299.268036
dec = 45.227428
Teff = 4135, 98.0
feh = -0.46, 0.16
logg = 4.711, 0.1
[twomass]
J = 13.513, 0.02
H = 12.845, 0.02
K = 12.693, 0.02
[NIRC2]
resolution = 0.1
separation_1 = 0.6
PA_1 = 100
K_1 = 3.66, 0.05
H_1 = 3.77, 0.03
J_1 = 3.74, 0.05
my_binary/star.ini
In[1]: from isochrones import StarModel, get_ichrone
In[2]: mist = get_ichrone('mist')
In[3]: mod = StarModel.from_ini(mist, 'my_binary')
In[4]: mod.print_ascii()
root
╚═ twomass H=(12.85, 0.02) @(0.00, 0 [4.00])
╚═ twomass J=(13.51, 0.02) @(0.00, 0 [4.00])
╚═ twomass K=(12.69, 0.02) @(0.00, 0 [4.00])
╠═ NIRC2 delta-H=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ NIRC2 delta-J=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ NIRC2 delta-K=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ 0_0, Teff=[4135.0, 98.0], feh=[-0.46, 0.16], logg=[4.711, 0.1]
╚═ NIRC2 delta-H=(3.77, 0.03) @(0.60, 100 [0.10])
╚═ NIRC2 delta-J=(3.74, 0.05) @(0.60, 100 [0.10])
╚═ NIRC2 delta-K=(3.66, 0.05) @(0.60, 100 [0.10])
╚═ 0_1
In[5]: mod.param_names
['mass_0_0', 'mass_0_1', 'age_0', 'feh_0', 'distance_0', 'AV_0']
maxAV = 1.216
RA = 299.268036
dec = 45.227428
Teff = 4135, 98.0
feh = -0.46, 0.16
logg = 4.711, 0.1
[twomass]
J = 13.513, 0.02
H = 12.845, 0.02
K = 12.693, 0.02
[NIRC2]
resolution = 0.1
separation_1 = 0.6
PA_1 = 100
K_1 = 3.66, 0.05
H_1 = 3.77, 0.03
J_1 = 3.74, 0.05
my_binary/star.ini
In[6]: mod2 = StarModel.from_ini(mist, 'my_binary', index=[0,1])
In[7]: mod2.param_names
['mass_0_0','age_0','feh_0','distance_0','AV_0',
'mass_1_0','age_1','feh_1','distance_1','AV_1']
In[8]: mod2.print_ascii()
root
╚═ twomass H=(12.85, 0.02) @(0.00, 0 [4.00])
╚═ twomass J=(13.51, 0.02) @(0.00, 0 [4.00])
╚═ twomass K=(12.69, 0.02) @(0.00, 0 [4.00])
╠═ NIRC2 delta-H=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ NIRC2 delta-J=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ NIRC2 delta-K=(0.00, 0.01) @(0.00, 0 [0.10])
║ ╚═ 0_0, Teff=[4135.0, 98.0], feh=[-0.46, 0.16], logg=[4.711, 0.1]
╚═ NIRC2 delta-H=(3.77, 0.03) @(0.60, 100 [0.10])
╚═ NIRC2 delta-J=(3.74, 0.05) @(0.60, 100 [0.10])
╚═ NIRC2 delta-K=(3.66, 0.05) @(0.60, 100 [0.10])
╚═ 1_0
Model dependent (duh.)
Built-in MCMC fitting currently not very robust. Use MultiNest fitting backend for now.
No goodness-of-fit metric—beware of poor fits! (check diagnostic plots)
Linear interpolation may give unreliable results for signficiantly evolved stars.
Treatment of extinction will not be correct for high levels of extinction or very broad bands (e.g. Gaia G)
Version 1.1 is released!
(quick-fix for some nagging issues; stay tuned for more)
~$ pip install --upgrade isochrones
Please contribute!
I have a transit signal.
What is the probability it's an astrophysical false positive?
~$ pip install vespa
name = myplanet
ra = 296.003693
dec = 44.277561
rprs = 0.012585031528
period = 384.845905
photfile = myphotometry.csv
[constraints]
maxrad = 1.26
secthresh = 0.000120176767205
g = 13.8735234, 0.05
r = 13.3370844, 0.05
i = 13.1663488, 0.05
z = 13.1029807, 0.05
J = 12.263, 0.02
H = 11.919, 0.02
K = 11.852, 0.02
Kepler = 13.426
myplanet/star.ini
myplanet/fpp.ini
~$ calcfpp myplanet
*
What happened here?