def __init__(self, scale_col=GaussianPrior(mean=1, var=0.0001), scale_row=GaussianPrior(mean=1, var=0.0001), rotation_angle=UniformPrior(lb=-3.1415, ub=3.1415)): self.scale_col = self._parse_prior(scale_col) self.scale_row = self._parse_prior(scale_row) self.rotation_angle = self._parse_prior(rotation_angle)
def __init__( self, shift_col=GaussianPrior(mean=0, var=1.0**2), shift_row=GaussianPrior(mean=0, var=1.0**2), ): self.shift_col = self._parse_prior(shift_col) self.shift_row = self._parse_prior(shift_row)
def test_prf_vs_aperture_photometry(): """Is the PRF photometry result consistent with simple aperture photometry?""" tpf_fn = get_pkg_data_filename( "data/ktwo201907706-c01-first-cadence.fits.gz") tpf = fits.open(tpf_fn) col, row = 173, 526 prf = KeplerPRF(channel=tpf[0].header['CHANNEL'], column=col, row=row, shape=tpf[1].data.shape) fluxo, colo, rowo, _ = models.get_initial_guesses(data=tpf[1].data, X=prf.x, Y=prf.y) bkgo = np.mean(tpf[1].data) aperture_flux = tpf[1].data.sum() - bkgo prior = JointPrior(GaussianPrior(mean=fluxo, var=math.sqrt(fluxo)), UniformPrior(lb=prf.x[0], ub=prf.x[-1]), UniformPrior(lb=prf.y[0], ub=prf.y[-1]), GaussianPrior(mean=bkgo, var=bkgo)) logL = PoissonPosterior(tpf[1].data, prf.evaluate, prior=prior) fitresult = logL.fit((fluxo, colo, rowo, bkgo)) prf_flux, prf_col, prf_row, prf_bkg = fitresult.x assert np.isclose(prf_col, col + 9, rtol=1e-3) assert np.isclose(prf_row, row + 9, rtol=1e-3) assert np.isclose(prf_bkg, np.percentile(tpf[1].data, 10), rtol=0.1) assert np.isclose(aperture_flux, prf_flux, rtol=0.1)
def test_prf_vs_aperture_photometry(): """Is the PRF photometry result consistent with simple aperture photometry?""" tpf_fn = get_pkg_data_filename( "data/ktwo201907706-c01-first-cadence.fits.gz") tpf = fits.open(tpf_fn) col, row = 173, 526 prf = KeplerPRF(channel=tpf[0].header['CHANNEL'], column=col, row=row, shape=tpf[1].data.shape) scene = SceneModel(prfs=prf) fluxo, colo, rowo, _ = get_initial_guesses(data=tpf[1].data, ref_col=prf.col_coord[0], ref_row=prf.row_coord[0]) bkg = mode(tpf[1].data, None)[0] prior = JointPrior(UniformPrior(lb=0.1 * fluxo, ub=fluxo), UniformPrior(lb=prf.col_coord[0], ub=prf.col_coord[-1]), UniformPrior(lb=prf.row_coord[0], ub=prf.row_coord[-1]), GaussianPrior(mean=1, var=1e-2), GaussianPrior(mean=1, var=1e-2), GaussianPrior(mean=0, var=1e-2), UniformPrior(lb=bkg - .5 * bkg, ub=bkg + .5 * bkg)) logL = PoissonPosterior(tpf[1].data, mean=scene, prior=prior) result = logL.fit(x0=prior.mean, method='powell') prf_flux, prf_col, prf_row, prf_scale_col, prf_scale_row, prf_rotation, prf_bkg = logL.opt_result.x assert result.success is True assert np.isclose(prf_col, colo, rtol=1e-1) assert np.isclose(prf_row, rowo, rtol=1e-1) assert np.isclose(prf_bkg, np.percentile(tpf[1].data, 10), rtol=0.1) # Test KeplerPRFPhotometry class kepler_phot = PRFPhotometry(scene_model=scene, prior=prior) tpf_flux = tpf[1].data.reshape( (1, tpf[1].data.shape[0], tpf[1].data.shape[1])) kepler_phot.fit(tpf_flux=tpf_flux) opt_params = kepler_phot.opt_params.reshape(-1) assert np.isclose(opt_params[0], prf_flux, rtol=0.1) assert np.isclose(opt_params[1], prf_col, rtol=1e-1) assert np.isclose(opt_params[2], prf_row, rtol=1e-1) assert np.isclose(opt_params[-1], prf_bkg, rtol=0.1)