;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; angle_minvar.pro ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Author: wd (Wolfgang.Dobler@ucalgary.ca) ;;; Date: 03-Feb-2005 ;;; ;;; Description: ;;; Make an angle array as continuous as possible (i.e. minimize the ;;; total variation) by adding or subtracting 2*!pi wherever necessary ;;; Key words: ;;; DEG -- flag to indicate angle is in degrees (default is radians) ;;; CENTER -- not implemented yet ;;; Usage: ;;; plot, t, angle_minvar(phi) ;;; plot, t, angle_minvar(phi, /CENTER) ;;; plot, t, angle_minvar(degrees, /DEG) function angle_minvar, v, $ DEG=deg, $ HELP=help if (keyword_set(help)) then extract_help, 'angle_minvar' vec = reform(v) s = size(vec) if (s[0] ne 1) then message, 'Need 1-d array' N = s[s[0]+2] if (keyword_set(deg)) then begin pi2 = 360. endif else begin pi2 = 2*!pi endelse for i=1,N-1 do begin dv = vec[i]-vec[i-1] ;; Can't use mod, because IDL's mod() is really stupid for ;; negative arguments --- but floor does the job: shift = -floor(dv/pi2+0.5)*pi2 vec[i:*] = vec[i:*]+shift endfor return, vec end ; End of file angle_minvar.pro