def generate_lc(self, pointing_index, n_days, gmag, S82index, random_state=None): gen = RRLyraeGenerated(self.S82data.ids[S82index], random_state=random_state) pointing = self.pointings[pointing_index] pointing = pointing[pointing['mjd'] <= pointing['mjd'].min() + n_days] t = pointing['mjd'] filts = pointing['filter'] m5 = pointing['m5'] # generate magnitudes; no errors mag = np.zeros_like(t) for i, filt in enumerate('ugrizy'): mask = (filts == i) # HACK: for y-band, use z-band template if filt == 'y': filt = 'z' mag[mask] = gen.generated(filt, t[mask]) # adjust mags to desired r-band mean gmag_mean = mag[filts == 1].mean() mag += (gmag - gmag_mean) # compute magnitude error from m5 (eq 5 of Ivezic 2014 LSST paper) gamma = np.array([0.037, 0.038, 0.039, 0.039, 0.040, 0.040]) x = 10 ** (0.4 * (mag - m5)) sig2_rand = (0.04 - gamma[filts]) * x + gamma[filts] * x ** 2 sig2_sys = 0.005 ** 2 dmag = np.sqrt(sig2_sys + sig2_rand) rng = np.random.RandomState(random_state) mag += dmag * rng.randn(len(mag)) return t, mag, dmag, filts
def generate_lc(self, pointing_index, n_days, gmag, S82index, random_state=None): gen = RRLyraeGenerated(self.S82data.ids[S82index], random_state=random_state) pointing = self.pointings[pointing_index] pointing = pointing[pointing['mjd'] <= pointing['mjd'].min() + n_days] t = pointing['mjd'] filts = pointing['filter'] m5 = pointing['m5'] # generate magnitudes; no errors mag = np.zeros_like(t) for i, filt in enumerate('ugrizy'): mask = (filts == i) # HACK: for y-band, use z-band template if filt == 'y': filt = 'z' mag[mask] = gen.generated(filt, t[mask]) # adjust mags to desired r-band mean gmag_mean = mag[filts == 1].mean() mag += (gmag - gmag_mean) # compute magnitude error from m5 (eq 5 of Ivezic 2014 LSST paper) gamma = np.array([0.037, 0.038, 0.039, 0.039, 0.040, 0.040]) x = 10**(0.4 * (mag - m5)) sig2_rand = (0.04 - gamma[filts]) * x + gamma[filts] * x**2 sig2_sys = 0.005**2 dmag = np.sqrt(sig2_sys + sig2_rand) rng = np.random.RandomState(random_state) mag += dmag * rng.randn(len(mag)) return t, mag, dmag, filts
print("Extinction A_r = {0:.4f}".format(rrlyrae.obsmeta['rExt'])) # Generate data in a 6-month observing season Nobs = 60 rng = np.random.RandomState(0) nights = np.arange(180) rng.shuffle(nights) nights = nights[:Nobs] # Find a subset of the simulated data. This is the same procedure as in # fig_multiband_sim t = 57000 + nights + 0.05 * rng.randn(Nobs) dy = 0.06 + 0.01 * rng.randn(Nobs) mags = np.array( [rrlyrae.generated(band, t, err=dy, corrected=False) for band in 'ugriz']) filts = np.array([f for f in 'ugriz']) # Here's our subset filts = np.take(list('ugriz'), np.arange(Nobs), mode='wrap') mags = mags[np.arange(Nobs) % 5, np.arange(Nobs)] masks = [(filts == band) for band in 'ugriz'] fig, ax = plt.subplots(5, sharex=True, sharey=True) fig.subplots_adjust(left=0.1, right=0.93, hspace=0.1) periods = np.linspace(0.2, 1.4, 1000) combos = [(1, 0), (0, 1), (2, 0), (2, 1), (2, 2)] for axi, (Nbase, Nband) in zip(ax, combos):
# Choose a Sesar 2010 object to base our fits on lcid = 1019544 rrlyrae = RRLyraeGenerated(lcid, random_state=0) # Generate data in a 6-month observing season Nobs = 60 rng = np.random.RandomState(0) nights = np.arange(180) rng.shuffle(nights) nights = nights[:Nobs] t = 57000 + nights + 0.05 * rng.randn(Nobs) dmag = 0.06 + 0.01 * rng.randn(Nobs) mag = rrlyrae.generated('r', t, err=dmag, corrected=False) periods = np.linspace(0.2, 1.4, 1000) phase = (t / rrlyrae.period) % 1 phasefit = np.linspace(0, 1, 1000) tfit = rrlyrae.period * phasefit fig = plt.figure(figsize=(10, 4)) gs = plt.GridSpec(2, 2, left=0.07, right=0.95, wspace=0.15, hspace=0.7, bottom=0.15) ax = [fig.add_subplot(gs[:, 0]), fig.add_subplot(gs[1, 1]), fig.add_subplot(gs[0, 1])]
rrlyrae = RRLyraeGenerated(lcid, random_state=0) print("Extinction A_r = {0:.4f}".format(rrlyrae.obsmeta['rExt'])) # Generate data in a 6-month observing season Nobs = 60 rng = np.random.RandomState(0) nights = np.arange(180) rng.shuffle(nights) nights = nights[:Nobs] # Find a subset of the simulated data. This is the same procedure as in # fig_multiband_sim t = 57000 + nights + 0.05 * rng.randn(Nobs) dy = 0.06 + 0.01 * rng.randn(Nobs) mags = np.array([rrlyrae.generated(band, t, err=dy, corrected=False) for band in 'ugriz']) filts = np.array([f for f in 'ugriz']) # Here's our subset filts = np.take(list('ugriz'), np.arange(Nobs), mode='wrap') mags = mags[np.arange(Nobs) % 5, np.arange(Nobs)] masks = [(filts == band) for band in 'ugriz'] fig, ax = plt.subplots(5, sharex=True, sharey=True) fig.subplots_adjust(left=0.1, right=0.93, hspace=0.1) periods = np.linspace(0.2, 1.4, 1000) combos = [(1, 0), (0, 1), (2, 0), (2, 1), (2, 2)]
# Choose a Sesar 2010 object to base our fits on lcid = 1019544 rrlyrae = RRLyraeGenerated(lcid, random_state=0) # Generate data in a 6-month observing season Nobs = 60 rng = np.random.RandomState(0) nights = np.arange(180) rng.shuffle(nights) nights = nights[:Nobs] t = 57000 + nights + 0.05 * rng.randn(Nobs) dmag = 0.06 + 0.01 * rng.randn(Nobs) mag = rrlyrae.generated('r', t, err=dmag, corrected=False) periods = np.linspace(0.2, 1.4, 1000) phase = (t / rrlyrae.period) % 1 phasefit = np.linspace(0, 1, 1000) tfit = rrlyrae.period * phasefit fig = plt.figure(figsize=(10, 4)) gs = plt.GridSpec(3, 2, left=0.07, right=0.95, bottom=0.15, wspace=0.15, hspace=0.3)
# Choose a Sesar 2010 object to base our fits on lcid = 1019544 rrlyrae = RRLyraeGenerated(lcid, random_state=0) print("Extinction A_r = {0:.4f}".format(rrlyrae.obsmeta['rExt'])) # Generate data in a 6-month observing season Nobs = 30 rng = np.random.RandomState(0) nights = np.arange(6 * Nobs) rng.shuffle(nights) nights = nights[:Nobs] t = 57000 + nights + 0.05 * rng.randn(Nobs) dy = 0.06 + 0.01 * rng.randn(Nobs) mags = np.array([rrlyrae.generated(band, t, err=dy, corrected=False) for band in 'ugriz']) filts = np.array([f for f in 'ugriz']) def plot_data(ax, t, y, dy, f): for i, band in enumerate(filts): mask = (f == band) ax.errorbar((t[mask] / rrlyrae.period) % 1, y[mask], dy[mask], fmt='.', label=band) ax.set_ylim(18, 14.5) #ax.legend(loc='upper left', fontsize=10, ncol=3) ax.set_xlabel('phase') ax.set_ylabel('magnitude')