;+
;	Batch File: THM_SPINFIT
;
;	Purpose:  Demonstration of finding spin fit parameters for spinning data.
;   The FIT module calculates the E-Field and B-Field vectors by taking 32 points at equal angles
;   and fitting a sine wave least squares fit to the data. The best fit of the data is defined by the
;   formula: A + B*cos() + C*sin(). The module calculates the standard deviation of the fit
;   called Sigma, and the number of points remaining in the curve called N.

;	Calling Sequence:
;	  Cut-and-paste the code to the command line.
;
;	Arguments:
;   required parameters:
;     var_name_in = tplot variable name containing data to fit
;
;   keywords:
;    sigma = If set, will cause program to output tplot variable with sigma for each period.
;    npoints = If set, will cause program to output tplot variable with number of points in fit.
;    spinaxis = If set, program will output a tplot variable storing the average over the spin axis dimension
;             for each time period.
;    median  = If spinaxis set, program will output a median of each period instead of the average.
;    plane_dim = Tells program which dimension to treat as the plane. 0=x, 1=y, 2=z. Default 0.
;    axis_dim = Tells program which dimension contains axis to average over. Default 0.  Will not
;             create a tplot variable unless used with /spinaxis.
;    min_points = Minimum number of points to fit.  Default = 5.
;    alpha = A parameter for finding fits.  Points outside of sigma*(alpha + beta*i)
;          will be thrown out.  Default 1.4.
;    beta = A parameter for finding fits.  See above.  Default = 0.4
;    phase_mask_starts = Time to start masking data.  Default = 0
;    phase_mask_ends = Time to stop masking data.  Default = -1
;    sun2sensor = Tells how much to rotate data to align with sun sensor.
;
;
;	Notes:
;	The module determines which data is more than xN * �N (sN = standard deviation) away from fit,
;   and removes those points and repeats the fit. The second time the standard deviation is
;   smaller so the tolerance is increased a bit. The tolerance xN varies with try as:
;   Alpha*NBeta, where A=1.4 and Beta=0.4 provide good results. The operation continues
;   until no points are outside the bounds and the process is considered convergent.
;
;Written by Katherine Ramer
; $LastChangedBy: Katherine Ramer$
; $LastChangedDate: 2009-05-06 10:57:09 -0700 (Wed, 06 May 2009) $
; $LastChangedRevision: 5789 $
; $URL $
;-

; FIT Ground Based SpinFit data example.


; set a few TPLOT options.
tplot_title = 'THEMIS FIT Ground Based Spin Fit Examples'
tplot_options, 'title', tplot_title
tplot_options, 'xmargin', [ 15, 10]
tplot_options, 'ymargin', [ 5, 5]

; set the color table.
loadct2, 39

; set the timespan and load the raw data required to perform spin fit.
timespan, '2008-01-01', 1.0, /day

thm_load_fgm,probe='a',level=1,type='raw'
thm_load_efi,probe='a',level=1,type='raw'
thm_load_state,probe='a',/get_support_data

; perform spin fit on fgh data and have it return A, B, C fit parameters plus the
; standard deviation and number of points remaining in curve.

; fit magnetic field data
thm_spinfit, 'th?_fgh', /sigma, /npoints

; fit electric field data
thm_spinfit, 'th?_efp', /sigma, /npoints

;stop


; Now load on board spin fit data to compare.

thm_load_fit, probe='a'

; tha_fit_efit and tha_fit_bfit contain the A, B, C, sigma, and npoints values in an
; nx5 array for electric and magnetic fields, respectively.