;+
; NAME: 
;   inms_spectra_aux_values - determines values of ancilliary data
;
pro inms_spectra_aux_values, axSpectra, $ ;; (i/o) spectra array
                             axSeries,  $ ;; (i)   l1A data series
                             anTimeValues ;; (i)   times for interpolation
;
; ARGUMENTS:
;  axSpectra    - the spectra array to be filled with aux values
;  axSeries     - the data series from which the spectra were formed
;  anTimeValues - an array of times corresponding to eh spectra
;
; CHANGES:
;  18-NOV-2005  D. A. Gell  Add program prolog and ensure that
;                           no math exceptions are reported  
;  04-Dec-2006  D. A. Gell  Add velocity components to structure, replaced
;                           interpolation cals with equivalent interpol call (simplification)
;  11-Dec-2006  D. A. Gell  Compute Saturn relative positions for non-targeted periods 
;  05-Jan-2007  D. A. Gell  Use correct velocity components, velocity w.r.t target in
;                              spacecraft frame (ex target frame)  
;  08-Jan-2007  D. A. Gell  Correct computation of ram angle, velocity components
;                               are w.r.t. spacecraft when targeted
;                               and w.r.t. saturn when not.  
;  10-Jan-2007  D. A. Gell  Ram angle w.r.t. saturn was overwritten with bad value
;-
;=======================================================================
;
    nSaveExcept = !except
    !except           = 0 ;; turn of math exception reporting

    if strcmp(axSpectra[0].sTarget, 'saturn',/fold) eq 1 then begin 
        ;; for saturn report distance in saturn radia
        axSpectra.nAlt_t = interpol(axSeries.distance_s, axSeries.UTtime, anTimeValues, $
                                    /spline) / 60268.0
        axSpectra.nSza_t = interpol(axSeries.sza_s, axSeries.UTtime, anTimeValues, /spline)
        axSpectra.nLst_t = interpol(axSeries.lst_s, axSeries.UTtime, anTimeValues, /spline)   	

        anScVelX = interpol(axSeries.sc_vel_s_x, axSeries.UTtime, anTimeValues, /spline)
        anScVelY = interpol(axSeries.sc_vel_s_y, axSeries.UTtime, anTimeValues, /spline)
        anScVelZ = interpol(axSeries.sc_vel_s_z, axSeries.UTtime, anTimeValues, /spline) 

        anScPosX = interpol(axSeries.sc_pos_s_x, axSeries.UTtime, anTimeValues, /spline)
        anScPosY = interpol(axSeries.sc_pos_s_y, axSeries.UTtime, anTimeValues, /spline)
        anScPosZ = interpol(axSeries.sc_pos_s_z, axSeries.UTtime, anTimeValues, /spline)

        anViewX  = interpol(axSeries.view_dir_s_x, axSeries.UTtime, anTimeValues, /spline)
        anViewY  = interpol(axSeries.view_dir_s_y, axSeries.UTtime, anTimeValues, /spline)
        anViewZ  = interpol(axSeries.view_dir_s_z, axSeries.UTtime, anTimeValues, /spline)

        axSpectra.nSpeed  = sqrt(anScVelX^2 + anScVelY^2 + anScVelZ^2)

        axSpectra.nAngle  = acos((((anViewX * anScVelX $
                                 + anViewY * anScVelY $
                                 + anViewZ * anScVelZ)/axSpectra.nSpeed) > (-1)) < 1)  

    endif else begin

        axSpectra.nAlt_t = interpol(axSeries.alt_t, axSeries.UTtime, anTimeValues, /spline)
        axSpectra.nSza_t = interpol(axSeries.sza_t, axSeries.UTtime, anTimeValues, /spline)
        axSpectra.nLst_t = interpol(axSeries.lst_t, axSeries.UTtime, anTimeValues, /spline)   

        anScVelX = interpol(axSeries.sc_vel_t_scx, axSeries.UTtime, anTimeValues, /spline)
        anScVelY = interpol(axSeries.sc_vel_t_scy, axSeries.UTtime, anTimeValues, /spline)
        anScVelZ = interpol(axSeries.sc_vel_t_scz, axSeries.UTtime, anTimeValues, /spline) 

        anScPosX = interpol(axSeries.sc_pos_t_x, axSeries.UTtime, anTimeValues, /spline)
        anScPosY = interpol(axSeries.sc_pos_t_y, axSeries.UTtime, anTimeValues, /spline)
        anScPosZ = interpol(axSeries.sc_pos_t_z, axSeries.UTtime, anTimeValues, /spline)

        axSpectra.nSpeed  = sqrt(anScVelX^2 + anScVelY^2 + anScVelZ^2)

        axSpectra.nAngle  = acos(((-anScVelX /axSpectra.nSpeed) > (-1)) < 1)   

    endelse

    axSpectra.nLat_t  = asin(anScPosZ $
                             / sqrt(anScPosX^2 + anScPosY^2 + anScPosZ^2)) * !radeg
    axSpectra.nWlon_t = (720. - !radeg * atan(anScPosY, anScPosX)) mod 360.

    axSpectra.nSpeed  = sqrt(anScVelX^2 + anScVelY^2 + anScVelZ^2)

    axSpectra.nVelX   = anScVelX
    axSpectra.nVelY   = anScVelY
    axSpectra.nVelZ   = anScVelZ
    ;;
    ;; restore exception handling to state at entry
    !except           = nSaveExcept

end
