def psearch(time, flux): freq,power,nout,jmax,prob = fasper(time, flux, 6, 0.5) period = 1./freq m = (period > 0.05) & (period < 35) period, freq, power = period[m], freq[m], power[m] j = np.argmax(power) expy = np.exp(-power) effm = 2.*nout/6 fap = expy*effm mfap = fap > 0.01 fap[mfap] = 1.0-(1.0-expy[mfap])**effm return period, power, fap, j
def psearch(time, flux, min_p, max_p): ''' Search for a statistically significant period using a Lomb-Scargle periodogram. ''' freq, power, nout, jmax, prob = fasper(time, flux, 6, 0.5) period = 1 / freq m = (period > min_p) & (period < max_p) period, power = period[m], power[m] j = argmax(power) expy = mt.exp(-power[j]) effm = 2 * nout / 6 fap = expy * effm if fap > 0.01: fap = 1.0 - (1.0 - expy)**effm return period[j], fap
ax[2].plot(time, (cflux-1)/sigma) ax[2].grid(axis='y') ax[3].plot(time[mask], N(flux[mask] - tp[mask], flux)) ax[3].plot(time[~mask], N(flux[~mask] - tp[~mask], flux), '.') setp(ax[2], ylabel='Normalised flux [$\sigma$]') setp(ax[3], ylabel='Normalised flux') nflux = flux - tp + nanmedian(tp) for split in dt.gp.splits: i = argmin(abs(time - split)) nflux[i:] += nanmedian(nflux[i-10:i]) - nanmedian(nflux[i:i+10]) ax[4].plot(time[mask], N(nflux[mask])) freq,power,nout,jmax,prob = fasper(time[mask], nflux[mask], 6, 0.5) period = 1./freq m = (period > 0.25) & (period < 25) period, freq, power = period[m], freq[m], power[m] j = argmax(power) expy = exp(-power) effm = 2.*nout/6 fap = expy*effm mfap = fap > 0.01 fap[mfap] = 1.0-(1.0-expy[mfap])**effm ax[5].semilogy(period, fap) setp(ax[5], ylabel='FAP', xlabel='Period [d]', xlim=(0,25)) print period[j], power[j], fap[j]