In [1]:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
In [2]:
import os, sys; sys.path.append(os.path.abspath('..'))
from multiband_LS.generated import RRLyraeObject
from multiband_LS import LombScargle, LombScargleAstroML, LombScargleMultiband
lcids = list(RRLyraeObject.lcdata.ids)
In [3]:
def show_LS_fits(i=0, Nobs=40, rseed=0, dy=0.05):
lcid = lcids[i]
rng = np.random.RandomState(rseed)
rrlyrae = RRLyraeObject(lcid, random_state=rseed)
t = 300 * rng.rand(Nobs)
mags = np.array([rrlyrae.generated(band, t, err=dy, corrected=False)
for band in 'ugriz'])
periods = np.linspace(0.2, 0.9, 10000)
P = [LombScargleAstroML().fit(t, m, dy).periodogram(periods) for m in mags]
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
for i, band in enumerate('ugriz'):
ax[0].errorbar(t % rrlyrae.period, mags[i], dy, fmt='o', label=band)
ax[0].invert_yaxis()
ax[0].legend(loc='upper left', ncol=3)
ax[0].set_title('Folded Data (id={0})'.format(lcid))
for i, Pi in enumerate(P):
ax[1].plot(periods, Pi + i * 1, lw=0.5)
ax[1].set_title('Lomb-Scargle in Each Band')
ax[1].yaxis.set_major_formatter(plt.NullFormatter())
In [4]:
from IPython.html.widgets import interact, fixed
interact(show_LS_fits, i=(0, len(lcids) - 1), Nobs=(2, 100),
rseed=fixed(0), dy=fixed(0.05));
In [5]:
def show_LS_fits_multi(i=0, Nobs=60, rseed=0, dy=0.05):
lcid = lcids[i]
rng = np.random.RandomState(rseed)
rrlyrae = RRLyraeObject(lcid, random_state=rseed)
# Alternate between the five bands
t = 300 * rng.rand(Nobs)
filts = np.take(list('ugriz'), np.arange(Nobs), mode='wrap')
mags = np.array([rrlyrae.generated(band, t, err=dy, corrected=False)
for band in 'ugriz'])[np.arange(Nobs) % 5, np.arange(Nobs)]
periods = np.linspace(0.2, 0.9, 10000)
masks = [(filts == band) for band in 'ugriz']
P = [LombScargleAstroML().fit(t[mask], mags[mask], dy).periodogram(periods) for mask in masks]
P_multi = LombScargleMultiband(Nterms_base=1, Nterms_band=0).fit(t, mags, dy, filts).periodogram(periods)
fig, ax = plt.subplots(1, 3, figsize=(17, 4))
fig.subplots_adjust(wspace=0.1)
for band, mask in zip('ugriz', masks):
ax[0].errorbar(t[mask] % rrlyrae.period, mags[mask], dy, fmt='o', label=band)
ax[0].invert_yaxis()
ax[0].legend(loc='upper left', ncol=3)
ax[0].set_title('Folded Data')
for i, Pi in enumerate(P):
ax[1].plot(periods, Pi + i * 1, lw=0.5)
ax[1].set_title('Lomb-Scargle in Each Band')
ax[1].yaxis.set_major_formatter(plt.NullFormatter())
ax[2].plot(periods, P_multi, lw=0.5)
ax[2].set_title('multiband Lomb-Scargle')
ax[2].set_ylim(0, 1)
In [6]:
from IPython.html.widgets import interact, fixed
interact(show_LS_fits_multi, i=(0, len(lcids) - 1), Nobs=(2, 200),
rseed=fixed(0), dy=fixed(0.05));