;+
; PROJECT
;           SolarB EIS
;
; NAME
;           eis_read_study_block
;
; PURPOSE
;           Procedure
;
; CATEGORY
;           EIS Technical Planning
;
; INPUTS
;           ra  - eis_raster structure
;
; WRITTEN
;           John A Rainnie, RAL, March-2006
;
; HISTORY
;           v0.1 JAR 20-March-2006
;               Check values do actually exist for Author and Category
;               fields - some study definitions were coming in without
;               these.
;           v0.2 JAR 16-Apr-2007
;               Same as above for "Target" field
;
;-
;************************************************************************
FUNCTION eis_read_study_block , block

;
; For example, a block looks like;
;
;ID                      -1                                  0
;ACRONYM                 Quiet_Sun_Evolution                 1
;TITLE                   Quiet Sun Structure and Evolution   2
;TYPE                    0                                   3
;TARGET                  Quiet Sun                           4
;AUTHOR                  John Rainnie                        5
;CATEGORY                Science                             6
;DATE                    28-Sep-2006 09:22:20                7
;DURATION                2170962                             8
;VOLUME                  51904512                            9
;NRASTERS                2                                   10
;RECURSIVE               0                                   11
;SLIT_SLOT               1,3,0                               12
;XRT_FLARE_RESPONSE      0,0,0,0,0,0,0                       13
;EIS_FLARE_RESPONSE      0,0,0,0,0                           14
;EIS_EVENT_RESPONSE      0,0,0,0,0                           15
;AEC_RESPONSE            0                                   16
;STUDYRASTERS            2                                   17

; create a line list structure
st   = {eis_study}

;
; ID
;
split = STRSPLIT(block[0] , /EXTRACT , count = count)
IF (split[0] EQ 'ID')  THEN BEGIN
    st.id = split[1]
ENDIF ELSE RETURN , 0
;
; ACRONYM
;
split = STRSPLIT(block[1] , /EXTRACT , count = count)
IF (split[0] EQ 'ACRONYM')  THEN BEGIN
    st.acronym = STRMID(split[1],0,20)
ENDIF ELSE RETURN , 0
;
; TITLE
;
split = STRSPLIT(block[2] , /EXTRACT , count = count)
IF (split[0] EQ 'TITLE')  THEN BEGIN
    st.title = STRMID(STRJOIN(split[1:*],' ',/SINGLE),0,100)
ENDIF ELSE RETURN , 0
;
; TYPE
;
split = STRSPLIT(block[3] , /EXTRACT , count = count)
IF (split[0] EQ 'TYPE')  THEN BEGIN
    st.type = FIX(split[1])
ENDIF ELSE RETURN , 0
;
; TARGET
;
split = STRSPLIT(block[4] , /EXTRACT , count = count)
IF (split[0] EQ 'TARGET')  THEN BEGIN
    IF (N_ELEMENTS(split) GT 1) THEN BEGIN
        st.target = STRJOIN(split[1:*],' ',/SINGLE)
    ENDIF ELSE  st.target = 'Quiet Sun'
ENDIF ELSE RETURN , 0
;
; AUTHOR
;
split = STRSPLIT(block[5] , /EXTRACT , count = count)
IF (split[0] EQ 'AUTHOR')  THEN BEGIN
    IF (N_ELEMENTS(split) GT 1) THEN BEGIN
        st.author = STRJOIN(split[1:*],' ',/SINGLE)
    ENDIF ELSE  st.author = 'Unknown'
ENDIF ELSE RETURN , 0
;
; CATEGORY
;
split = STRSPLIT(block[6] , /EXTRACT , count = count)
IF (split[0] EQ 'CATEGORY')  THEN BEGIN
    IF (N_ELEMENTS(split) GT 1) THEN BEGIN
        st.category = STRJOIN(split[1:*],' ',/SINGLE)
    ENDIF ELSE  st.category = 'Science'
ENDIF ELSE RETURN , 0
;
; DATE
;
split = STRSPLIT(block[7] , /EXTRACT , count = count)
IF (split[0] EQ 'DATE')  THEN BEGIN
    st.date = anytim2utc(SYSTIM(),/STIME,/DATE)
ENDIF ELSE RETURN , 0
;
; DURATION
;
split = STRSPLIT(block[8] , /EXTRACT , count = count)
IF (split[0] EQ 'DURATION')  THEN BEGIN
    st.duration = LONG(split[1])
ENDIF ELSE RETURN , 0
;
; VOLUME
;
split = STRSPLIT(block[9] , /EXTRACT , count = count)
IF (split[0] EQ 'VOLUME')  THEN BEGIN
    st.volume = LONG(split[1])
ENDIF ELSE RETURN , 0
;
; NRASTERS
;
split = STRSPLIT(block[10] , /EXTRACT , count = count)
IF (split[0] EQ 'NRASTERS')  THEN BEGIN
    st.nRasters = FIX(split[1])
ENDIF ELSE RETURN , 0
;
; RECURSIVE
;
split = STRSPLIT(block[11] , /EXTRACT , count = count)
IF (split[0] EQ 'RECURSIVE')  THEN BEGIN
    st.recursive = FIX(split[1])
ENDIF ELSE RETURN , 0
;
; SLIT_SLOT
;
split = STRSPLIT(block[12] , /EXTRACT , count = count)
IF (split[0] EQ 'SLIT_SLOT')  THEN BEGIN
    slit_slot_split = STRSPLIT(split[1] , ',' , /EXTRACT , count = count)
    IF (count NE 3) THEN RETURN , 0
    FOR i = 0,count - 1 DO st.slit_slot[i] = FIX(slit_slot_split[i])
ENDIF ELSE RETURN , 0
;
; XRT_FLARE_RESPONSE
;
split = STRSPLIT(block[13] , /EXTRACT , count = count)
IF (split[0] EQ 'XRT_FLARE_RESPONSE')  THEN BEGIN
    xrtf_split = STRSPLIT(split[1] , ',' , /EXTRACT , count = count)
    IF (count NE 7) THEN RETURN , 0

    st.xrt_flare_response.respond_to_xrt_flare = xrtf_split[0]
    st.xrt_flare_response.response_study_id    = xrtf_split[1]
    st.xrt_flare_response.x_repoint            = xrtf_split[2]
    st.xrt_flare_response.y_repoint            = xrtf_split[3]
    st.xrt_flare_response.repoint_raster_index = xrtf_split[4]
    st.xrt_flare_response.xrt_flare_in_fov     = xrtf_split[5]
    st.xrt_flare_response.follow_on_study_id   = xrtf_split[6]

ENDIF ELSE RETURN , 0
;
; EIS_FLARE_RESPONSE
;
split = STRSPLIT(block[14] , /EXTRACT , count = count)
IF (split[0] EQ 'EIS_FLARE_RESPONSE')  THEN BEGIN
    eisf_split = STRSPLIT(split[1] , ',' , /EXTRACT , count = count)
    IF (count NE 5) THEN RETURN , 0

    st.eis_flare_response.respond_to_eis_flare = eisf_split[0]
    st.eis_flare_response.response_study_id    = eisf_split[1]
    st.eis_flare_response.x_repoint            = eisf_split[2]
    st.eis_flare_response.y_repoint            = eisf_split[3]
    st.eis_flare_response.repoint_raster_index = eisf_split[4]

ENDIF ELSE RETURN , 0
;
; EIS_EVENT_RESPONSE
;
split = STRSPLIT(block[15] , /EXTRACT , count = count)
IF (split[0] EQ 'EIS_EVENT_RESPONSE')  THEN BEGIN
    eise_split = STRSPLIT(split[1] , ',' , /EXTRACT , count = count)
    IF (count NE 5) THEN RETURN , 0

    st.eis_event_response.respond_to_eis_event = eise_split[0]
    st.eis_event_response.response_study_id    = eise_split[1]
    st.eis_event_response.x_repoint            = eise_split[2]
    st.eis_event_response.y_repoint            = eise_split[3]
    st.eis_event_response.repoint_raster_index = eise_split[4]

ENDIF ELSE RETURN , 0

;
; AEC_RESPONSE
;
split = STRSPLIT(block[16] , /EXTRACT , count = count)
IF (split[0] EQ 'AEC_RESPONSE')  THEN BEGIN
    aece_split = STRSPLIT(split[1] , ',' , /EXTRACT , count = count)
    IF (count NE 1) THEN RETURN , 0

    st.aec_response.respond_to_aec = aece_split[0]

ENDIF ELSE RETURN , 0

RETURN , st

END
