FUNCTION clamp,a,minimum,maximum,MIN=min,MAX=max

@compile_opt

IF N_ELEMENTS(minimum) NE 0 THEN min=minimum
IF N_ELEMENTS(maximum) NE 0 THEN max=maximum

IF (N_ELEMENTS(min) NE 0) AND (N_ELEMENTS(max) NE 0) THEN BEGIN
    IF min GT max THEN swap,min,max
ENDIF

IF N_ELEMENTS(min) NE 0 THEN BEGIN 
    x=WHERE(a LT min)
    IF x[0] NE -1 THEN a[x]=min
ENDIF
IF N_ELEMENTS(max) NE 0 THEN BEGIN 
    x=WHERE(a GT max)
    IF x[0] NE -1 THEN a[x]=max
ENDIF

RETURN,a
END
