;+
; Name:
;   	EIS_FIND_LINERASTER
;
; Purpose:
;   	Searches if a specific wavelength is within the wavelength 
;   	range of observation of the rasters in the EIS database.
;
; Calling Sequence:
;   	acronyms = eis_find_lineraster(wave [,keywords])
;
; Inputs:
;   	WAVE:	wavelength in angstroms.
; 
; Outputs:
;   	Returns acronyms for the rasters.
;
; Opt outputs:
;   	LINES:      structure with linelist information.
;   	RASTER_ID : rasters' identification number.
;   	RASTERS :   structure with raster information.
;   	SUMMARY:    short description of rasters.
;
; Example:
;   	Look for 195.33:
;   	IDL> acronyms=eis_find_lineraster(195.33,summary=summary,rasters=rasters,lines=lines)
;
;
; Modification History:
;   	2008/01/18  I. Ugarte-Urra. NRL.
;   	2008/01/18  H.P. Warren. Common block.
;-
FUNCTION eis_find_lineraster, input_wvl, raster_id=raster_id, summary=summary, rasters=rasters, lines=lines

nwl=n_elements(input_wvl)
wvl=lonarr(nwl)

;; - Change user input to long
for i=0,nwl-1 do begin
  wvl[i] = long(input_wvl[i]*100.)
  if wvl[i] lt 16000 or wvl[i] gt 29000 then message,'Wavelength input out of EIS range: ' + trim(input_wvl(i)),/info 
endfor

t0 = systime(1)

common eis_find_lineraster_com,init,ra_db_saved,ll_saved,nrasters
if n_elements(init) eq 0 then init = 1

if init then begin

  ;;- Real all rasters info
  ra_db_all = db_read_raster_all()
  nrasters=n_elements(ra_db_all(0,*))
  raster_id=indgen(nrasters)+1
  
  good=intarr(nrasters)
  acronym=strarr(nrasters)
  
  ;;- Read databases
  FOR i=0, nrasters-1 DO BEGIN
    ;;- Read detailed info of specific raster
    ra_db_i = db_read_raster_entry(raster_id(i))
    
    if i eq 0 then ra_db_saved = replicate(ra_db_i,nrasters)
    
    ra_db_saved[i] = ra_db_i
    
    ;;- Read linelist info
    ll_i = db_read_linelist_entry(ra_db_i.ll_id)
    
    FOR j=0, ll_i.nlines-1 DO BEGIN
      line = ll_i.lines(j)
      ll_info_j = eis_line_values(line, ra_db_i.datawindows[j], ra_db_i.slitindex)
      ll_i.lines(j) = ll_info_j
    ENDFOR
    
    if i eq 0 then ll_saved = replicate(ll_i,nrasters)
    ll_saved[i] = ll_i

    if i eq 0 then begin
      box_message,['*** READING RASTER AND LINELIST DATABASES ***',$
                   '***        THIS WILL TAKE ABOUT 60s       ***',$
                   '***        AND WILL ONLY HAPPEN ONCE      ***']
    endif

    frac = 100*(i+1)/float(nrasters)
    if i eq 0 then reset = 1 else reset = 0
    progress,frac,frequency=2,reset=reset
    
  ENDFOR
  progress,100.,/last

  init = 0

endif

ll = ll_saved
ra_db = ra_db_saved
nrasters = n_elements(ra_db) 
  
;;- Check if wavelength is within spectral range
good_raster = intarr(nrasters,nwl)
FOR i=0, nwl-1 DO BEGIN
    wave=wvl(i)
    FOR j=0, nrasters-1 DO BEGIN
    	good=0
	FOR k=0,ll(j).nlines-1 DO BEGIN
	    if wave ge ll(j).lines(k).w1 and wave le ll(j).lines(k).w2 then good=1
	ENDFOR
	good_raster(j,i) = good
    ENDFOR
ENDFOR

if nwl ne 1 then good_raster=total(good_raster,2)

good = where(good_raster eq nwl, ngood)

if good(0) eq -1 then begin
    message,'No rasters with your specifications',/info
    lines=-1
    rasters=-1
    raster_id=-1
    summary=''
    return,''
endif

acronym=ra_db(good).acronym
raster_id = good+1
summary = trim(ra_db(good).title)

lines=temporary(ll(good))
rasters=temporary(ra_db(good))

return, acronym
END
