;-------------------------------------------------------------
;+
; NAME:
;       PMOD
; PURPOSE:
;       Find the positive modulo value of a number.
; CATEGORY:
; CALLING SEQUENCE:
;       out = pmod(in,m)
; INPUTS:
;       in = input value (may be an array).   in
;       m = divisor.                          in
; KEYWORD PARAMETERS:
; OUTPUTS:
;       out = Remainder of in divided by m.   out
; COMMON BLOCKS:
; NOTES:
;       Notes: output is always in the range 0 to m-1.
;         To see the difference between mod and pmod try:
;         plot,(indgen(500)-250) mod 50, yran=[-60,60]
;         plot,pmod(indgen(500)-250, 50), yran=[-60,60]
; MODIFICATION HISTORY:
;       R. Sterner, 1996 May 12
;       R. Sterner, 2010 May 04 --- Converted arrays from () to [].
;
; Copyright (C) 1996, Johns Hopkins University/Applied Physics Laboratory
; This software may be used, copied, or redistributed as long as it is not
; sold and this copyright notice is reproduced on each copy made.  This
; routine is provided as is without any express or implied warranties
; whatsoever.  Other limitations apply as described in the file disclaimer.txt.
;-
;-------------------------------------------------------------
	function pmod, in, m, help=hlp
 
	if (n_params(0) lt 2) or keyword_set(hlp) then begin
	  print,' Find the positive modulo value of a number.'
	  print,' out = pmod(in,m)'
	  print,'   in = input value (may be an array).   in'
	  print,'   m = divisor.                          in'
	  print,'   out = Remainder of in divided by m.   out'
	  print,' Notes: output is always in the range 0 to m-1.'
	  print,'   To see the difference between mod and pmod try:'
	  print,'   plot,(indgen(500)-250) mod 50, yran=[-60,60]'
	  print,'   plot,pmod(indgen(500)-250, 50), yran=[-60,60]'
	  return,''
	endif
 
	out = in mod m				; Do basic modulo.
	w = where(out lt 0, c)			; Deal with negative values.
	if c gt 0 then out[w] = out[w]+m
	return, out
	end