pro lasteit, index, data, number, $ w171=w171, w195=w195, w284=w284, w304=w304, wall=wall, wave=wave, $ norebin=norebin, notv=notv, rebin=rebin, $ ; uleft=uleft, uright=uright, lleft=lleft, lright=lright, $ noscale=noscale, refresh=refresh, fill_cube=fill_cube, $ quality=quality, prepit=prepit, debug=debug, $ deriv_hist=deriv_hist, sobel_weight=sobel_weight ; <<sobel_scale ;+ ; Name: lasteit ; ; Purpose: read and display most recent EIT images ; ; Input Parameters: ; number - number of images to read (default=1) ; ; Output Parameters: ; info - EIT instrument parameter (string array, 1 per image) ; 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 ; quality - minimum quality "accepted" (see data_quality.pro) ; (or, if set as flag, default=90%) ; ; Calling Sequence: ; lasteit [info, data, number, /w171, /w195, /w284, /304] ; ; Calling Examples: ; lasteit ; display most recent 171 image ; lasteit,/w195 ; ditto for 195 ; lasteit,info,data,5,/w304 ; most recent 5 304 images ; ; return info and data ; lasteit,/wall ; most recent all wavelenghts ; lasteit,index,data,50, rebin=256,/quality ; last "50" @171, ; ; rebin->256, quality>90 ; ; ; History: ; 5-feb-1996 (S.L.Freeland) ; 23-apr-1996 (s.l.freeland) tvscl display if /noscale set ; 3-mar-1997 (S.L.Freeland) use genx (IDL eit_struct based) catalog ; instead of old ascii catalog ; 14-mar-1997 (S.L.Freeland) insure chronological order on output ; add QUALITY keyword and function ; 23-jul-1997 (S.L.Freeland) apply QUALITY *BEFORE* FILL ; 6-Feb-1998 (S.L.Freeland) allow Al +1 (entrance filter degradation) ; 17-Oct-1998 (S.L.Freeland) enable PREPIT , optional call to sobel_scale ; 29-Oct-1998 (S.L.Freeland) pass DERIV_HIST to sobel_scale ; 28-Nov-2000 (S.L.Freeland) protect against out of order catalog ; ; Restrictions: ; Full disk only, Files in $EIT_QUICKLOOK ;- common lasteit_blk, last_index, last_text ; 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 ; ----------------------------------------------- debug=keyword_set(debug) notv=keyword_set(notv) tvit=1-notv 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 ; ----------------------------------------------- if not keyword_set(norebin) and not keyword_set(rebin) then rebin=512 if not keyword_set(number) then number=1 eit_genx_cat,cat_name=cat_name,/name_only ; genx catalog? refresh=keyword_set(refresh) or n_elements(last_index) eq 0 if refresh then begin case 1 of file_exist(cat_name): begin eit_genx_cat,/full_fov, last_index, last_text ss=sort_index(last_index,/ss) last_index=last_index(ss) last_text=last_text(ss) endcase else: begin message,/info,"No GENX-QKL catalog " + cat_name + " online, reading recent headers... read_eit,eit_files(last=2), last_index last_index=sort_index(last_index) last_text=get_infox(last_index,/fmt_tim, $ 'WAVELNTH,FILTER,naxis1,naxis2,EXPDUR,OBJECT', $ format='a,a,a,a,a,a') endcase endcase 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 ss=where(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',count) if debug then stop if count eq 0 then begin message,/info,"Sorry, no images with requested parameters..." return endif if number gt count then message,/info,"Sorry, Only " + $ strtrim(count,2) + " images match your parameters" number=number < count ; read the data arrays ss=(ss(count-number:count-1)) ; ------------ read "selected" files -> 3D + structure via read_eit --------- files=eit_file2path(last_index(ss).filename) files=files(sort(files)) read_eit, files, index, data, outsize=rebin info=last_text(ss) if keyword_set(prepit) then begin box_message,'Prepping data...' eit_prep, index, data=data, outindex, outdata data=temporary(outdata)>0 data(where(data eq min(data)))=0 noscale=1 case 1 of keyword_set(sobel_weight): data=sobel_scale(index,data,$ sobel_weight=sobel_weight,minper=5,hi=2000) else: data=bytscl(do_eit_scaling(data>0<1000,/log,/no_prep)) endcase endif ; ------- cleanup ------- 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 if keyword_set(fill_cube) and sscnt gt 1 then eit_fill_cube,data 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 ; ---------------------------------------------------------------------- return end
Last revised: - Wed May 9 21:45:22 2007- F. Auchère