;+
;FUNCTION: A = data_cut(name, t)
;PURPOSE: Interpolates data from a data structure.
;INPUT:
; name: Either a data structure or a string that can be associated with
; a data structure. (see "get_data" routine)
; the data structure must contain the element tags: "x" and "y"
; the y array may be multi dimensional.
; t: (scalar or array) x-values for interpolated quantities.
;RETURN VALUE:
; a data array: the first dimension is the dimension of t
; the second dimension is the dimension of name
;
; NOTE!! keyword options have been temporarily removed!!!!
;
;KEYWORDS:
; EXTRAPOLATE: Controls interpolation of the ends of the data. Effects:
; 0: Default action. Set new y data to NAN or to MISSING.
; 1: Extend the endpoints horizontally.
; 2: Extrapolate the ends. If the range of 't' is
; significantly larger than the old time range, the ends
; are likely to blow up.
; INTERP_GAP: Determines if points should be interpolated between data gaps,
; together with the GAP_DIST. IF the data gap > GAP_DIST,
; follow the action of INTERP_GAP
; 0: Default action. Set y data to MISSING.
; 1: Interpolate gaps
; GAP_DIST: Determines the size of a data gap above which interpolation
; is regulated by INTERP_GAP.
; Default value is 5, in units of the average time interval:
; delta_t = (t(end)-t(start)/number of data points)
; MISSING: Value to set the new y data to for data gaps. Default is NAN.
;
;CREATED BY: Davin Larson
;LAST MODIFICATION: @(#)data_cut.pro 1.19 02/04/17
; Added the four keywords. (fvm 9/27/95)
;-
FUNCTION data_cut,name,t, $
COUNT=count, $
EXTRAPOLATE=EXTRAPOLATE,INTERP_GAP=INTERP_GAP,gap_thresh=gap_thresh,$
GAP_DIST=GAP_DIST,MISSING=MISSING
if size(/type,name) eq 7 or size(/type,name) eq 2 or size(/type,name) eq 3 then begin
get_data,name,data=dat,index=h
if h eq 0 then begin
count = 0
return,0
endif
endif
if size(/type,name) eq 8 then dat=name
if n_elements(MISSING) eq 0 then MISSING = !values.f_nan
if keyword_set(INTERP_GAP) then begin
trange = minmax(dat.x)
dt = (trange[1]-trange[0]) / n_elements(dat.x)
gap_thresh = dt * (keyword_set(GAP_DIST) ? GAP_DIST : 5.0)
endif
nt = dimen1(t)
count = nt
nd1 = dimen1(dat.y)
nd2 = dimen2(dat.y)
y = fltarr(nt,nd2)
if n_elements(dat.x) le 1 then return,0
;do the interpolation, including the gaps and ends
for i=0,nd2-1 do begin
y[*,i] = interp(double(dat.y[*,i]),dat.x,t,interp_thr = gap_thresh)
endfor
if not keyword_set(EXTRAPOLATE) then begin
tlim = minmax(dat.x)
dt = (tlim[1]-tlim[0]) / (n_elements(dat.x)-1)
tlim = tlim + [-dt,dt]
outside = where( (t lt tlim[0]) or (t gt tlim[1]) ,c)
if c ne 0 then y[outside,*] = MISSING
endif
if (ndimen(t) eq 0) and (ndimen(dat.y) eq 1) then return,y[0] $
else return,reform(y)
end