
pro update_pmu_cat_data_ops, t0=t0, t1=t1, delta_days=delta_days, $
  use_existing_cat=use_existing_cat, t_mid_arr_pmu=t_mid_arr_pmu, $
  status_val_arr=status_val_arr, pmu_on_arr=pmu_on_arr, $
  pmu_rot_arr=pmu_rot_arr, pmu_rot_cum=pmu_rot_cum, pmu_rot_total=pmu_rot_total, $
  verbose=verbose

mech_name = 'pmu'
mnem_name = 'fpp_pmu_status'

if keyword_set(use_existing_cat) then begin
  filnam_sav = '/sanhome/slater/public_html/sot/instrument/mechanisms/' + mech_name + '.sav'
  filnam_sav = '/archive1/hinode/sot/instrument/mechanisms_data_ops/' + mech_name + '.sav'
  restore, filnam_sav
  if not exist(t0) then t0 = t_mid_arr_pmu[n_elements(t_mid_arr_pmu)-1]
endif

if not exist(t0) then t0 = '22-oct-2006'
if not exist(t1) then t1 = anytim(!stime, /yoh)
if not exist(delta_days) then delta_days = 5
if not exist(message_cadence) then message_cadence = delta_days
if not exist(dir_top_mech) then $
  dir_top_mech = '/archive1/hinode/sot/instrument/mechanisms_data_ops'
; dir_top_mech = '/sanhome/slater/public_html/sot/instrument/mechanisms'

tg = timegrid(t0, t1, days=delta_days, out='vms')
ng = n_elements(tg)

for i = 0,ng-2 do begin
  delvarx, mnem_struc0, mnem_name0, mnem_data0, t_mnem0

; Read in a chunk of data for this mnemonic:

  mnem_struc0 = sag_get_mnem(tg(i), tg(i+1), mnem_name)

  if size(mnem_struc0, /type) eq 8 then begin

  mnem_name0 = mnem_struc0.(0).mnem
  mnem_data0 = mnem_struc0.(0).value
  n_val0 = n_elements(mnem_data0)
  t_mnem0 = mnem_struc0.(0).daytime
  t_mnem_sec0 = anytim(t_mnem0)
  t_mnem_sec_avg0 = mean(t_mnem_sec0)
  t_mid0 = anytim(t_mnem_sec_avg0, /yoh)

; For the PMU, calculate the total 'on' time (in units of HK packet sampling interval, 
; which is 10 sec for the PMU), and convert into number of rotations at one rotation
; per 1.6 sec. We assume that for the PMU a value of 8 for 'fpp_pmu_status' indicates
; the PMU is rotating at one rev per 1.6 seconds:

  pmu_on0 = lonarr(n_val0)
  ss_status_8 = where(mnem_struc0.(0).value eq 8, n_status_8)
  if n_status_8 gt 0 then pmu_on0[ss_status_8] = 1l
  status_val_arr0 = all_vals(mnem_struc0.(0).value)

  if not exist(pmu_on_arr) then begin
    t_mid_arr_pmu = t_mid0
    pmu_on_arr = total(pmu_on0)
    status_val_arr = status_val_arr0
  endif else begin
    t_mid_arr_pmu = [t_mid_arr_pmu, t_mid0]
    pmu_on_arr = [pmu_on_arr, total(pmu_on0)]
    status_val_arr = [status_val_arr, status_val_arr0]
  endelse
  pmu_rot_arr = pmu_on_arr*10./1.6
  pmu_rot_cum = total(pmu_on_arr, /cumulative)*10./1.6
  pmu_rot_total = total(pmu_on_arr)*10./1.6
  status_val_arr = all_vals(status_val_arr)

  if keyword_set(verbose) then $
    print, 'Finished PMU for ' + strmid(t_mid0,0,9) + $
           '.  Total rotations = ' + strtrim(pmu_rot_total,2)

endif

endfor

save, t_mid_arr_pmu, pmu_on_arr, status_val_arr, pmu_rot_arr, pmu_rot_cum, pmu_rot_total, file=filnam_sav

end
