An open-source tool

for stellar model fitting

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?

  1. Ask your adviser, who vaguely recommends that you "interpolate onto some model isochrones."
  2. Download some model isochrone grids.
  3. ​Wonder what you should do next…

Option A

~$ pip install isochrones

Option B

~$ 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, ...

Fits for: 

Observables: 

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

Multiple Star Systems

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']

Modeling resolved binaries

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

Modeling resolved binaries

Goal: widely-used, robust, community-supported tool  

  • Transparent and reproducible model-fitting methodology using principled probabilistic inference
  • Minimize "re-inventing the wheel"
  • Easily swap in/out model grids to test model dependence (Dartmouth & MIST currently available)

Caveats

  • 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?

Isochrones for "Know thy Star" 2017

By Tim Morton

Isochrones for "Know thy Star" 2017

A quick overview of my packages to streamline fitting of stellar parameters and transit false positive calculations.

  • 1,114