;+
;PURPOSE:
; Apply eclipse corrections (when present) to 3D data structures
; within thm_part_moments.pro
;
;
;ARGUMENTS:
; dat: Valid 3D data structure
;
;
;KEYWORDS:
; domega: Array of weights used inside the Wind routines to calculate
; vector and tensore components. This array should be set to
; 0 if a correction is being applied or if a correction was
; applied on the last loop.
; eclipse: Flag used by this routine to determine when an ecplise
; starts or ends (assists output messages). Should be set
; to 1 at the start of an eclipse and 0 at the end.
; previous: Stores the delta phi value from the last time through the
; loop. Helps determine when domega should be zeroed.
;
;
;
;NOTES:
;
;
;-
pro thm_part_moments_apply_eclipse, dat, domega=domega, $
eclipse=eclipse, previous=previous
compile_opt idl2, hidden
; Check data structure validity
if size(dat,/type) ne 8 then begin
dprint, dlevel=0, 'Invalid particle data structure. No eclipse corrections applied.'
return
endif
; Check that corrections tag exists
if ~in_set( strlowcase( tag_names(dat) ), 'eclipse_dphi') then begin
return
endif
; If /use_eclipse_corrections was used when loading data this field
; should always contain a valid number.
if ~finite(dat.eclipse_dphi) then begin
if size(previous,/type) ne 0 && finite(previous) then begin
dprint, dlevel=1, 'Error: Expected valid eclipse correction. '+ $
'Spin data may not have been loaded properly or may be incomplete.'
previous = dat.eclipse_dphi
domega = 0 ;reset weight for moment calc
return
endif else begin
return
endelse
endif
; Attempt to notify user of the correction duration
if dat.eclipse_dphi ne 0 && ~keyword_set(eclipse) then begin
eclipse = 1b
dprint, dlevel=2, verbose=verbose, 'Applying eclipse corrections beginning at: '+time_string(dat.time)
endif
if dat.eclipse_dphi eq 0 && keyword_set(eclipse) then begin
eclipse = 0b
dprint, dlevel=2, verbose=verbose, 'End eclipse corrections at: '+time_string(dat.time)
endif
; Check this correction against the previous distributions.
; If different the weight for moments calculation must be zeroed.
if keyword_set(previous) then begin
if previous ne dat.eclipse_dphi then domega=0
endif
; Add correction to current phi values
dat.phi += dat.eclipse_dphi
; Store last value
previous = dat.eclipse_dphi
end