/usr/share/gnudatalanguage/astrolib/hreverse.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 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 | pro hreverse, oldim, oldhd, newim, newhd, subs, SILENT = silent, ERRMSG= errmsg
;+
; NAME:
; HREVERSE
; PURPOSE:
; Reverse an image about either dimension and update FITS astrometry
; EXPLANATION:
; Reverse an image about either the X or Y axis, and create a new
; header with updated astrometry for the reversed image.
;
; CALLING SEQUENCE:
; HREVERSE,oldim,oldhd, [ subs, /SILENT ] ;Update input image and header
; or
; HREVERSE, oldim, oldhd, newim, newhd, [ subs, /SILENT ]
;
; INPUTS:
; OLDIM - the original image array
; OLDHD - the original image header
;
; OPTIONAL INPUTS:
; SUBS - Subs equals 1 to reverse the order of the X dimension,
; 2 to reverse Y order. If omitted, then HREVERSE will
; prompt for this scalar parameter.
;
; OPTIONAL OUTPUTS:
; NEWIM - the rotated image, with the same dimensions as Oldim
; NEWHD - header for newim containing updated astrometry info
; If output parameters are not supplied, the program
; will modify the input parameters OLDIM and OLDHD
; to contain the rotated image and updated header.
;
; OPTIONAL KEYWORD INPUT:
; SILENT - if set and non-zero, then informative messages are suppressed.
;
; OPTIONAL KEYWORD OUTPUT:
; ERRMSG - If this keyword is supplied, then any error mesasges will be
; returned to the user in this parameter rather than depending on
; on the MESSAGE routine in IDL. If no errors are encountered
; then a null string is returned.
;
; SIDE EFFECTS:
; A right-handed coordinate system is converted into a left-
; handed one, and vice-versa.
;
; PROCEDURE:
; The User's Library procedure REVERSE is used to reverse the image.
; The CD and CRPIX header parameters are updated for the new header.
; For AIPS type astrometry, the CDELT parameters are also updated.
; A history record is also added to the header
;
; PROCEDURES USED:
; CHECK_FITS, EXTAST, REVERSE(), STRN(), SXADDPAR
; MODIFICATION HISTORY:
; Written, Aug. 1986 W. Landsman, STI Corp.
; Error modifying CROTA angles corrected 9-23-88
; Added format keyword, J. Isensee, July, 1990
; Work for ST Guide Star images, W. Landsman HSTX, May 1995
; Compute CRPIX1 correctly for X reversal W. Landsman HSTX August 1995
; Converted to IDL V5.0 W. Landsman September 1997
; Added ERRMSG, Use double precision formatting, W. Landsman April 2000
; Recognize PC00n00m astrometry matrix W. Landsman December 2001
; Use V6.0 notation W. Landsman October 2012
;-
On_error, 2
npar = N_params()
if npar LE 1 then begin
print,'Syntax: HREVERSE, oldim, oldhd, [ subs, /SILENT, ERRMSG = ]'
print,' or HREVERSE, oldim, oldhd, newim, newhd, [ subs, /SILENT]'
return
endif
save_err = arg_present(errmsg) ;Does user want error msgs returned?
; Check for valid 2-D image & header
check_FITS, oldim, oldhd, dimen, /NOTYPE, ERRMSG = errmsg
if errmsg NE '' then begin
if ~save_err then message,'ERROR - ' + errmsg,/CON
return
endif
if N_elements(dimen) NE 2 then begin
errmsg = 'ERROR - Input image array must be 2-dimensional'
if ~save_err then message,'ERROR - ' + errmsg,/CON
return
endif
xsize = dimen[0] & ysize = dimen[1]
if npar EQ 3 then subs = newim
READSUBS: if (npar NE 3) && (npar NE 5) then $
read,'Enter 1 to reverse X dimension, 2 to reverse Y dimension: ',subs
if ( subs NE 2 ) && ( subs NE 1 ) then begin
message,'ERROR - Illegal Value of Subs parameter',/CON
if npar then npar = npar -1 ;Make npar even
goto, READSUBS
endif
newhd = oldhd
axis_name = ['X','Y']
if ~keyword_set(SILENT) then message, /INF, $
'Now reversing ' + strn(xsize) + ' by ' + strn(ysize) + ' image about ' + $
axis_name[subs-1] + ' dimension'
if npar GE 4 then newim = reverse( oldim,subs ) else $
oldim = reverse( oldim,subs )
label = 'HREVERSE: ' + strmid(systime(),4,20)
sxaddpar, newhd, 'HISTORY', label+ $
' Reversed About '+ axis_name[SUBS-1] + ' Dimension'
; Update astrometry info if it exists
extast, oldhd, astr, noparams
if noparams LT 0 then goto, DONE
if subs EQ 1 then begin
if strmid( astr.ctype[0],5,3) EQ 'GSS' then begin
cnpix = -astr.xll -xsize
sxaddpar, newhd, 'CNPIX1', cnpix
sxaddpar, newhd, 'XPIXELSZ', -astr.xsz
endif else begin
crpix1 = xsize - (astr.crpix[0]-1)
sxaddpar, newhd, 'CRPIX1', crpix1
if (noparams LT 2) || (noparams EQ 3) then $
sxaddpar, newhd, 'CDELT1', -astr.cdelt[0] $
else begin ;If so, then convert them
sxaddpar, newhd, 'CD1_1', -astr.cd[0,0]
sxaddpar, newhd, 'CD2_1', -astr.cd[1,0]
endelse
endelse
endif else begin
if strmid(astr.ctype[0],5,3) EQ 'GSS' then begin
cnpix = -astr.yll -ysize
sxaddpar, newhd, 'CNPIX2', cnpix
sxaddpar, newhd, 'YPIXELSZ', -astr.ysz
endif else begin
crpix2 = ysize - (astr.crpix[1]-1)
sxaddpar, newhd, 'CRPIX2', crpix2
if (noparams LT 2) or (noparams EQ 3) then $
sxaddpar, newhd, 'CDELT2', -astr.cdelt[1] $
else begin ;If so, then convert them
sxaddpar, newhd, 'CD1_2', -astr.cd[0,1]
sxaddpar, newhd, 'CD2_2', -astr.cd[1,1]
endelse
endelse
endelse
DONE:
if npar LE 3 then oldhd = newhd ;update old header
return
end
|