#
# inject/extract demo
#
try:    from rsf.cluster import *
except: from rsf.proj    import *
import sys,geom,wplot
from injLOP import *
from injOP import *
from DPTEST import *

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

par = dict(
    nx=25, ox=0, dx=1.0, lx='x', ux='',
    ny=21, oy=0, dy=1.0, ly='y', uy='',
    nz=15, oz=0, dz=1.0, lz='z', uz='',
    nt=50, ot=0, dt=1.0, lt='t', ut='',
    verb='y'
    )
wplot.param(par)

# ------------------------------------------------------------
# coordinates
geom.circle('ss2D', 12.0,7.0, 8.0, 120, '',par)
Plot(  'ss2D',wplot.bbplot2d('plotcol=1 wantaxis=y symbol=*',par))
Result('ss2D','ss2D','Overlay')

Flow('spk2D',None,
    '''
    math output="cos(2*3.14*x1/10)*cos(2*3.14*x2/20)*sin(2*3.14*x3/50)"
    n1=%(nz)d o1=%(oz)g d1=%(dz)g
    n2=%(nx)d o2=%(ox)g d2=%(dx)g
    n3=%(nt)d o3=%(ot)g d3=%(dt)g
    '''%par,stdin=0)
Plot(  'spk2D',wplot.igrey2d('color=e',par))

if(do3D=='y'):
    geom.sphere('ss3D', 12.0,11.0,7.0, 8.0, 120,60, '',par)

    Flow('spk3D',None,
    '''
    math output="cos(2*3.14*x1/15)*cos(2*3.14*x2/20)*sin(2*3.14*x3/25)*sin(2*3.14*x4/50)"
    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
    n4=%(nt)d o4=%(ot)g d4=%(dt)g
    '''%par,stdin=0)
    Result('spk3D','byte gainpanel=a pclip=100|'
        + wplot.igrey4d('color=e',par))

# ------------------------------------------------------------
I2D = injop2d('ss2D',par,'method=0')
I2D.FORW('spk2D',   'inj2Dfor')
I2D.ADJT('inj2Dadj','inj2Dfor')

Result('inj2Dfor','grey title="" pclip=100 color=e')
Result('inj2Dadj',wplot.igrey2d('color=e',par))

# ------------------------------------------------------------
L2D = inj2d('ss2D',par,'sinc=n')
L2D.FORW('spk2D',   'lin2Dfor')
L2D.ADJT('lin2Dadj','lin2Dfor')
Result('lin2Dfor','grey title="" pclip=100 color=e')
Result('lin2Dadj',wplot.igrey2d('color=e',par))
DL2D = DPTEST(L2D,['lin2Dadj'],['lin2Dfor'])
DL2D.RUN()

S2D = inj2d('ss2D',par)
S2D.FORW('spk2D',   'spk2Dfor')
S2D.ADJT('spk2Dadj','spk2Dfor')
Result('spk2Dfor','grey title="" pclip=100 color=e')
Result('spk2Dadj',wplot.igrey2d('color=e',par))
DS2D = DPTEST(S2D,['spk2Dadj'],['spk2Dfor'])
DS2D.RUN()

if(do3D=='y'):
    L3D = inj3d('ss3D',par,'sinc=n')
    L3D.FORW('spk3D',   'lin3Dfor')
    L3D.ADJT('lin3Dadj','lin3Dfor')
    Result('lin3Dfor','grey title="" pclip=100 color=e')
    Result('lin3Dadj','byte gainpanel=a pclip=100|'
               + wplot.igrey4d('color=e',par))
    DL3D = DPTEST(L3D,['lin3Dadj'],['lin3Dfor'])
    DL3D.RUN()

    S3D = inj3d('ss3D',par)
    S3D.FORW('spk3D',   'spk3Dfor')
    S3D.ADJT('spk3Dadj','spk3Dfor')
    Result('spk3Dfor','grey title="" pclip=100 color=e')
    Result('spk3Dadj','byte gainpanel=a pclip=100|'
               + wplot.igrey4d('color=e',par))
    DS3D = DPTEST(S3D,['spk3Dadj'],['spk3Dfor'])
    DS3D.RUN()
    
End()
