def make_transit_periodogram(t, y, dy=0.01): """ Plots a periodogram to determine likely period of planet transit candidtaes in a dataset, based on a box least squared method. """ model = BoxLeastSquares(t * u.day, y, dy=0.01) periodogram = model.autopower(0.2, objective="snr") plt.figure() plt.plot(periodogram.period, periodogram.power, 'k') plt.xlabel('Period [days]') plt.ylabel('Power') max_power_i = np.argmax(periodogram.power) best_fit = periodogram.period[max_power_i] print('Best Fit Period: {} days'.format(best_fit)) stats = model.compute_stats(periodogram.period[max_power_i], periodogram.duration[max_power_i], periodogram.transit_time[max_power_i]) return stats, best_fit
def get_bls_features(x, t): features = [] # print(x[0]) for i in range(x.shape[0]): # adapted from http://docs.astropy.org/en/stable/stats/bls.html#peak-statistics bls = BoxLeastSquares(t, x[i]) periodogram = bls.autopower( 40, minimum_n_transit=5 ) # arg is the granularity of considered durations max_power = np.argmax(periodogram.power) stats = bls.compute_stats(periodogram.period[max_power], periodogram.duration[max_power], periodogram.transit_time[max_power]) # TODO: use dataframe? features.append([stats[s][0] / stats[s][1] for s in stat_names]) # based on https://arxiv.org/pdf/astro-ph/0206099.pdf # ratios.append(stats["depth"][0] / stats["depth"][1]) # depth over uncertainty if (i + 1) % 10 == 0: print(".", end="") if (i + 1) % 500 == 0: print() print() return np.array(features)