; Project     :	SOHO - CDS
;
; Name        :	GET_IEFWIN
;
; Purpose     :	Retrieves an IEF window flag parameter data set from the IEFWIN database.
;
; Explanation : Extracts the parameters which define the flag generation scheme for a window
;               from the IEFWIN database. 
;
; Use         : < get_iefwin, iefwin_id, def >
;
; Inputs      : iefwin_id = IEF window ID number.
;
; Outputs     : def = structure containing IEF window database values.
;                 def.iefwin_id  = I*2    IEF window ID. 
;                                         If the requested IEF window is not found,
;				          then a simpler structure is returned, with
;				          this set to -1.
;                 def.win_name   = C*40   Window name
;                 def.ev_desc    = C*65   Description of event detection scheme employed
;                 def.detector   = C*1    'N' = NIS, 'G' = GIS
;                 def.win_def    = 4(I*2) Window definition ( xstart, ystart, xsize, ysize )
;                 def.px_offset  = I*2    Pixel offset defining ROI around peak pixel.
;                 def.exp_era    = 4(I*2) Expected values for each ERA in window.
;                 def.dev_era    = 4(I*2) Deviations for each ERA in window.
;                 def.wgt_era    = 4(I*2) Weights for each direct ERA in window.
;                 def.wgt_dera   = 4(I*2) Weights for each differential ERA in window.
;
; Keywords    :
;       ERRMSG    = If defined and passed, then any error messages will be
;                   returned to the user in this parameter rather than
;                   depending on the MESSAGE routine in IDL.  If no errors are
;                   encountered, then a null string is returned.  In order to
;                   use this feature, ERRMSG must be defined first, e.g.
;
;                       ERRMSG = ''
;                       GET_DATAWIN, ERRMSG=ERRMSG, ... 
;                       IF ERRMSG NE '' THEN ...

; Calls       :	datatype, dbopen, dbbuild, dbclose.
;                
; Common      :	None.
;
; Restrictions:	None.
;
; Side effects:	None.
;
; Category    :	Command preparation.
;
; Prev. Hist. :	Adapted from get_datawin.
;
; Written     :	Version 0.0, Martin Carter, RAL, 18/10/95
;
; Modified    :	
;
; Version     :	Version 0.0, 18/10/95
;-
;**********************************************************

PRO get_iefwin, iefwin_id, def, ERRMSG=errmsg

	ON_ERROR, 2

;  Define a null result.  If the routine is successful, this will be updated
;  later.
;
	def = { iefwin_id : -1 }

;
;  Check the number of parameters.
;
        IF N_PARAMS() NE 2 THEN BEGIN
           MESSAGE = 'Syntax:  GET_IEFWIN, IEFWIN_ID, DEF'
	   GOTO, HANDLE_ERROR
        ENDIF

;
;  Check the input parameter iefwin_id
;
	type = datatype ( iefwin_id, 2 )
	IF type EQ 0 THEN BEGIN
           MESSAGE = 'IEFWIN_ID is undefined'
           GOTO, HANDLE_ERROR
	END ELSE IF type GE 4 THEN BEGIN
           MESSAGE = 'IEFWIN_ID must be an integer'
           GOTO, HANDLE_ERROR
	END ELSE IF N_ELEMENTS ( iefwin_id ) NE 1 THEN BEGIN
           MESSAGE = 'IEFWIN_ID must be a scalar'
           GOTO, HANDLE_ERROR
	ENDIF

; open database for updating

        dbopen, 'iefwin'
;
;  Search on the ID field.
;
	entries = dbfind ( 'IEFWIN_ID=' + STRTRIM ( iefwin_id, 2), /SILENT)

;
;  If no entries were found, then return immediately.
;
	IF entries(0) LT 1 THEN BEGIN
		MESSAGE = 'IEF window ID not found'
		GOTO, HANDLE_ERROR
	ENDIF

;
;  If more than one entry found, then return immediately.
;
	IF N_ELEMENTS(entries) GT 1 THEN BEGIN
		MESSAGE = 'Duplicate IEF window ID found'
		GOTO, HANDLE_ERROR
	ENDIF

; read entries from database

  dbext, entries, 'WIN_NAME,EV_DESC,DETECTOR,WIN_DEF,PX_OFFSET,EXP_ERA,DEV_ERA,WGT_ERA,WGT_DERA', $
                   win_name,ev_desc,detector,win_def,px_offset,exp_era,dev_era,wgt_era,wgt_dera

  ; set up structure array

  def = { iefwin_id : iefwin_id, win_name:win_name(0), ev_desc:ev_desc(0),   $
          detector:detector(0), win_def:win_def, px_offset:px_offset(0), exp_era:exp_era, $
          dev_era:dev_era, wgt_era:wgt_era, wgt_dera:wgt_dera }

  GOTO, FINISH
;
;  Error handling point.
;
HANDLE_ERROR:
	IF N_ELEMENTS(ERRMSG) NE 0 THEN ERRMSG = 'GET_IEFWIN: ' + MESSAGE $
		ELSE MESSAGE, MESSAGE, /CONTINUE
;
;  Close the database, and return.
;
FINISH:
	dbclose, 'iefwin
;
	RETURN

END


