Source code for beast.plotting.make_ds9_region_file

from astropy.table import Table
from astropy.coordinates import Angle
from astropy import units as u


[docs] def region_file_fits(input_file, col_color=None, col_thresh=None, polygon=True): """ Make a ds9 region file out of the catalog or AST fits file. If you want some circles to be a different color, use the col_color and col_thresh to choose the column and threshold. The region file will be saved in the same place and with the same name as input file, but with .reg instead of .fits. Parameters ---------- input_file : string path+file of the catalog or AST fits file col_color : string (default=None) name of the column to use for coloring region circles differently col_thresh : float (default=None) sources with values greater than this will have regions colored differently polygon : boolean (default=True) generate a simple polygon as a region file, only recording the vertices assumes the footprint of the input catalog has four vertices """ with open(input_file.replace(".fits", ".reg"), "w") as ds9_file: ds9_file.write( 'global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1\n' ) ds9_file.write("fk5\n") # read in the catalog cat = Table.read(input_file) # figure out which column names are the RA and Dec ra_col = [x for x in cat.colnames if "RA" in x.upper()][0] dec_col = [x for x in cat.colnames if "DEC" in x.upper()][0] # generate a polygon from the vertices of the catalog footprint if polygon: ra = cat[ra_col] dec = cat[dec_col] min_ra = min(ra) min_dec = min(dec) max_ra = max(ra) max_dec = max(dec) dec_at_min_ra = cat[dec_col][ra == min_ra][0] dec_at_max_ra = cat[dec_col][ra == max_ra][0] ra_at_min_dec = cat[ra_col][dec == min_dec][0] ra_at_max_dec = cat[ra_col][dec == max_dec][0] ds9_file.write("polygon(" + Angle(min_ra, u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(dec_at_min_ra, u.deg).to_string(unit=u.deg, sep=":") + "," + Angle(ra_at_min_dec, u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(min_dec, u.deg).to_string(unit=u.deg, sep=":") + "," + Angle(max_ra, u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(dec_at_max_ra, u.deg).to_string(unit=u.deg, sep=":") + "," + Angle(ra_at_max_dec, u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(max_dec, u.deg).to_string(unit=u.deg, sep=":") + ") # color=green \n") # no differently colored regions if col_color is None: for i in range(len(cat)): ds9_file.write( "circle(" + Angle(cat[ra_col][i], u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(cat[dec_col][i], u.deg).to_string(unit=u.deg, sep=":") + ',0.1")\n' ) # with differently colored regions if col_color is not None: for i in range(len(cat)): if cat[col_color][i] <= col_thresh: ds9_file.write( "circle(" + Angle(cat[ra_col][i], u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(cat[dec_col][i], u.deg).to_string(unit=u.deg, sep=":") + ',0.1")\n' ) else: ds9_file.write( "circle(" + Angle(cat[ra_col][i], u.deg).to_string(unit=u.hour, sep=":") + "," + Angle(cat[dec_col][i], u.deg).to_string(unit=u.deg, sep=":") + ',0.1") # color=magenta \n' )
[docs] def region_file_txt(input_file, col_color=None, col_thresh=None): """ Same as the function above, but for a text file - specifically, the DOLPHOT artificial star input file generated by make_ast_xy_list.py. Parameters ---------- input_file : string path+file of the AST input file col_color : string (default=None) name of the column to use for coloring region circles differently col_thresh : float (default=None) sources with values greater than this will have regions colored differently """ with open(input_file.replace(".txt", ".reg"), "w") as ds9_file: ds9_file.write( 'global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1\n' ) ds9_file.write("image\n") cat = Table.read(input_file, format="ascii") # no differently colored regions if col_color is None: for i in range(len(cat)): ds9_file.write( 'circle({0},{1},0.1")\n'.format(cat["X"][i], cat["Y"][i]) ) # with differently colored regions if col_color is not None: for i in range(len(cat)): if cat[col_color][i] <= col_thresh: ds9_file.write( 'circle({0},{1},0.1")\n'.format(cat["X"][i], cat["Y"][i]) ) else: ds9_file.write( 'circle({0},{1},0.1") # color=magenta \n'.format( cat["X"][i], cat["Y"][i] ) )