EIT Software Listings

 

anal
obsolete
response
util

 

Previous Routine
Next Routine

 

Listing of $SSW/soho/eit/idl/util/eit_getlimb.pro

 


pro eit_getlimb, eitfiles, xx, yy, rr, $
   fit=fit, find=find, guess=guess, log=log, update=update, $
      image=eitimage, header=header, outdir=outdir, re_fit = re_fit
;+
;   Name: eit_getlimb
;
;   Purpose: get the limb parameters from EIT FITS or fit limb if not present
;
;   Input Parameters:
;      eitfiles - EIT FITS file list
;
;   Output Parameters:
;     xx -  sun center, full res EIT pixels
;     yy -  sun center, full res EIT pixels
;     rr -  S radius,   full res EIT pixels
;      
;   Keyword Parameters:
;      fit   -  switch, if set, call fit_limb (default if no FITS params)
;      find  -  switch, if set, call find_limb
;      guess -  switch, if set, return guess (for fast prototyping)
;      update - switch, if set, update FITS file (add point info to header)
;      re_fit - switch, if set redo fitting even if in header
;
;   Calling Sequence:
;      eit_getlimb, eitfiles, xx,yy,rr [/fit, /find, /guess, /update]
;
;   Method:
;      get parameters from FITS file, fit_limb or find_limb , or guess
;  
;   History:
;      1-Feb-1996 - S.L.Freeland
;     15-Feb-1996 - S.L.Freeland - minor adjustments
;      3-Sep-1996 - J. Newmark -updated for whole mission paramters
;     14-May-2003 - S.L.Freeland - replace strsplit with ssw_strsplit    
;-
utc_repoint = anytim2utc('1996/04/16 23:30')
t_repoint = utc_repoint.mjd + 1.d-3*utc_repoint.time/86400.

eitpix=eit_pixsize()		; full res EIT pixel

nimg=n_elements(eitfiles)

xx=fltarr(nimg) & yy=fltarr(nimg) & rr=fltarr(nimg)	; output params

findit=keyword_set(find)
update=keyword_set(update)

pntkey=  ['CRPIX1','CRPIX2','RADIUS']
comments=['Sun Center X, EIT Pixels', 'Sun Center Y, EIT Pixels','Solar Radius'] 

npnt=n_elements(pntkey)
nvals=fltarr(npnt)
found=intarr(npnt)

findit  = keyword_set(find)
fitit   = keyword_set(fit)
guessit = keyword_set(guess)

finder=(["fit_limb,eitimage,xn,yn,rn,/quiet,pixel=eitpix, init=[bguess(0:1),bguess(2)*eitpix]", $
         "find_limb,eitimage,xn,yn,rn"])(findit)
fcom="(LIMB FINDER: " + (ssw_strsplit(finder,','))(0) + ")"

if update then begin				; output file names
   break_file, eitfiles, ll,pp,ff,ee,vv
   files=ff+ee+vv
   if not keyword_set(outdir) then outdir=pp
   onames=concat_dir(outdir,files)
endif

for i=0,nimg-1 do begin
;  try to get values from header 
   header=headfits(eitfiles(i))			   ; header first
   date_obs=eit_fxpar(header,'DATE_OBS')
   utc_obs = anytim2utc(date_obs)
   t_obs = utc_obs.mjd + 1.d-3*utc_obs.time/86400.
   if t_obs lt t_repoint then bguess=[506, 587, 371.] else $
               bguess=[506,511,371.]		

   x_sum = 1 & y_sum = 1
   realx=eit_fxpar(header,'p2_x') - eit_fxpar(header,'p1_x')+1
   if realx ne 1 then x_sum = fix(realx/eit_fxpar(header,'naxis1'))
   realy=eit_fxpar(header,'p2_y') - eit_fxpar(header,'p1_y')+1
   if realy ne 1 then y_sum = fix(realy/eit_fxpar(header,'naxis2'))
   bguess(0) = bguess(0)/x_sum & bguess(1) = bguess(1)/y_sum
   if x_sum eq y_sum then begin
       bguess(2) = bguess(2)/x_sum
       eitpix=eitpix*x_sum
   endif

;  ------------- first, check FITS header for pointing ---------------
   if 1-(findit or fitit)  then begin
      for j=0, npnt-1 do begin
         nvals(j)=(fxpar(header,pntkey(j),count=cnt))(0)
         found(j)=cnt ne 0
      endfor
      xx(i) = nvals(0) & yy(i) = nvals(1) & rr(i) = nvals(2)
   endif
   if keyword_set(re_fit) then found = found * 0
;  ---------------------------------------------------------------

;  -------------- if not in header, call limb fitter/finder --------
   ok=0
   case 1 of 
      total(found) eq 3: ok=1		; dont update (already encoded)
      guessit: begin 
         xx(i)=bguess(0) & yy(i) = bguess(1) & rr(i)=bguess(2)
         pcom="(ESTIMATED)"
      endcase
      else: begin 
         pcom=fcom
         message,/info,"Finding EUV limb for file: " + eitfiles(i)
         eitimage=readfits(eitfiles(i))
         exe=execute(finder)
         xx(i) = xn & yy(i) = yn & rr(i) = rn
      endcase
   endcase
;  ----------------------------------------------------------------

;  ------------- update FITS file if changed and requested --------
   if update and not ok then begin
      if n_elements(eitimage) eq 0 then eitimage=readfits(eitfiles(i), header)
      nvals=[xx(i),yy(i),rr(i)]
      for j=0,npnt-1 do fxaddpar,header,pntkey(j),nvals(j),comments(j)+pcom
      file_delete,onames(i)				; remove old
      message,/info,"Writing/Updating file: " + onames(i)
      fxwrite, onames(i), header, eitimage
   endif
;  ---------------------------------------------------------------
endfor

; return scaler for single image
if n_elements(xx) eq 1 then begin
   xx=xx(0)
   yy=yy(0)
   rr=rr(0)
endif

return
end


Web curator: Frédéric Auchère
Responsible NASA official: Joseph B. Gurman, Facility Scientist, Solar Data Analysis Center
joseph.b.gurman@gsfc.nasa.gov
+1 301 286-4767
NASA Goddard Space Flight Center
Solar Physics Branch / Code 682

Last revised: - Wed May 9 21:45:18 2007- F. Auchère