PRO LINECURV2,spectr,a,b,c
;
; Coefficients of parabola describing the curvature of spectral lines
; INPUTS:  SPECTR - 2D array with spectrum
; OUTPUTS: A, B, C - coefficients of parabola a + bx + cx^2
;
; Copyright M. Klvana and M. Sobotka, ASU AVCR Ondrejov, Czech Rep., 2008
;

si = size(spectr)

pts=lonarr(2,3)        ;array of 3 initial points
pts(1,0)=long(0.2*si(2))
pts(1,1)=long(0.5*si(2))
pts(1,2)=long(0.8*si(2))

for j=0,2 do begin
    mi=min(spectr(*,pts(1,j)),pos)
    pts(0,j)=pos
endfor

;parabola estimate
; formula: position_x = par0(0)+par0(1)*y+par0(2)*y^2
par0=poly_fit(pts(1,*),pts(0,*),2)

xmin=fltarr(si(2))
;search for spectral line minima in all rows

for j=0,si(2)-1 do begin

    x0=par0(0)+par0(1)*j+par0(2)*j*j
    ll=x0-5>0
    ul=x0+5<si(1)-1
    mi=min(spectr(ll:ul,j),pos)
    xmin(j)=x0-5+pos

endfor

;parabolic fit through spectral line minima
y=findgen(si(2))
parfit=poly_fit(y,xmin,2)

a=parfit(0)
b=parfit(1)
c=parfit(2)

; visualization

x=parfit(0)+parfit(1)*y+parfit(2)*y*y
spec2=spectr
spec2(xmin,y)=800          ;minimum intensity points
spec2(x,y)=1200           ;parabolic fit
window,2,xsiz=si(1)*2,ysiz=si(2)/2
tvscl,congrid(spec2,si(1)*2,si(2)/2)
; for i=0,2 do plots,[pts(0,i)*2],[pts(1,i)/2],psym=2,symsiz=2,/device

END