;+
; NAME:
; TRANGE_CLIP (PROCEDURE)
;
; PURPOSE:
; Utility to trim the time range of a tplot variable and remove
; excess data.
;
; CALLING SEQUENCE:
; trange_clip,name, t1, t2, newname=newname, data_in=data_in,$
; remove_match=remove_match, BadClip=BadClip
;
; ARGUMENTS:
; name: (INPUT, REQUIRED) Either tplot variable name
; or data structure (if data_in keyword specified)
; t1: (INPUT, REQUIRED) Start time (double, time since 1970)
; t2: (INPUT, REQUIRED) Stop time (double, time since 1970)
;
; KEYWORDS:
; data_in: (INPUT, OPTIONAL) Set to specify that the input is a data
; structure, not a tplot name.
; remove_match: (INPUT, OPTIONAL) Removes data between t1 and t2
; (default is keep only data between t1 and t2)
; BadClip: (OUTPUT, OPTIONAL) A named variable of the status of the clip. If
; the clip is valid, BadClip = 0, otherwise 1.
; newname: (INPUT, OPTIONAL) A new name for storing the clip into a tplot
; variable if the name is also a tplot variable name.
;
; Outputs:
; Modifies the specified tplot name or data structure.
;
; Examples:
; tvar = 'thd_fgh_dsl'
; newname = tvar + '_clip'
; trange_clip, tvar, t1, t2, newname = newname
;
; HISTORY:
; REE. 09-05-11. Changed to work with CLEAN EFP. Added BadClip=BadClip
;
; VERSION:
; $LastChangedBy$
; $LastChangedDate$
; $LastChangedRevision$
; $URL$
;-
;-
pro trange_clip,name, t1, t2, newname=newname, data_in=data_in,$
remove_match=remove_match, BadClip=BadClip
BadClip = 0
; Get data
if keyword_set(data_in) then $
data=temporary(name) $
else get_data,name,data=data,lim=lim,dlim=dlim
if n_tags(data) eq 0 then return
; Find start/stop times in data
i1=value_locate(data.x,t1)+1
if (i1 NE 0) then if (data.x(i1-1) EQ t1) then i1 = i1-1
i2=value_locate(data.x,t2)
if i2 EQ -1 or i1 GE n_elements(data.x)-1 then begin
dprint,'WARNING: All data times are outside requested clipping window.'
print,' No data clipping performed.'
if keyword_set(data_in) then name=temporary(data)
BadClip = 1
return
endif
i1>=0
if i1 ge i2 then begin
dprint, 'No data between t1 and t2.'
BadClip = 1
return
endif
; Trim data
case n_tags(data) of
2: if keyword_set(remove_match) then begin
if i1 eq 0 then begin
data={x:data.x[i2:*],y:data.y[i2:*,*]}
endif else begin
if i2 ne n_elements(data.x)-1 then begin
data={x:[data.x[0:i1],data.x[i2:*]],y:[data.y[0:i1,*],data.y[i2:*,*]]}
endif else data={x:data.x[0:i1],y:data.y[0:i1,*]}
endelse
endif else data={x:data.x[i1:i2],y:data.y[i1:i2,*]}
3:if keyword_set(remove_match) then begin
if i1 eq 0 then begin
data={x:data.x[i2:*],y:data.y[i2:*,*],v:data.v}
endif else begin
if i2 ne n_elements(data.x)-1 then begin
data={x:[data.x[0:i1],data.x[i2:*]],y:[data.y[0:i1,*],data.y[i2:*,*]],v:data.v}
endif else data={x:data.x[0:i1],y:data.y[0:i1,*],v:data.v}
endelse
endif else data={x:data.x[i1:i2],y:data.y[i1:i2,*],v:data.v}
else: begin
print,'trange_clip ERROR: Unrecognized data type.'
if keyword_set(data_in) then name=temporary(data)
BadClip = 1
return
end
endcase
; Store tplot variable
if keyword_set(data_in) then begin
name=temporary(data)
endif else begin
if n_elements(newname) eq 0 then newname=name
store_data,newname,data=data,lim=lim,dlim=dlim
endelse
end