pro cdf_partial_epoch_finder,cdf_id,epoch_names,epoch_indices
get_timespan,tspan
number_of_epochs = n_elements(epoch_names)
epoch_indices = lonarr(number_of_epochs,2)
info = cdf_info(cdf_id)
for i = 0, number_of_epochs - 1 do begin
found_start = 0
found_end = 0
this_var = where(info.vars.name eq epoch_names[i])
epoch_type = info.vars[this_var].datatype
epoch_nrecs = info.vars[this_var].numrec
cdf_varget, cdf_id, epoch_names[i], start_epoch, rec_start=0
if epoch_type eq 'CDF_TIME_TT2000' then start_time = time_double(start_epoch,/tt2000) $
else start_time = time_double(start_epoch,/epoch)
cdf_varget,cdf_id, epoch_names[i], end_epoch, rec_start=epoch_nrecs-1
if epoch_type eq 'CDF_TIME_TT2000' then end_time = time_double(end_epoch,/tt2000) $
else end_time = time_double(end_epoch,/epoch)
if (tspan[1] lt start_time) or (tspan[0] gt end_time) then begin
epoch_indices[i,0] = -1
epoch_indices[i,1] = -1
found_start = 1
found_end = 1
endif
if tspan[0] le start_time then begin
start_index = 0
epoch_indices[i,0] = 0
found_start = 1
endif
if tspan[1] ge end_time then begin
end_index = epoch_nrecs-1
epoch_indices[i,1] = end_index
found_end = 1
endif
print,'First time in file: ',time_string(start_time)
print,'Last time in file: ',time_string(end_time)
search_start = 0
search_end = epoch_nrecs-1
new_time = end_time
while (found_start eq 0) do begin
if search_start eq search_end then begin
start_index = search_start
epoch_indices[i,0] = start_index
found_start = 1
endif else if (search_end - search_start) eq 1 then begin
if tspan[0] lt new_time then begin
start_index = search_start
epoch_indices[i,0] = start_index
found_start = 1
endif else begin
start_index = search_end
epoch_indices[i,0] = start_index
found_start = 1
endelse
endif else begin
new_index = (search_end - search_start) / 2l + search_start
cdf_varget,cdf_id, epoch_names[i], end_epoch, rec_start=new_index
if epoch_type eq 'CDF_TIME_TT2000' then new_time = time_double(end_epoch,/tt2000) $
else new_time = time_double(end_epoch,/epoch)
if new_time eq tspan[0] then begin
start_index = new_index
epoch_indices[i,0] = new_index
found_start = 1
endif else begin
if new_time lt tspan[0] then $
search_start = new_index else $
search_end = new_index
endelse
endelse
endwhile
search_start = start_index
search_end = epoch_nrecs-1
while (found_end eq 0) do begin
if search_start eq search_end then begin
end_index = search_start
epoch_indices[i,1] = end_index
found_end = 1
endif else if (search_end - search_start) eq 1 then begin
if tspan[1] gt new_time then begin
end_index = search_start
epoch_indices[i,1] = end_index
found_end = 1
endif else begin
end_index = search_end
epoch_indices[i,1] = end_index
found_end = 1
endelse
endif else begin
new_index = (search_end - search_start) / 2l + search_start
cdf_varget,cdf_id, epoch_names[i], end_epoch, rec_start=new_index
if epoch_type eq 'CDF_TIME_TT2000' then new_time = time_double(end_epoch,/tt2000) $
else new_time = time_double(end_epoch,/epoch)
if new_time eq tspan[1] then begin
end_index = new_index
epoch_indices[i,1] = new_index
found_end = 1
endif else begin
if new_time lt tspan[1] then $
search_start = new_index else $
search_end = new_index
endelse
endelse
endwhile
endfor
return
end