;----------------------------------------------------------------------- pro animate_lats,info,func ; ; Animate latitude slices in one of two ways, according to input func: ; In time (at fixed latitude) func = 'time_fixlat' ; In latitude (at fixed ut) func = 'lat_fixut' ; ; Get state info: ; lat = *info.plat fields = *info.fields field = fields[lat.ifield] data = *field.data file = *info.pfile wanim_xsize=450 & wanim_ysize=450 mag = 0 & if field.grid_type eq 'magnetic' then mag = 1 ; ;print,'Enter animate_lats: lat.fmin,max=',lat.fmin,lat.fmax ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; ; Animate in time (fixed latitude): ; widget_control,/hourglass case func of "time_fixlat": begin animbase = widget_base(title=$ 'Animate lat slices in time (fixed latitude)') nframes = field.ntime ; ; Set min,max for constant scale: ; Save current: ; savemtime = lat.mtime & saveimtime = lat.imtime savefmin = lat.fmin & savefmax = lat.fmax saveut = lat.ut ; ; Calculate min,max for entire animation if not already fixed: ; if lat.fmin ge lat.fmax then begin ; user has not set minmax lat.fmin = 1.e36 & lat.fmax = -1.e36 for i=0,nframes-1 do begin lat.imtime = i deflatdata,lat,data fminmax,*lat.data,fmin,fmax,file.missing_value if fmin lt lat.fmin then lat.fmin = fmin if fmax gt lat.fmax then lat.fmax = fmax endfor print,'animate_lats: calculated fmin,max=',lat.fmin,lat.fmax endif else $ print,'animate_lats: using already set fmin,max=',lat.fmin,lat.fmax ; ; Load frames and run cw_animate: ; animate = cw_animate(animbase,wanim_xsize,wanim_ysize,nframes) add_animid,info,animate widget_control,animbase,/realize for i=0,nframes-1 do begin lat.imtime = i lat.mtime = file.mtimes[*,lat.imtime] lat.ut = lat.mtime[1]+lat.mtime[2]/60. deflatdata,lat,data *info.plat = lat window,xsize=wanim_xsize,ysize=wanim_ysize,/pixmap windo = !d.window wset,windo pltlat,info,/animate cw_animate_load,animate,frame=i,window=windo,/track ; print,'Animate lat in time (fixed lat): frame=',i,' out of ',nframes,$ ; ' lat.fmin,max=',lat.fmin,lat.fmax endfor ; lat.mtime = savemtime & lat.imtime = saveimtime lat.fmin = savefmin & lat.fmax = savefmax lat.ut = saveut *info.plat = lat cw_animate_run,animate,nframes=nframes end ; animate in time (fixed latitude) ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; ; Animate in latitude (fixed ut): ; "lat_fixut": begin animbase = widget_base(title='Animate in latitude (fixed ut)') nframes = field.nlat savelat = lat.slat savefmin = lat.fmin & savefmax = lat.fmax ; ; Calculate min,max for entire animation if not already fixed: ; if lat.fmin ge lat.fmax then begin ; minmax is *not* fixed lat.fmin = 1.e36 & lat.fmax = -1.e36 for i=0,nframes-1 do begin lat.slat = (*field.lats)[i] deflatdata,lat,data fminmax,*lat.data,fmin,fmax,file.missing_value if fmin lt lat.fmin then lat.fmin = fmin if fmax gt lat.fmax then lat.fmax = fmax endfor print,'animate_lats: calculated fmin,max=',lat.fmin,lat.fmax endif else $ print,'animate_lats: using already set fmin,max=',lat.fmin,lat.fmax ; ; Load frames and run cw_animate: ; animate = cw_animate(animbase,wanim_xsize,wanim_ysize,nframes) add_animid,info,animate widget_control,animbase,/realize for i=0,nframes-1 do begin lat.slat = (*field.lats)[i] deflatdata,lat,data *info.plat = lat window,xsize=wanim_xsize,ysize=wanim_ysize,/pixmap windo = !d.window wset,windo pltlat,info,/animate cw_animate_load,animate,frame=i,window=windo,/track ; print,'Animate lat slices in latitude (fixed ut): frame=',i,' out of ',$ ; nframes,' lat.fmin,max=',lat.fmin,lat.fmax endfor lat.fmin = savefmin & lat.fmax = savefmax lat.slat = savelat *info.plat = lat cw_animate_run,animate,nframes=nframes end ; ; Unknown animation type: ; else: print,'>>> animate_lats: unknown animation type func=',func endcase widget_control,hourglass=0 xmanager,"Map Animation",animbase,event_handler="anim_event" ;info = save_info end