pro rbsp_spinfit ,var_name_in, $
sigma=sigma, npoints=npoints, spinaxis=spinaxis, median=median, $
plane_dim=plane_dim, axis_dim=axis_dim, $
min_points=min_points,alpha=alpha,beta=beta, $
phase_mask_starts=phase_mask_starts, $
phase_mask_ends=phase_mask_ends, $
sc = sc, force = force, tper = tper, tphase = tphase
compile_opt idl2
tvar = var_name_in
if n_elements(sc) eq 0 then sc = strlowcase(strmid(tvar, 4, 1))
rbx = 'rbsp' + sc + '_'
if cotrans_get_coord(tvar) ne 'uvw' and ~keyword_set(force) then begin
dprint, tvar, ' is not in UVW coordinate system. Abort.'
return
endif
if n_elements(plane_dim) eq 0 then plane_dim = 0
case plane_dim of
0: begin
sun2sensor = -10d
boomfix = '_e12'
end
1: begin
sun2sensor = -100d
boomfix = '_e34'
end
else: begin
dprint, 'Invalid plane_dim value. Abort.'
return
end
endcase
if n_elements(tper) eq 0 then tper = rbx + 'spinper'
if n_elements(tphase) eq 0 then tphase = rbx + 'spinphase'
trange = timerange()
dt = 60d
nt = round((trange[1] - trange[0]) / dt) + 1L
tarr = trange[0] + dindgen(nt) * dt
ind = where(tarr lt trange[1], nind)
tarr = tarr[ind]
phase = rbsp_interp_spin_phase(sc, tarr, tper = tper, tphase = tphase)
get_data, tper, data=dat
per_arr = interp(dat.y, dat.x, tarr, /ignore_nan)
thx_spinphase = {x:tarr, y:phase}
thx_spinper = {x:tarr, y:per_arr}
thm_sunpulse,thx_spinphase.x,thx_spinphase.y,thx_spinper.y, $
sunpulse="thx_sunpulse_times"
get_data, 'thx_sunpulse_times',data=thx_sunpulse_times
del_data, 'thx_sunpulse_times'
get_data, tvar, data=thx_xxx_in, dl = dl
if n_elements(axis_dim) eq 0 then axis_dim = 2
t1 = systime(/sec)
spinfit, thx_xxx_in.x, thx_xxx_in.y, $
thx_sunpulse_times.x, thx_sunpulse_times.y, $
a, b, c, spin_axis, med_axis, s, n, sun_data, $
min_points = min_points, alpha = alpha, beta = beta, $
plane_dim = plane_dim, axis_dim = axis_dim, $
phase_mask_starts = phase_mask_starts, $
phase_mask_ends=phase_mask_ends, $
sun2sensor=sun2sensor
t2 = systime(/sec)
print, 'SPINFIT time: ', t2 - t1, ' seconds'
sizesun=size(sun_data)
sun_midpoint=fltarr(sizesun[1])
sun_midpoint=sun_data
str_element, dl, 'data_att', data_att, success=has_data_att
if has_data_att then str_element, data_att, 'boom', boomfix, /add $
else data_att = { data_type: boomfix }
str_element, dl, 'data_att', data_att, /add
str_element, dl,'labels',/delete
store_data, tvar +'_spinfit'+boomfix+'_a',data={x:sun_midpoint,y:a}, dl = dl
store_data, tvar +'_spinfit'+boomfix+'_b',data={x:sun_midpoint,y:b}, dl = dl
store_data, tvar +'_spinfit'+boomfix+'_c',data={x:sun_midpoint,y:c}, dl = dl
if keyword_set(sigma) then $
store_data, tvar+'_spinfit'+boomfix+'_sig',data={x:sun_midpoint,y:s}, $
dl = dl
if keyword_set(Npoints) then $
store_data, tvar+'_spinfit'+boomfix+'_npoints', $
data={x:sun_midpoint,y:n}, dl = dl
if keyword_set(spinaxis) then begin
if keyword_set(median)then begin
store_data, tvar+'_spinfit'+boomfix+'_med',$
data={x:sun_midpoint,y:med_axis}, dl = dl
endif else store_data, tvar+'_spinfit'+boomfix+'_avg',$
data={x:sun_midpoint,y:spin_axis}, dl = dl
endif
y = [[b], [c], [spin_axis]]
x = sun_midpoint
data = {x:x, y:y}
str_element, data_att, 'coord_sys', 'dsc', /add
str_element, dl, 'data_att', data_att, /add
str_element, dl,'labels',['Ex DSC', 'Ey DSC', 'Ez DSC'], /add
store_data, tvar + '_spinfit', data = data, dl = dl
options, tvar + '_spinfit', colors = [2,4,6], labflag = 1
end