Viewing contents of file '../idllib/ssw/allpro/astrmfix.pro'
pro astrmfix, hdr, chip
;+
; NAME:
; ASTRMFIX
; PURPOSE:
; Calculate a rough HST WFPC or FOC astrometry solution
; EXPLANATION:
; This program will calculate a rough HST WFPC or FOC astrometry solution
; using the keyword PSANGLEV3 which gives the angle of the V3 axis of
; HST. Called by WFPCREAD.
;
; CALLING SEQUENCE:
; AstrmFix, hdr, chip
;
; INPUT - OUTPUT:
; hdr - FITS header (string array) from either WFPC or FOC. Header will
; be updated with rough astrometry
;
; INPUT:
; chip - Scalar (typically 0-3) giving the WFPC chip to read.
;
; HISTORY:
; ??-???-???? Written by Eric W. Deutsch
; 22-OCT-1992 Changed all calculations to double precision. (E. Deutsch)
; 22-OCT-1992 Updated PC Pixel size of 0.04389 from WFPC IDT OV/SV manual(EWD)
; 22-OCT-1992 Updated WF Pixel size of 0.1016 from WFPC IDT OV/SV manual(EWD)
; 11-JAN-1993 Added warning message and changed CD001001... to CD1_1... (EWD)
;-
if (n_params(0) lt 2) then begin
print,'Call: ASTRMFIX,header_array,chip_number (1-8)'
print,'e.g.> ASTRMFIX,h,3
return
endif
check=sxpar(hdr,'INSTRUME')
if (strn(check) ne 'WFPC') and (strn(check) ne 'FOC') then begin
print,'ASTRMFIX: Unrecognized INSTRUME in Header. [END]'
return
endif
V3word='PSANGLV3'
angle=sxpar(hdr,'PSANGLV3')
if (!err lt 0) then begin
V3word='PA_V3'
angle=sxpar(hdr,'PA_V3')
if (!err lt 0) then begin
print,'ASTRMFIX: Keyword PSANGLV3 or PA_V3 must be in header. [END]'
return
endif
endif
print,'HST V3 Position Angle('+V3word+'): ',angle
if (strn(check) eq 'FOC') then begin
cam=strn(check) & hand=-1
check=sxpar(hdr,'OPTCRLY')
pix_size=0 & base_angle=0
if (strn(check) eq 'F96') then begin
base_angle=55.26
pix_size=.022
endif
if (strn(check) eq 'F48') then begin
base_angle=-65.
pix_size=.044
endif
if (pix_size eq 0) then begin
print,'ASTRMFIX: Unrecognized Relay or missing keyword OPTCRLY. [END]'
return
endif
angle=base_angle+angle
goto,CONVERT
endif
if (chip gt 4) then chip=chip-4
if (chip lt 1) or (chip gt 4) then begin
print,'ASTRMFIX: Chip number must be 1-8 or 1-4. [END]'
return
endif
cam=strn(sxpar(hdr,'CAMERA')) & hand=1
if (cam ne 'WF') and (cam ne 'WFC') and (cam ne 'PC') then begin
print,'ASTRMFIX: Unrecognized Camera type "',cam,'". [STOP]'
return
endif
if (cam eq 'PC') then begin
base_angle=270
pix_size=.04389d ; from WFPC IDL OV/SV report
endif else begin
base_angle=315
pix_size=.1016 ; from WFPC IDL OV/SV report
endelse
chip_rot=[3,0,1,2]
base_angle=base_angle+chip_rot(chip-1)*90
angle=base_angle-angle+180
CONVERT:
flag=1
while (flag eq 1) do begin
flag=0
if (angle lt 0) then begin
angle=angle+360 & flag=1
endif
if (angle ge 360) then begin
angle=angle-360 & flag=1
endif
endwhile
extast,hdr,astr,noparams ; to do CD1_1 -> CD001001
; if necessary
; out of date (at 1/11/93) but
; will the reverse become
; fashionable again?
cd = dblarr(2,2)
print,'North Points to angle: ',angle
tmp='Left' & if (hand eq -1) then tmp='Right'
print,'East Points 90 degrees to the ',tmp
angle=angle/180.d*!dpi
cd(0,0) = cos(angle+!dpi/2.*hand)
cd(0,1) = sin(angle+!dpi/2.*hand)
cd(1,0) = cos(angle)
cd(1,1) = sin(angle)
cd = cd*pix_size/3600.d
message,'Astrometry in header modified!!',/INF
sxaddpar,hdr,'CD1_1',cd(0,0),' dRA/dX Calculated from '+V3word
sxaddpar,hdr,'CD1_2',cd(0,1),' dRA/dY Calculated from '+V3word
sxaddpar,hdr,'CD2_1',cd(1,0),' dDEC/dX Calculated from '+V3word
sxaddpar,hdr,'CD2_2',cd(1,1),' dDEC/dY Calculated from '+V3word
return
end