| 
 | Developer Documentation | |||||||||
| prev file | next file | ||||||||||
| SUMMARY: fields | routine DETAILS: routine | ||||||||||
./toolbox gauss_fits.pro
| gauss_fits | 
| function gauss_fits(xx, yy, nregions, regions, inits, ngauss, max_iters, coefficients, errors, [parinfo=array], [_EXTRA=record]) | 
This code came mostly from Tom Bania's GBT_IDL work. Local modifications include:
; make a simple gauss x = lindgen(150) h = 400000. c = 75. w = 15. noise = 10000 data=h*exp(-4.0*alog(2)*(x-c)^2/w^2)+(randomn(seed,n_elements(x))*noise) ; make an initial guess to this guassian h = 400000. c = 75. w = 15. inits = [h,c,w] nregions = 1 regions = [[20,120]] ngauss = 1 max_iters = 500 yfit = gauss_fits(x,data,nregions,regions,inits,ngauss,max_iters,coefficients,errors,quiet=1) ; view the results plot, data gbtoplot, x[regions[0]:regions[1]], yfit, color=!red, /chancomplex examle: multiple gaussians in multiple regions
    ; create 5 gaussians in the same plot
    a1 = [400000.,35.,15.]
    a2 = [100000.,15,7.5]
    a3 = [200000.,110,8.0]
    a4 = [100000.,150,5.5]
    a5 = [100000.,170,5.5]
    a = [a1,a2,a3,a4,a5]
    x = lindgen(200)
    data = make_gauss(x,a,10000.)
    plot, data
    ; specify 3 regions
    nregions = 3
    regions = [[5,75],[90,130],[135,190]]
    inits = [[a1],[a2],[a3],[a4],[a5]]
    ngauss = 5
    max_iters = 500
    p = replicate({value:0.D, fixed:0, limited:[0,0], $
                       limits:[0.D,0]}, 15) 
                       ; 15 = 5 gauss * 3 parameter per guass
    p[*].value = a
    ; hold the first gaussians height fixed
    p[0].fixed = 1
    ; find all the fits at once
    yfit = gauss_fits(x,data,nregions,regions,inits,ngauss,max_iters,coefficients,errors,parinfo=p,quiet=1)
    ; unwrap the results and plot them
    ystart = 0
    for i=0,(nregions-1) do begin
        b = regions[0,i]
        e = regions[1,i]
        yend = ystart + (e-b)
        y = yfit[ystart:yend]
        ystart = yend + 1
        gbtoplot, x[b:e], y, color=!red, /chan
    endfor