Skip to content

Commit

Permalink
Merge pull request #1158 from rzellem/develop
Browse files Browse the repository at this point in the history
v2.8.0: better treatment of missing parameters
  • Loading branch information
rzellem committed Feb 16, 2023
2 parents 3f73e8a + 1b3f886 commit d572176
Show file tree
Hide file tree
Showing 10 changed files with 2,929 additions and 188 deletions.
1,927 changes: 1,927 additions & 0 deletions examples/Multiple_Lightcurve_fit.ipynb

Large diffs are not rendered by default.

46 changes: 30 additions & 16 deletions examples/lc_fitter_unit_test.py
@@ -1,4 +1,4 @@
from exotic.exotic import LimbDarkening
from exotic.api.ld import LimbDarkening, test_ld
from exotic.api.elca import transit, lc_fitter
from ldtk.filters import create_tess
import matplotlib.pyplot as plt
Expand All @@ -11,32 +11,46 @@
'per': 3.33, # Period [day]
'inc': 88.5, # Inclination [deg]
'u0': 0, 'u1': 0, 'u2': 0, 'u3': 0, # limb darkening (nonlinear)
'ecc': 0.5, # Eccentricity
'omega': 120, # Arg of periastron
'ecc': 0.5, # Eccentricity
'omega': 120, # Arg of periastron
'tmid': 0.75, # Time of mid transit [day],
'a1': 50, # Airmass coefficients
'a2': 0., # trend = a1 * np.exp(a2 * airmass)

'teff':5000,
'tefferr':50,
'met': 0,
'meterr': 0,
'logg': 3.89,
'loggerr': 0.01
'T*':5000,
'FE/H': 0,
'LOGG': 3.89,
}

"""
# example generating LD coefficients
tessfilter = create_tess()
ld_obj = LimbDarkening(
teff=prior['teff'], teffpos=prior['tefferr'], teffneg=prior['tefferr'],
met=prior['met'], metpos=prior['meterr'], metneg=prior['meterr'],
logg=prior['logg'], loggpos=prior['loggerr'], loggneg=prior['loggerr'],
wl_min=tessfilter.wl.min(), wl_max=tessfilter.wl.max(), filter_type="Clear")
# Test custom-entered ld coefficients
filter_info = {
'filter': "TESS",
'wl_min': tessfilter.wl.min(),
'wl_max': tessfilter.wl.max(),
'u0': {"value": None, "uncertainty": None},
'u1': {"value": None, "uncertainty": None},
'u2': {"value": None, "uncertainty": None},
'u3': {"value": None, "uncertainty": None}
}
ld_obj = LimbDarkening(prior)
ld_obj.wl_min = filter_info['wl_min']
ld_obj.wl_max = filter_info['wl_max']
test_ld(ld_obj, filter_info)
ld = [ld_obj.ld0[0], ld_obj.ld1[0], ld_obj.ld2[0], ld_obj.ld3[0]]
prior['u0'],prior['u1'],prior['u2'],prior['u3'] = ld
"""

ld0, ld1, ld2, ld3, filt, wlmin, wlmax = ld_obj.nonlinear_ld()
from pylightcurve import exotethys

prior['u0'],prior['u1'],prior['u2'],prior['u3'] = [ld0[0], ld1[0], ld2[0], ld3[0]]
# generate limb darkening coefficients for TESS
get_prior = lambda key: float(prior[key])
u0,u1,u2,u3 = exotethys(get_prior('LOGG'), get_prior('T*'), get_prior('FE/H'), 'TESS', method='claret', stellar_model='phoenix')
prior['u0'],prior['u1'],prior['u2'],prior['u3'] = u0,u1,u2,u3

time = np.linspace(0.7, 0.8, 1000) # [day]

Expand Down
420 changes: 290 additions & 130 deletions exotic/api/elca.py

Large diffs are not rendered by default.

73 changes: 41 additions & 32 deletions exotic/api/ew.py
Expand Up @@ -67,8 +67,12 @@ def __init__(self,result) -> None:
self.observations.append(
ExoplanetWatchObservation(self.name, result['observations'][i]))

self.ephemeris['ephemeris_url'] = os.path.join(base_uri,
self.ephemeris['files']['file_oc_png'][2:])
try:
self.ephemeris['ephemeris_url'] = os.path.join(base_uri,
self.ephemeris['files']['file_oc_png'][2:])
except:
# 'files' usually don't exist if there is no ephemeris data
pass

def __str__(self) -> str:
return f"{self.name}: {self.reduction_count} light curves"
Expand Down Expand Up @@ -97,8 +101,8 @@ def __init__(self, name, observation) -> None:
self.obscode = observation['obscode']
self.identifier = observation['identifier']
self.secondary_obscodes = observation['secondary_obscodes']
self.errors = self.translate(check4floats(observation['errors']))
self.parameters = self.translate(check4floats(observation['parameters']))
self.errors = translate_keys(check4floats(observation['errors']))
self.parameters = translate_keys(check4floats(observation['parameters']))
self.lightcurve_url = os.path.join(base_uri,self.files['file_lc_png'][2:])
self.posterior_url = os.path.join(base_uri,self.files['file_po_png'][2:])

Expand Down Expand Up @@ -126,35 +130,40 @@ def get_data(self):
jdata = json.loads(r.read().decode(r.info().get_param('charset') or 'utf-8'))
return np.array(jdata[1:],dtype=np.float).T

def translate(self,rdict):
""" Translates the keys to a compatible format for EXOTIC/ELCA
Parameters
----------
rdict : dict
The dictionary of parameters
Returns
-------
lc_pars : dict
A dictionary with keys corresponding to exotic's lc format
"""
lc_pars = dict(rdict)
translate_keys = {
'Tc':'tmid',
'Am1': 'a1',
'Am2': 'a2',
'a/R*': 'ars',
'Rp/R*': 'rprs',
'Period': 'per'
}
for k in translate_keys:
if k in lc_pars:
lc_pars[translate_keys[k]] = lc_pars[k]
del lc_pars[k]
for k in lc_pars:
def translate_keys(rdict):
""" Translates the keys to a compatible format for EXOTIC/ELCA
Parameters
----------
rdict : dict
The dictionary of parameters
Returns
-------
lc_pars : dict
A dictionary with keys corresponding to exotic's lc format
"""
lc_pars = dict(rdict)
conversion_keys = {
'Tc':'tmid',
'Am1': 'a1',
'Am2': 'a2',
'a/R*': 'ars',
'Rp/R*': 'rprs',
'Period': 'per'
}
for k in conversion_keys:
if k in lc_pars:
lc_pars[conversion_keys[k]] = lc_pars[k]
del lc_pars[k]
for k in lc_pars:
if k.lower() == 'target':
continue
if isinstance(lc_pars[k],str):
lc_pars[k] = float(lc_pars[k])
return lc_pars
elif lc_pars[k] is None:
lc_pars[k] = np.nan
return lc_pars

if __name__ == "__main__":

Expand Down
6 changes: 5 additions & 1 deletion exotic/api/nea.py
Expand Up @@ -307,8 +307,12 @@ def _get_params(self, data):
rprserr = ((rperr / rs) ** 2 + (-rp * rserr / rs ** 2) ** 2) ** 0.5
rprs = rp / rs

if data['pl_ratdor'] < 1 or np.isnan(data['pl_ratdor']):
if data['pl_ratdor'] is None:
data['pl_ratdor'] = pow((data['pl_orbper'] / 365) ** 2, 1 / 3) / (data['st_rad'] * R_SUN.to('au')).value
elif data['pl_ratdor'] < 1 or np.isnan(data['pl_ratdor']):
data['pl_ratdor'] = pow((data['pl_orbper'] / 365) ** 2, 1 / 3) / (data['st_rad'] * R_SUN.to('au')).value
else:
print("WARNING: a/Rs can not be estimated from Nasa Exoplanet Archive. Please use an inits file instead.")

self.pl_dict = {
'ra': data['ra'],
Expand Down

0 comments on commit d572176

Please sign in to comment.