Source code for vespa.stars.extinction

from __future__ import print_function,division

import os,re
import logging
import subprocess as sp

try:
    from astropy.coordinates import SkyCoord
except:
    SkyCoord = None

[docs]def get_AV_infinity(ra,dec,frame='icrs'): """ Gets the A_V exctinction at infinity for a given line of sight. Queries the NED database using ``curl``. .. note:: It would be desirable to rewrite this to avoid dependence on ``curl``. :param ra,dec: Desired coordinates, in degrees. :param frame: (optional) Frame of input coordinates (e.g., ``'icrs', 'galactic'``) """ coords = SkyCoord(ra,dec,unit='deg',frame=frame).transform_to('icrs') rah,ram,ras = coords.ra.hms decd,decm,decs = coords.dec.dms if decd > 0: decsign = '%2B' else: decsign = '%2D' url = 'http://ned.ipac.caltech.edu/cgi-bin/nph-calc?in_csys=Equatorial&in_equinox=J2000.0&obs_epoch=2010&lon='+'%i' % rah + \ '%3A'+'%i' % ram + '%3A' + '%05.2f' % ras + '&lat=%s' % decsign + '%i' % abs(decd) + '%3A' + '%i' % abs(decm) + '%3A' + '%05.2f' % abs(decs) + \ '&pa=0.0&out_csys=Equatorial&out_equinox=J2000.0' tmpfile = '/tmp/nedsearch%s%s.html' % (ra,dec) cmd = 'curl -s \'%s\' -o %s' % (url,tmpfile) sp.Popen(cmd,shell=True).wait() AV = None with open(tmpfile, 'r') as f: for line in f: m = re.search('V \(0.54\)\s+(\S+)',line) if m: AV = float(m.group(1)) if AV is None: logging.warning('Error accessing NED, url={}'.format(url)) with open(tmpfile) as f: for line in f: logging.warning(line) os.remove(tmpfile) return AV