Source code for autowisp.tests.generate_catalog_test_data

"""Query Gaia DR3 with just polygon and mag limit to make catalog test cases"""

from os import path

from astropy import units as u

from autowisp.catalog import gaia, write_query_to_file


[docs] def generate_test_data(num_stars=1000): """Create test data files for testing catalog queries.""" for test_i, fov in enumerate( [ {"ra": 25.0, "dec": 25.0, "width": 10.0, "height": 10.0}, {"ra": 145.0, "dec": -45.0, "width": 5.0, "height": 20.0}, {"ra": 0.0, "dec": 25.0, "width": 20.0, "height": 10.0}, {"ra": 0.0, "dec": -25.0, "width": 20.0, "height": 10.0}, {"ra": 5.5, "dec": 25.0, "width": 10.0, "height": 20.0}, {"ra": 5.5, "dec": -25.0, "width": 10.0, "height": 20.0}, {"ra": 355.5, "dec": 25.0, "width": 10.0, "height": 20.0}, {"ra": 355.5, "dec": -25.0, "width": 10.0, "height": 20.0}, {"ra": 354.5, "dec": 25.0, "width": 10.0, "height": 20.0}, {"ra": 354.5, "dec": -25.0, "width": 10.0, "height": 20.0}, {"ra_corner": 0.0, "dec": 0.0, "width": 10.0, "height": 20.0}, {"ra": 100.0, "dec": 80.0, "width": 10.0, "height": 10.0}, {"ra": 100.0, "dec": -80.0, "width": 10.0, "height": 10.0}, {"ra": 20.0, "dec": 80.0, "width": 10.0, "height": 10.0}, {"ra": 20.0, "dec": -80.0, "width": 10.0, "height": 10.0}, {"ra": 0.0, "dec": 90.0, "width": 10.0, "height": 10.0}, {"ra": 0.0, "dec": -90.0, "width": 10.0, "height": 10.0}, {"ra": 45.0, "dec": 90.0, "width": 10.0, "height": 10.0}, {"ra": 90.0, "dec": -90.0, "width": 10.0, "height": 10.0}, {"ra": 25.0, "dec": 0.0, "width": 10.0, "height": 10.0}, {"ra": 0.0, "dec": 0.0, "width": 20.0, "height": 10.0}, {"ra": 5.01, "dec": 9.0, "width": 10.0, "height": 10.0}, {"ra": 5.01, "dec": -9.0, "width": 10.0, "height": 10.0}, ] ): cat_fname = f"catalog_tests/test_catalog_{test_i:02d}.fits" if path.exists(cat_fname): continue if "ra_corner" in fov: ra_corner = fov.pop("ra_corner") corners = gaia.estimate_fov_corners( ra=ra_corner * u.deg, dec=fov["dec"] * u.deg, width=fov["width"] * u.deg, height=fov["height"] * u.deg, ) # Corners 0,1 are left side (xi = -width/2). # Compute signed RA offset handling 0/360 wrap. left_offsets = corners["RA"][:2] - ra_corner left_offsets[left_offsets > 180] -= 360 left_offsets[left_offsets < -180] += 360 fov["ra"] = ra_corner - min(left_offsets) fov_with_units = {key: value * u.deg for key, value in fov.items()} corners = gaia.estimate_fov_corners(**fov_with_units) fov_with_units["epoch"] = 2100.0 * u.yr query_str = ( f"SELECT TOP {num_stars + 1}\n " + "\n ".join( [ "EPOCH_PROP_POS(ra, dec, parallax, pmra, pmdec, " "radial_velocity, ref_epoch, " f"{fov_with_units['epoch'].to_value('yr')}) AS propagated,", "source_id,", "ra,", "dec,", "pmra,", "pmdec,", "phot_g_n_obs,", "phot_g_mean_mag,", "phot_g_mean_flux,", "phot_g_mean_flux_error,", "phot_bp_n_obs,", "phot_bp_mean_mag,", "phot_bp_mean_flux,", "phot_bp_mean_flux_error,", "phot_rp_n_obs,", "phot_rp_mean_mag,", "phot_rp_mean_flux,", "phot_rp_mean_flux_error,", "phot_proc_mode,", "phot_bp_rp_excess_factor,", "(phot_g_mean_mag) AS magnitude", ] ) + "\nFROM gaiadr3.gaia_source WHERE" + "\n phot_g_mean_mag < 15" + "\n AND 1 = CONTAINS(" + "\n POINT(ra, dec)," + "\n POLYGON(\n " + "\n ".join( [ f"{corners[0]['RA']}, {corners[0]['Dec']}, ", f"{corners[1]['RA']}, {corners[1]['Dec']}, ", f"{corners[2]['RA']}, {corners[2]['Dec']}, ", f"{corners[3]['RA']}, {corners[3]['Dec']}", ] ) + "\n )" + "\n )" + "\nORDER BY phot_g_mean_mag ASC" ) print(query_str) stars = gaia.get_result(query_str, ["RA", "Dec"], True) print(stars.columns) mag_limit = 0.5 * ( stars["phot_g_mean_mag"][num_stars] + stars["phot_g_mean_mag"][num_stars - 1] ) print(f"Mag limit: {mag_limit}") write_query_to_file( stars[:-1], cat_fname, True, **fov_with_units, magnitude_limit=mag_limit, magnitude_expression="phot_g_mean_mag", )
if __name__ == "__main__": # conf.timeout = 600 generate_test_data()