#define DEBUG
#define BASEDIR ../../..
#include "../../../include/cake/SEP.clop.defs"
#include <SEP.defs>

#define FIGLIST fmoout fmoadjinv

#define MOVEOUT Fmo

#define FF ff=0.03
#define FF ff=0.2

$ define objects to be added to the global library
#define LIBSOURCE fopfmo

$ programs to be built
#define PROGLIST Fmo Dottest

$ we extract only the mapping function

fopfmo.Apply&: fopfmo.cc
        @C++Extract <fopfmo.cc \"float fopfmo::mapping\" >fopfmo.Apply

$ test to run in this directory
default&: tube

test&:  nmoout.H nmooutff.H
	Merge axis=3 space=no nmoout.H nmooutff.H | Wiggle | Tube
	
nmoout.H: BINDIR/MOVEOUT nmoin.H
	BINDIR/MOVEOUT <nmoin.H vel=1.5 adj=0 >nmoout.H

nmooutff.H: BINDIR/MOVEOUT nmoin.H
	BINDIR/MOVEOUT <nmoin.H vel=1.5 adj=0 FF >nmooutff.H

nmoin.H: if not exist nmoin.H
	Spike n1=100 k1=20,80 n2=20 d2=.025 nsp=2 label1=Time label2=Offset >nmoin.H

	
FIGDIR/fmoout.v : nmoin.H nmoout.H nmooutff.H
$        Wiggle <nmoin.H title="Initial input" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp1.v
        Wiggle <nmoout.H title="isotropic modeled data" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
        Wiggle <nmooutff.H title="anisotropic modeled data" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp3.v
        vp_SideBySideIso FIGDIR/tmp2.v FIGDIR/tmp3.v >FIGDIR/fmoout.v
        @RM_CMD FIGDIR/tmp2.v FIGDIR/tmp3.v

nmoadj.H: BINDIR/Fmo nmooutff.H
	BINDIR/Fmo <nmooutff.H vel=1.5 adj=1 FF >nmoadj.H

nmoadjmod.H: BINDIR/Fmo nmoadj.H
	BINDIR/Fmo <nmoadj.H vel=1.5 adj=0 FF >nmoadjmod.H

FIGDIR/fmoadjinv.v : nmoadj.H nmoinv.H
	Wiggle <nmoadj.H title="anisotropic adjoint processing" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp1.v
	Wiggle <nmoinv.H title="anisotropic inverse processing" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
	vp_SideBySideIso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/fmoadjinv.v
	@RM_CMD  FIGDIR/tmp1.v FIGDIR/tmp2.v

nmoinv.H: BINDIR/Fmo nmooutff.H
	BINDIR/Fmo <nmooutff.H vel=1.5 adj=0 inv=1 niter=10 FF >nmoinv.H

nmoinvmod.H: BINDIR/Fmo nmoinv.H
	BINDIR/Fmo <nmoinv.H vel=1.5 adj=0 FF >nmoinvmod.H

$FIGDIR/fmoinv.v : nmoinv.H nmoinvmod.H
$ 	Wiggle <nmoinvmod.H title="Anisotropic Inverse processing + modeling" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
$	vp_SideBySideIso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/fmoinv.v
$ 	@RM_CMD  FIGDIR/tmp1.v FIGDIR/tmp2.v

nmonull.H: nmoin.H nmoinv.H
	Add nmoin.H nmoinv.H scale=1.,-1. >nmonull.H

nmonullmod.H: BINDIR/Fmo nmonull.H
	BINDIR/Fmo <nmonull.H adj=0 vel=1.5 FF >nmonullmod.H

FIGDIR/fmonull.v: nmonull.H nmonullmod.H
	Wiggle <nmonull.H clip=1 title="Data in null space of operator" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp1.v
	Wiggle <nmonullmod.H clip=1 title="null space after modeling" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
	vp_SideBySideIso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/fmonull.v
	@RM_CMD  FIGDIR/tmp1.v FIGDIR/tmp2.v


#define FmoOBJS OBJDIR/Fmo.o 
BINDIR/Fmo : FmoOBJS
	CPPLINK(FmoOBJS,a.out)
	CPPINST(BINDIR/Fmo)

BINDIR/Dottest : OBJDIR/Dottest.o
	CPPLINK(OBJDIR/Dottest.o,a.out)
	CPPINST(MTYPE/Dottest)

clean&: texclean clopclean jclean

#include <SEP.idoc.rules>
#include <SEP.obj.rules>
#include "../../../include/cake/SEP.clop.rules"
