;+ ; NAME: ; SOLARWIND_LOAD ; ; PURPOSE: ; Routine provides solar wind (SW) data time-shifted to the bow-shock ; nose. Time resolution of data is variable with 1 minute as finest. ; SW data sources: OMNI-2, HRO, and WIND. Time shifting of the WIND ; data is based on the OMNI-2 metodology. ; Important difference is that we first average and then propagate ; averaged WIND quantities to the Earth. If there still is a strong ; irregularity in the SW speed after averaging, the code warns user. ; In all cases of insufficient data, the code produces nominal static ; SW parameters, following SPDF standards. Static nominal SW data is ; default output if no user preferences are specified in the ; program call. ; ; CATEGORY: ; Data Processing ; ; CALLING SEQUENCE: ; solarwind_load,swdata,dstout,trange, resol=resol, wind=wind, hro=hro, min5=min5, h1=h1, dst=dst ; ; INPUTS: ; trange : [tstart, tend] - time range (at the magnetopause) for SW data ; Times tstart and tend need to be one of types supported by TDAS ; (specifically, by the time_double.pro routine), in part: ; double seconds since 1970 (internal TDAS format) ; string format: 'YYYY-MM-DD/hh:mm:ss' ; OPTIONAL INPUT: ; resol : desired time resolution of the output data in seconds ; - if not set, SW data are provided in original time resolution ; ; KEYWORDS: ; wind - WIND observations used (they are convolved to desired resolution and ; then time-shifted to the bow-shock nose using OMNI-2 methodology. The ; code checks if the SW speed irregularities are too large and warns ; user when more sophisticated processing may be needed. ; hro - HRO data are used (most consistent approach up-to-date). The data are ; already propagated, so they are just convolved to desired resolution. ; min5 - use 5 min HRO merged database (default is to use 1 min HRO merged data) ; h1 - use OMNI-2 1 hour SW database. No convolution employed and parameter ; resol is ignored ; dst - get Dst index from the OMNI-2 database. This switch works independently ; on the other data keywords (for example, it provides Dst output even ; if HRO or WIND data are ordered). Dst is interpolated onto the time grid ; od requested data, if any. ; ; PARAMETERS: 3 parameters for outlier filtering are described and set at the ; beginning of the code. ; ; OUTPUTS: ; swdata: | t | Dp | Bz | of IMF at the bow-shock nose ; - 2D double array (ntpoints,3) ; dstout: | Dst | - Dst index on the 1-hour OMNI-2 time grid ; - double array (ntpoints) ; ; DEPENDENCIES: convolve_gaussian_1d.pro, remove_outliers.pro, repair.pro, ; wi_swe_load.pro, wi_mfi_load.pro, omni_hro_load.pro, omni2_load.pro, ; get_data.pro, xclip.pro, xdegap.pro, xdeflag.pro, cotrans.pro. The code ; is a lowest-level part of LMN transform package. ; ; MODIFICATION HISTORY: ; Written by: Vladimir Kondratovich 2007/12/28. ; Modified by Vladimir Kondratovich 2008/03/31. Mods do not change call syntax. The code ; is made modular with plug-in subroutines for each data source, so it became easy ; to add a new one. Existing ingest modules provide a template. ;- ; ; THE CODE BEGINS: pro solarwind_load,swdata,dstout,trange,resol=resol, wind=wind, hro=hro, min5=min5, h1=h1, dst=dst ;Foolproving it: if n_elements(swdata) gt 0 then print,'SOLARWIND_LOAD: Attention: SWDATA is output array. Its content will be overwritten!' if n_elements(dstout) gt 0 then print,'SOLARWIND_LOAD: Attention: DSTOUT is output array. Its content will be overwritten!' if (n_elements(trange) le 1) or (n_elements(trange) gt 2) then begin print,'SOLARWIND_LOAD: Input error: trange must be a 2-element array [Tstart, Tend]' print,'Times tstart and tend need to be one of types supported by TDAS' print,'(specifically, by the time_double.pro routine), namely:' print,'double seconds since 1970 (internal TDAS format)' print,'string format: "YYYY-MM-DD/hh:mm:ss"' return endif if (n_elements(resol) le 0) and (not keyword_set(h1)) then begin print,'SOLARWIND_LOAD: Resolution RESOL of the output data is not specified,' print,'therefore data will be output in its native resolution.' endif if keyword_set(h1) or keyword_set(dst) then print,'SOLARWIND_LOAD: OMNI-2 data and Dst index are output in one-hour resolution.' ;Parameters for outlier filtering: common filtpar,d,tmax,nmax ;halfwidth of the hollow vicinity (in number of points) d=3 ;maximal comparison time tmax=15 ;minutes tmax=tmax*60 ;seconds ;tmax=double(tmax*1000.) ;milliseconds ;tmax=tmax/1440. ;MJD ;maximal deviation from the vicinity average deemed probable, in sdev nmax=3 times=time_double(trange[0]) timee=time_double(trange[1]) timss=times-7200.;sec ;To get nominal magnetopause nnom=1000 dt=(timee-times)/(nnom+0.) tgrid=times+dt*indgen(nnom+1) bzout=fltarr(nnom+1)+0. dpout=fltarr(nnom+1)+2.088;nPa swdata=[[tgrid],[dpout],[bzout]] if not keyword_set(wind) and not keyword_set(hro) and not keyword_set(h1) then begin print,'You have not specified the source of solar wind data.' print,'To do so, set the keywords wind or hro or h1 in the call to solarwind_load.' print,'Otherwise, you get the nominal solar wind Bz=0 and Dp=2.088 nPa.' endif ;Get 1 Hour data and/or Dst if requested++++++++++++ if keyword_set(h1) or keyword_set(dst) then begin solarwind_load_omni1h,isomni1h,times,timee,swdat,dstout1 if isomni1h then swdata=swdat endif; 1-hour OMNI-2 and Dst----------------------- ;Get WIND data++++++++ if keyword_set(wind) then begin solarwind_load_wind,iswind,times,timee,swdat,resol if iswind then swdata=swdat endif; wind--------- ;Get HRO data+++++++ if keyword_set(hro) then begin if keyword_set(min5) then solarwind_load_hro,ishro,times,timee,swdat,resol,/min5 $ else solarwind_load_hro,ishro,times,timee,swdat,resol if ishro then swdata=swdat endif; hro-------- if keyword_set(dst) or keyword_set(h1) then begin if isomni1h then begin dstout=dstout1 endif else begin ng=n_elements(tgrid) dstout=fltarr(ng)-16.4 endelse endif print,'solarwind_load finished.' end