# 
# expand/contract demo
#
from rsf.proj import *
import sys,geom,wplot
sys.path.append('../../PYUTIL')
from bndLOP import *
from DPTEST import *

# ------------------------------------------------------------
do3D = 'y'
doINV = 'n'
# ------------------------------------------------------------

par = dict(
    nx=25, ox=0, dx=1.0, lx='x', ux='', bx=5,
    ny=11, oy=0, dy=1.0, ly='y', uy='', by=2,
    nz=15, oz=0, dz=1.0, lz='z', uz='', bz=3,
    dabc='y'
    )
wplot.param(par)
par['xmin'] = par['xmin'] - par['bx']*par['dx']
par['xmax'] = par['xmax'] + par['bx']*par['dx']
par['ymin'] = par['ymin'] - par['by']*par['dy']
par['ymax'] = par['ymax'] + par['by']*par['dy']
par['zmin'] = par['zmin'] - par['bz']*par['dz']
par['zmax'] = par['zmax'] + par['bz']*par['dz']

BOX3D = ' min1=%(zmin)g max1=%(zmax)g '%par

# ------------------------------------------------------------
Flow('spk2D',None,
    '''
    spike nsp=1 mag=1
    n1=%(nz)d o1=%(oz)g d1=%(dz)g
    n2=%(nx)d o2=%(ox)g d2=%(dx)g |
    noise 
    '''%par,stdin=0)
Result('spk2D',wplot.igrey2d('',par))

if(do3D=='y'):
    Flow('spk3D',None,
    '''
    spike nsp=1 mag=1
    n1=%(nz)d o1=%(oz)g d1=%(dz)g
    n2=%(nx)d o2=%(ox)g d2=%(dx)g
    n3=%(ny)d o3=%(oy)g d3=%(dy)g |
    noise 
    '''%par,stdin=0)
    Result('spk3D','byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))

# ------------------------------------------------------------
for p in (['n','y']):
    L2D = bnd2d(par,p,par['bx'],par['bz'])
    L2D.FORW('spk2D',     'spk2Dfor'+p)
    L2D.ADJT('spk2Dadj'+p,'spk2Dfor'+p)

    Result('spk2Dfor'+p,wplot.igrey2d('',par))
    Result('spk2Dadj'+p,wplot.igrey2d('',par))
    
    D2D = DPTEST(L2D,['spk2Dadj'+p],['spk2Dfor'+p])
    D2D.RUN()
    
    if(do3D=='y'):
        L3D = bnd3d(par,p,par['bx'],par['by'],par['bz'])            
        L3D.FORW('spk3D',     'spk3Dfor'+p)
        L3D.ADJT('spk3Dadj'+p,'spk3Dfor'+p)

        Result('spk3Dfor'+p,'byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
        Result('spk3Dadj'+p,'byte gainpanel=a pclip=100|'+wplot.igrey3d('',par))
    
        D3D = DPTEST(L3D,['spk3Dadj'+p],['spk3Dfor'+p])
        D3D.RUN()
    
End()
