function sf_gaussb,data,original=original ImSize = size(data) WSize=ImSize(1) YSize=ImSize(2) If ImSize(0) eq 3 then D3Size=ImSize(3) else D3Size=1 data_out = fltarr(4,YSize,D3Size) for ik = 0,D3Size-1 do begin im = data(*,*,ik) im1=fltarr(4,YSize) imr=float(im) back=total(im([0,1,2,WSize-3,WSize-2,WSize-1],*), 1)/6. for j=0,WSize-1 do imr(j,*)=(im(j,*)-back)>0 hsum=replicate(0.,WSize+1, YSize) jleft=fltarr(YSize) jrigt=fltarr(YSize) jmid=fltarr(YSize) for j=0,WSize-1 do hsum(j+1,*)=hsum(j,*)+ imr(j, *) h1=reform(hsum(WSize, *)) pos = where(h1 gt 0., count) if count lt 1 then goto, trivial niv=0.25*h1(pos) j=0 for jj=0, WSize do j=j+(hsum(jj,pos) le niv) jleft(pos)= (j-1.5+(niv-hsum(j-1,pos)) $ /(hsum(j,pos)-hsum(j-1,pos))) niv=0.5*h1(pos) j=0 for jj=0, WSize do j=j+(hsum(jj,pos) le niv) jmid(pos)= (j-1.5+(niv-hsum(j-1,pos)) $ /(hsum(j,pos)-hsum(j-1,pos))) niv=0.75*h1(pos) j=0 for jj=0, WSize do j=j+(hsum(jj,pos) le niv) jrigt(pos)= (j-1.5+(niv-hsum(j-1,pos)) $ /(hsum(j,pos)-hsum(j-1,pos))) trivial: neg = where(h1 le 0., count) if count gt 0 then begin jleft(neg)=WSize/2.-0.5 jmid(neg)=WSize/2. jrigt(neg)=WSize+0.5 endif high=reform(h1) my=jmid sig=(jrigt-jleft)/2. im1(0,*)=scmp_near2(back) im1(1,*)=scmp_near2(high*0.2690865/sig) im1(2,*)=scmp_near2(100.*my) im1(3,*)=scmp_near2(100.*sig) data_out(*,*,ik)=im1 endfor if not keyword_set(original) then begin data_out(2,*,*)=temporary(data_out(2,*,*)) / 100. data_out(3,*,*)=temporary(data_out(3,*,*)) /0.6745 /100. endif return,data_out end