pro st_position_load, source_options=source_options,trange=trange,probe=probes, $
rotmatrix_name=rotmatrix_name, $
Euler_angles_name = E_angles_name,$
Euler_params_name = E_params_name, $
attitude=attitude,verbose=verbose,coord1=coord1
attitude = keyword_set(attitude)
attitude = attitude || arg_present(rotmatrix_name) || keyword_set(rotmatrix_name)
attitude = attitude || arg_present(E_angles_name) || keyword_set(E_angles_name)
attitude = attitude || arg_present(E_params_name) || keyword_set(E_params_name)
if not keyword_set(coord1) then coord1 = 'SC'
if not keyword_set(source_options) then begin
stereo_init
source_options = !stereo
source_options.local_data_dir = !stereo.local_data_dir
source_options.remote_data_dir = 'http://www.srl.caltech.edu/STEREO2/'
source_options.ignore_filedate =1
source_options.min_age_limit = 12*3600d
endif
mystereo = source_options
if n_elements(verbose) eq 0 then verbose=0
defprobe = struct_value(mystereo,'probe',def='a')
if not keyword_set(probes) then probes = defprobe
tr = timerange(trange)
dates = time_struct(tr)
n = (dates[1].year - dates[0].year) +1
dates = replicate(dates[0],n)
dates.year += indgen(n)
for p=0,n_elements(probes)-1 do begin
probe = probes[p]
if not keyword_set(attitude) then begin
coord='GSE'
case probe of
'a' : path = 'Position/ahead/position_ahead_YYYY_'+coord+'.txt'
'b' : path = 'Position/behind/position_behind_YYYY_'+coord+'.txt'
endcase
nv = 3
tlabel = '_pos_'+coord
scale = 6400.
endif else begin
coord = 'RTN'
case probe of
'a' : path = 'Pointing/ahead/pointing_ahead_YYYY_'+coord+'.txt'
'b' : path = 'Pointing/behind/pointing_behind_YYYY_'+coord+'.txt'
endcase
nv = 9
tlabel = '_RotMat_SC>'+coord
scale = 1.
endelse
relpathnames= time_string(dates,tformat= path)
files = file_retrieve(relpathnames,_extra = mystereo)
fformat = {year:0l, doy:0l, sod:0l, flag:0, pos:dblarr(nv)}
data = 0
for i=0,n_elements(files)-1 do $
data = read_asc(files[i],format=fformat,append=data)
tstr = replicate( time_struct(0d), n_elements(data) )
tstr.year = data.year & tstr.date=data.doy & tstr.fsec=data.sod & tstr.month=1
tdbl = time_double(tstr)
if not keyword_set(attitude) then begin
store_data,'st'+probe+tlabel,data={x:tdbl,y:transpose(data.pos/scale)},dlimit={ystyle:2}
endif else begin
if keyword_set(get_rotmatrix) then store_data,'st'+probe+tlabel,data={x:tdbl,y:transpose(data.pos/scale)},dlimit={ystyle:2}
if coord1 eq 'SC' then rt = identity(3,/double)
if coord1 eq 'SC2' && probe eq 'b' then rt = [[-1d,0,0],[0,0,-1],[0,-1,0]]
if coord1 eq 'SC2' && probe eq 'a' then rt = [[-1d,0,0],[0,0,1],[0,1,0]]
if keyword_set(E_angles_name) or arg_present(e_angles_name) then begin
nd = n_elements(data)
par=0
dprint,'Getting Euler angles for probe ',probe
dummy = euler_ang_rot_matrix(0,param=par)
str_element,/add,par,'chi2',0.
pars = replicate(par,nd)
minres=1e-8
for j = 0,nd-1 do begin
dprint,dwait=10,j,' of ',nd
r = rt ## reform(data[j].pos,3,3)
fit,0,r,param=par,minres=minres,chi2=chi2,verbose=verbose
par.chi2 = chi2
pars[j] = par
endfor
e_angles_name ='st'+probe+'_euler_angles_'+coord1+'>'+coord
store_data,e_angles_name,data={x:tdbl,y:[[pars.phi],[pars.the],[pars.psi]]},dlimit={colors:'bgr'}
if keyword_set(get_chi2) then $
store_data,e_angles_name+'_chi2',data={x:tdbl,y:pars.chi2}
endif
if keyword_set(E_params_name) || arg_present(e_params_name) then begin
nd = n_elements(data)
par = 0
dprint,dlevel=2,'Getting Euler parameters for probe ',probe
dummy = euler_rot_matrix(0,param=par)
par.eulpar[*]=.5
str_element,/add,par,'chi2',0.
pars = replicate(par,nd)
minres=1e-8
for j = 0,nd-1 do begin
r = rt ## reform(data[j].pos,3,3)
fit,0,r,param=par,minres=minres,chi2=chi2,verbose=verbose
par.chi2 =chi2
dprint,dwait=10,j,' of ',nd,chi2
par.eulpar /= sqrt(total(par.eulpar^2))
pars[j] = par
endfor
E_params_name ='st'+probe+'_euler_param_'+coord1+'>'+coord
store_data,E_params_name,data={x:tdbl,y:transpose(pars.eulpar)},dlimit={yrange:[-1,1],ystyle:2,colors:'dbgr'}
if keyword_set(get_chi2) then $
store_data,E_params_name+'_chi2',data={x:tdbl,y:pars.chi2},dlimit={ystyle:2,ylog:1}
endif
endelse
endfor
end