function offset_bias,telescope,readport,date,sum=sum
;
;+
; NAME:			OFFSET_BIAS
;
; PURPOSE:		Provides the electronic offset introduced for
;			each readout port
;
; CATEGORY:		LASCO Calibration
;
; CALLING SEQUENCE:	Offset = OFFSET_BIAS(Telescope,Readport)
;
; INPUTS:		Telescope = String indicating telescope
;				Values are 'C1','C2','C3','EIT'
;			Readport = String indicating read out port
;				Values are 'A','B','C','D'
;
; OPTIONAL INPUTS:	Date= string giving the date as YYMMDD
;
; KEYWORD PARAMETERS:	SUM:	If present, computes the proper bias for LEB Summing
;
; OUTPUTS:		Integer giving the offset bias in DN
;
; OPTIONAL OUTPUT PARAMETERS:
; COMMON BLOCKS:
; SIDE EFFECTS:
; RESTRICTIONS:
; PROCEDURE:		Obtained from flight calibration
;
; MODIFICATION HISTORY:
;			RA Howard Writen 6 Feb 1996
;      V1    RAH   02/06/96     Initial Release
;      V2    RAH   06/02/97     Added function of date to C3
;      V3    RAH   06/10/97     Added function of date to C1 & C2
;      V4    RAH   08/21/97     Added correction for leb summing
;
;       %W% %H% LASCO IDL LIBRARY
;
;-
;
np =  N_PARAMS()
CASE np OF
   1: BEGIN
        hdr = telescope
        IF (DATATYPE(hdr) NE 'STC') THEN hdr = FITSHDR2STRUCT(hdr)
        port = STRUPCASE(STRTRIM(hdr.readport,2))
        tel = STRUPCASE(STRTRIM(hdr.detector,2))
        mjd = hdr.mid_date  
        time = hdr.mid_time*1000.
        IF (mjd EQ 0)  THEN BEGIN
           dte = STR2UTC(hdr.date_obs)
           mjd = dte.mjd
           IF (mjd EQ 0)  THEN BEGIN
              dte = STR2UTC(hdr.date)
              mjd = dte.mjd
              IF (mjd EQ 0) THEN mjd=50083
           ENDIF
        ENDIF
      END
   3: BEGIN
        dte = YYMMDD2UTC(date)
        mjd = dte.mjd
        port = STRUPCASE(STRTRIM(readport,2))
        tel = STRUPCASE(STRTRIM(telescope,2))
        time = 0
      END
else: BEGIN
        port = STRUPCASE(STRTRIM(readport,2))
        tel = STRUPCASE(STRTRIM(telescope,2))
        IF (tel EQ 'C1') OR (tel EQ 'C3')  THEN BEGIN
           PRINT,'%WARNING:  OFFSET BIAS: Called with older parameters. Date used is base date'
        ENDIF
        mjd = 50083		; base date = 1/1/96
        time=0
      END
ENDCASE
case tel of
   'C1':    case port of
            'A':  b=364
            'B':  b=331
;            'C':  b=320
            'C':  BEGIN
                    del = (mjd-50395L)
                    bias = 351.958+30.739*(1-exp(-del/468.308)) 
;                    del = (mjd-50395L);*24.
;                    dt0 = '1996/11/08 09:08:08.569'
;                    t0  = anytim2utc(dt0)
;                    hours = (mjd - t0.mjd) + time/3.6e6
;                    bias = 351.86 + 0.0564*hours
;                    IF mjd GT t0.mjd THEN   $
;                      bias = 351.86 + 0.06879*hours - 5.94e-05*hours^2
                    b = ROUND(bias)
                  ENDIF
            'D':  b=522
            else: b=0
            endcase
   'C2':    case port of
            'A':  b=364
            'B':  b=540
;            'C':  b=470
            'C':  BEGIN
                    del = mjd-50088
                    b=478.75+del*(0.1123-del*4.87e-5)
                    b = ROUND(b)
                  END
            'D':  b=526
            else: b=0
            endcase
   'C3':    case port of
            'A':  b=314
            'B':  b=346
;            'C':  b=319
            'C':  IF (mjd LT 50173)  THEN b=319 ELSE $
                     b=ROUND(319+.0382514*(mjd-50173));  valid 3/31/96 to 4/1/97
            'D':  b=283
            else: b=0
            endcase
   'EIT':   case port of
            'A':  b=1017
            'B':  b=840
            'C':  b=1041
            'D':  b=844
            else: b=0
            endcase
   else:    b=0
endcase
IF (KEYWORD_SET(sum) AND (np EQ 1)) THEN BEGIN
   lebsum = (hdr.lebxsum>1) * (hdr.lebysum>1)
   b = b*lebsum
ENDIF
return,b
end
