File: NEDQueryPlot.py

package info (click to toggle)
astlib 0.13.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,520 kB
  • sloc: ansic: 37,511; sed: 8,839; python: 3,881; makefile: 17
file content (146 lines) | stat: -rw-r--r-- 6,103 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/usr/bin/python
#File: NEDQueryPlot/NEDQueryPlot.py
#Created: Sat Dec 15 17:16:16 2012
#Last Change: Sat Dec 15 17:23:11 2012
# -*- coding: utf-8 -*-
#
# Fetches DSS image at a given position from Skyview, makes a plot listing NED
# matches found in image

#-----------------------------------------------------------------------------
import sys
import os
import math
try:
    from urllib.request import urlretrieve
except ImportError:
    from urllib import urlretrieve
from astLib import *
import astropy.io.fits as pyfits
import pylab

#-----------------------------------------------------------------------------
def queryNED(RAMin, RAMax, decMin, decMax):
    """Queries NED, returns list of objects. RAMin, RAMax, decMin, decMax, all
    in degrees

    """

    # Just galaxies, groups
    urlretrieve("http://nedwww.ipac.caltech.edu/cgi-bin/nph-allsky?ra_constraint=Between&ra_1=%.6fd&ra_2=%.6fd&dec_constraint=Between&dec_1=%.6fd&dec_2=%.6fd&glon_constraint=Unconstrained&glon_1=&glon_2=&glat_constraint=Unconstrained&glat_1=&glat_2=&hconst=73&omegam=0.27&omegav=0.73&corr_z=1&z_constraint=Unconstrained&z_value1=&z_value2=&z_unit=z&flux_constraint=Unconstrained&flux_value1=&flux_value2=&flux_unit=Jy&frat_constraint=Unconstrained&ot_include=ANY&in_objtypes1=GGroups&in_objtypes1=Galaxies&nmp_op=ANY&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA+or+Longitude&of=ascii_tab&zv_breaker=30000.0&list_limit=5&img_stamp=YES"
    % (RAMin, RAMax, decMin, decMax), "result.txt")

    inFile = open("result.txt", "r")
    lines = inFile.readlines()

    dataStarted = False
    labels = []
    names = []
    RAs = []
    decs = []
    sourceTypes = []
    redshifts = []
    for line in lines:
        bits = line.split("\t")
        if bits[0] == "1":
            dataStarted = True
        if dataStarted == True:
            labels.append(bits[0])
            names.append(bits[1])
            RAs.append(float(bits[2]))
            decs.append(float(bits[3]))
            sourceTypes.append(str(bits[4]))
            if bits[6] == '':
                redshifts.append('N/A')
            else:
                redshifts.append(str(bits[6]))

    return ({'labels': labels, 'names': names, 'RAs': RAs, 'decs': decs,
            'sourceTypes': sourceTypes, 'redshifts': redshifts})
    #-------------------------------------------------------------------------
# Main

# Query NED at this position - it's Stephan's quintet
RADeg = 338.98963
decDeg = 33.95991
name = "Stephan's Quintet"

if os.path.exists("fitsImages") == False:
    os.makedirs("fitsImages")
fitsFolder = "fitsImages"

outImageName = name.replace(" ", "_")+".png"
outFITS = name.replace(" ", "_")+".fits"

print("... fetching image from skyview ...")
if os.path.exists(fitsFolder+os.path.sep+outFITS) == True:
    os.remove(fitsFolder+os.path.sep+outFITS)
urlretrieve("http://skyview.gsfc.nasa.gov/cgi-bin/images?Position="+str(RADeg)+","+str(decDeg)+"&Size=0.1&Pixels=1000&Projection=Tan&Grid=J2000&Survey=digitized+sky+survey&Coordinates=J2000&Return=fits",
fitsFolder+os.path.sep+outFITS)

img = pyfits.open(fitsFolder+os.path.sep+outFITS)
wcs = astWCS.WCS(fitsFolder+os.path.sep+outFITS)
imgData = img[0].data
RAMin, RAMax, decMin, decMax=wcs.getImageMinMaxWCSCoords()
objs = queryNED(RAMin, RAMax, decMin, decMax)

fig = pylab.figure(figsize=(10,14))
pylab.figtext(0.5, 0.96, name, fontsize=20, horizontalalignment='center')
pylab.figtext(0.5, 0.94, "R.A, Dec. (J2000) = %s, %s" %
    (astCoords.decimal2hms(RADeg, ":"), astCoords.decimal2dms(decDeg, ":")),
    fontsize=14, horizontalalignment='center')

plot = astPlots.ImagePlot(imgData, wcs, cutLevels=[2000,7000], axes=[0.125,
        0.425, 0.8, 0.5])
plot.addPlotObjects([RADeg], [decDeg], 'actPosition', symbol='cross',
    color='cyan', size=8.0)

pylab.figtext(0.125, 0.35, "NED Matches:", fontweight='bold', fontsize=16)
pylab.figtext(0.125, 0.325, "ID", fontsize=14, horizontalalignment='left',
    verticalalignment='baseline', fontweight='bold')
pylab.figtext(0.16, 0.325, "Name", fontsize=14, horizontalalignment='left',
    verticalalignment='baseline', fontweight='bold')
pylab.figtext(0.42, 0.325, "R.A. (deg.)", fontsize=14,
    horizontalalignment='left', verticalalignment='baseline',
    fontweight='bold')
pylab.figtext(0.57, 0.325, "Dec. (deg.)", fontsize=14,
    horizontalalignment='left', verticalalignment='baseline',
    fontweight='bold')
pylab.figtext(0.72, 0.325, "Type", fontsize=14, horizontalalignment='left',
    verticalalignment='baseline', fontweight='bold')
pylab.figtext(0.8, 0.325, "Redshift", fontsize=14, horizontalalignment='left',
    verticalalignment='baseline', fontweight='bold')
rowSpacing=0.02

if len(objs['RAs']) > 0:
    plot.addPlotObjects(objs['RAs'], objs['decs'], 'nedObjects',
        objLabels=objs['labels'], size=8.0)
    for i in range(len(objs['RAs'])):
        pylab.figtext(0.125, 0.32-(i+1)*rowSpacing, objs['labels'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
        pylab.figtext(0.16, 0.32-(i+1)*rowSpacing, objs['names'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
        pylab.figtext(0.42, 0.32-(i+1)*rowSpacing, "%.6f" % objs['RAs'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
        pylab.figtext(0.57, 0.32-(i+1)*rowSpacing, "%.6f" % objs['decs'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
        pylab.figtext(0.72, 0.32-(i+1)*rowSpacing, objs['sourceTypes'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
        pylab.figtext(0.8, 0.32-(i+1)*rowSpacing, objs['redshifts'][i],
            fontsize=10, horizontalalignment='left',
            verticalalignment='baseline')
else:
    pylab.figtext(0.5, 0.32-rowSpacing, 'No matches found', fontsize=10,
        fontstyle='italic', horizontalalignment='center',
        verticalalignment='baseline')

plot.draw()
plot.save(outImageName)

pylab.close()
img.close()