def parseSFind (lines, pristine=False): for linenum, line in enumerate (lines): if line[0] == '#': continue a = line.strip ().split () source = Holder () source.ra = parsehours (a[0]) source.dec = parsedeglat (a[1]) if a[1][0] in '+-': ofs = 1 else: ofs = 0 for i, name in enumerate (_sfindMiscColumns): substr = line[_sfindMiscOffsets[i]+ofs:_sfindMiscOffsets[i+1]+ofs] if '*' in substr: val = None else: val = float (substr) * _sfindUnits[i] setattr (source, name, val) if (not pristine and source.totflux is not None and source.pkflux is not None and source.totflux < source.pkflux): # Sfind docs say you can occasionally get this for # unresolved sources if the fitted Gaussian parameters are # smaller than the beamsize. source.totflux = source.pkflux if source.pkflux_uc == 0.: # Sometimes the precision in the text output is # insufficient; be conservative. source.pkflux_uc = 0.0005 * 1e-3 if source.pkflux_uc is None: source.totflux_uc = None else: source.totflux_uc = abs (source.totflux * source.pkflux_uc / source.pkflux) if source.ra_uc == 0.: # as with pkflux_uc source.ra_uc = 0.0005 * A2R if source.dec_uc == 0.: source.dec_uc = 0.005 * A2R yield source