;+ ; NAME: ; forecast_movie ; PURPOSE: ; Updates movies for IPS forecast web site ; CATEGORY: ; WWW ; CALLING SEQUENCE: PRO forecast_movie, hdr, ff, $ filter = filter , $ ftp = ftp , $ magnetic = magnetic , $ synoptic = synoptic , $ skymap = skymap , $ skysweep = skysweep , $ insitu = insitu , $ remote = remote , $ solardisk = solardisk , $ planarcut = planarcut , $ fast = fast , $ silent = silent , $ png = png , $ gif = gif , $ ut = ut , $ nv_filter = nv_filter , $ planets = planets , $ env_filter = env_filter ; INPUTS: ; (none) ; OUTPUTS: ; (none) ; OPTIONAL INPUTS: ; /magnetic if set, make movies from magnetic field data (wson files) ; (default is to use 'nv3d' files ; /fast use time-dependent tomography files from ; $NAGOYA/fast (default: corotating tomography files ; from $NAGOYA/slow ; filter=filter explicitly sets the file name filter (overriding the defaults ; 'nv3d' or 'wson' ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; TimeGet, TimeSet, TimeUnit, TimeSystem, forecast_ftp, vu_movie ; InitVar, forecast_cfg, TimeOp, jpl_body, vu_prefix ; RESTRICTIONS: ; Can onLy be run on Linux ; idl_startup.pro needs to be run. This requires that the environment ; variable IDL_STARTUP is set. ; PROCEDURE: ; This is run as part of the cron job sync_daily_ips after new ; final (averaged) tomography files have been created. ; ; MODIFICATION HISTORY: ; APR-2000, Paul Hick (UCSD/CASS) ; SEP-2002, Paul Hick (UCSD/CASS) ; Adapted to accept magnetic field 'bb3d' files ; Added /forcecd keyword to the vu_movie calls that read files (to be passed ; down to vu_select and eventually FindAllFiles). ; JUN-2003, Paul Hick (UCSD/CASS) ; bb3d files are now called wson files ; JUL-2003, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Adapted to make movies of remoteviews with hcs embedded ;- InitVar, fast , /key InitVar, ftp , /key InitVar, synoptic , /key InitVar, skymap , /key InitVar, skysweep , /key InitVar, insitu , /key InitVar, remote , /key InitVar, solardisk , /key InitVar, planarcut , /key InitVar, magnetic , /key InitVar, silent , 0 speed = 1-magnetic density = 1-magnetic brad = magnetic btang = magnetic InitVar, filter, vu_prefix(magnetic=magnetic,/silent) IF IsType(env_filter,/defined) THEN BEGIN setenv, env_filter+'='+filter add2label = filter ENDIF IF strpos(filter, '*.*') EQ -1 THEN filter += '*.*' mag_type = magnetic ? ' ('+strupcase(strmid(filter,0,3))+'/NOAA)' : '' ; Only needed for remote views with magnetic data in it InitVar, nv_filter, vu_prefix(/silent) InitVar, png, /key InitVar, gif, /key png = png or 1-gif IF total( [synoptic, skymap, skysweep, insitu, remote, solardisk, planarcut] ) EQ 0 THEN BEGIN synoptic = 1 skymap = 1 skysweep = 1 insitu = 1 remote = 1 solardisk= 1 planarcut= 1 ENDIF kind = (['slow','fast'])[fast] tm_label = (['corotating','time-dependent'])[fast]+mag_type root = filepath(root=forecast_cfg(/root), kind) dat_dir = filepath(root=root, subdir=(['final','raw'])[fast], '') ; Source directory of tomography files movie = filepath(root=root, subdir='movie', '') ; Destination directory of animations htm_dir = filepath(root=forecast_cfg(/html), subdir=kind, 'current') ; Adjust the ROI extracted from the 3D data files. ; Only used if hdr and ff don't exist yet. roi_offset= forecast_cfg(/roi_offset)*(1-fast) local2ut = forecast_cfg(/local2ut) ; Difference PST to GST mtime = forecast_cfg(/movie_time) ; Time period for the movie delay = forecast_cfg(kind, /movie_delay) ; Delay for animations skip = forecast_cfg(/movie_skip) ; Skip files when making movies upto = forecast_cfg(/round_time) rounds = round(forecast_cfg(/round_time, /mmsec))/1000 maxelo = forecast_cfg(/maxelo, /degrees) ; Max elongation remote views scale = forecast_cfg(/scale_skymap) ngrid = forecast_cfg(/remote_ngrid) fovsize = forecast_cfg(/remote_fovsize) volsize = forecast_cfg(/remote_volsize) ; Limit radial distance used in remote views color_v = forecast_cfg(/remote_color_v) color_n = forecast_cfg(/remote_color_n) range_v = forecast_cfg(kind, /remote_range_v) range_n = forecast_cfg(kind, /remote_range_n) opa_v = forecast_cfg(kind, /remote_opacity_v) opa_n = forecast_cfg(kind, /remote_opacity_n) breakn = forecast_cfg(/planarcut_break_n) breakv = forecast_cfg(/planarcut_break_v) InitVar, ut, TimeSystem(local2ut,/silent) ut = TimeGet(ut, TimeUnit(/sec), roundt=rounds) ut = TimeOp(/add, ut, mtime) location= forecast_cfg(ut, /remote_location) ; Sets longitude to NaN ylshow = forecast_cfg(kind, /ylshow, /degrees) delt = forecast_cfg(/insitu_delt) ; tx_range is used only by vu_insitu (passed by _extra) ; and sets the range of time axis for insitu plot to ut +/- 15 days ; ts_range als is used only by vu_insitu (passed there by _extra) ; and sets the range of the data plotted. For corotating tomography this does ; not need to be set and will be set equal to tx_range in vu_insut. ; For time-dependent tomography the data should not extend to far into the ; future (no more than 4 days), so ts_range is set to start at the ; beginning of the time axis (tx_range[0]) and extend past the current ; time by 4 days.) tx_range = forecast_cfg(/insitu_trange) ; Sets range of time axis for insitu plot to ut +/- 15 days ; IMPORTANT: ; The first vu_movie call encountered will read all the necessary tomography ; files and store the results in 'hdr' and 'ff', so this first vu_movie call ; needs to process ut_extra; for subsequent calls ut_extra will not be used. ; For this reason it is best to pass ut_extra as 'ut_extra=ut_extra, to the ; first vu_movie call for every type of plot (every IF-THEN block below), ; even those that don't really need it. Since ut_extra is most important for ; the insitu plots, this block was moved to the first position here. ; (Or even better, explicitly call vu_select here to read all data, so none ; of the vu_movie calls need to read anything). ; The movies typically cover 7 days, from -6 days to +1 day relative to the ; current time (as set in the 'ut' variable passed as first argument to ; vu_movie. By default only tomography files inside this range are read. ; To force reading tomography files outside this range, ut_extra must be set. ut_extra = [0,0] IF fast THEN BEGIN ts_range = [tx_range[0],4] ; Prevent time series from going too far into future ; Time-dependent tomography insitu plots needs an extra ts_range[0] = -15 days prior to the ; start of the movie to get a complete timeseries for the first frame of the movie (at -15 days), ; and needs an extra ts_range[1] = +4 days for the last frame of the movie ut_more = ts_range ut_extra = [min([ut_extra[0],ut_more[0]]),max([ut_extra[1],ut_more[1]])] ENDIF IF solardisk THEN BEGIN ; The solar disk maps need an extra ut_off = -4 days to reach that far back in time ; for each frame of the movie ut_more = [forecast_cfg(/disk_dtime),0] ut_extra = [min([ut_extra[0],ut_more[0]]),max([ut_extra[1],ut_more[1]])] ENDIF ;IF skysweep AND NOT magnetic THEN BEGIN ; This is also done in vu_movie. Probably better to do it here. ; ; ; For plasma density and velocity skysweeps are build up from cuts along the ; ; local meridian. To completely fill the sky at the start of the movie, and additional ; ; full day of tomography files is needed before the movie start time ; ; ut_more = [-1,0] ; ut_extra = [min([ut_extra[0],ut_more[0]]),max([ut_extra[1],ut_more[1]])] ; ;ENDIF ; Setting 'marker' forces vu_select to only look for files with a marker encoded in ; the filename (note: if the input directory contains ONLY files with markers, ; this is actually not necessary, but probably safer). ; Setting 'highmark' forces vu_select to only retain files with the highest ; marker value (i.e. the latest time-dependent tomography run). ; (note: if 'marker' is not set or zero, then 'highmark' is ignored). marker = fast highmark = fast IF insitu THEN BEGIN source = (['acesw','aceb'])[magnetic] vu_movie, ut, 'earth_insitu' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ speed = speed , $ brad = brad , $ source = source , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /nofuture , $ /timeseries , $ /forecast , $ delt = delt , $ nosequence = 1-fast , $ tm_label = tm_label , $ ts_range = ts_range , $ tx_range = tx_range , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent source = (['rcelias','aceb'])[magnetic] vu_movie, ut, 'earth_insitu' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ density = density , $ btang = btang , $ source = source , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /nofuture , $ /timeseries , $ /forecast , $ delt = delt , $ nosequence = 1-fast , $ tm_label = tm_label , $ ts_range = ts_range , $ tx_range = tx_range , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent FOR iplanet=0,n_elements(planets)-1 DO BEGIN planet = strcompress(strlowcase(planets[iplanet]),/rem) vu_movie, ut, planet+'_insitu' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ speed = speed , $ brad = brad , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /nofuture , $ /timeseries , $ /forecast , $ delt = delt , $ nosequence = 1-fast , $ tm_label = tm_label , $ ts_range = ts_range , $ tx_range = tx_range , $ roi_offset = roi_offset, $ silent = silent , $ png = png , $ gif = gif , $ ;ut_extra = ut_extra , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, planet+'_insitu' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ density = density , $ btang = btang , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /nofuture , $ /timeseries , $ /forecast , $ delt = delt , $ nosequence = 1-fast , $ tm_label = tm_label , $ ts_range = ts_range , $ tx_range = tx_range , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDFOR ENDIF IF solardisk THEN BEGIN vu_movie, ut, 'earth_solardisk' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ speed = speed , $ brad = brad , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ ut_off = ut_off , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_solardisk' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ density = density , $ btang = btang , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ ut_off = ut_off , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDIF IF synoptic THEN BEGIN vu_movie, ut, 'synoptic' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ speed = speed , $ brad = brad , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ timeaxis = 1-fast , $ /earth , $ /forecast , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ add2label =add2label , $ ylshow = ylshow , $ /degrees , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'synoptic' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ density = density , $ btang = btang , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ timeaxis = 1-fast , $ /earth , $ /forecast , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label , $ ylshow = ylshow , $ /degrees , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDIF IF planarcut THEN BEGIN body = jpl_body(/earth,/string)+'&' body = [body, big_body('Stereo A'), big_body('Stereo B')] vu_movie, ut, 'planarcut' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ speed = speed , $ brad = brad , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label , $ /from_centered_ecliptic , $ /heliocentric , $ body = body , $ radius = 1.5 forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'planarcut' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ density = density , $ btang = btang , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ silent = silent , $ png = png , $ gif = gif , $ add2label = add2label , $ /from_centered_ecliptic , $ /heliocentric , $ body = body , $ radius = 1.5 forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDIF IF skymap AND NOT magnetic THEN BEGIN vu_movie, ut, 'earth_skysnap' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ /ips_speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ maxelo = -1 , $ /legend , $ /compass , $ /degrees , $ minelo = 11.5 , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysnap' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_glevel , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ maxelo = -1 , $ /legend , $ /compass , $ /degrees , $ minelo = 11.5 , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysnap' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ maxelo = maxelo , $ /degrees , $ scale = scale , $ /legend , $ /compass , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysnap' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_glevel , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ maxelo = maxelo , $ /degrees , $ scale = scale , $ /legend , $ /compass , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDIF IF skysweep AND NOT magnetic THEN BEGIN vu_movie, ut, 'earth_skysweep' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ /ips_speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /track , $ /solar , $ /fillsky , $ maxelo = -1 , $ /legend , $ /compass , $ minelo = 11.5 , $ /degrees , $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysweep' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_glevel , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /track , $ /solar , $ /fillsky , $ maxelo = -1 , $ /legend , $ /compass , $ minelo = 11.5 , $ /degrees , $ silent = silent , $ png = png , $ gif = gif , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysweep' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /track , $ /solar , $ /fillsky , $ maxelo =maxelo , $ /degrees , $ scale = scale , $ /legend , $ /compass , $ silent = silent , $ png = png , $ gif = gif , $ minelo = 11.5 , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_skysweep' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /ips_glevel , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ /track , $ /solar , $ /fillsky , $ maxelo = maxelo , $ /degrees , $ scale = scale , $ /legend , $ /compass , $ silent = silent , $ png = png , $ gif = gif , $ minelo = 11.5 , $ /strictlabels forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ENDIF IF remote THEN BEGIN CASE magnetic OF 0: BEGIN vu_movie, ut, 'earth_remoteview' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ /speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ location = location , $ /ecliptic , $ ngrid = ngrid , $ volsize = volsize , $ voxel = 2 , $ full_range = range_v , $ full_opa = opa_v , $ cue_radial = [1, 1.45, 0.1, 1], $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif ;removed fovsize=fovsize, /eqangle, full_color = color_v forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent vu_movie, ut, 'earth_remoteview' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /density , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ location = location , $ /ecliptic , $ ngrid = ngrid , $ voxel = 2 , $ volsize = volsize , $ full_color = color_n , $ full_range = range_n , $ full_opa = opa_n , $ cue_radial = [1, 1.45, 0.1, 1], $ silent = silent , $ png = png , $ gif = gif forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent END 1: BEGIN vu_movie, ut, 'earth_remoteview' , $ path = dat_dir , $ filter = filter , $ marker = marker , $ highmark = highmark , $ movie_destination = movie , $ /speed , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ location = location , $ /ecliptic , $ ngrid = ngrid , $ voxel = 2 , $ volsize = volsize , $ full_range = range_v , $ full_opa = opa_v , $ cue_radial = [1,1.45, 0.1, 1], $ roi_offset = roi_offset, $ ut_extra = ut_extra , $ silent = silent , $ png = png , $ gif = gif , $ nv_filter = nv_filter , $ nv_hdr = nv_hdr , $ nv_ff = nv_ff , $ type_bb = vu_type_insitu('earth_remoteview', /brad, add2label=add2label) forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent ; nv_hdr, nv_ff are passed from the previous call to vu_movie. vu_movie, ut, 'earth_remoteview' , $ path = dat_dir , $ filter = filter , $ movie_destination = movie , $ /density , $ hdr = hdr , $ ff = ff , $ movie_file = movie_file, $ upto = upto , $ skip = skip , $ delay = delay , $ location = location , $ /ecliptic , $ ngrid = ngrid , $ voxel = 2 , $ volsize = volsize , $ full_color = color_n , $ full_range = range_n , $ full_opa = opa_n , $ cue_radial = [1, 1.45, 0.1, 1], $ silent = silent , $ png = png , $ gif = gif , $ nv_filter = nv_filter , $ nv_hdr = nv_hdr , $ nv_ff = nv_ff , $ type_bb = vu_type_insitu('earth_remoteview', /btang, add2label=add2label) forecast_movie_cp, kind, movie_file, htm_dir, ftp, silent=silent END ENDCASE ENDIF RETURN & END