-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathquerysimbad.pro
More file actions
200 lines (184 loc) · 8.1 KB
/
querysimbad.pro
File metadata and controls
200 lines (184 loc) · 8.1 KB
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
PRO QuerySimbad, name, ra, de, id, Found = found, NED = ned, ERRMSG = errmsg, $
Verbose = verbose, CADC = cadc, CFA=cfa, Server=server, SILENT=silent, $
Print = print,Vmag=Vmag,Jmag=Jmag,Hmag=Hmag,Kmag=Kmag,parallax=parallax
;+
; NAME:
; QUERYSIMBAD
;
; PURPOSE:
; Query the SIMBAD/NED/Vizier astronomical name resolver to obtain coordinates
;
; EXPLANATION:
; Uses the IDL SOCKET command to query either the SIMBAD or NED nameserver
; over the Web to return J2000 coordinates. By default, QuerySimbad
; first queries the Simbad database, then (if no match found) the NED
; database, and then the Vizier database.
;
; For details on the SIMBAD service, see http://simbad.u-strasbg.fr/Simbad
; and for the NED service, see http://ned.ipac.caltech.edu/
;
; CALLING SEQUENCE:
; QuerySimbad, name, ra, dec, [ id, Found=, /NED, /CADC, ERRMSG=, /VERBOSE]
; /PRINT, Vmag=V, Jmag=J, Hmag=H, Kmag=Kmag, parallax=parallax
;
; INPUTS:
; name - a scalar string containing the target name in SIMBAD (or NED)
; nomenclature. For SIMBAD details see
; http://vizier.u-strasbg.fr/cgi-bin/Dic-Simbad .
;
; OUTPUTS:
; ra - Right ascension of the target in J2000.0 in *degrees*, scalar
; dec - declination of the target in degrees, scalar
;
; OPTIONAL INPUT KEYWORD:
; /CFA - if set, then use the Simbad server at the Center for Astrophysics
; rather than the default server in Strasbourg, France.
; ERRMSG = If defined and passed, then any error messages will be
; returned to the user in this parameter rather than
; depending on the MESSAGE routine in IDL. If no errors are
; encountered, then a null string is returned.
; /NED - if set, then only the nameserver of the NASA Extragalactic database
; is used to resolve the name and return coordinates. Note that
; /NED cannot be used with Galactic objects
; /VERBOSE - If set, then the HTTP-GET command is displayed
; /PRINT - if set, then output coordinates are displayed at the terminal
; By default, the coordinates are displayed if no output parameters
; are supplied to QUERYSIMBAD
; /SILENT - If set, then don't print warnings if multiple SIMBAD objects
; correspond to the supplied name.
; OPTIONAL OUTPUT:
; id - the primary SIMBAD (or NED) ID of the target, scalar string
; As of June 2009, a more reliable ID seems to be found when using
; CFA (/CFA) server.
;
; OPTIONAL KEYWORD OUTPUTS:
; found - set to 1 if the translation was successful, or to 0 if the
; the object name could not be translated by SIMBAD or NED
; Errmsg - if supplied, then any error messages are returned in this
; keyword, rather than being printed at the terminal. May be either
; a scalar or array.
; Server - Character indicating which server was actually used to resolve
; the object, 'S'imbad, 'N'ed or 'V'izier
; Vmag - supply to receive the SIMBAD V magnitude
; Jmag - supply to receive the SIMBAD J magntiude
; Hmag - supply to receive the SIMBAD H magnitude
; Kmag - supply to receive the SIMBAD K magnitude
; Parallax - supply to receive the SIMBAD parallax in milliarcseconds
;
; EXAMPLES:
; (1) Display the J2000 coordinates for the ultracompact HII region
; G45.45+0.06
;
; IDL> QuerySimbad,'GAL045.45+00.06'
; ===>19 14 20.77 +11 09 3.6
; PROCEDURES USED:
; REPSTR(), WEBGET()
; NOTES:
; The actual query is made to the Sesame name resolver
; ( see http://cdsweb.u-strasbg.fr/doc/sesame.htx ). The Sesame
; resolver first searches the Simbad name resolver, then NED and then
; Vizier.
; MODIFICATION HISTORY:
; Written by M. Feldt, Heidelberg, Oct 2001 <mfeldt@mpia.de>
; Minor updates, W. Landsman August 2002
; Added option to use NED server, better parsing of SIMBAD names such as
; IRAS F10190+5349 W. Landsman March 2003
; Turn off extended name search for NED server, fix negative declination
; with /NED W. Landsman April 2003
; Use Simbad Sesame sever, add /Verbose, /CADC keywords
; B. Stecklum, TLS Tautenburg/ W. Landsman, Feb 2007
; Update NED query to account for new IPAC format, A. Barth March 2007
; Update NED query to account for another new IPAC format, A. Barth
; July 2007
; Update message when NED does not find object W.L. October 2008
; Remove CADC keyword, add CFA keyword, warning if more than two
; matches W.L. November 2008
; Make NED queries through the Sesame server, add Server output
; keyword W.L. June 2009
; Don't get primary name if user didn't ask for it W.L. Aug 2009
; Added /SILENT keyword W.L. Oct 2009
; Added /PRINT keyword W.L. Oct 2011
; Added ability to get V, J, H, and K magnitudes as well as
; a parallax - jswift, Jan 2014
;-
compile_opt idl2
if N_params() LT 1 then begin
print,'Syntax - QuerySimbad, name, ra, dec, [ id, ]'
print,' Found=, /CFA, /NED, ERRMSG=, /VERBOSE]'
print,' Input - object name, scalar string'
print,' Output - Ra, dec of object (degrees)'
return
endif
Catch, theError
IF theError NE 0 THEN BEGIN
Catch,/CANCEL
void = cgErrorMsg(/Quiet)
RETURN
ENDIF
;;
printerr = ~arg_present(errmsg)
if ~printerr then errmsg = ''
object = repstr(name,'+','%2B')
object = repstr(strcompress(object),' ','%20')
if keyword_set(Cadc) then message,'CADC keyword is no longer supported'
if keyword_set(cfa) then base = 'vizier.cfa.harvard.edu/viz-bin' else $
base = 'cdsweb.u-strasbg.fr/cgi-bin'
if keyword_set(NED) then begin
QueryURL = "http://" + base + "/nph-sesame/-o/N?" + $
strcompress(object,/remove)
endif else begin
QueryURL = "http://" + base + "/nph-sesame/-oI?" + $
strcompress(object,/remove)
endelse
;;
if keyword_set(verbose) then print,queryURL
Result = webget(QueryURL)
found = 0
;;
Result=Result.Text
if arg_present(server) then $
server = strmid(result[1],2,1)
; look for J2000 coords
idx=where(strpos(Result, '%J ') ne -1,cnt)
if cnt GE 1 then begin
if cnt GT 1 then begin
if ~keyword_set(SILENT) then $
message,/INF,'Warning - More than one match found for name ' + name
idx = idx[0]
endif
found=1
ra = 0.0d & de = 0.0d
reads,strmid(Result[idx],2),ra,de
if N_params() GT 3 then begin
idx2= where(strpos(Result, '%I.0 ') ne -1,cnt)
if cnt GT 0 then id = strtrim(strmid(Result[idx2],4),2) else $
if ~keyword_set(SILENT) then $
message,'Warning - could not determine primary ID',/inf
endif
; Get V mag if present
vi = where(strpos(Result, '%M.V ') ne -1,vcnt)
if vcnt GE 1 then reads,strmid(Result[vi],4),vmag
; Get J mag if present
ji = where(strpos(Result, '%M.J ') ne -1,jcnt)
if jcnt GE 1 then reads,strmid(Result[ji],4),jmag
; Get H mag if present
hi = where(strpos(Result, '%M.H ') ne -1,hcnt)
if hcnt GE 1 then reads,strmid(Result[hi],4),hmag
; Get K mag if present
ki = where(strpos(Result, '%M.K ') ne -1,kcnt)
if kcnt GE 1 then reads,strmid(Result[ki],4),kmag
; Get parallax if present
plxi = where(strpos(Result, '%X ') ne -1,plxcnt)
if plxcnt GE 1 then reads,strmid(Result[plxi],2),parallax
ENDIF ELSE BEGIN
errmsg = ['No objects returned by SIMBAD. The server answered:' , $
strjoin(result)]
if printerr then begin
message, errmsg[0], /info
message,strjoin(result),/info
endif
ENDELSE
if found GT 0 && ((N_params() LT 2) || keyword_set(print)) then $
print,adstring(ra,de,1)
return
END