Viewing contents of file '../idllib/contrib/icur/fwhm.pro'
;*************************************************************
pro FWHM,WAVE,FLUX,fw                ; return full width at half max
common comxy,xcur,ycur,zerr
common com1,h,ik
if n_params(0) lt 2 then begin
   print,' '
   print,'* FWHM   -estimate FWHM of feature'
   print,'*    calling sequence: FWHM,W,F,FW'
   print,'*       W,F: wavelength and flux vectors'
   print,'*        FW: output FWHM
   print,'*    operational notes: X and Y of first point must be in COMXY'
   print,'*    method: find all points above (below) half peak. Linearly'
   print,'*            interpolate outside that range.'
   print,' '
   return
   endif
np=n_elements(wave)-1
i1w=xcur
y1=ycur
z=' place cursor on other continuum point'
print,z 
blowup,-1
i2w=xcur
y2=ycur
i1=fix(xindex(wave,i1w)) & i2=fix(xindex(wave,i2w)+0.5)
                               ;tabinv,wave,i1w,i1 & tabinv,wave,i2w,i2
IF I2 LT I1 THEN BEGIN
     T=I2
     I2=I1
     I1=T
     ENDIF
i1=(i1>0)                   ;force I1 > 0
i2=i2<np  ;force i2 < greatest element
IF (I2-I1) LE 1 THEN RETURN
yd=(y1+y2)/2.                      ;mean continuum
FD=FLUX(i1:i2-1)-YD
iem=1
IF TOTAL(fd) LT 0 THEN begin
   FD=-FD    ;make positive
   iem=-1
   endif
height=abs(max(fd))/2.
k=where(fd gt height)     ;points above FWHM
k0=k(0)>1
km=max(k)<(n_elements(fd)-1)
f1=i1+k0-1+(height-fd(k0-1))/(fd(k0)-fd(k0-1))          ;bin number
f2=i1+km+(height-fd(km))/(fd(km+1)-fd(km))
p1=f1 & fp1=fix(p1)
dw=wave(p1+1)-wave(p1)
w1=wave(fp1)+(p1-fp1)*dw
p2=f2 & fp2=fix(p2)
w2=wave(fp2)+(p2-fp2)*dw
fw=w2-w1
ik=ik+1
z=' FWHM:'+string(fw,'(F9.3)')
yp=!d.y_size*!y.window(1)-(!d.y_ch_size+1)*float(ik)
xp=!d.x_size*!x.window(1)-!d.x_ch_size*16.
xyouts,xp,yp,z,/device
print,z
!c=-1
x=[w1,w2]
if !psym eq 10 then x=x-0.5*dw
oplot,x,[yd+iem*height,yd+iem*height],color=55,linestyle=0
RETURN
END