Source code for libra.systems

import json
import os
import batman
import numpy as np
from copy import deepcopy
systems_json_path = os.path.join(os.path.dirname(__file__), 'data',
                                 'systems.json')
magnitudes_path = os.path.join(os.path.dirname(__file__), 'data', 'mags.json')
luminosities_path = os.path.join(os.path.dirname(__file__), 'data',
                                 'luminosities.json')

systems = json.load(open(systems_json_path))

__all__ = ['kepler296', 'kepler62', 'trappist1', 'transit_model', 'magnitudes',
           'luminosities', 'transit_duration', 'trappist1_all_transits',
           'mask_simultaneous_transits_trappist', 'trappist_out_of_transit',
           'k296_all_transits', 'mask_simultaneous_transits_k296',
           'mask_simultaneous_transits_k296', 'k62_all_transits', 'kepler1600']

magnitudes = json.load(open(magnitudes_path, 'r'))
luminosities = json.load(open(luminosities_path, 'r'))
supersample_factor = 3


def batman_generator(star, planet):
    p = batman.TransitParams()
    for attr, value in systems[star][planet].items():
        setattr(p, attr, value)
    return p


[docs]def kepler296(planet): """ Get planet properties. Parameters ---------- planet : str Planet in the system. Returns ------- params : `~batman.TransitParams` Transit parameters for planet ``planet`` """
return batman_generator('Kepler-296', planet)
[docs]def kepler62(planet): """ Get planet properties. Parameters ---------- planet : str Planet in the system. Returns ------- params : `~batman.TransitParams` Transit parameters for planet ``planet`` """
return batman_generator('Kepler-62', planet)
[docs]def trappist1(planet): """ Get planet properties. Parameters ---------- planet : str Planet in the system. Returns ------- params : `~batman.TransitParams` Transit parameters for planet ``planet`` """
return batman_generator('TRAPPIST-1', planet)
[docs]def kepler1600(planet): """ Get planet properties. Parameters ---------- planet : str Planet in the system. Returns ------- params : `~batman.TransitParams` Transit parameters for planet ``planet`` """
return batman_generator('Kepler-1600', planet)
[docs]def transit_model(t, params): """ Generate a transit model at times ``t`` for a planet with propertiesi ``params``. Parameters ---------- t : `~numpy.ndarray` Times in units of days params : `~batman.TransitParams()` Transiting planet parameter object Returns ------- fluxes : `~numpy.ndarray` Fluxes at times ``t`` """ m = batman.TransitModel(params, t, supersample_factor=supersample_factor, exp_time=t[1]-t[0]) flux = m.light_curve(params)
return flux
[docs]def transit_duration(params): """ Roughly approximate the transit duration from other parameters, assuming eccentricity = 0. Parameters ---------- params : `~batman.TransitParams()` Transiting planet parameter object Returns ------- duration : float Duration in units of days """ b = params.a * np.cos(np.radians(params.inc)) duration = (params.per / np.pi * np.arcsin(np.sqrt((1-params.rp)**2 - b**2) / params.a / np.sin(np.radians(params.inc))))
return duration
[docs]def trappist1_all_transits(times): from .spectra import nirspec_pixel_wavelengths, transmission_spectrum_depths wl = nirspec_pixel_wavelengths() all_transit_params = [trappist1(planet) for planet in list('bcdefgh')] all_transmission_depths = [transmission_spectrum_depths(planet) for planet in list('bcdefgh')] flux = np.ones((len(times), len(wl))) for params, depths in zip(all_transit_params, all_transmission_depths): for i, wavelength, depth in zip(range(len(wl)), wl, depths): transit_params = deepcopy(params) transit_params.rp = depth**0.5 m = batman.TransitModel(transit_params, times, supersample_factor=supersample_factor, exp_time=times[1]-times[0]) flux[:, i] += (m.light_curve(transit_params) - 1)
return flux
[docs]def k296_all_transits(times): from .spectra import nirspec_pixel_wavelengths wl = nirspec_pixel_wavelengths() all_transit_params = [kepler296(planet) for planet in list('bcdef')] flux = np.ones((len(times), len(wl))) for i, params in enumerate(all_transit_params): m = batman.TransitModel(params, times, supersample_factor=supersample_factor, exp_time=times[1]-times[0]) flux += (m.light_curve(params) - 1)[:, np.newaxis]
return flux
[docs]def k62_all_transits(times): from .spectra import nirspec_pixel_wavelengths wl = nirspec_pixel_wavelengths() all_transit_params = [kepler62(planet) for planet in list('bcdef')] flux = np.ones((len(times), len(wl))) for i, params in enumerate(all_transit_params): m = batman.TransitModel(params, times, supersample_factor=supersample_factor, exp_time=times[1]-times[0]) flux += (m.light_curve(params) - 1)[:, np.newaxis]
return flux
[docs]def mask_simultaneous_transits_trappist(times, planet): all_params = [trappist1(planet) for planet in list('bcdefgh'.replace(planet, ''))] fluxes = [] for params in all_params: m = batman.TransitModel(params, times) fluxes.append(m.light_curve(params)) mask = np.any(np.array(fluxes) != 1, axis=0)
return np.logical_not(mask)
[docs]def mask_simultaneous_transits_k296(times, planet): all_params = [kepler296(planet) for planet in list('bcdef'.replace(planet, ''))] fluxes = [] for params in all_params: m = batman.TransitModel(params, times) fluxes.append(m.light_curve(params)) mask = np.any(np.array(fluxes) != 1, axis=0)
return np.logical_not(mask) def mask_simultaneous_transits_k62(times, planet): all_params = [kepler62(planet) for planet in list('bcdef'.replace(planet, ''))] fluxes = [] for params in all_params: m = batman.TransitModel(params, times) fluxes.append(m.light_curve(params)) mask = np.any(np.array(fluxes) != 1, axis=0) return np.logical_not(mask)
[docs]def trappist_out_of_transit(times): all_params = [trappist1(planet) for planet in list('bcdefgh')] fluxes = [] for params in all_params: m = batman.TransitModel(params, times) fluxes.append(m.light_curve(params)) mask = np.all(np.array(fluxes) == 1, axis=0)
return mask