function qsimbad_star, objname, search=search, srad=srad, radu=radu ;+ ;NAME: ; QSIMBAD_STAR ; ;PURPOSE: ; Search SIMBAD for individual star information, or query for stars ; in a given search radius around a SIMBAD resolved star or an RA ; and DEC. NOT Simbad 4 compatible. ; ;CALLING SEQUENCE: ; values = qsimbad_star(objname, [/search, srad=srad, radu=radu]) ; ;INPUTS: ; objname - string containing object name or RA and DEC (/search only). ; ;OPTIONAL INPUT KEYWORDS: ; /search - if set, only prints SIMBAD objects within search radius. ; srad - search radius, input as string. If not provided, default is '10'. ; radu - search radius units, input as string. Recognized units are: ; 'arcsec','arcmin','deg'. Default is 'arcmin' ; ;OUTPUTS: ; Returns string vector 'values'. Contains RA, DEC, pmRA, and pmDE. ; If ran in /search mode returns values = 0. ; ;EXAMPLES: ; ;Query one object only from SIMBAD - ;IDL>values = qsimbad_star('HR 514') ;HR 514 ;RA= 01 45 38.7571 ;DE= -25 03 09.396 ;PM= 159.48 -72.38 ;Bmag, Vmag= 5.700 5.310 ;Spectral Type= F2IV ;Radial Velocity= 14.5 +/- 2.0 ;Parallax= 36.46 +/- 1.01 ;IDL> print, values ;01 45 38.7571 -25 03 09.396 159.48000 -72.380000 ; ;Searching a specified region around a SIMBAD resolved object - ;IDL>values = qsimbad_star('HR 514',/search,srad='10',radu='arcsec') ;HR 514 ;identifier |otyp| FK5 (2000/2000) | B&V magnitudes | sp. type | nref ;CCDM J01456-2504AB | **| 01 45 38.76 -25 03 09.4 | 5.70 5.31 | F2IV | 39 ;IDL>print, values ; 0 ; ;Searching around an RA and DEC - ;IDL>values = qsimbad_star('00 17 43.5 +45 15 30',/search,srad='1',radu='arcmin') ;00 17 43.5 +45 15 30 ; No objects within 1 arcmin of 00 17 43.5 +45 15 30. ;IDL>print, values ; 0 ; ;HISTORY: ; Written, Carl Melis (UCLA) July 2006 ;- ;change ascii character '+' in objname to special URL code '%2B' tmpobjname = objname plscut = strpos(objname,'+') while (plscut NE -1) do begin frnkenobj = '' frnkenobj = strmid(objname,0,plscut)+'%2B'+strmid(objname,plscut+1) objname = frnkenobj plscut = strpos(objname,'+') endwhile ;dissect object name and make it compatible with the SIMBAD URL obtest = strsplit(strcompress(objname),/extract) if (n_elements(obtest) GT 1) then begin newobjname=strjoin(strsplit(objname,/extract),'+') endif $ else begin newobjname=objname endelse print, tmpobjname ;run search keyword script if keyword_set(search) then begin whoami = 0 for j=0,n_elements(obtest)-1 do begin ntst = valid_num(obtest[j]) if (ntst EQ 0) then whoami = 1 endfor if not keyword_set(srad) then srad='10' if not keyword_set(radu) then radu='arcmin' srchstring = 'magnitudes' if (whoami EQ 0) then begin if (n_elements(obtest) LT 6) then begin print, ' To search you must specify RA and DEC in sexigessimal format.' print, ' For example: 00 17 45 -21 06 08' return, 0 endif if (strmid(obtest[3],0,1) EQ '+') then begin dsign = '%2B' obtest[3]=dsign+strmid(obtest[3],1) endif result = webget("http://simbad.u-strasbg.fr/sim-id.pl?protocol=html&Ident="+obtest[0]+'+'+obtest[1]+'+'+obtest[2]+'++'+obtest[3]+'+'+obtest[4]+'+'+obtest[5]+"&NbIdent=around&Radius="+srad+"&Radius.unit="+radu) endif $ else begin result = webget("http://simbad.u-strasbg.fr/sim-id.pl?protocol=html&Ident="+newobjname+"&NbIdent=around&Radius="+srad+"&Radius.unit="+radu) errtst = where(strpos(strtrim(result.text,2),'error') NE -1, errtstcnt) if (errtstcnt GT 0) then begin print, '**'+tmpobjname+' is not resolved in SIMBAD**' return, 0 endif endelse hh = strtrim(result.text,2) flagsrc = strpos(strlowcase(hh),strlowcase(srchstring)) gsrc = where(flagsrc NE -1, Ngsrc) nobj = strmid(strcompress(hh[gsrc[0]-1]),3,1) nobj = float(nobj) if (nobj GT 0) then begin print, strmid(strcompress(hh[gsrc[0]]),0,68) for i=1,nobj do begin strsrc = '' strsrc = hh[gsrc[0]+i] srccut1 = strpos(strsrc,'>') srccut2 = strpos(strsrc,'<',1) print, strmid(strsrc,srccut1+1,srccut2-srccut1-1), strcompress(strmid(strsrc,srccut2+4)) endfor endif $ else begin print, ' No objects within '+srad+' '+radu+' of '+tmpobjname+'.' endelse return, 0 endif ;query SIMBAD for star information, break down webpage result = webget("http://simbad.u-strasbg.fr/sim-id.pl?protocol=html&Ident="+newobjname) hh = strtrim(result.text,2) ;define search strings substringi = 'ICRS' substringp = 'Proper' substringm = 'magn' substrings = 'Spectral' substringv = 'Radial' substringd = 'Parallaxes' pstring = 'magnitudes' ;do quick check to make sure SIMBAD didn't do something weird flagps = strpos(strlowcase(hh),strlowcase(pstring)) gps = where(flagps NE -1, Ngps) if (Ngps GT 0) then begin strsrc = '' strsrc = hh[gps[0]+1] srccut1 = strpos(strsrc,'>') srccut2 = strpos(strsrc,'<',1) newobjname = strmid(strsrc,srccut1+1,srccut2-srccut1-1) newobjname=strjoin(strsplit(newobjname,/extract),'+') result = webget("http://simbad.u-strasbg.fr/sim-id.pl?protocol=html&Ident="+newobjname) hh = strtrim(result.text,2) endif ;search downloaded webpage for desired info, print it as it's found flagi = strpos(strlowcase(hh),strlowcase(substringi)) gi = where(flagi NE -1, Ngi) if (Ngi GT 0) then begin stri = strarr(40) stri = strsplit(strcompress(hh[gi[0]+3]),/extract) ;additional code needed below to fix the '-00' ded problem ;use it as test for sexigessimality in RA and DEC ra1 = strnumber(strmid(stri[0],3),rah) ra2 = strnumber(stri[1],ram) ra3 = strnumber(stri[2],ras) de1 = strnumber(stri[3],ded) de2 = strnumber(stri[4],dem) de3 = strnumber(stri[5],des) ;print, format='("RA= ", I2,1X,I2,1X,F6.3)', rah, ram, ras ;print, format='("DE= ", I3,1X,I2,1X,F6.3)', ded, dem, des if ((de3 EQ 1) AND (de2 EQ 1)) then begin rastr = strmid(stri[0],3)+' '+stri[1]+' '+stri[2] destr = stri[3]+' '+stri[4]+' '+stri[5] endif $ else begin rastr = strmid(stri[0],3)+' '+stri[1] destr = stri[2]+' '+stri[3] endelse print, 'RA= ', rastr print, 'DE= ', destr flagp = strpos(hh,substringp) gp = where(flagp NE -1, Ngp) if (Ngp Gt 0) then begin strp = strarr(40) strp = strsplit(strcompress(hh[gp[0]+3]),/extract) prec1p = strnumber(strmid(strp[0],3),pmra) prec2p = strnumber(strp[1],pmde) print, format='("PM= ", F9.2,1X,F9.2)', pmra, pmde endif $ else begin pmra=0. pmde=0. endelse flagm = strpos(strlowcase(hh),strlowcase(substringm)) gm = where(flagm NE -1, Ngm) if (Ngm GT 0) then begin x=0 strm = strarr(40) strm = strsplit(strcompress(hh[gm[0]+2]),/extract) bmag1 = strnumber(strmid(strm[0],3),bmag) vmag1 = strnumber(strmid(strm[1],3),vmag) if ((bmag1 EQ 1) AND (vmag1 EQ 1)) then begin print, format='("Bmag, Vmag= ", F8.3,1X,F8.3)', bmag, vmag x=1 endif if ((bmag1 EQ 1) AND (x EQ 0)) then begin print, format='("Bmag= ", F8.3)', bmag endif if ((vmag1 EQ 1) AND (x EQ 0)) then begin print, format='("Vmag= ", F8.3)', vmag endif endif $ else begin bmag=99. vmag=99. endelse flags = strpos(strlowcase(hh),strlowcase(substrings)) gs = where(flags NE -1, Ngs) if (Ngs GT 0) then begin strs = strarr(40) strs = strsplit(strcompress(hh[gs[0]+3]),/extract) spt1 = strs[1] spt1cut = strpos(spt1,'<') if (spt1cut GE 0) then begin spt1 = strmid(spt1,0,spt1cut) endif print, 'Spectral Type= ', spt1 endif $ else begin spt1 = '' endelse flagv = strpos(strlowcase(hh),strlowcase(substringv)) gv = where(flagv NE -1, Ngv) if (Ngv GT 0) then begin strv = strarr(40) strv = strsplit(strcompress(hh[gv[0]+3]),/extract) rav1 = strnumber(strv[1],rav) rav2 = strv[2]+strv[3] rav2cut = strpos(rav2,'[',0) if (rav2cut GE 0) then begin rav2 = strmid(rav2,rav2cut+1) endif rav2cut = strpos(rav2,']',0) if (rav2cut GE 0) then begin rav2 = strmid(rav2,0,rav2cut) endif print, format='("Radial Velocity= ", F5.1,1X,A3,1X,F4.1)', rav, '+/-', rav2 endif $ else begin rav = 0. rav2 = 0. endelse flagd = strpos(strlowcase(hh),strlowcase(substringd)) gd = where(flagd NE -1, Ngd) if (Ngd GT 0) then begin strd = strarr(40) strd = strsplit(strcompress(hh[gd[0]+3]),/extract) plx1 = strnumber(strmid(strd[0],3),plx) plx2 = strd[1] plx2cut = strpos(plx2,'[',0) if (plx2cut GE 0) then begin plx2 = strmid(plx2,plx2cut+1) endif plx2cut = strpos(plx2,']',0) if (plx2cut GE 0) then begin plx2 = strmid(plx2,0,plx2cut) endif print, format='("Parallax= ", F6.2,1X,A3,1X,F5.2)', plx, '+/-', plx2 endif $ else begin plx = 0. plx2 = 0. endelse endif $ else begin print, '**'+tmpobjname+' is not resolved in SIMBAD**' return, 0 endelse values = strarr(4) values[0] = rastr & values[1] = destr values[2] = pmra & values[3] = pmde return, values end