; $Id: dcs_general_collapse.pro,v 1.4 2005/02/14 17:50:14 azuah Exp $
; Written by J.R.D. Copley.
;************************************************************************************************
;###############################################################################
;
; LICENSE:
;  The software in this file is written by an employee of 
;  National Institute of Standards and Technology 
;  as part of the DAVE software project.
;
;  The DAVE software package is not subject to copyright protection
;  and is in the public domain. It should be considered as an
;  experimental neutron scattering data reduction, visualization, and
;  analysis system. As such, the authors assume no responsibility
;  whatsoever for its use, and make no guarantees, expressed or
;  implied, about its quality, reliability, or any other
;  characteristic. The use of certain trade names or commercial
;  products does not imply any endorsement of a particular product,
;  nor does it imply that the named product is necessarily the best
;  product for the stated purpose. We would appreciate acknowledgment
;  if the DAVE software is used or if the code in this file is
;  included in another product.
;
;###############################################################################
pro dcs_general_collapse,x,xf
;************************************************************************************************
;
compile_opt strictarr
;
;
; This procedure takes an unsorted integer array x and collapses it.
; Collapsing is best illustrated with an example:
;    If x=[1,2,1,2,4,0,6,7,6,4,8,10,5,13,2,22]
; then xf=[1,2,1,2,3,0,5,6,5,3,7, 8,4, 9,2,10]
;
xs=x[sort(x)]
xu=xs[uniq(xs)]
nxu=n_elements(xu)
xf=x
for k=0,nxu-1 do begin
	indices=where(x eq xu[k],count)
	if (count eq 0) then begin
		xf=0
		return
	endif
	xf[indices]=k
endfor
end
