#define BINDIR /hector/Bin/MTYPE
#define BASEDIR ../../..
#include "../../../include/cake/SEP.clop.defs"
#include <SEP.defs>

#define FIGDIR ./Fig

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

$						programs to be built
#define PROGLIST Nmo Dottest Nmoprec

$ 						figures to be built
#define FIGLIST nmoout nmoadj nmoinv nmonull

$ 			datafiles that will be created and need to be cleaned
#define DATAFILES [[ sub X X.H nmoin nmoout nmoadj nmoinv nmoadjmod nmoinvmod nmonull nmonullmod ]]

$ 						test to run in this directory
default&: tube
	
$ we extract only the mapping function

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

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

nmoout.H: BINDIR/Nmo nmoin.H
	BINDIR/Nmo <nmoin.H vel=1.5 adj=0 >nmoout.H

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

nmoadj.H: BINDIR/Nmo nmoout.H
	BINDIR/Nmo <nmoout.H vel=1.5 adj=1 >nmoadj.H

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

FIGDIR/nmoadj.v : nmoadj.H nmoadjmod.H
	Wiggle <nmoadj.H title="Adjoint processing" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp1.v
	Wiggle <nmoadjmod.H title="Adjoint processing + modeling" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
	vp_SideBySideIso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/nmoadj.v
	@RM_CMD  FIGDIR/tmp1.v FIGDIR/tmp2.v

nmoinv.H: BINDIR/Nmo nmoout.H
	BINDIR/Nmo <nmoout.H vel=1.5 adj=0 inv=1 niter=10 >nmoinv.H

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

FIGDIR/nmoinv.v : nmoinv.H nmoinvmod.H
	Wiggle <nmoinv.H title="Inverse processing" label1="zero offset time" head=/dev/null out=stdout >FIGDIR/tmp1.v
	Wiggle <nmoinvmod.H title="Inverse processing + modeling" label1="finite offset time" head=/dev/null out=stdout >FIGDIR/tmp2.v
	vp_SideBySideIso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/nmoinv.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/Nmo nmonull.H
	BINDIR/Nmo <nmonull.H adj=0 vel=1.5 >nmonullmod.H

FIGDIR/nmonull.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/nmonull.v
	@RM_CMD  FIGDIR/tmp1.v FIGDIR/tmp2.v


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

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

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

clean&: texclean clopclean jclean
	-Rm -f DATAFILES

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