In [1]:
import sys
sys.path.append('../scripts')
import constants as c
import matplotlib.pyplot as plt
import numpy
import qcio
import qcutils
from ffnet import ffnet,mlgraph,tmlgraph

In [2]:
ncname=qcio.get_filename_dialog()

In [29]:
ds=qcio.nc_read_series(ncname)
ldt=ds.series["DateTime"]["Data"]
Fsd,f,a,=qcutils.GetSeriesasMA(ds,"Fsd")
ustar,f,a=qcutils.GetSeriesasMA(ds,"ustar")
Fc,Fc_flag,Fc_attr=qcutils.GetSeriesasMA(ds,"Fc")
Reco1 = numpy.ma.masked_where(Fsd>10,Fc,copy=True)
Reco2 = numpy.ma.masked_where(ustar<0.3,Reco1,copy=True)
Reco3 = numpy.ma.masked_where(Reco2<0,Reco2,copy=True)
attr = qcutils.MakeAttributeDictionary(long_name='Ecosystem respiration (observed)',units=Fc_attr["units"])
qcutils.CreateSeries(ds,"Reco",Reco3,Flag=Fc_flag,Attr=attr)

In [30]:
Reco,f,a = qcutils.GetSeriesasMA(ds,"Reco")
drivers = ["Ts","Sws"]
mask = numpy.ma.getmask(Reco)
for val in drivers:
    d,f,a = qcutils.GetSeriesasMA(ds,val)
    mask = numpy.ma.mask_or(mask,d.mask)
Reco.mask = mask
nRecs = numpy.ma.count(Reco)
data_nm = numpy.empty((nRecs,len(drivers)+1))
for idx,val in enumerate(drivers):
    d,f,a = qcutils.GetSeriesasMA(ds,val)
    d.mask = mask
    data_nm[:,idx] = numpy.ma.compressed(d)
data_nm[:,idx+1] = numpy.ma.compressed(Reco)
input_train = data_nm[:,0:idx+1]
target_train = data_nm[:,idx+1]

In [31]:
conec=mlgraph((2,2,1))
net=ffnet(conec)
net.train_tnc(input_train,target_train)

In [36]:
input_predict = numpy.empty((len(Reco),len(drivers)))
for idx,val in enumerate(drivers):
    d,f,a = qcutils.GetSeries(ds,val)
    input_predict[:,idx] = d[:]

In [37]:
output,regress=net.test(input_train,target_train)


Testing results for 3388 testing cases:
OUTPUT 1 (node nr 5):
Regression line parameters:
slope         =  0.123051
intercept     =  0.967119
r-value       =  0.348901
p-value       =  0.000000
slope stderr  =  0.005680
estim. stderr =  0.298352

In [38]:
output=net.call(input_predict)

In [39]:
plt.plot(ldt,Reco,'b.')
plt.plot(ldt,output,'r+')


Out[39]:
[<matplotlib.lines.Line2D at 0xd2abc10>]

In [ ]: