function eis_read_fit_template, infile

;+
; NAME
;
;     EIS_READ_FIT_TEMPLATE()
;
; PROJECT
;
;     Hinode/EIS
;
; EXPLANATION
;
;     This routine reads the fit template file created by
;     eis_make_fit_template into an IDL structure.
;
; INPUTS
;
;     INFILE   The name of the fit template text file.
;
; OUTPUTS
;
;     Creates a structure with the following tags
;      .lines      Structure that defines the fit parameters (peak,
;                  centroid, width) for each emission line.
;      .background Structure that defines the background parameters.
;      .parinfo    This is the parinfo structure used by the MPFITEXPR
;                  fitting routine.
;      .wrange     Specifies the wavelength range for the fit.
;      .init       A vector that is directly input to MPFITEXPR for
;                  specifying the initial parameters of the fit. 
;
; HISTORY
;
;     Beta 1, 6-Nov-2008, Peter Young
;     Beta 2, 20-Nov-2009, Paul Bryans
;       added lower limit to parinfo to force intensity to be non-negative
;-

linestr={peak: 0., $
         centroid: 0., $
         width: 0.}
background={nback: 0, bg1: 0., bg2: 0.}

openr,lin,infile,/get_lun

wrange=fltarr(2)
readf,lin,format='(18x,i3)',ngauss
readf,lin,format='(30x,i3)',nback
readf,lin,format='(18x,2f12.0)',wrange
readf,lin,format='(35x,f8.0)',backg

;
; Create the output INITDATA structure
; ------------------------------------
nparams=ngauss*3+nback
parinfo=replicate({fixed: 0, limited: [0,0], limits:[0.d,0.d]},nparams)
;
initdata={lines: replicate(linestr,ngauss), $
          background: background, $
          parinfo: parinfo, $
          wrange: wrange, $
          init: fltarr(nparams)}
initdata.background.nback=nback
initdata.background.bg1=backg
initdata.background.bg2=backg
IF nback EQ 2 THEN initdata.init[ngauss*3:ngauss*3+1]=backg ELSE $
     initdata.init[ngauss*3]=backg

str1=''
FOR i=0,ngauss-1 DO BEGIN
  readf,lin,str1    ; skip this line
 ;
  readf,lin,format='(34x,f12.0)',wvl
  initdata.lines[i].centroid=wvl
  initdata.init[i*3+1]=wvl
 ;
  readf,lin,format='(34x,f10.0)',peak
  initdata.lines[i].peak=peak
  initdata.init[i*3]=peak
 ;
  readf,lin,format='(34x,f12.0)',width
  initdata.lines[i].width=width
  initdata.init[i*3+2]=width
 ;
  initdata.parinfo[i*3].limited[0]=1     ; force amplitude to be > 0
  initdata.parinfo[i*3].limits[0]=0.0    ;
 ;
  readf,lin,format='(29x,2f12.0)',wvl1,wvl2
  iparam=i*3+1
  IF wvl1 NE -1 THEN BEGIN
    initdata.parinfo[iparam].limited[0]=1
    initdata.parinfo[iparam].limits[0]=wvl1
  ENDIF
  IF wvl2 NE -1 THEN BEGIN
    initdata.parinfo[iparam].limited[1]=1
    initdata.parinfo[iparam].limits[1]=wvl2
  ENDIF
 ;
  readf,lin,format='(29x,2f12.0)',wid1,wid2
  iparam=i*3+2
   IF wid1 NE -1 THEN BEGIN
    initdata.parinfo[iparam].limited[0]=1
    initdata.parinfo[iparam].limits[0]=wid1
  ENDIF
  IF wid2 NE -1 THEN BEGIN
    initdata.parinfo[iparam].limited[1]=1
    initdata.parinfo[iparam].limits[1]=wid2
  ENDIF
ENDFOR

free_lun,lin

return,initdata

END
