function k_line_shift
    return, 150.0
end

function k_pix_convert
    return, 2.0
end

function k_pix_discard
    return, 0.75
end

FUNCTION line_read , pre_scan , row_width

ls =             k_line_shift()
ps = pre_scan  * k_pix_discard()
pc = row_width * k_pix_convert()
rt = ls + ps + pc
RETURN , rt

END

; Readout time in microseconds for the hardware window bounded by
; the parameters
FUNCTION readout_time, x_start, x_width, y_start, y_height

; Do line discards
line_discards = y_start * k_line_shift()	         ; Microseconds
; Do line conversions
line_converts = y_height * line_read(x_start, x_width)	; uSecs

RETURN , line_discards + line_converts

END

; exp_time in msecs, return in usecs. Includes close time
function shutter_time, exp_time
    if exp_time le 200 then return, 550000.0 else return, 350000.0
end

; exp_time (exposure time) in milliseconds
FUNCTION eis_raster_duration , ra , ll

num_flushes = 5
flush_time  = (60 * 1.e3) * num_flushes

exp_time = 0.D

FOR i = 0, ra.nExp -1 DO BEGIN

    exps     = ra.exposures[i] * 1.0e3
    dels     = ra.delays[i]    * 1.0e3
    ro_time  = readout_time(50, 1024, 512, 512)
    sh_time  = shutter_time(ra.exposures[i])
    exp_time = exp_time + flush_time + exps + dels + ro_time + sh_time
    f_factor = (ra.exposures[i] LE 2000) ? 0.1 : 0.05
    exp_time = exp_time + (exp_time * f_factor)

ENDFOR

CASE ra.rasterType OF
    0 : exp_time = exp_time * (ra.scan_fm_nSteps + 1)
    1 : exp_time = exp_time * ra.sns_nexps
ENDCASE

RETURN , ROUND(exp_time/1.e3)     ; Milliseconds

END
