;+ ;FUNCTION: GAUSSIAN ;PURPOSE: ; Evaluates a gaussian function with background. ; This function may be used with the "fitfunc" curve fitting function. ; ;KEYWORDS: ; PARAMETERS: structure with the format: ;** Structure <275ac0>, 6 tags, length=48, refs=1: ; H DOUBLE 1.0000000 ; hieght ; W DOUBLE 1.0000000 ; width ; X0 DOUBLE 0.0000000 ; center ; A0 DOUBLE 0.0000000 ; A1 DOUBLE 0.0000000 ; A2 DOUBLE 0.0000000 ; If this parameter is not a structure then it will be created. ; P_NAMES: string array (see "fitfunc" for details) ; PDER_VALUES: named variable in which partial derivatives are returned. ; ;USAGE: ; p={h:2.,w:1.5,x0:5.0,a0:0.,a1:0.,a2:0.} ; x = findgen(100)/10. ; y = gaussian(x,par=p) ; plot,x,y ;RETURNS: ; p.a2*x^2 + p.a1*x + p.a0 + p.h * exp( - ((x-p.x0)/p.w)^2 ) ;- function gaussian, x, parameters=p $ , p_names = p_names, pder_values= pder_values ;OPT? ;common gaussian_com, p0 if not keyword_set(p) then $ p = {func:"gaussian",h:1.d, w:1.0d, x0:0.d, a0:0.d, a1:0.d, a2:0.d } ;if n_elements(p) eq 0 then p = p0 else p0=p if n_params() eq 0 then return,p z = (x - p.x0)/p.w e = exp(- z^2 ) f = p.a2*x^2 + p.a1*x + p.a0 + p.h * e if keyword_set(p_names) then begin ;OPT? np = n_elements(p_names) ;OPT? nd = n_elements(f) ;OPT? for i=0,np-1 do begin ;OPT? case strupcase(p_names(i)) of ;OPT? 'H': pder_values[*,i] = e ;OPT? 'W': pder_values[*,i] = p.h * e * z^2 * 2 / p.w ;OPT? 'X0': pder_values[*,i] = p.h * e * z * 2 / p.w ;OPT? 'A0': pder_values[*,i] = 1 ;OPT? 'A1': pder_values[*,i] = x ;OPT? 'A2': pder_values[*,i] = x^2 ;OPT? else: print,'Unknown Variable ', p_names(i) ;OPT? endcase ;OPT? endfor ;OPT? endif ;OPT? ;SPECIAL NOTE: if the /NODERIV keyword is set in "fit", then all ;lines ending in ";OPT?" above can be deleted. return,f end