pro eit_fulldisk, t0, t1, index, data, $
w171=w171, w195=w195, w284=w284, w304=w304, wall=wall, wave=wave, $
norebin=norebin, notv=notv, rebin=rebin, display=display, $ ;
uleft=uleft, uright=uright, lleft=lleft, lright=lright, $
noscale=noscale, refresh=refresh, fill_cube=fill_cube, $
quality=quality, nmissb=nmissb, $
hours=hours, sizes=sizes, count=count
;+
; Name: eit_fulldisk
;
; Purpose: read, return and optionally display Full Disk EIT images
;
; Input Parameters:
; t0 - start time of interest
; t1 - stop time of interest
;
; Output Parameters:
; index - EIT instrument parameters (structures from read_eit)
; data - EIT image or image cube
;
; Keyword Parameters:
; /w171, /w195, /w284, /304 - desired wavelength (default=171)
; /wall - show all four wavel.
; /norebin - return full size (default reduced to 512x512)
; rebin - size to rebin to (assumed sqare!)
; /notv - just return the data
; /display - if set, display data (via xstepper(
; nmissb - maxmimum number of missing blocks to accept
; quality - (empirical data check) minimum quality "accepted"
; (see data_quality.pro, or, if set as flag, default=90%)
; sizes - sizes to accept (ex: 256,512,1024) - default=all full fov
; hours - if set, limit cadence to this number of hours
; (see grid_data.pro and timegrid.pro for generic details)
; count - number of files found matching criteria
;
; Calling Sequence:
; eit_fulldisk, t0, t1, index, data [, /w171, /w195, /w284, /304]
;
; Calling Examples:
;
; eit_fulldisk,t0,t1,index,data,/w304 ; 304 full between t0&t1
; eit_fulldisk,t0,t1,index,data,hour=4,/w195,nmiss=0 ; 195, perfect only,
; ; 4-hour cadence
; eit_fulldisk,t0,t1,index,data,hour=4,/w195, $ ; same as previous
; nmissb=0, sizes=[512,1024] ; but ignore 256x256 etc
; eit_fulldisk,t0,t1,index,data,/w171, $ ; good to perfect 171s
; nmissb=2,sizes=1024 ; only 1024x1024
; eit_fulldisk,t0,t1,index,/w284 ; INDEX only (no data read)
;
; History:
; 29-may-1997 - S.L.Freeland - from 'lasteit.pro'
; (and asap, lasteit will just call this routine)
; 2-Apr-1998 - S.L.Freeland - added COUNT output keyword
; add /LZ search if nothing in qkl
;
; Restrictions:
; Full disk only, Files in $EIT_QUICKLOOK
;
; Calls:
; read_eit, eit_files, eit_file2path, get_eit_info,
; grid_data, anytim, delvarx, [wdef, xstepper....]
;
; Common Blocks:
; eit_fulldisk_blk - speed up subsequent wavelenths for same time interva;
;-
common eit_fulldisk_blk, t0c, t1c, last_index
if n_elements(t0c) eq 0 then begin
t0c=''
t1c=''
endif
; wdef display parameters ; specify display quadrant for window
; -----------------------------------------------
uleft=keyword_set(uleft)
lleft=keyword_set(lleft)
lright=keyword_set(lright)
uright=1-(uleft or lleft or lright) ; default
; -----------------------------------------------
case 1 of
data_chk(t0,/undefined): begin
t0=reltime(/yest,/day_only)
t1=ut_time()
endcase
data_chk(t1,/undefined): t1=timegrid(t0,/day,/string) ; 24 hours
else:
endcase
tvit=keyword_set(display) or (n_params() le 2)
notv=1-tvit
if notv and n_params() eq 0 then begin
message,/info,"You requested NOTV but did not supply output parameters...
return
endif
; -------- /WALL logic (recursive) --------------
swaves=strtrim([171,195,284,304],2)
quad=['uleft','uright','lleft','lright']
if keyword_set(wall) then begin ; recurse
if not keyword_set(rebin) then rebin=384 ; smaller
for i=0,3 do exe=execute("lasteit,rebin=rebin,/w" + swaves(i) + ",/" + quad(i))
return
endif
; -----------------------------------------------
norebin=keyword_set(norebin)
case 1 of
keyword_set(rebin):
n_elements(sizes) eq 1: begin
norebin=sizes(0) eq 1024
endcase
else: rebin=512
endcase
if not keyword_set(number) then number=1
;eit_genx_cat,cat_name=cat_name,/name_only ; genx catalog?
t0x=anytim(t0,/yohkoh)
t1x=anytim(t1,/yohkoh)
refresh=keyword_set(refresh) or n_elements(t0c) eq 0 or $
((t0c ne t0x) and (t1c ne t1x))
if refresh then begin
files=eit_files(t0,t1)
if files(0) eq '' then files=eit_files(t0,t1,/lz)
break_file,files,ll,pp,ff,ee,vv
fnames=ff+ee
uss=uniqo(fnames,sort(fnames))
read_eit,files(uss), last_index
last_text=get_eit_info(last_index)
t0c=t0x
t1c=t1x
endif
case 1 of
keyword_set(wave): ; user passed explicitly
keyword_set(w195): wave=195
keyword_set(w284): wave=284
keyword_set(w304): wave=304
else: wave=171
endcase
ok = last_index.WAVELNTH eq wave and $
(last_index.filter eq 'Clear' or last_index.filter eq 'Al +1') and $
last_index.object eq 'full FOV'
if data_chk(nmissb,/defined) then ok = ok and (last_index.nmissb le nmissb)
sok=intarr(n_elements(ok))
if n_elements(sizes) eq 0 then sok=sok+1 else $
for i=0,n_elements(sizes)-1 do sok= sok or $
(( last_index.naxis1 eq sizes(i) ) and ( last_index.naxis2 eq sizes(i)))
ok=ok and sok
ss=where(ok,count)
if count eq 0 then begin
message,/info,"Sorry, no images with requested parameters..."
return
endif
if keyword_set(hours) then ss=ss(grid_data(last_index(ss),hours=hours))
; ------------ read "selected" files -> 3D + structure via read_eit ---------
files=eit_file2path(last_index(ss).filename)
files=files(sort(files))
delvarx,index, data
if n_elements(files) eq 1 then files=files(0)
read_eit, files, index, data, outsize=rebin, nodata=(n_params() le 3)
info=get_eit_info(index)
if data_chk(data,/defined) then begin
; ------- cleanup -------
if keyword_set(fill_cube) and count gt 1 then eit_fill_cube,data ; fill cube from neighbors
scale=1-keyword_set(noscale)
if scale then begin
message,/info,"NOTE: Scaling dark subtracted data"
message,/info,"(use /noscale to suppress scaling)"
data=bytscl(alog10((data - eit_dark()) > 1))
endif
bytit=tvit and (1-scale)
; ----------------------------------------------------------------------
if keyword_set(quality) then begin
message,/info,"applying quality filter..."
if quality eq 1 then qlim=90 else qlim=quality
good=where(data_quality(data,/hist,quality_thresh=qlim),sscnt)
if sscnt eq 0 then begin
message,/info,"None of the images meet your quality else begin
endif else begin
if sscnt eq n_elements(ss) then begin
message,/info,"All images OK..."
endif else begin
message,/info,"Some Bad image found, filtering..."
index=index(good)
data=temporary(data(*,*,good))
endelse
endelse
endif
; ------------------------- display on request ----------------------------
if tvit then begin
if n_elements(rebin) eq 0 then message,/info,"Not displaying due to large size..." else begin
eit_colors,wave
if number eq 1 then begin
wdef, xx, uright=uright, uleft=uleft, lleft=lleft, lright=lright, im=data
call_procedure,(['tv','tvscl'])(bytit),data
xyouts, 5,5,strcompress(info(0)), $
size=1.5*((size(data))(1)/512.) < 2.,/device
endif else begin
xstepper,data, info
endelse
endelse
endif
endif
; ----------------------------------------------------------------------
return
end
Last revised: - Wed May 9 21:45:17 2007- F. Auchère