function mvn_spice_kernels,names,trange=trange,all=all,load=load,reset=reset,verbose=verbose,source=source,valid_only=valid_only,sck=sck,clear=clear,reconstruct=reconstruct
common mvn_spice_kernels_com, kernels,retrievetime,tranges
if spice_test() eq 0 then return,''
tb = scope_traceback(/structure)
this_dir = file_dirname(tb[n_elements(tb)-1].filename)+'/'
naif = spice_file_source(preserve_mtime=1,valid_only=valid_only)
if keyword_set(sck) then names = ['STD','SCK']
if keyword_set(all) or not keyword_set(names) then names=['STD','SCK','FRM','IK','SPK','CK','CK_APP']
if keyword_set(reset) then kernels=0
ct = systime(1)
waittime = 10.
if 1 || ~keyword_set(kernels) || (ct - retrievetime) gt waittime then begin
if ~keyword_set(source) then source=naif
if keyword_set(verbose) then source.verbose = verbose
kernels=''
for i=0,n_elements(names)-1 do begin
case strupcase(names[i]) of
'STD': begin
append_array,kernels, spice_standard_kernels(source=source,/mars)
end
'LSK': append_array,kernels, file_retrieve('generic_kernels/lsk/naif0010.tls',_extra=source)
'SCK': append_array,kernels, file_retrieve('MAVEN/kernels/sclk/MVN_SCLKSCET.000??.tsc',_extra=source,/last_version)
'FRM': begin
append_array,kernels, this_dir+'kernels/maven_v04.tf'
append_array,kernels, this_dir+'kernels/maven_misc.tf'
end
'IK': begin
append_array,kernels, this_dir+'kernels/ik/maven_ant.ti'
append_array,kernels, this_dir+'kernels/ik/maven_euv.ti'
append_array,kernels, this_dir+'kernels/ik/maven_iuvs.ti'
append_array,kernels, this_dir+'kernels/ik/maven_lpw.ti'
append_array,kernels, this_dir+'kernels/ik/maven_mag.ti'
append_array,kernels, this_dir+'kernels/ik/maven_ngims.ti'
append_array,kernels, this_dir+'kernels/ik/maven_sep.ti'
append_array,kernels, this_dir+'kernels/ik/maven_static.ti'
append_array,kernels, this_dir+'kernels/ik/maven_swea.ti'
append_array,kernels, this_dir+'kernels/ik/maven_swia.ti'
end
'SPK': begin
tr= timerange(trange)
if (tr[1] ge time_double('2013-11-18')) && (tr[0] le time_double('2014-08-11')) then append_array,kernels, file_retrieve('MAVEN/kernels/spk/trj_c_131118-140811_rec_v?.bsp',_extra=source)
if keyword_set(reconstruct) then begin
append_array,kernels, file_retrieve('MAVEN/kernels/spk/maven_orb_rec.bsp',_extra=source)
endif else begin
if (tr[1] ge time_double('2014-07-08')) && (tr[0] le time_double('2014-09-22')) then append_array,kernels, file_retrieve('MAVEN/kernels/spk/trj_orb_od030b_140708-140927_plm1-10.0_final_v1.bsp',_extra=source)
append_array,kernels, file_retrieve('MAVEN/kernels/spk/maven_orb.bsp',_extra=source)
append_array,kernels, file_retrieve('MAVEN/kernels/spk/maven_orb_rec.bsp',_extra=source)
endelse
end
'CK': begin
tr= timerange(trange)
att_weekly_format = 'MAVEN/kernels/ck/mvn_sc_rel_yyMMDD_??????_v??.bc'
att_weekly_kern = mvn_pfp_file_retrieve(att_weekly_format ,source=source, trange=tr,daily_names=7,shift=4,last_version=1,/valid_only)
n_weekly = n_elements(att_weekly_kern) * keyword_set(att_weekly_kern)
if n_weekly ge 1 then begin
str = strmid(att_weekly_kern[n_weekly-1],/reverse_offset,12,6)
tr[0] = time_double(str,tformat='yyMMDD') + 86400
endif
att_daily_format = 'MAVEN/kernels/ck/mvn_sc_red_yyMMDD_v??.bc'
att_daily_kern = mvn_pfp_file_retrieve(att_daily_format ,source=source, trange=tr,/daily_names,/last_version,/valid_only)
n_daily = n_elements(att_daily_kern) * keyword_set(att_daily_kern)
if n_daily ge 1 then begin
str = strmid(att_daily_kern[n_daily-1],/reverse_offset,12,6)
tr[0] = time_double(str,tformat='yyMMDD') + 86400+1
endif
if ~keyword_set(reconstruct) && (tr[0] le tr[1]) then begin
att_quick_format = 'MAVEN/kernels/ck/mvn_sc_rec_yyMMDD_??????_v??.bc'
att_quick_kern = mvn_pfp_file_retrieve(att_quick_format ,source=source, trange=tr,/daily_names,/valid_only)
endif
if keyword_set(att_quick_kern) then append_array,kernels, att_quick_kern
if keyword_set(att_daily_kern) then append_array,kernels, att_daily_kern
if keyword_set(att_weekly_kern) then append_array,kernels, att_weekly_kern
end
'CK_APP': begin
tr= timerange(trange)
app_weekly_format = 'MAVEN/kernels/ck/mvn_app_rel_yyMMDD_??????_v??.bc'
app_weekly_kern = mvn_pfp_file_retrieve(app_weekly_format ,source=source, trange=tr,daily_names=7,shift=4,last_version=1,/valid_only)
n_weekly = n_elements(app_weekly_kern) * keyword_set(app_weekly_kern)
if n_weekly ge 1 then begin
str = strmid(app_weekly_kern[n_weekly-1],/reverse_offset,12,6)
tr[0] = time_double(str,tformat='yyMMDD') + 86400
endif
app_daily_format = 'MAVEN/kernels/ck/mvn_app_red_yyMMDD_v??.bc'
app_daily_kern = mvn_pfp_file_retrieve(app_daily_format ,source=source, trange=tr,/daily_names,/last_version,/valid_only)
n_daily = n_elements(app_daily_kern) * keyword_set(app_daily_kern)
if n_daily ge 1 then begin
str = strmid(app_daily_kern[n_daily-1],/reverse_offset,12,6)
tr[0] = time_double(str,tformat='yyMMDD') + 86400+1
endif
if ~keyword_set(reconstruct) && (tr[0] le tr[1]) then begin
app_quick_format = 'MAVEN/kernels/ck/mvn_app_rec_yyMMDD_??????_v??.bc'
app_quick_kern = mvn_pfp_file_retrieve(app_quick_format ,source=source, trange=tr+[-2,0]*86400L,/daily_names,/valid_only)
endif
if tr[1] lt time_double('14-10-9') then append_array,kernels, file_retrieve('MAVEN/misc/app/mvn_app_nom_131118_141031_v1.bc',_extra=source)
if keyword_set(app_quick_kern) then append_array,kernels, app_quick_kern
if keyword_set(app_daily_kern) then append_array,kernels, app_daily_kern
if keyword_set(app_weekly_kern) then append_array,kernels, app_weekly_kern
end
endcase
endfor
retrievetime = ct
endif
if keyword_set(clear) then cspice_kclear
if keyword_set(load) then spice_kernel_load,kernels
return,kernels
end