Viewing contents of file '../idllib/astron/contrib/varosi/vlib/allpro/gaussian.pro'
;+
; NAME:
;	gaussian
;
; PURPOSE:
;	Compute the 1-D Gaussian function at an array of points.
;
; CALLING:
;	y = gaussian( xi, parms, pderiv )
;
; INPUTS:
;	xi = array, independent variable of Gaussian function.
;
;	parms = parameters of Gaussian, 2 or 3 element array:
;		parms(0) = maximum value (factor) of Gaussian,
;		parms(1) = mean value (center) of Gaussian,
;		parms(2) = standard deviation (sigma) of Gaussian.
;		parms(3) = optional, constant offset added to Gaussian.
;		(if parms has only 2 elements then sigma taken from common).
;
; OUTPUT:
;	pderiv = optional output of partial derivatives,
;		computed only if parameter is present in call.
;
;		pderiv(*,i) = partial derivative at all xi absisca values
;		with respect to parms(i), i=0,1,2.
;
;	Function returns array of Gaussian evaluated at xi.
;
; COMMON BLOCKS:
;	common gaussian, sigma
; HISTORY:
;	Written: Frank Varosi NASA/GSFC 1992.
;	F.V. 1994, added optional fourth parameter = constant offset.
;-

function gaussian, xi, parms, pderiv

  common gaussian, sigma

	Nparmg = N_elements( parms )
	parms = float( parms )
	if (Nparmg GE 3) then sigma = parms(2)

	z = ( xi - parms(1) )/sigma
	zz = z*z
	gauss = fltarr( N_elements( zz ) )
	w = where( zz LT 172, nw )
	if (nw GT 0) then gauss(w) = exp( -zz(w) / 2 )

	if N_params() GE 3 then begin

		pderiv = fltarr( N_elements( xi ), Nparmg )
		fsig = parms(0) / sigma

		pderiv(0,0) = gauss
		pderiv(0,1) = gauss * z * fsig

		if (Nparmg GE 3) then  pderiv(0,2) = gauss * zz * fsig
		if (Nparmg GE 4) then  pderiv(0,3) = 1
	   endif

	if (Nparmg GE 4) then return, parms(0) * gauss + parms(3) $
			else return, parms(0) * gauss
end