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.")


No handlers could be found for logger "qc.utils"
Out[1]:
[<matplotlib.lines.Line2D at 0x48240d0>]

In [17]:
print si_access,si_tower


0 7315

In [18]:
print ei_access,ei_tower


-1 8801

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]:
[<matplotlib.lines.Line2D at 0x8931d50>]

In [25]:
tdt_gap=ldt_tower[si_tower:ei_tower+1]

In [26]:
tdt_gap[0],tdt_gap[-1]


Out[26]:
(datetime.datetime(2012, 6, 1, 9, 30), datetime.datetime(2012, 7, 2, 8, 30))

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]:
array([414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426,
       427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
       440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
       453, 454, 455, 456, 457, 458, 459, 460, 461])

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]:
[<matplotlib.lines.Line2D at 0x9708110>]

In [84]:
access_list=ds_access.series.keys()

In [85]:
Ta_list=[item in access_list if "Ta" in item]


  File "<ipython-input-85-b481a0648284>", line 1
    Ta_list=[item in access_list if "Ta" in item]
                                                ^
SyntaxError: invalid syntax

In [86]:
var_list=["Ta_00","Ta_01","Ta_02","Fsd_00","Fsd_01","Fsd_02"]

In [87]:
"Ta" in "Ta_00"


Out[87]:
True

In [88]:
Ta_list=[item for item in var_list if "Ta" in item]

In [89]:
Ta_list


Out[89]:
['Ta_00', 'Ta_01', 'Ta_02']

In [ ]: