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 ;file_retrieve(/struct)
    source_options.local_data_dir = !stereo.local_data_dir  ; root_data_dir()+'stereo/'
    source_options.remote_data_dir = 'https://izw1.caltech.edu/STEREO2/'  ;  'behind/position_behind_2006_GSE.txt
    source_options.ignore_filedate =1 ; All files on remote system are updated daily (even if no differences).
    source_options.min_age_limit = 12*3600d  ; check no more often than once every 12 hours
endif
mystereo = source_options
;mystereo.remote_data_dir = 'http://www.srl.caltech.edu/STEREO2/Position/'  ;  'behind/position_behind_2006_GSE.txt

if n_elements(verbose)  eq 0 then verbose=0
;if not keyword_set(probes) then probes = ['a','b']
defprobe = struct_value(mystereo,'probe',def='a')    ; use default probe
if not keyword_set(probes) then probes = defprobe

;res = 3600l*24 *365.25    ; one year resolution in the files
tr = timerange(trange)
dates = time_struct(tr)
n = (dates[1].year - dates[0].year) +1   ; floor(tr[1]/res)-floor(tr[0]/res)+1)  > 1
dates = replicate(dates[0],n)
dates.year += indgen(n)
;tr = time_string(timerange(trange),prec=-5)
;tr = time_struct(timerange(trange))
;years = tr.year
;ny = (year[1]-year[0]) + 1

for p=0,n_elements(probes)-1 do begin
   probe = probes[p]
;   pref = 'st'+probe+'_' + (keyword_set(burst) ? '_b' : '')
   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)
;   relpathnames = relpathnames[uniq(relpathnames)]
   files = spd_download(remote_file=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  ; ,/silent ;,/testname  ;,verbose=dlevel
         par.chi2 = chi2
;         par.the mod= 360  & par.phi mod= 360  & par.psi mod= 360
         pars[j] = par
      endfor
;      pars.the mod= 360  & pars.phi mod= 360  & pars.psi mod= 360
      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}
;      stop
    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   ; initial condition
      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  ;,/testname  ;,verbose=dlevel
         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
;      store_data,'st'+probe+'_euler_angles_'+coord1+'>'+coord,data={x:tdbl,y:[[pars.phi],[pars.the],[pars.psi]]}
;      store_data,'st'+probe+'_euler_angles_'+coord1+'>'+coord+'_chi2',data={x:tdbl,y:pars.chi2}
   endelse
endfor


end

