;+
; Procedure: FIND_CONST_INTERVALS
;
; Purpose: Find intervals within the input array where the data are constant to some tollerance,
; and return the begin and end indices into the original array for those intervals.
;
; Calling Sequence:
; x = [ 1, 1, 3, 3, 4, 1, 1, 1, 1]
; ctol = 0.01
; find_const_intervals, x, nint=nint, ibeg=ibeg, iend=iend, ctol=ctol
;
; Arguements:
; X, ARRAY or any type; will be cast to FLOAT for comparison.
; NINT, LONG, number of intervals of constantcy found in X.
; IBEG, IEND, LONG[ nint], arrays of array indices to the begin and end of each constant interval.
; CTOL, FLOAT, tollerance for constancy of data; ABS(dX) lt CTOL for data to be "constant".
;
; Notes:
; None.
;
; $LastChangedBy: pcruce $
; $LastChangedDate: 2007-06-27 13:16:28 -0700 (Wed, 27 Jun 2007) $
; $LastChangedRevision: 904 $
; $URL $
;-
pro find_const_intervals, x, nint=nint, ibeg=ibeg, iend=iend, ctol=ctol
if not keyword_set( ctol) then $
ctol = 0.01
y = [ -!values.f_infinity, float(x), !values.f_infinity ]
dy = y[ 1:*] - y[ 0:*]
idx = where( abs( dy) gt ctol, icnt)
if icnt gt 0 then begin
ibeg = idx[ 0:(icnt-2L)]
iend = idx[ 1:(icnt-1L)] - 1L
nint = icnt - 1L
endif else begin
ibeg = -1L
iend = -1L
nint = 0L
endelse
return
end