pro udata_interpolation,vname1,vname2,$
st_time0=st_time0,$
ed_time0=ed_time0,$
reverse=reverse,$
set_interval=set_interval
if strlen(tnames(vname1)) * strlen(tnames(vname2)) eq 0 then begin
print, 'Cannot find the tplot vars in argument!'
return
endif
get_data,vname1,data=d1
get_data,vname2,data=d2
time_01=d1.x
data_01=d1.y
time_02=d2.x
data_02=d2.y
if keyword_set(reverse) then begin
if(rev eq 1) then begin
tmpD=data_01
tmpT=time_01
data_01=data_02
time_01=time_02
data_02=tmpD
time_02=tmpT
endif
endif
s=''
for i=0L,n_elements(data_01)-1 do begin
if finite(data_01(i)) then begin
first01=i
break
endif
endfor
for i=0L,n_elements(data_01)-1 do begin
if finite(data_01(n_elements(data_01)-1-i)) then begin
last01=n_elements(data_01)-1-i
break
endif
endfor
for i=0L,n_elements(data_02)-1 do begin
if finite(data_02(i)) then begin
first02=i
break
endif
endfor
for i=0L,n_elements(data_02)-1 do begin
if finite(data_02(n_elements(data_02)-1-i)) then begin
last02=n_elements(data_02)-1-i
break
endif
endfor
st_time=max([time_01(first01),time_02(first02)])
ed_time=min([time_01(last01),time_02(last02)])
if keyword_set(st_time0) then begin
if time_double(st_time0) ge st_time then st_time=time_double(st_time0)
endif
if keyword_set(ed_time0) then begin
if time_double(ed_time0) le ed_time then ed_time=time_double(ed_time0)
endif
print,'Start Time : ',time_string(st_time)
print,'End Time : ',time_string(ed_time)
for i=1L,n_elements(data_01)-1 do begin
append_array,interval,time_01(i)-time_01(i-1)
endfor
if keyword_set(set_interval) then begin
itp_interval=set_interval
endif else begin
itp_interval=min(interval)
endelse
print,itp_interval,' [sec] : Time Interval'
i=0L
while (st_time+itp_interval*i le ed_time) do begin
append_array,time_03,st_time+itp_interval*i
i++
endwhile
inter_numX=0
inter_numY=0
flag2=0
tmp=!values.f_NAN
for i=0L,n_elements(time_03)-1 do begin
if (where(time_01 eq time_03(i)) ne -1) then begin
if finite(data_01(where(time_01 eq time_03(i)))) then begin
append_array,data_03,data_01(where(time_01 eq time_03(i)))
flag2=1
endif
endif
if (flag2 eq 0) then begin
data_01l=data_01(where(time_01 lt time_03(i)))
time_01l=time_01(where(time_01 lt time_03(i)))
for j=1L,n_elements(data_01l) do begin
if finite(data_01l(n_elements(data_01l)-j)) then begin
inter_lowD=data_01l(n_elements(data_01l)-j)
inter_lowT=time_01l(n_elements(data_01l)-j)
break
endif
endfor
data_01h=data_01(where(time_01 ge time_03(i)))
time_01h=time_01(where(time_01 ge time_03(i)))
for j=0L,n_elements(data_01h)-1 do begin
if finite(data_01h(j)) then begin
inter_highD=data_01h(j)
inter_highT=time_01h(j)
break
endif
endfor
calA=double(inter_lowD)
calB=double(inter_highD)-double(inter_lowD)
calC=(double(time_03(i))-double(inter_lowT))/(double(inter_highT)-double(inter_lowT))
append_array,data_03,calA+calB*calC
inter_numX++
endif
flag2=0
endfor
flag2=0
for i=0L,n_elements(time_03)-1 do begin
if (where(time_02 eq time_03(i)) ne -1) then begin
if finite(data_02(where(time_02 eq time_03(i)))) then begin
append_array,data_04,data_02(where(time_02 eq time_03(i)))
flag2=1
endif
endif
if (flag2 eq 0) then begin
data_02l=data_02(where(time_02 le time_03(i)))
time_02l=time_02(where(time_02 le time_03(i)))
for j=1L,n_elements(data_02l) do begin
if finite(data_02l(n_elements(data_02l)-j)) then begin
inter_lowD=data_02l(n_elements(data_02l)-j)
inter_lowT=time_02l(n_elements(data_02l)-j)
break
endif
endfor
data_02h=data_02(where(time_02 gt time_03(i)))
time_02h=time_02(where(time_02 gt time_03(i)))
for j=0L,n_elements(data_02h)-1 do begin
if finite(data_02h(j)) then begin
inter_highD=data_02h(j)
inter_highT=time_02h(j)
break
endif
endfor
calA=double(inter_lowD)
calB=double(inter_highD)-double(inter_lowD)
calC=(double(time_03(i))-double(inter_lowT))/(double(inter_highT)-double(inter_lowT))
append_array,data_04,calA+calB*calC
inter_numY++
endif
flag2=0
endfor
r_data=fltarr(n_elements(time_03),2)
for i=0L,n_elements(time_03)-1 do begin
r_data[i,0]=float(data_03(i))
r_data[i,1]=float(data_04(i))
endfor
store_data,vname1+'_interpol',data={x:time_03,y:r_data[*,0]}
store_data,vname2+'_interpol',data={x:time_03,y:r_data[*,1]}
tmp0=0
tmp1=0
print,n_elements(data_01),' : number of '+vname1+' data'
print,n_elements(data_02),' : number of '+vname2+' data'
print,n_elements(data_03),' : number of '+vname1+'_interpol '+'data (interpolated '+vname1+' data)'
print,n_elements(data_04),' : number of '+vname2+'_interpol '+'data (interpolated '+vname2+' data)'
print,inter_numX,' : interpolation number of '+vname1+'_interpol '+'data'
print,inter_numY,' : interpolation number of '+vname2+'_interpol '+'data'
end