pro plot_subhtr,svmhk1,single=single,noconvert=noconvert,relays=relays,utime=utime,save=save

; 
; offset the beginning of HK before HK information begins 
; the offset is set to 0, because the offset values used later are the ones as
; specified in the Project Data Base.  Those offset values are counted from the packet ID,
; etc.  The first byte of the packet ID has an offet of 0.
; This was verified from the LASCO HK sync words which have an offset of 12 and 13 in the
; PDB.  Thus they include the 12 bytes of packet ID, length, and LOBT.  In many of the routines
; we count from the LOBT as byte 0.
; 
offset=0        ; be careful of this definition!!!
; 
 
tickname=['OFf','ON','OFF','ON','OFF','ON','OFF','ON','OFF','ON']
 
;
;  Check to see if there are problems with the packets, by looking at the first
;  byte of OBT.  If it is zero then there is a packet problem
;
svmhk1 = svmhk1(*,1:*)

w = WHERE(svmhk1(6,*) GT 0,nw)
IF (nw GT 0)  THEN svmhk1 = svmhk1(*,w)
;
;  Convert OBT to UTC
;
utc = TAI2UTC(OBT2TAI(svmhk1(offset+6:offset+11,*)))
IF KEYWORD_SET(UTIME)  THEN utime=utc
 
!x.title = 'Time (Hours) Starting Date:  '+ utc2str(utc(0)) 
; 
;   QI2P1B3, (Nominal),   LASCO , Virgo, Golf 
;
IF ((single EQ 0) or (single EQ 1) ) THEN BEGIN 
   !p.multi=[0,1,2,0,1] 
   v = FIX(svmhk1(offset+124,*))               ;Byte offset 124 
   IF ( NOT KEYWORD_SET(noconvert) ) THEN BEGIN 
        v = CNVRT_CURRENT (v,0) 
        !y.range=[0,5] 
        !y.title='Current (Amps)' 
   ENDIF ELSE BEGIN 
        !y.range=[0,255] 
        !y.title = 'Current (DN)'  
   ENDELSE 
   UTPLOT,utc,v,title='Nominal Non-OP Heater Current: QI2P1B3 (GOLF, LASCO, VIRGO)' 
 
; 
;   Heater Status, LASCO (QSL1), VIRGO (QSVA), GOLF (QSG1) Nominal  
; 
   Q1 = (FIX(svmhk1(offset+102,*)) AND 2)/2              ;QSL1 Byte offset 102 , mask 02
   Q2 = (FIX(svmhk1(offset+102,*)) AND 4)/4              ;QSG1 Byte offset 102 , mask 04
   Q3 = FIX(svmhk1(offset+102,*)) AND 1                  ;QSVA Byte offset 102 , mask 01
   UTPLOT,utc,Q1+1,title='Nominal Non-OP Heater Status',yrange=[0,13]   $ 
      ,yticks=5,ytickv=[1,2,5,6,9,10] , ytitle='Heater Relay Status' ,ytickname=tickname
   OUTPLOT,utc,Q2+5 
   OUTPLOT,utc,Q3+9 
   XYOUTS,0.1,0.15,'QSL1 (LASCO-COB)',/normal,charsize=0.7 
   XYOUTS,0.1,0.28,'QSG1 (Golf)',/normal,charsize=0.7 
   XYOUTS,0.1,0.4,'QSVA (Virgo)',/normal,charsize=0.7 
   IF KEYWORD_SET(RELAYS)  THEN BEGIN
      relays      = INTARR(N_ELEMENTS(utc),3)
      relays(0,0) = REFORM(Q1)
      relays(0,1) = REFORM(Q2)
      relays(0,2) = REFORM(Q3)
   ENDIF
ENDIF 
 
; 
;   QI3P1B3, (Nominal),   EIT , Sumer, Celias 
; 
IF ((single EQ 0) or (single EQ 2) ) THEN BEGIN 
   !p.multi=[0,1,2,0,1] 
   v = FIX(svmhk1(offset+123,*)) AND 255              ;Byte offset 123 

   IF ( NOT KEYWORD_SET(noconvert) ) THEN BEGIN 
        v = CNVRT_CURRENT (v,1) 
        !y.range=[0,5] 
        !y.title='Current (Amps)' 
   ENDIF ELSE BEGIN 
        !y.range=[0,255] 
        !y.title = 'Current (DN)'  
   ENDELSE 
   UTPLOT,utc,v,title='Nominal Non-OP Heater Current: QI3P1B3 (Celias, EIT, Sumer)' 
 
; 
;   Heater Status, EIT (QSL2), Sumer (QSSA), Celias (QSF2) Nominal  
; 
   Q1 = (FIX(svmhk1(offset+104,*)) AND 32)/32              ;QSL2 Byte offset 104 
   Q2 = (FIX(svmhk1(offset+104,*)) AND 8)/8                ;QSSA Byte offset 104 
   Q3 = (FIX(svmhk1(offset+104,*)) AND 16)/16              ;QSF2 Byte offset 104 
   UTPLOT,utc,Q1+1,title='Nominal Non-OP Heater Status',yrange=[0,13]   $ 
      ,yticks=5,ytickv=[1,2,5,6,9,10] , ytitle='Heater Relay Status' ,ytickname=tickname
   OUTPLOT,utc,Q2+5 
   OUTPLOT,utc,Q3+9 
   XYOUTS,0.1,0.15,'QSL2 (EIT)',/normal,charsize=0.7 
   XYOUTS,0.1,0.28,'QSSA (SUMER)',/normal,charsize=0.7 
   XYOUTS,0.1,0.4,'QSF2 (CELIAS)',/normal,charsize=0.7 
   IF KEYWORD_SET(RELAYS)  THEN BEGIN
      relays      = INTARR(N_ELEMENTS(utc),3)
      relays(0,0) = REFORM(Q1)
      relays(0,1) = REFORM(Q2)
      relays(0,2) = REFORM(Q3)
   ENDIF
ENDIF 
 
; 
;   QIL3 (LASCO), QIL4 (EIT)  (REDUNDANT) 
; 
IF ((single EQ 0) or (single EQ 3) ) THEN BEGIN 
   !p.multi=[0,1,3,0,1] 
   v = FIX(svmhk1(offset+176,*))               ;Byte offset 176 
   IF ( NOT KEYWORD_SET(noconvert) ) THEN BEGIN 
        v = CNVRT_CURRENT (v,2) 
        !y.range=[0,5] 
        !y.title='Current (Amps)' 
   ENDIF ELSE BEGIN 
        !y.range=[0,255] 
        !y.title = 'Current (DN)'  
   ENDELSE 
   UTPLOT,utc,v,title='Redundant Non-OP Heater Current: QIL3 (EIT)' 
   v = FIX(svmhk1(offset+174,*))               ;Byte offset 174 
   IF ( NOT KEYWORD_SET(noconvert) ) THEN BEGIN 
        v = CNVRT_CURRENT (v,3) 
        !y.range=[0,1] 
        !y.title='Current (Amps)' 
   ENDIF ELSE BEGIN 
        !y.range=[0,255] 
        !y.title = 'Current (DN)'  
   ENDELSE 
   UTPLOT,utc,v,title='Redundant Non-OP Heater Current: QIL4 (LASCO)' 
; 
;   Heater Status, EIT (QSL3), LASCO (QSL4) Redundant
; 
   Q1 = (FIX(svmhk1(offset+145,*)) AND 2)/2              ;QSL3 Byte offset 145 
   Q2 = (FIX(svmhk1(offset+145,*)) AND 4)/4              ;QSL4 Byte offset 145 
   UTPLOT,utc,Q1+1,title='Redundant Non-OP Heater Status',yrange=[0,9]   $ 
       ,yticks=3,ytickv=[1,2,5,6] ,ytickname=tickname, ytitle='Heater Relay Status'
   OUTPLOT,utc,Q2+5 
   XYOUTS,0.08,0.12,'QSL3 (EIT)',/normal,charsize=0.7 
   XYOUTS,0.08,0.24,'QSL4 (LASCO)',/normal,charsize=0.7 
   IF KEYWORD_SET(RELAYS)  THEN BEGIN
      relays      = INTARR(N_ELEMENTS(utc),2)
      relays(0,0) = REFORM(Q1)
      relays(0,1) = REFORM(Q2)
   ENDIF
ENDIF 


;
;   Heater Status, LASCO COB (QSL1) Nominal, 
;                  EIT (QSL2) Nominal, 
;          EIT (QSL3) Redundant, 
;          LASCO (QSL4) Redundant
;                  LASCO LEB (QSL5) Nominal, 
;
IF ((single EQ 0) or (single EQ 4) OR (single EQ 5) ) THEN BEGIN 
   !p.multi=''
   Q1 = (FIX(svmhk1(offset+102,*)) AND 2)/2              ;QSL1 Byte offset 102, mask 02
   Q2 = (FIX(svmhk1(offset+104,*)) AND 32)/32            ;QSL2 Byte offset 104, mask 20
   Q3 = (FIX(svmhk1(offset+145,*)) AND 2)/2              ;QSL3 Byte offset 145, mask 02
   Q4 = (FIX(svmhk1(offset+145,*)) AND 4)/4              ;QSL4 Byte offset 145, mask 04
   Q5 = (FIX(svmhk1(offset+104,*)) AND 64)/64            ;QSL5 Byte offset 104, mask 40
   IF ((single EQ 0) or (single EQ 4) ) THEN BEGIN 
      UTPLOT,utc,Q1+1,title='LASCO/EIT Non-OP Heater Status',yrange=[0,21]   $ 
         ,yticks=10,ytickv=[1,2,5,6,9,10,13,14,17,18] , ytitle='Heater Relay Status' $
         ,ytickname=tickname
      OUTPLOT,utc,Q2+5 
      OUTPLOT,utc,Q3+9 
      OUTPLOT,utc,Q4+13 
      OUTPLOT,utc,Q5+17 
      XYOUTS,0.15,0.178*1,'QSL1 (COB)',/normal,charsize=0.7 
      XYOUTS,0.15,0.178*2,'QSL2 (EIT)',/normal,charsize=0.7 
      XYOUTS,0.15,0.178*3,'QSL3 (EIT-R)',/normal,charsize=0.7 
      XYOUTS,0.15,0.178*4,'QSL4 (LASCO-R)',/normal,charsize=0.7 
      XYOUTS,0.15,0.178*5,'QSL5 (LEB)',/normal,charsize=0.7 
   ENDIF
   IF KEYWORD_SET(RELAYS)  THEN BEGIN
      relays      = INTARR(N_ELEMENTS(utc),5)
      relays(0,0) = REFORM(Q1)
      relays(0,1) = REFORM(Q2)
      relays(0,2) = REFORM(Q3)
      relays(0,3) = REFORM(Q4)
      relays(0,4) = REFORM(Q5)
   ENDIF
;
;  Plot dutycycle of heaters
;
   IF (single EQ 0) OR (single EQ 5)  THEN BEGIN
      z = Q1
      nz=N_ELEMENTS(z)
      nz=31*(nz/31)
      z=z(0:nz-1)
      nc=nz/31
      duty=FLTARR(nc)
      t = utc
      ind = 31*INDGEN(nc)
      t = t(ind)
      for i=0,nc-1 do duty(i)=TOTAL(z(31*i:31*(i+1)-1))/31.
      htr_labels = ['COB-N','EIT-N','LASCO-R','EIT-R','LEB-N']
      UTPLOT,t,MEDIAN(duty*100,11), yrange=[-10,110],psym=10 ,  $
          title='LASCO/EIT Substitution Heater Dutycycle',   $
          ytitle = 'Percent'
      fstart = duty(0)*100+10
      dt = UTC2TAI(t(N_ELEMENTS(t)-1))-UTC2TAI(t(0))
      dt = dt/20.
      startt = TAI2UTC(UTC2TAI(t(0))+dt)
      UTSTRING,startt,fstart,htr_labels(0),charsize=1.
      FOR j=1,4 DO BEGIN 
          CASE J OF
            1:  z=Q2
            2:  z=Q3
            3:  z=Q4
            4:  z=Q5
          ENDCASE
          for i=0,nc-1 do duty(i)=TOTAL(z(31*i:31*(i+1)-1))/31.
          IF (MAX(duty) GT 0)  THEN BEGIN
             OUTPLOT,t,MEDIAN(duty*100,11),psym=10
             fstart = duty(0)*100+10
             UTSTRING,startt,fstart,htr_labels(j),charsize=1.
          ENDIF
      ENDFOR
   ENDIF
ENDIF
IF KEYWORD_SET (save)  THEN BEGIN
   z = TVRD()
   z = NOT z
   ld = UTC2YYMMDD(utc(n_elements(utc)-1))
   fn = 'subhtr'+STRING(single,format='(i1)')+'_'+ld+'.gif'
   file = PICKFILE(PATH='/net/lasco6/data/ftp/pub/lasco/hk/',GET_PATH=DIR, $
          FILE=fn,/write)
   sep = '/'
   IF (!version.os_family EQ 'dos')  THEN sep='\'
   IF (!version.os_family EQ 'vms')  THEN sep='['
   IF (STRMID(file,0,1) NE sep)   THEN file=dir+file
   IF (file NE '')  THEN WRITE_GIF,file,z
ENDIF
 
!y.title = '' 
!y.range = '' 
!p.multi = 0 
!x.title = '' 
EMPTY 
RETURN 
END