;+
;FUNCTION:   mvn_swe_padsum
;PURPOSE:
;  Sums multiple PAD data structures.  This is done by summing raw counts
;  corrected by deadtime and then setting dtc to unity.  Also, note that 
;  summed PAD's can be "blurred" by a changing magnetic field direction, 
;  so summing only makes sense for short intervals.  The theta, phi, and 
;  omega tags can be hopelessly confused if the MAG direction changes much.
;
;USAGE:
;  padsum = mvn_swe_padsum(pad)
;
;INPUTS:
;       pad:           An array of PAD structures to sum.
;
;KEYWORDS:
;
; $LastChangedBy: dmitchell $
; $LastChangedDate: 2019-08-27 14:06:18 -0700 (Tue, 27 Aug 2019) $
; $LastChangedRevision: 27682 $
; $URL: svn+ssh://thmsvn@ambrosia.ssl.berkeley.edu/repos/spdsoft/tags/spedas_3_2/projects/maven/swea/mvn_swe_padsum.pro $
;
;CREATED BY:    David L. Mitchell  03-29-14
;FILE: mvn_swe_padsum.pro
;-
function mvn_swe_padsum, pad

  if (size(pad,/type) ne 8) then return, 0
  if (n_elements(pad) eq 1) then return, pad

  old_units = pad[0].units_name  
  mvn_swe_convert_units, pad, 'counts'            ; convert to raw counts
  padsum = pad[0]
  npts = n_elements(pad)

  padsum.met = mean(pad.met)
  padsum.time = mean(pad.time)
  padsum.end_time = max(pad.end_time)
  start_time = min(pad.time - (pad.delta_t/2D))
  padsum.delta_t = (padsum.end_time - start_time) > pad[0].delta_t
  padsum.dt_arr = total(pad.dt_arr,3)             ; normalization for the sum
    
  padsum.pa = total(pad.pa,3)/float(npts)         ; pitch angles can be blurred
  padsum.dpa = total(pad.dpa,3)/float(npts)
  padsum.pa_min = total(pad.pa_min,3)/float(npts)
  padsum.pa_max = total(pad.pa_max,3)/float(npts)

  padsum.sc_pot = mean(pad.sc_pot, /nan)
  padsum.Baz = mean(pad.Baz, /nan)
  padsum.Bel = mean(pad.Bel, /nan)

  padsum.magf[0] = mean(pad.magf[0], /nan)
  padsum.magf[1] = mean(pad.magf[1], /nan)
  padsum.magf[2] = mean(pad.magf[2], /nan)
  padsum.v_flow[0] = mean(pad.v_flow[0], /nan)
  padsum.v_flow[1] = mean(pad.v_flow[1], /nan)
  padsum.v_flow[2] = mean(pad.v_flow[2], /nan)

  nrm = pad.data
  var = pad.var
  nrm[*] = 1.
  bndx = where(~finite(pad.data), count)
  if (count gt 0L) then begin
    nrm[bndx] = 0.
    var[bndx] = !values.f_nan
  endif
  nrm = total(nrm,3)/float(npts)

  padsum.data = total(pad.data/pad.dtc,3,/nan)/nrm  ; corrected counts
  padsum.var = total(var/pad.dtc,3,/nan)/nrm        ; variance of sum
  padsum.dtc = 1.         ; summing corrected counts is not reversible
  padsum.bkg = total(pad.bkg,3)/float(npts)

  mvn_swe_convert_units, pad, old_units
  mvn_swe_convert_units, padsum, old_units

  return, padsum

end