/usr/share/gnudatalanguage/astrolib/adxy.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | pro adxy, hdr, a, d, x, y, PRINT = print, ALT = alt ;Ra, Dec to X,Y
;+
; NAME:
; ADXY
; PURPOSE:
; Use a FITS header to convert astronomical to pixel coordinates
; EXPLANATION:
; Use an image header to compute X and Y positions, given the
; RA and Dec (or longitude, latitude) in decimal degrees.
;
; CALLING SEQUENCE:
; ADXY, HDR ;Prompt for Ra and DEC
; ADXY, hdr, a, d, x, y, [ /PRINT, ALT= ]
;
; INPUTS:
; HDR - FITS Image header containing astrometry parameters
;
; OPTIONAL INPUTS:
; A - Right ascension in decimal DEGREES, scalar or vector
; D - Declination in decimal DEGREES, scalar or vector
;
; If A and D are not supplied, user will be prompted to supply
; them in either decimal degrees or HR,MIN,SEC,DEG,MN,SC format.
;
; OPTIONAL OUTPUT:
; X - row position in pixels, same number of elements as A and D
; Y - column position in pixels
;
; X and Y will be in standard IDL convention (first pixel is 0) and not
; the FITS convention (first pixel is 1). As in FITS an integral
; value corresponds to the center of a pixel.
; OPTIONAL KEYWORD INPUT:
; /PRINT - If this keyword is set and non-zero, then results are displayed
; at the terminal.
; ALT - single character 'A' through 'Z' or ' ' specifying an alternate
; astrometry system present in the FITS header. The default is
; to use the primary astrometry or ALT = ' '. If /ALT is set,
; then this is equivalent to ALT = 'A'. See Section 3.3 of
; Greisen & Calabretta (2002, A&A, 395, 1061) for information about
; alternate astrometry keywords.
;
; OPERATIONAL NOTES:
; If less than 5 parameters are supplied, or if the /PRINT keyword is
; set, then the X and Y positions are displayed at the terminal.
;
; If the procedure is to be used repeatedly with the same header,
; then it would be faster to use AD2XY.
;
; PROCEDURES CALLED:
; AD2XY, ADSTRING(), EXTAST, GETOPT(), TEN()
;
; REVISION HISTORY:
; W. Landsman HSTX January, 1988
; Use astrometry structure W. Landsman January, 1994
; Changed default ADSTRING format W. Landsman September, 1995
; Check if latitude/longitude reversed in CTYPE keyword W. L. Feb. 2004
; Added ALT keyword W. Landsman September 2004
; Work for non-spherical coordinate transformation W. Landsman May 2005
; More informative error message if astrometry missing W.L. Feb 2008
; Cosmetic updates W.L. July 2011
; Use version 2 astrometry structure J. P. Leahy July 2013
;-
Compile_opt idl2
On_error,2
npar = N_params()
if ( npar EQ 0 ) then begin
print,'Syntax - ADXY, hdr, [a, d, x, y, /PRINT, ALT= ]'
print,'If supplied, A and D must be in decimal DEGREES'
return
endif
extast, hdr, astr, noparams, ALT = alt ;Extract astrometry from FITS header
if ( noparams LT 0 ) then begin
if alt EQ '' then $
message,'ERROR - No astrometry info in supplied FITS header' $
else message, $
'ERROR - No alt=' + alt + ' astrometry info in supplied FITS header'
endif
astr2 = TAG_EXIST(astr,'AXES') ; Version 2 structure
if npar lt 3 then begin
RD: print,'Coordinates must be entered in either decimal (2 parameter) '
print,' or sexagesimal (6 parameter) format'
inp = ''
read,'ADXY: Enter coordinates: ',inp
radec = getopt(inp,'F')
case N_elements(radec) of
2: begin
a = radec[0] & d = radec[1]
end
6: begin
a = ten(radec[0:2]*15.) & d = ten(radec[3:5])
end
else: begin
print,'ADXY: ERROR - Either 2 or 6 parameters must be entered'
return
end
endcase
endif
case strmid( astr.ctype[0], 5,3) of
'GSS': gsssadxy, astr, a, d, x, y ;HST Guide star astrometry
else: ad2xy, a, d, astr, x, y ;All other cases
endcase
if (npar lt 5) || keyword_set( PRINT ) then begin
npts = N_elements(a)
tit = strmid(astr.ctype,0,4)
spherical = strmid(astr.ctype[0],4,1) EQ '-'
if spherical then begin
fmt = '(2F9.4,A,2X,2F8.2)'
str = adstring(a,d,1)
tit = strmid(astr.ctype,0,4)
tit = repchr(tit,'-',' ')
flip = astr2 ? astr.reverse : $
(tit[0] EQ 'DEC ') || (tit[0] EQ 'ELAT') || (tit[0] EQ 'GLAT')
if flip then tit = rotate(tit,2)
print,' ' + tit[0] + ' ' + tit[1] + ' ' + tit[0] + $
' ' + tit[1] + ' X Y'
for i = 0l, npts-1 do $
print,FORMAT = fmt, a[i], d[i], str[i], x[i], y[i]
endif else begin
unit1 = strtrim( sxpar( hdr, 'CUNIT1'+alt,count = N_unit1),2)
if N_unit1 EQ 0 then unit1 = ''
unit2 = strtrim( sxpar( hdr, 'CUNIT2'+alt,count = N_unit2),2)
if N_unit2 EQ 0 then unit2 = ''
print,' ' + tit[0] + ' ' + tit[1] + ' X Y'
if (N_unit1 GT 0) || (N_unit2 GT 0) then $
print,unit1 ,unit2,f='(t5,a,t14,a)'
for i=0l, npts-1 do $
print, a[i], d[i], x[i], y[i], f='(2F9.4,2X,2F8.2)'
endelse
endif
return
end
|