Source code for radiocatalogs.catalogio

"""This module contains all the messy I/O functionality
for reading in the different sky survey catalogs.
Each catalog source is initialized as a CatalogSource
object to create a uniform set of properties for each
radio catalog's sources. When reading the catalogs for the
first time, sources with the uniform set of attributes
are written to text files called "[catalog_name]_psql.txt",
which is used to insert the sources into the PostgreSQL
database in an efficient way. 

Instructions for adding a new catalog:

1. Add catalog name in all lowercase and a new id number to 
the catalog dictionary. *DO NOT* re-order the id numbers 
unless you plan on re-writing all the "\*_psql.txt" files 
and the entire "radcat" schema. Otherwise, the id number of 
the catalog in the **radcat.catalogs** table will not match 
the 'catalog_id' of the sources in the catalog's table.

2. Write a function called ``read_[catalog name]`` for reading 
in the catalog and writing to the text file if it doesn't 
exist using the same format as all the others.

3. Add a line to radcatdb.py to call the 
``read_[catalog name]`` function.

Adapted from EP's iofuncs.py.

"""
import os
import logging
import pandas as pd


# create logger
catio_logger = logging.getLogger('vdp.radiocatalogs.catalogio')


# Define path to the sky catalog data
#catalogdir = '/home/vpipe/vlite-emily/data/RadioCatalogs'
catalogdir = '/home/erichards/work/data/RadioCatalogs'

# If adding a new catalog, don't forget to add it to this dictionary!
# Note: catalog name must be lowercase, cannot lead with a number, and
# cannot contain "."
catalog_dict = {'cosmos' : {'id' : 1}, 'first' : {'id' : 2},
                'gleam' : {'id' : 3}, 'gpsr1' : {'id' : 4},
                'gpsr5' : {'id' : 5}, 'lazio04' : {'id' : 6},
                'lofar_hba' : {'id' : 7}, 'lofar_lba' : {'id' : 8},
                'lotss' : {'id' : 9}, 'm31_glg04' : {'id' : 10},
                'nordgc' : {'id' : 11}, 'nrl_nvss' : {'id' : 12},
                'nvss' : {'id' : 13}, 'sevenc' : {'id' : 14},
                'sumss' : {'id' : 15}, 'tgss' : {'id' : 16},
                'txs' : {'id' : 17}, 'vlssr' : {'id' : 18},
                'wenss': {'id' : 19}}


[docs]def dms2deg(d, m, s): """Translates coordinates from deg:min:sec to decimal degrees. If computing RA, the result needs to be multiplied by 15. """ dec = abs(float(d)) + abs(float(m))/60. + abs(float(s))/3600. d = str(d) if d.__contains__("-"): dec = -dec return float(dec)
[docs]def set_error(catalog, attrs): """Sets missing values for specified attributes to the median value of the distribution. Parameters ---------- catalog : list List of CatalogSource objects with missing attribute values. attrs : list Attribute names which contain missing values to be set to the median of the distribution. Returns ------- catalog : list CatalogSource objects with modified attributes that contain no missing values. """ for attr in attrs: s = pd.Series([getattr(src, attr) for src in catalog]) s.loc[s.notnull() == False] = s.median() for idx in range(len(catalog)): setattr(catalog[idx], attr, s[idx]) return catalog
[docs]class CatalogSource(object): """Class for the radio catalog sources. Their catalog origin is identified by the 'catalog_id' attribute. Attributes ---------- id : int Uniquely identifies the source in its catalog. name : str Name given to the source in some catalogs. ra : float Source right ascension (degrees). e_ra : float Error on the right ascension (degrees). dec : float Source declination (degrees). e_dec : float Error on the declination (degrees). total_flux : float Total integrated flux (mJy). e_total_flux : float Error on the total flux (mJy). peak_flux : float Peak flux density per beam (mJy/beam). e_peak_flux : float Error on the peak flux (mJy/beam). maj : float FWHM of the source major axis (arcsec). e_maj : float Error on the major axis size (arcsec). min : float FWHM of the source minor axis (arcsec). e_min : float Error on the minor axis size (arcsec). pa : float Position angle of the source major axis (degrees). e_pa : float Error on the position angle (degrees). rms : float Local or image noise (mJy/beam). field : str Name of the field where the source is located provided by some catalogs. catalog_id : int Uniquely identifies the radio catalog from which this source originates. assoc_id : int The id of the closest VLITE source in the **assoc_source** table. sep : float Angular separation between this catalog source and the closest VLITE source (arcsec). """ def __init__(self): self.id = None self.name = None self.ra = None # deg self.e_ra = None # deg self.dec = None # deg self.e_dec = None # deg self.total_flux = None # mJy self.e_total_flux = None # mJy self.peak_flux = None # mJy/beam self.e_peak_flux = None # mJy/beam self.maj = None # arcsec self.e_maj = None # arcsec self.min = None # arcsec self.e_min = None # arcsec self.pa = None # deg self.e_pa = None # deg self.rms = None # mJy/beam self.field = None self.catalog_id = None self.assoc_id = None self.sep = None
[docs]def read_tgss(return_sources=False): """Generates a list of CatalogSource objects from the TGSS survey catalog and writes them into a file in the same directory called tgss_psql.txt if the file does not already exist. Telescope/frequency: GMRT 150 MHz Spatial resolution: 25'' """ catalog_dict['tgss']['telescope'] = 'GMRT' catalog_dict['tgss']['frequency'] = 150. catalog_dict['tgss']['resolution'] = 25. catalog_dict['tgss']['reference'] = 'Intema et al. (2017)' psqlf = os.path.join(catalogdir, 'tgss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'TGSSADR1_7sigma_catalog.tsv') f = open(fname, 'r') b = f.readlines() f.close() n = len(b) cnt = 1 sources = [] for i in range(1, n): sources.append(CatalogSource()) d = b[i].split() # Data Line sources[-1].id = cnt cnt += 1 sources[-1].name = d[0]+'_'+d[1] sources[-1].ra = float(d[2]) # deg sources[-1].e_ra = float(d[3])/3600.0 # deg sources[-1].dec = float(d[4]) # deg sources[-1].e_dec = float(d[5])/3600.0 # deg sources[-1].total_flux = float(d[6]) # mJy sources[-1].e_total_flux = float(d[7]) # mJy sources[-1].peak_flux = float(d[8]) # mJy/beam sources[-1].e_peak_flux = float(d[9]) # mJy/beam sources[-1].maj = float(d[10]) # arcsec sources[-1].e_maj = float(d[11]) # arcsec sources[-1].min = float(d[12]) # arcsec sources[-1].e_min = float(d[13]) # arcsec sources[-1].pa = float(d[14]) # deg sources[-1].e_pa = float(d[15]) # deg sources[-1].rms = float(d[16]) # mJy/beam sources[-1].Code = d[17] sources[-1].field = d[18] sources[-1].catalog_id = catalog_dict['tgss']['id'] with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} TGSS sources to tgss_psql.txt'.format( len(sources))) return sources
[docs]def read_first(return_sources=False): """Generates a list of CatalogSource objects from the FIRST survey catalog and writes them into a file in the same directory called first_psql.txt if the file does not already exist. Telescope/frequency: VLA 1.4 GHz Spatial resolution: 5'' """ catalog_dict['first']['telescope'] = 'VLA' catalog_dict['first']['frequency'] = 1400. catalog_dict['first']['resolution'] = 5. catalog_dict['first']['reference'] = 'White et al. (1997)' psqlf = os.path.join(catalogdir, 'first_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass sources = [] fname = os.path.join(catalogdir, 'FIRST_catalog_14dec17.txt') fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break if line[0] != '#': line = line.split() if float(line[6]) < (0.15): sources.append(CatalogSource()) sources[-1].id = cnt sources[-1].name = 'FIRST_'+str(cnt) cnt += 1 sources[-1].ra = 15. * dms2deg(line[0], line[1], line[2]) # deg sources[-1].dec = dms2deg(line[3], line[4], line[5]) # deg sources[-1].prob = float(line[6]) sources[-1].peak_flux = float(line[7]) # mJy/beam sources[-1].total_flux = float(line[8]) # mJy sources[-1].rms = float(line[9]) # mJy/beam sources[-1].maj = float(line[10]) # arcsec sources[-1].min = float(line[11]) # arcsec sources[-1].pa = float(line[12]) # HACK! setting FIRST positional uncertainty to 1 arcsec # actual uncertainties need to be calculated, see FIRST # website or paper # sources[-1].e_ra = 1.0/3600.0 # deg # sources[-1].e_dec = 1.0/3600.0 # deg # HACK: FIRST positional uncertainty calculations given # for FITTED bmaj & bmin. # I'll assign these to e_ra & e_dec for lack of better method snr = (sources[-1].peak_flux-0.25) / sources[-1].rms dfMaj = float(line[13]) * ((1.0/snr) + 0.05) / 3600.0 # deg dfMin = float(line[14]) * ((1.0/snr) + 0.05) / 3600.0 # deg # fpa = float(line[15]) # deg sources[-1].e_ra = dfMin # deg sources[-1].e_dec = dfMaj # deg sources[-1].catalog_id = catalog_dict['first']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} FIRST sources to first_psql.txt'.format( len(sources))) return sources
[docs]def read_sumss(return_sources=False): """Generates a list of CatalogSource objects from the SUMSS survey catalog and writes them into a file in the same directory called sumss_psql.txt if the file does not already exist. Telescope/frequency: MOST 843 MHz Spatial resolution: 45'' """ catalog_dict['sumss']['telescope'] = 'MOST' catalog_dict['sumss']['frequency'] = 843. catalog_dict['sumss']['resolution'] = 45. catalog_dict['sumss']['reference'] = 'Mauch et al. (2003)' psqlf = os.path.join(catalogdir, 'sumss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass sources = [] fname = os.path.join(catalogdir, 'SUMSS.txt') fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break if line[0] != ';': sources.append(CatalogSource()) sources[-1].id = cnt sources[-1].name = 'SUMSS_'+str(cnt) cnt += 1 line = line.split() sources[-1].ra = 15. * dms2deg(line[0], line[1], line[2]) # deg sources[-1].dec = dms2deg(line[3], line[4], line[5]) # deg sources[-1].e_ra = float(line[6])/3600.0 # deg sources[-1].e_dec = float(line[7])/3600.0 # deg sources[-1].peak_flux = float(line[8]) # mJy/bm sources[-1].e_peak_flux = float(line[9]) sources[-1].total_flux = float(line[10]) # mJy sources[-1].e_total_flux = float(line[11]) sources[-1].maj = float(line[12]) # arcsec sources[-1].min = float(line[13]) # arcsec sources[-1].pa = float(line[14]) sources[-1].catalog_id = catalog_dict['sumss']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} SUMSS sources to sumss_psql.txt'.format( len(sources))) return sources
[docs]def read_wenss(return_sources=False): """Generates a list of CatalogSource objects from the WENSS survey catalog and writes them into a file in the same directory called wenss_psql.txt if the file does not already exist. Telescope/frequency: WSRT 325 MHz Spatial resolution: 54'' """ catalog_dict['wenss']['telescope'] = 'WSRT' catalog_dict['wenss']['frequency'] = 325. catalog_dict['wenss']['resolution'] = 54. catalog_dict['wenss']['reference'] = 'Rengelink et al. (1997)' psqlf = os.path.join(catalogdir, 'wenss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass sources = [] fname = os.path.join(catalogdir, 'WENS.COMPLETE.txt') fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break if line[0] != ';': sources.append(CatalogSource()) line = line.split() sources[-1].id = cnt sources[-1].name = 'WENSS_'+str(cnt) cnt += 1 sources[-1].ra = float(line[0]) # deg sources[-1].dec = float(line[1]) # deg sources[-1].total_flux = float(line[2]) # mJy sources[-1].e_total_flux = float(line[3]) # mJy sources[-1].peak_flux = float(line[4]) # mJy/beam sources[-1].e_peak_flux = float(line[5]) # mJy/beam sources[-1].rms = float(line[6]) # mJy/beam sources[-1].e_ra = float(line[7])/3600.0 # deg sources[-1].e_dec = float(line[8])/3600.0 # deg sources[-1].maj = float(line[9]) # arcsec sources[-1].min = float(line[10]) # arcsec sources[-1].pa = float(line[11]) sources[-1].catalog_id = catalog_dict['wenss']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} WENSS sources to wenss_psql.txt'.format( len(sources))) return sources
[docs]def read_nvss(return_sources=False): """Generates a list of CatalogSource objects from the NVSS survey catalog and writes them into a file in the same directory called nvss_psql.txt if the file does not already exist. Telescope/frequency: VLA 1.4 GHz Spatial resolution: 45'' """ catalog_dict['nvss']['telescope'] = 'VLA' catalog_dict['nvss']['frequency'] = 1400. catalog_dict['nvss']['resolution'] = 45. catalog_dict['nvss']['reference'] = 'Condon et al. (1998)' psqlf = os.path.join(catalogdir, 'nvss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass sources = [] fname = os.path.join(catalogdir, 'NVSSCatalog.text') fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break beginning = line[0:1] later = line[7:8] if beginning.isdigit() == True: sources.append(CatalogSource()) sources[-1].id = cnt sources[-1].name = 'NVSS_'+str(cnt) cnt += 1 if line[6] == ' ': # ra sources[-1].ra = 15. * dms2deg(line[0:2], line[3:5], line[7:11]) else: sources[-1].ra = 15. * dms2deg(line[0:2], line[3:5], line[6:11]) if line[19] == ' ': # dec sources[-1].dec = dms2deg(line[12:15], line[16:18], line[20:23]) else: sources[-1].dec = dms2deg(line[12:15], line[16:18], line[19:23]) if line[25] == ' ' and line[26] == ' ': # flux sources[-1].total_flux = float(line[27:30]) # mJy elif line[25] == ' ' and line[26] != ' ': sources[-1].total_flux = float(line[26:30]) else: sources[-1].total_flux = float(line[25:30]) if line[32] == ' ': #maj sources[-1].maj = float(line[33:36]) # arcsec elif line[31] == ' ' and line[32] != ' ': sources[-1].maj = float(line[32:36]) elif line[31]=='<': sources[-1].maj = float(line[32:36]) else: sources[-1].maj = float(line[31:36]) if line[37] == '<': # min sources[-1].min = float(line[38:42]) # arcsec elif line[37] == ' ' and line[38] != ' ': sources[-1].min = float(line[38:42]) else: sources[-1].min = float(line[39:42]) if line[43] == '-': # pa sources[-1].pa = float(line[43:48]) elif line[43] == ' ' and line[44] == ' ' and line[45] != ' ': sources[-1].pa = float(line[45:48]) elif line[43] == ' ' and line[44] != ' ': sources[-1].pa = float(line[44:48]) else: sources[-1].pa = 0.0 sources[-1].field = line[65:73] if beginning.isdigit() == False and line[0:7] == ' ': sources[-1].e_ra = float(15*dms2deg(0,0,line[7:11])) # error ra if line[19] == ' ': # error dec sources[-1].e_dec = float(dms2deg(0,0,line[20:23])) else: sources[-1].e_dec = float(dms2deg(0,0,line[19:23])) sources[-1].e_total_flux = float(line[27:30]) # error flux (mJy) sources[-1].catalog_id = catalog_dict['nvss']['id'] fread.close() sources = set_error(sources, ['e_ra', 'e_dec']) with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %s\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} NVSS sources to nvss_psql.txt'.format( len(sources))) return sources
[docs]def read_gleam(return_sources=False): """Generates a list of CatalogSource objects from the GLEAM survey catalog and writes them into a file in the same directory called gleam_psql.txt if the file does not already exist. Telescope/frequency: MWA 74-231 MHz Spatial resolution: ~100'' """ catalog_dict['gleam']['telescope'] = 'MWA' catalog_dict['gleam']['frequency'] = 150. catalog_dict['gleam']['resolution'] = 100. catalog_dict['gleam']['reference'] = 'Hurley-Walker et al. (2017)' psqlf = os.path.join(catalogdir, 'gleam_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'gleamegc.dat') f = open(fname, 'r') b = f.readlines() f.close() n = len(b) #print 'reading %s' % fname #print ' read %d lines' % n cnt = 1 sources = [] for i in range(0, n): sources.append(CatalogSource()) d = b[i].split() # Data Line sources[-1].id = cnt cnt += 1 sources[-1].name = d[0]+'_'+d[1] sources[-1].ra = float(d[10]) # deg if d[11].replace('.','',1).isdigit(): sources[-1].e_ra = float(d[11]) # deg sources[-1].dec = float(d[12]) # deg if d[13].replace('.','',1).isdigit(): sources[-1].e_dec = float(d[13]) # deg sources[-1].total_flux = float(d[16])*1000.0 # mJy sources[-1].e_total_flux = float(d[17])*1000.0 # mJy sources[-1].peak_flux = float(d[14])*1000.0 # mJy/beam sources[-1].e_peak_flux = float(d[15])*1000.0 # mJy/beam sources[-1].maj = float(d[18]) # arcsec sources[-1].e_maj = float(d[19]) # arcsec sources[-1].min = float(d[20]) # arcsec sources[-1].e_min = float(d[21]) # arcsec sources[-1].pa = float(d[22]) # deg sources[-1].e_pa = float(d[23]) # deg # sources[-1].rms = float(d[16]) # mJy/beam sources[-1].catalog_id = catalog_dict['gleam']['id'] sources = set_error(sources, ['e_ra', 'e_dec']) with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} GLEAM sources to gleam_psql.txt'.format( len(sources))) return sources
[docs]def read_cosmos(return_sources=False): """Generates a list of CatalogSource objects from the COSMOS Legacy survey catalog and writes them into a file in the same directory called cosmos_psql.txt if the file does not already exist. All non-header lines start with 'C'. Telescope/frequency: VLA 320 MHz Spatial resolution: ~6'' """ catalog_dict['cosmos']['telescope'] = 'VLA' catalog_dict['cosmos']['frequency'] = 320. catalog_dict['cosmos']['resolution'] = 6. catalog_dict['cosmos']['reference'] = 'Smolcic et al. (2014)' psqlf = os.path.join(catalogdir, 'cosmos_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'vla-cosmos_327_sources_published_version.tbl') fin = open(fname, 'r') cnt = 1 sources = [] # Read file: while 1: line2 = fin.readline() # If end of file, break out of loop: if not line2: break # Check if data line: if line2[0] == 'C': sources.append(CatalogSource()) line = line2.split() sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] # name in 90cm catalog sources[-1].ra = float(line[1]) # deg sources[-1].dec = float(line[2]) # deg sources[-1].e_ra = float(line[9])/3600.0 # deg sources[-1].e_dec = float(line[10])/3600.0 # deg sources[-1].peak_flux = float(line[11]) # mJy/beam sources[-1].e_peak_flux = float(line[12]) # mJy/beam sources[-1].total_flux = float(line[13]) # mJy sources[-1].e_total_flux = float(line[14]) # mJy sources[-1].rms = float(line[15]) # mJy/beam sources[-1].maj = float(line[16]) # arcsec sources[-1].min = float(line[17]) # arcsec sources[-1].pa = float(line[18]) # deg # 0 = unresolved, 1 =resolved sources[-1].flagresolved = int(line[19]) # 0 = single component, 1 = multi-component sources[-1].flagmulticom = int(line[20]) sources[-1].name20 = line[21] # name in 20cm (1.4 GHz) catalog sources[-1].Peak20 = float(line[22]) # mJy/beam, 20cm sources[-1].Total20 = float(line[23]) # mJy, 20cm # separation between 90cm and 20cm positions if line[24][0]!='*': sources[-1].sep = float(line[24])/3600.0 # deg if sources[-1].maj < 1.: sources[-1].maj = 1. if sources[-1].min < 1.: sources[-1].min = 1. sources[-1].catalog_id = catalog_dict['cosmos']['id'] fin.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} COSMOS Legacy P-band sources to ' 'cosmos_psql.txt'.format(len(sources))) return sources
[docs]def read_vlssr(return_sources=False): """Generates a list of CatalogSource objects from the VLA Low-frequency Sky Survey Redux catalog and writes them into a file in the same directory called vlssr_psql.txt if the file does not already exist. Telescope/frequency: VLA 74 MHz Spatial resolution: ~75'' """ catalog_dict['vlssr']['telescope'] = 'VLA' catalog_dict['vlssr']['frequency'] = 74. catalog_dict['vlssr']['resolution'] = 75. catalog_dict['vlssr']['reference'] = 'Lane et al. (2014)' psqlf = os.path.join(catalogdir, 'vlssr_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'FullVLSSCatalog.clean') fread = open(fname, 'r') sources = [] cnt = 1 while 1: line = fread.readline() if not line: break sources.append(CatalogSource()) sources[-1].id = cnt sources[-1].name = 'VLSSr_'+str(cnt) cnt += 1 sources[-1].ra = 15. * dms2deg(line[0:2], line[3:5], line[6:11]) # deg sources[-1].dec = dms2deg(line[12:15], line[16:18], line[19:23]) # deg sources[-1].total_flux = float(line[30:36]) * 1000.0 # mJy sources[-1].maj = float(line[38:42]) # arcsec sources[-1].min = float(line[44:48]) # arcsec sources[-1].pa = float(line[49:54]) # deg # Read errors line line = fread.readline() if not line: catio_logger.error('ERROR: Cannot read error line in VLSSr catalog') break sources[-1].e_ra = 15. * dms2deg(0, 0, line[6:11]) # deg sources[-1].e_dec = dms2deg(0, 0, line[19:23]) # deg sources[-1].e_total_flux = float(line[30:36]) * 1000.0 # mJy sources[-1].catalog_id = catalog_dict['vlssr']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} VLSSr sources to vlssr_psql.txt'.format( len(sources))) return sources
[docs]def read_txs(return_sources=False): """Generates a list of CatalogSource objects from the TXS survey catalog and writes them into a file in the same directory called txs_psql.txt if the file does not already exist. Telescope/frequency: Texas Interferometer 365 MHz Spatial resolution: 100"? """ catalog_dict['txs']['telescope'] = 'Texas Interferometer' catalog_dict['txs']['frequency'] = 365. catalog_dict['txs']['resolution'] = 100. catalog_dict['txs']['reference'] = 'Douglas et al. (1996)' psqlf = os.path.join(catalogdir, 'txs_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'TXS_J2000.txt') fread = open(fname, 'r') # First line is header line = fread.readline() sources = [] cnt = 1 while 1: line = fread.readline() if not line: break sources.append(CatalogSource()) line = line.split() sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] sources[-1].ra = float(line[1]) # deg sources[-1].dec = float(line[2]) # deg sources[-1].e_ra = float(line[3]) # deg sources[-1].e_dec = float(line[4]) # deg sources[-1].total_flux = float(line[5]) # mJy sources[-1].e_total_flux = float(line[6]) # mJy sources[-1].catalog_id = catalog_dict['txs']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} TXS sources to txs_psql.txt'.format( len(sources))) return sources
[docs]def read_sevenc(return_sources=False): """Generates a list of CatalogSource objects from the 7C survey catalog and writes them into a file in the same directory called sevenc_psql.txt if the file does not already exist. Telescope/frequency: Cambridge Low Frequency Synthesis Telescope 151 MHz Spatial resolution: ~70'' """ catalog_dict['sevenc']['telescope'] = 'CLFST' catalog_dict['sevenc']['frequency'] = 151. catalog_dict['sevenc']['resolution'] = 70. catalog_dict['sevenc']['reference'] = 'Riley at al. (1999)' psqlf = os.path.join(catalogdir, 'sevenc_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, '7C_new.txt') fread = open(fname, 'r') sources = [] cnt = 1 while 1: line = fread.readline() if not line: break beg = line[0] if beg.isdigit(): sources.append(CatalogSource()) sources[-1].id = cnt sources[-1].name = '7C_'+str(cnt) cnt += 1 line = line.split() sources[-1].ra = float(line[0]) sources[-1].e_ra = float(line[1])/3600.0 sources[-1].dec = float(line[2]) sources[-1].e_dec = float(line[3])/3600.0 sources[-1].peak_flux = float(line[4]) sources[-1].e_peak_flux = float(line[5]) sources[-1].total_flux = float(line[6]) sources[-1].e_total_flux = float(line[7]) sources[-1].snr = float(line[8]) sources[-1].catalog_id = catalog_dict['sevenc']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} 7C sources to sevenc_psql.txt'.format( len(sources))) return sources
[docs]def read_gpsr5(return_sources=False): """Generates a list of CatalogSource objects from the Galactic Plan 5-GHz VLA Survey catalog and writes them into a file in the same directory called gpsr5_psql.txt if the file does not already exist. Telescope/frequency: VLA 5 GHz Spatial resolution: ~4'' """ catalog_dict['gpsr5']['telescope'] = 'VLA' catalog_dict['gpsr5']['frequency'] = 5000. catalog_dict['gpsr5']['resolution'] = 4. catalog_dict['gpsr5']['reference'] = 'Becker et al. (1994)' psqlf = os.path.join(catalogdir, 'gpsr5_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'GPRS_5GHz.txt') fread = open(fname, 'r') sources = [] # Skip header line line = fread.readline() cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] sources[-1].ra = float(line[1]) # deg sources[-1].dec = float(line[2]) # deg sources[-1].e_ra = float(line[3]) # deg sources[-1].e_dec = float(line[4]) # deg sources[-1].peak_flux = float(line[5]) # mJy/beam sources[-1].total_flux = float(line[6]) # mJy sources[-1].size = float(line[7]) # diameter, arcsec if sources[-1].size < 1.: sources[-1].maj = 0.5 # arcsec sources[-1].min = 0.5 # arcsec else: sources[-1].maj = sources[-1].size * 0.5 # arcsec sources[-1].min = sources[-1].size * 0.5 # arcsec sources[-1].pa = 0.0 # deg sources[-1].catalog_id = catalog_dict['gpsr5']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} GPSR 5 GHz sources to gpsr5_psql.txt'. format(len(sources))) return sources
[docs]def read_gpsr1(return_sources=False): """Generates a list of CatalogSource objects from the Galactic Plan 1.4-GHz VLA Survey catalog and writes them into a file in the same directory called gpsr1_psql.txt if the file does not already exist. Telescope/frequency: VLA 1.4 GHz Spatial resolution: ~5'' """ catalog_dict['gpsr1']['telescope'] = 'VLA' catalog_dict['gpsr1']['frequency'] = 1400. catalog_dict['gpsr1']['resolution'] = 5. catalog_dict['gpsr1']['reference'] = 'Zoonematkermani et al. (1990)' psqlf = os.path.join(catalogdir, 'gpsr1_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'GPRS_1.4GHz.txt') fread = open(fname, 'r') sources = [] # Skip header line line = fread.readline() cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] sources[-1].ra = float(line[1]) # deg sources[-1].dec = float(line[2]) # deg sources[-1].e_ra = float(line[3]) # deg sources[-1].e_dec = float(line[4]) # deg sources[-1].peak_flux = float(line[5]) # mJy/beam sources[-1].total_flux = float(line[6]) # mJy sources[-1].size = float(line[7]) # diameter, arcsec if sources[-1].size < 1.: sources[-1].maj = 0.5 # arcsec sources[-1].min = 0.5 # arcsec else: sources[-1].maj = sources[-1].size * 0.5 # arcsec sources[-1].min = sources[-1].size * 0.5 # arcsec sources[-1].pa = 0.0 # deg sources[-1].catalog_id = catalog_dict['gpsr1']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} GPSR 1.4 GHz sources to gpsr1_psql.txt'. format(len(sources))) return sources
[docs]def read_nordgc(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called nordgc_psql.txt if the file does not already exist. NOTE: This is actually the Hyman-updated version of the Nord et al. (2004) catalog. Telescope/frequency: VLA 330 MHz Spatial resolution: ~10'' """ catalog_dict['nordgc']['telescope'] = 'VLA' catalog_dict['nordgc']['frequency'] = 330. catalog_dict['nordgc']['resolution'] = 10. catalog_dict['nordgc']['reference'] = 'Nord et al. (2004)' psqlf = os.path.join(catalogdir, 'nordgc_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass #fname = os.path.join(catalogdir, 'NordGC_330MHz.txt') fname = os.path.join(catalogdir, 'NADAETC.startable') fread = open(fname, 'r') sources = [] # Skip header line #line = fread.readline() # Skip 3 header lines line = fread.readline() line = fread.readline() line = fread.readline() cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt #sources[-1].name = line[0] sources[-1].name = 'HymanNordGC_%d' % cnt cnt += 1 #sources[-1].ra = float(line[1]) # deg sources[-1].ra = 15. * dms2deg(line[0], line[1], line[2]) # deg #sources[-1].dec = float(line[2]) # deg sources[-1].dec = dms2deg(line[3], line[4], line[5]) # deg #sources[-1].e_ra = float(line[3]) # deg sources[-1].e_ra = 5./3600. # approx 5 arcsec #sources[-1].e_dec = float(line[4]) # deg sources[-1].e_dec = 5./3600. #sources[-1].peak_flux = float(line[5]) # mJy/bm #sources[-1].rms = float(line[6]) # mJy/bm #sources[-1].total_flux = float(line[7]) # mJy #sources[-1].size = float(line[8]) # diameter, arcsec #if (sources[-1].size < 1.): # sources[-1].maj = 0.5 # arcsec # sources[-1].min = 0.5 # arcsec #else: # sources[-1].maj = sources[-1].size*0.5 # arcsec # sources[-1].min = sources[-1].size*0.5 # arcsec #sources[-1].pa = 0.0 # deg # Assuming beam size for src sizes sources[-1].maj = 0.5 * 13. # arcsec sources[-1].min = 0.5 * 4.5 # arcsec sources[-1].pa = 0. # deg sources[-1].catalog_id = catalog_dict['nordgc']['id'] fread.close() #print 'Read %d Nord GC 330 MHz catalog sources' % len(sources) with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} Hyman-updated Nord GC 330 MHz catalog ' 'sources to nordgc_psql.txt'.format(len(sources))) return sources
[docs]def read_lazio04(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called lazio04_psql.txt if the file does not already exist. Telescope/frequency: VLA 330 MHz Spatial resolution: 6?'' """ catalog_dict['lazio04']['telescope'] = 'VLA' catalog_dict['lazio04']['frequency'] = 330. catalog_dict['lazio04']['resolution'] = 6. catalog_dict['lazio04']['reference'] = 'Lazio (2004)' psqlf = os.path.join(catalogdir, 'lazio04_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'Lazio2004.txt') fread = open(fname, 'r') sources = [] cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] h = int(line[1]) m = int(line[2]) s = float(line[3]) sources[-1].ra = 15. * dms2deg(h, m, s) # deg d = int(line[4]) m = int(line[5]) s = float(line[6]) sources[-1].dec = dms2deg(d, m, s) # deg # uncertainties not given, assuming 1 arcsec sources[-1].e_ra = 1./3600. # deg sources[-1].e_dec = 1./3600. # deg sources[-1].maj = 0.5 # arcsec sources[-1].min = 0.5 # arcsec sources[-1].pa = 0. # deg sources[-1].catalog_id = catalog_dict['lazio04']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} Lazio 2004 catalog sources to ' 'lazio04_psql.txt'.format(len(sources))) return sources
[docs]def read_m31_glg04(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called m31_glg04_psql.txt if the file does not already exist. Telescope/frequency: VLA 325 MHz Spatial resolution: 6'' """ catalog_dict['m31_glg04']['telescope'] = 'VLA' catalog_dict['m31_glg04']['frequency'] = 325. catalog_dict['m31_glg04']['resolution'] = 6. catalog_dict['m31_glg04']['reference'] = 'Gelfand, Lazio, & Gaensler (2004)' psqlf = os.path.join(catalogdir, 'm31_glg04_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'GLG2004_M31_TABLE3.dat') sources = [] fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] sources[-1].morph = line[1] h = int(line[2]) m = int(line[3]) s = float(line[4]) sources[-1].ra = 15. * dms2deg(h, m, s) # deg d = int(line[6]) m = int(line[7]) s = float(line[8]) sources[-1].dec = dms2deg(d, m, s) # deg sources[-1].e_ra = float(line[5])/3600.0 # deg sources[-1].e_dec = float(line[9])/3600.0 # deg sources[-1].maj = float(line[12]) # arcsec sources[-1].e_maj = float(line[13]) # arcsec sources[-1].min = float(line[14]) # arcsec sources[-1].e_min = float(line[15]) # arcsec sources[-1].pa = float(line[16]) # deg sources[-1].e_pa = float(line[17]) # deg sources[-1].peak_flux = float(line[18]) # mJy/bm sources[-1].e_peak_flux = float(line[19]) # mJy/bm sources[-1].total_flux = float(line[20]) # mJy sources[-1].e_total_flux = float(line[21]) # mJy sources[-1].rms = float(line[22]) # mJy/bm sources[-1].catalog_id = catalog_dict['m31_glg04']['id'] #if sources[-1].maj < 3e-4: # print ' %s %e' % (sources[-1].id, sources[-1].maj) #if sources[-1].min < 3e-4: # print ' %s %e' % (sources[-1].id, sources[-1].min) fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} GLG2004 M31 catalog sources to ' 'm31_glg04_psql.txt'.format(len(sources))) return sources
[docs]def read_lotss(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called lotss_psql.txt if the file does not already exist. Telescope/frequency: LOFAR 150 MHz Spatial resolution: 25'' """ catalog_dict['lotss']['telescope'] = 'LOFAR' catalog_dict['lotss']['frequency'] = 150 catalog_dict['lotss']['resolution'] = 25. catalog_dict['lotss']['reference'] = 'Shimwell et al. (2017)' psqlf = os.path.join(catalogdir, 'lotss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'lotss.dat') sources = [] fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = line[0] sources[-1].ra = float(line[1]) # deg sources[-1].e_ra = float(line[3])/3600. # deg (total 1sigma error) sources[-1].dec = float(line[4]) # deg sources[-1].e_dec = float(line[6])/3600. # deg (total 1 sigma error) sources[-1].peak_flux = float(line[7]) # mJy/bm sources[-1].e_peak_flux = float(line[9]) # mJy/bm sources[-1].total_flux = float(line[10]) # mJy sources[-1].e_total_flux = float(line[12]) # mJy sources[-1].rflag = line[13] sources[-1].rms = float(line[14]) # mJy/bm sources[-1].code = line[15] sources[-1].field = line[16] # these are not given in the catalog, setting to half resolution: sources[-1].maj = 12.5 # arcsec sources[-1].min = 12.5 # arcsec sources[-1].pa = 0. # deg sources[-1].catalog_id = catalog_dict['lotss']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} LoTSS sources to lotss_psql.txt'.format( len(sources))) return sources
[docs]def read_lofar_lba(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called lofar_lba_psql.txt if the file does not already exist. Telescope/frequency: LOFAR 34, 46, & 62 MHz Spatial resolution: 30-56'' """ catalog_dict['lofar_lba']['telescope'] = 'LOFAR' catalog_dict['lofar_lba']['frequency'] = 62 catalog_dict['lofar_lba']['resolution'] = 40. catalog_dict['lofar_lba']['reference'] = 'van Weeren et al. (2014)' psqlf = os.path.join(catalogdir, 'lofar_lba_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'LOFAR_LBA.dat') sources = [] fread = open(fname, 'r') data_lines = fread.readlines()[16:] cnt = 1 for line in data_lines: line = line.split() sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].field = line[0] sources[-1].freq = float(line[1]) # MHz sources[-1].name = 'VWT2014_'+line[2]+'_'+line[0]+'_'+line[1] sources[-1].ra = float(line[3]) # deg sources[-1].e_ra = float(line[4])/3600.0 # deg (1sigma) sources[-1].dec = float(line[5]) # deg sources[-1].e_dec = float(line[6])/3600.0 # deg (1sigma) sources[-1].total_flux = float(line[7]) # mJy sources[-1].e_total_flux = float(line[8]) # mJy (1sigma) # These are not given in the catalog # - setting to approx half restoring beam size (table 2 in paper): sources[-1].maj = 10. # arcsec sources[-1].min = 10. # arcsec sources[-1].pa = 0. # deg sources[-1].catalog_id = catalog_dict['lofar_lba']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} LOFAR_LBA/VWT2014 sources to ' 'lofar_lba_psql.txt'.format(len(sources))) return sources
[docs]def read_lofar_hba(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called lofar_hba_psql.txt if the file does not already exist. Telescope/frequency: LOFAR 150 MHz Spatial resolution: 6'' """ catalog_dict['lofar_hba']['telescope'] = 'LOFAR' catalog_dict['lofar_hba']['frequency'] = 150 catalog_dict['lofar_hba']['resolution'] = 6. catalog_dict['lofar_hba']['reference'] = 'Williams et al. (2016)' psqlf = os.path.join(catalogdir, 'lofar_hba_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'LOFAR_HBA.dat') sources = [] fread = open(fname, 'r') cnt = 1 while 1: line = fread.readline() if not line: break line = line.split() bflag1 = int(line[13]) eflag = int(line[14]) bflag2 = int(line[15]) aflag = int(line[16]) if bflag1 == 0 and bflag2 == 0 and eflag == 0 and aflag == 0: sources.append(CatalogSource()) sources[-1].id = cnt cnt += 1 sources[-1].name = 'WVR2016_'+line[0] sources[-1].ra = float(line[1]) # deg sources[-1].e_ra = float(line[2]) # deg if sources[-1].e_ra < 1e-5: sources[-1].e_ra = 1e-5 sources[-1].dec = float(line[3]) # deg sources[-1].e_dec = float(line[4]) # deg if sources[-1].e_dec < 1e-5: sources[-1].e_dec = 1e-5 sources[-1].otal_flux = float(line[5]) # mJy sources[-1].e_total_flux = float(line[6]) # mJy sources[-1].peak_flux = float(line[7]) # mJy/bm sources[-1].e_peak_flux = float(line[8]) # mJy/bm sources[-1].rms = float(line[10]) # mJy/bm # These are not given in the catalog # - setting to approx half restoring beam size: sources[-1].maj = 3.5 # arcsec sources[-1].min = 3.5 # arcsec sources[-1].pa = 0. # deg sources[-1].catalog_id = catalog_dict['lofar_hba']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} LOFAR_HBA/WVR2016 sources to ' 'lofar_hba_psql.txt'.format(len(sources))) return sources
[docs]def read_nrl_nvss(return_sources=False): """Generates a list of CatalogSource objects from the Nord et al. Galactic Center survey catalog and writes them into a file in the same directory called nrl_nvss_psql.txt if the file does not already exist. NOTE: This is our version of the NVSS catalog after running PyBDSF on all NVSS images. Telescope/frequency: VLA 1.4 GHz Spatial resolution: 45'' """ catalog_dict['nrl_nvss']['telescope'] = 'VLA' catalog_dict['nrl_nvss']['frequency'] = 1400 catalog_dict['nrl_nvss']['resolution'] = 45. catalog_dict['nrl_nvss']['reference'] = '' psqlf = os.path.join(catalogdir, 'nrl_nvss_psql.txt') if os.path.isfile(psqlf): if not return_sources: return else: pass else: pass fname = os.path.join(catalogdir, 'NRL-NVSS_uniquecatalog_filtered_5.68.FINAL') sources = [] fread = open(fname, 'r') # Skip header line = fread.readline() cnt = 1 while 1: line = fread.readline() if not line: break sources.append(CatalogSource()) line = line.split() sources[-1].id = cnt sources[-1].name = 'NRLNVSS_%s' % line[0] cnt+=1 sources[-1].ra = float(line[1]) # deg sources[-1].dec = float(line[2]) # deg sources[-1].e_ra = float(line[3]) # deg sources[-1].e_dec = float(line[4]) # deg sources[-1].total_flux = float(line[5]) # mJy sources[-1].e_total_flux = float(line[6]) # mJy sources[-1].peak_flux = float(line[7]) # mJy/bm sources[-1].e_peak_flux = float(line[8]) # mJy/bm sources[-1].maj = float(line[9])*3600. # arcsec sources[-1].min = float(line[10])*3600. # arcsec sources[-1].pa = float(line[11]) # deg sources[-1].field = line[0][:8] sources[-1].catalog_id = catalog_dict['nrl_nvss']['id'] fread.close() with open(psqlf, 'w') as fwrite: for src in sources: fwrite.write('%s %s %s %s %s %s %s %s %s %s %s %s %s ' '%s %s %s %s %s %i\n' % ( src.id, src.name, src.ra, src.e_ra, src.dec, src.e_dec, src.total_flux, src.e_total_flux, src.peak_flux, src.e_peak_flux, src.maj, src.e_maj, src.min, src.e_min, src.pa, src.e_pa, src.rms, src.field, src.catalog_id)) catio_logger.info(' -- wrote {} NRL-NVSS sources to nrl_nvss_psql.txt'. format(len(sources))) return sources