;+
; PROJECT
;           SolarB EIS
;
; NAME
;           DB_READ_STUDY_ENTRY
;
; PURPOSE
;           Function to save study entries to the database.
;
; CATEGORY
;           EIS planning
;
; WRITTEN
;           John A. Rainnie, RAL, Mar-2006
;
; MODIFICATION HISTORY
;           V0.1 JAR 3-Jul-2006
;                Completely re-designed JAR
;           v0.2 JAR 3-Apr-2007
;                Some tidying.
;           v0.2 JAR 20-Jun-2007
;                Check entry exists before reading it.
;           v0.3 JAR 19-Feb-2014
;                Had case at MSSL where id = 0 was actually read, so if
;                input id is input, return zero
;
;-
;************************************************************************
FUNCTION db_read_study_entry , id

; Had a weird case at MSSL recently where this study actually returned
; an (empty) eis_study structure where id = 0. Check for this and return
; invalid if so.
IF (id LT 1) THEN RETURN , 0

; Open database
status = eis_open_db(/STUDY)

; Check entry exists. If not bail out
constraint = STRJOIN(['ID=',STRCOMPRESS(id,/REMOVE)],/SINGLE)
entry      = dbfind(constraint , /SILENT , count = count)
IF (count NE 1) THEN RETURN , 0


sy                  = {eis_study}
sy.id               = dbval(id , 'ID')
sy.write_locked     = dbval(id , 'WRITE_LOCKED')
sy.acronym          = dbval(id , 'ACRONYM')
sy.title            = dbval(id , 'TITLE')
sy.type             = dbval(id , 'TYPE')
sy.target           = dbval(id , 'TARGET')
sy.author           = dbval(id , 'AUTHOR')
sy.category         = dbval(id , 'CATEGORY')
sy.date             = dbval(id , 'DATE')
sy.description_file = dbval(id , 'DESC_FILE')
sy.duration         = dbval(id , 'DURATION')
sy.volume           = dbval(id , 'DATA_VOLUME')
sy.nRasters         = dbval(id , 'N_RASTERS')
sy.recursive        = dbval(id , 'RECURSIVE')
sy.slit_slot        = dbval(id , 'SLIT_SLOT')


e = dbval(id,'AEC_RESPONSE')
    aec = sy.aec_response
    aec.respond_to_aec = e
sy.aec_response = aec

e = dbval(id,'EIS_FLR_RES')
    flare = sy.eis_flare_response
    flare.respond_to_eis_flare = e[0]
    flare.response_study_id = e[1]
    flare.x_repoint = e[2]
    flare.y_repoint = e[3]
    flare.repoint_raster_index = e[4]
sy.eis_flare_response = flare

e = dbval(id,'EIS_EVT_RES')
    event = sy.eis_event_response
    event.respond_to_eis_event = e[0]
    event.response_study_id = e[1]
    event.x_repoint = e[2]
    event.y_repoint = e[3]
    event.repoint_raster_index = e[4]
sy.eis_event_response = event

e = dbval(id,'XRT_FLR_RES')
    xrt = sy.xrt_flare_response
    xrt.respond_to_xrt_flare = e[0]
    xrt.response_study_id = e[1]
    xrt.x_repoint = e[2]
    xrt.y_repoint = e[3]
    xrt.repoint_raster_index = e[4]
    xrt.xrt_flare_in_FOV = e[5]
    xrt.follow_on_study_id = e[6]
sy.xrt_flare_response = xrt

; Get study-raster properties from (naturally enough) the study-raster table
n = sy.nRasters

FOR i = 0, n-1 DO BEGIN

    tra                         = db_read_studyraster_entry(sy.id , i)
    sy.studyRasters[i]          = tra
    sy.studyRasters[i].ra_index = i

ENDFOR

RETURN , sy

END
