In [1]:
import qcio
import qcutils
import sys
access_name=qcio.get_filename_dialog()
tower_name=qcio.get_filename_dialog()
ds_access=qcio.nc_read_series(access_name)
ds_tower=qcio.nc_read_series(tower_name)
ldt_access=ds_access.series["DateTime"]["Data"]
ldt_tower=ds_tower.series["DateTime"]["Data"]
# get the start indices
if ldt_access[0]>ldt_tower[-1]:
print "ACCESS data starts after tower data finishes"
sys.exit()
if ldt_access[-1]<ldt_tower[0]:
print "ACCESS data end before tower data starts"
sys.exit()
if ldt_access[0]==ldt_tower[0]:
si_access=0
si_tower=0
ei_access=len(ldt_access)
ei_tower=len(ldt_tower)
elif (ldt_access[0]>ldt_tower[0]) and (ldt_access[-1]<ldt_tower[-1]):
si_access=0
si_tower=qcutils.GetDateIndex(ldt_tower,str(ldt_access[0]))
ei_access=len(ldt_access)
ei_tower=qcutils.GetDateIndex(ldt_tower,str(ldt_access[-1]))
elif (ldt_access[0]>ldt_tower[0]) and (ldt_access[-1]>ldt_tower[-1]):
si_access=0
si_tower=qcutils.GetDateIndex(ldt_tower,str(ldt_access[0]))
ei_access=qcutils.GetDateIndex(ldt_access,str(ldt_tower[-1]))
ei_tower=len(ldt_tower)
elif (ldt_access[0]<ldt_tower[0]) and (ldt_access[-1]<ldt_tower[-1]):
si_access=qcutils.GetDateIndex(ldt_access,str(ldt_tower[0]))
si_tower=0
ei_access=len(ldt_access)
ei_tower=qcutils.GetDateIndex(ldt_tower,str(ldt_access[-1]))
elif (ldt_access[0]<ldt_tower[0]) and (ldt_access[-1]>ldt_tower[-1]):
si_access=qcutils.GetDateIndex(ldt_access,str(ldt_tower[0]))
si_tower=0
ei_access=qcutils.GetDateIndex(ldt_access,str(ldt_tower[-1]))
ei_tower=len(ldt_tower)
else:
print "Unexpected start/end time condition"
print "Tower: "+str(ldt_tower[0])+" "+str(ldt_tower[-1])
print "ACCESS: "+str(ldt_access[0])+" "+str(ldt_access[-1])
# loop over the series to be gap filled
gf_list = ["Fsd","Fld","Fn","Fg","Ta","q","Ws","Ts","Sws","ps"]
for label in gf_list:
# get the data from the data structure
data_tower,flag_tower=qcutils.GetSeriesasMA(ds_tower,label)
dto = data_tower[si_tower:ei_tower+1]
access_var_list = [item for item in ds_access.series.keys() if label in item]
r = numpy.zeros(len(access_var_list))
for idx,val in enumerate(access_var_list):
data_access,flag_access=qcutils.GetSeriesasMA(ds_access,val)
dao = data_access[si_access:ei_access+1]
r[idx] = numpy.ma.corrcoef(dto,dao)
maxidx = numpy.argmax(r)
var_maxr = access_var_list[maxidx]
data_access,flag_access=qcutils.GetSeriesasMA(ds_access,val)
# introduce a gap
sdi=qcutils.GetDateIndex(ldt_tower,"2012-06-10 00:30")
edi=qcutils.GetDateIndex(ldt_tower,"2012-06-11 00:00")
Fsd_tower.mask[sdi:edi+1]=True
# get the index of missing data
index=numpy.ma.where(Fsd_tower.mask[si_tower:ei_tower+1]==True)[0]
# fill the missing data with ACCESS data
Fsd_tower[si_tower:ei_tower+1][index]=Fsd_access[index]
Fsd_tower.mask[si_tower:ei_tower+1][index]=False
fig=figure()
plot(ldt_tower,Fsd_tower,"b.")
Out[1]:
In [17]:
print si_access,si_tower
In [18]:
print ei_access,ei_tower
In [19]:
Fsd_tower,f=qcutils.GetSeriesasMA(ds_tower,"Fsd")
In [20]:
Fsd_access,f=qcutils.GetSeriesasMA(ds_access,"Fsd_11")
In [35]:
fig1=figure()
In [36]:
plot(ldt_tower,Fsd_tower,"b.")
Out[36]:
In [25]:
tdt_gap=ldt_tower[si_tower:ei_tower+1]
In [26]:
tdt_gap[0],tdt_gap[-1]
Out[26]:
In [31]:
sdi=qcutils.GetDateIndex(ldt_tower,"2012-06-10 00:30")
In [32]:
edi=qcutils.GetDateIndex(ldt_tower,"2012-06-11 00:00")
In [34]:
Fsd_tower.mask[sdi:edi+1]=True
In [62]:
index=numpy.ma.where(Fsd_tower.mask[si_tower:ei_tower+1]==True)[0]
In [63]:
index
Out[63]:
In [64]:
Fsd_tower_gf=numpy.ma.array(Fsd_tower)
In [79]:
Fsd_tower_gf[si_tower:ei_tower+1][index]=Fsd_access[index]
In [80]:
Fsd_tower_gf.mask[si_tower:ei_tower+1][index]=False
In [81]:
fig1=figure()
In [82]:
plot(ldt_tower,Fsd_tower_gf,"b.")
Out[82]:
In [84]:
access_list=ds_access.series.keys()
In [85]:
Ta_list=[item in access_list if "Ta" in item]
In [86]:
var_list=["Ta_00","Ta_01","Ta_02","Fsd_00","Fsd_01","Fsd_02"]
In [87]:
"Ta" in "Ta_00"
Out[87]:
In [88]:
Ta_list=[item for item in var_list if "Ta" in item]
In [89]:
Ta_list
Out[89]:
In [ ]: