up [pdf]
from rsfproj import *

Fetch(['border.hh','elevation.HH',
       'alldata.hh','obsdata.hh',
       'coord.hh','predict.hh'],'rain')

box = 'min1=-185.556 max1=193.18275 min2=-127.262 max2=127.25044'
f2 = 0
def border(name,n2):
    global f2
    Flow([name,name+'x',name+'y'],'border.hh',
         '''
         window n1=1 f1=0 n2=%(n2)d f2=%(f2)d > ${TARGETS[1]} &&
         window n1=1 f1=1 n2=%(n2)d f2=%(f2)d > ${TARGETS[2]} < $SOURCE &&
         cmplx ${TARGETS[1]} ${TARGETS[2]}
         ''' % {'n2':n2,'f2':f2})
    Plot(name,'graph %s title=" " plotcol=6 plotfat=4' % box)
    f2 = f2 + n2

border('border1',338)
border('border2',234)
border('border3',717)
Plot('border',['border1','border2','border3'],'Overlay')

Plot('elev','elevation.HH',
          '''
          igrad |
          grey title=Elevation transp=n yreverse=n
          wantaxis=n wantlabel=n wheretitle=t wherexlabel=b
          ''')
Result('elev',['elev','border'],'Overlay')

select = '''
window n1=1 f1=0 > ${TARGETS[1]} &&
window n1=1 f1=1 > ${TARGETS[2]} < $SOURCE &&
cmplx ${TARGETS[1]} ${TARGETS[2]}
'''

Flow(['alldata','alldatax','alldatay'],'alldata.hh',select)
Result('alldata',
       'graph symbol=x title="All data locations" plotcol=7 ' + box)

Flow(['obs','obsx','obsy'],'obsdata.hh',select)
Plot('obs','graph symbol=o title="Observed data locations" plotcol=5 ' + box)
Plot('obsdata',['obs','border'],'Overlay')

Flow('coord','coord.hh','dd form=native')
Flow(['coord2','coordx','coordy'],'coord',select)
Plot('coord','coord2','graph symbol=x wanttitle=n plotcol=7 ' + box)
Plot('data',['coord','border'],'Overlay')

Result('raindata',['obsdata','data'],'SideBySideIso')

Flow('obsdata','obsdata.hh','dd form=native')
Flow('raindata','obsdata','window f1=2 | put head=$SOURCE')

def contour(cont):
    return '''
    contour nc=6 c0=-0.001 dc=100
    minval=0 maxval=525
    scalebar=y yreverse=n transp=n barlabel=' '
    wanttitle=n plotcol=%d plotfat=%d wantframe=y wantaxis=n
    ''' % (((0,10),(7,1))[cont])

cases = [10,100,1000,10000,-10,-20,-40,0]
for niter in cases:
    lapinter = 'lapinter%d' % niter
    pout = 'pout%d' % niter
    if (niter == 0):
        niter = 100
        name = "Gauss Estimated"
        extra = 'shape=y gauss=y pattern=${SOURCES[1]} eps=1.e-10'
        Flow(lapinter,'raindata lapinter-40',
             '''shapebin niter=%d xkey=0 ykey=1 filt1=25
             nx=376 ny=253 dx=1.00997 dy=1.00997 x0=-185.556 y0=-127.262
             %s''' % (niter,extra))
    else:
        if (niter < 0):
            niter = -niter
            name = "Shaping Regularization"
            extra = 'shape=y pout=${TARGETS[1]}'
            files = [lapinter,pout]
        else:
            prec = 0
            name = "Laplacian Regularization"
            extra = 'shape=n'
            files = lapinter
        Flow(files,'raindata',
             '''
             shapebin niter=%d xkey=0 ykey=1 filt1=25
             nx=376 ny=253 dx=1.00997 dy=1.00997 x0=-185.556 y0=-127.262
             %s
             ''' % (niter,extra))
    Plot('g'+lapinter,lapinter,
              '''grey scalebar=y yreverse=n transp=n allpos=y
              minval=0 maxval=525
              color=j clip=500 title="%s %d" ''' % (name,niter))
    for cont in range(2):
        Plot('c'+str(cont)+lapinter,lapinter,contour(cont))
    Plot(lapinter,['g'+lapinter,'c0'+lapinter,'c1'+lapinter],'Overlay')

reals = []
for seed in range(2000,2005):
    rand = 'rand%d' % seed
    real = 'real%d' % seed
    reals.append(real)
    Flow(rand,'pout-40',
         '''
         noise mean=152.776 var=1e6 rep=y seed=%d
          ''' % seed)
    Flow(real,['raindata',rand],
         '''
         shapebin shape=y pin=${SOURCES[1]}
         niter=100 xkey=0 ykey=1 filt1=25
         nx=376 ny=253 dx=1.00997 dy=1.00997 x0=-185.556 y0=-127.262
         ''')
    Plot('g'+real,real,
         '''grey scalebar=y yreverse=n transp=n allpos=y
         minval=0 maxval=525
         color=j clip=500 title="Realization %d" ''' % (seed-1999))
    for cont in range(2):
        Plot('c'+str(cont)+real,real,contour(cont))
    Plot(real,['g'+real,'c0'+real,'c1'+real],'Overlay')
Result('real',map(lambda seed: 'real%d' % seed,range(2000,2005)),'TwoRows')

Result('lapinter',map(lambda x: 'lapinter%d' % x, cases[:4]),'TwoRows')
Result('gaussinter',map(lambda x: 'lapinter%d' % x, [-10,-40]),
       'SideBySideIso')

Flow('predict','predict.hh','dd form=native')
for niter in [10000,-40,0]:
    lapinter = 'lapinter%d' % niter
    lapdat = 'lapdat%d' % niter
    lapstat = 'lapstat%d' % niter
    Flow(lapdat,[lapinter,'coord'],
         'extract head=${SOURCES[1]} xkey=0 ykey=1')
    if (niter < 0):
        name = "Shaping Regularization"
    else:
        name = "Laplacian Regularization"
    Plot(lapstat,['predict',lapdat],
         '''cmplx ${SOURCES[0:2]} |
         graph symbol="*" title="%s"
         screenratio=1 min1=0 max1=500 min2=0 max2=500
         ''' % name,stdin=0)
Result('stat','lapstat10000 lapstat-40','SideBySideIso')

###########################################################################

End()

sfwindow
sfcmplx
sfgraph
sfigrad
sfgrey
sfdd
sfput
sfshapebin
sfcontour
sfnoise
sfextract

data/rain/border.hh
data/rain/elevation.HH
data/rain/alldata.hh
data/rain/obsdata.hh
data/rain/coord.hh
data/rain/predict.hh