FUNCTION thm_load_spinmodel,sc=sc,themishome=themishome,available=available
sp_lim=[2.0,5.0]
available=0
if not keyword_set(sc) then begin
dprint, 'No spacecraft selected, No spinmodel data returned th'+sc
return,-1
endif
if sc ne 'a' and sc ne 'b' and sc ne 'c' and sc ne 'd' and sc ne 'e' then begin
dprint, 'No spacecraft selected, No spinmodel data returned th'+sc
return,-1
endif
if not keyword_set(themishome) then themishome=!themis.local_data_dir
tt=timerange()
t1=time_double(strmid(time_string(tt(0)),0,10))
t_1=t1
t2=time_double(strmid(time_string(tt(1)-1.),0,10))
ndays=1+fix((t2-t1)/(24.*3600.))
spinpathnames=strarr(ndays)
i=0
while t1 le t2 do begin
ts=time_string(t1)
yr=strmid(ts,0,4) & mo=strmid(ts,5,2) & da=strmid(ts,8,2)
dir='th'+sc+'/l1/tmpfiles/th'+sc+'_'+yr+mo+da+'/'
spinpathnames[i]=dir+'spinmodel.txt'
i=i+1
t1=t1+24.*3600.
endwhile
files = file_retrieve(spinpathnames, _extra=!themis)
t1=t_1
spinfile=strarr(ndays)
i=0
while t1 le t2 do begin
ts=time_string(t1)
yr=strmid(ts,0,4) & mo=strmid(ts,5,2) & da=strmid(ts,8,2)
spinfile[i]=themishome+'th'+sc+'/l1/tmpfiles/th'+sc+'_'+yr+mo+da+'/spinmodel.txt'
i=i+1
t1=t1+24.*3600.
endwhile
nfiles=n_elements(spinfile)
if nfiles eq 1 then begin
if not file_test(spinfile) then begin
dprint, spinfile +' --- does not exist.'
return,-1
endif
endif else begin
ind=-1
for i=0,nfiles-1 do begin
if file_test(spinfile[i]) then ind=[ind,i] else dprint, spinfile[i]+' --- does not exist.'
endfor
n_ind=n_elements(ind)
if n_ind eq 1 then begin
return,-1
endif else begin
ind=ind[1:n_ind-1]
spinfile=spinfile[ind]
endelse
endelse
spindata=-1
nfits=0
t1=0d & t2=0d & s1=0l & s2=0l & sp=0d & me=0d
if n_elements(spinfile) eq 1 then openr,fp,spinfile,/get_lun else openr,fp,spinfile[0],/get_lun
fs = fstat(fp)
if fs.size ne 0 then begin
readf,fp,t1,t2,s1,s2,sp,me
nfits = 1
tt1=t1 & tt2=t2 & ss1=s1 & ss2=s2 & spn=sp & mer=me
fs=fstat(fp)
while fs.cur_ptr lt fs.size do begin
readf,fp,t1,t2,s1,s2,sp,me
nfits = nfits+1
tt1=[tt1,t1] & tt2=[tt2,t2] & ss1=[ss1,s1] & ss2=[ss2,s2] & spn=[spn,sp] & mer=[mer,me]
fs=fstat(fp)
endwhile
free_lun,fp
endif
if n_elements(spinfile) ne 1 then begin
nfile=n_elements(spinfile)
for i=1,nfile-1 do begin
openr,fp,spinfile[i],/get_lun
fs = fstat(fp)
if fs.size ne 0 then begin
readf,fp,t1,t2,s1,s2,sp,me
if nfits eq 0 then begin
nfits=1 & tt1=t1 & tt2=t2 & ss1=s1 & ss2=s2 & spn=sp & mer=me
endif else begin
nfits = nfits+1
tt1=[tt1,t1] & tt2=[tt2,t2] & ss1=[ss1,s1] & ss2=[ss2,s2] & spn=[spn,sp] & mer=[mer,me]
endelse
fs=fstat(fp)
while fs.cur_ptr lt fs.size do begin
readf,fp,t1,t2,s1,s2,sp,me
nfits = nfits+1
tt1=[tt1,t1] & tt2=[tt2,t2] & ss1=[ss1,s1] & ss2=[ss2,s2] & spn=[spn,sp] & mer=[mer,me]
fs=fstat(fp)
endwhile
endif
free_lun,fp
endfor
endif
if nfits gt 1 then begin
ind=where(spn gt sp_lim(0) and spn lt sp_lim(1),count)
bad_ind=where(spn le sp_lim(0) or spn ge sp_lim(1))
if count eq 0 then return,-1
if count ne n_elements(spn) then begin
t0=time_double('2001-1-1/0')
dprint,dlevel=1,'Error: Spin periods outside range ',sp_lim(0),' to ',sp_lim(1),' thrown out!!!!'
dprint,dlevel=1,time_string(tt1(bad_ind)+t0)
dprint,dlevel=1,spn(bad_ind)
tt1=tt1(ind) & tt2=tt2(ind)
ss1=ss1(ind) & ss2=ss2(ind)
spn=spn(ind) & mer=mer(ind)
endif
spindata={s_time:tt1,e_time:tt2,s_spin:ss1,e_spin:ss2,spin_period:spn,merit:mer}
available=1
endif
return,spindata
end