#define DEBUG
#define BINDIR /hector/Bin/MTYPE

#define BASEDIR ../../..
#include "../../../include/cake/SEP.clop.defs"

#include <SEP.defs>

#define FIGDIR ./Fig

$ define figure to be produced
#define FIGLIST mutvel velanmod velanadj velaninv

$ define arguments for the figures
#define ARGS pclip=100 transp=1 yreverse=1 wherexlabel=t
#define WIGARG pclip=100 zplot=1. transp=1 yreverse=1 

$ define object to be added to the global library
#define LIBSOURCE fopvelan

$ programs to be built
#define PROGLIST Velan Dottest

$ we extract only the operator chain

fopvelan.Apply&: fopvelan.cc
        @C++Extract <fopvelan.cc \"fopvelan::fopvelan\" >fopvelan.Apply

$ default to run in this directory
default&: tube

$ input
cdp.H: CLASSDATA/midpts.HH
	Window n3=1 n1=400 squeeze=n < CLASSDATA/midpts.HH > cdp.H
	echo 'label1="Time"' >> cdp.H
	echo 'label2="Offset"' >> cdp.H

velin.H: if not exist velin.H
        Spike n1=100 d1=.01 n2=20 d2=.05 k1=10,40,55,80 k2=16,12,8,2 nsp=4 label1=Time label2=Slowness > velin.H

$ modeling
velout.H: velin.H BINDIR/Velan
        BINDIR/Velan <velin.H nx=20 ox=0. dx=.025 adj=0 >velout.H

$ processing 
mutvel.H: cdp.H BINDIR/Velan
	Mutter < cdp.H tp=.150 | BINDIR/Velan  adj=1 os=0 ds=.05 ns=20 > mutvel.H
 
veladj.H: velout.H BINDIR/Velan
        BINDIR/Velan < velout.H os=0 ds=.05 ns=20 adj=1 > veladj.H

$ inverse
velinv.H: velout.H BINDIR/Velan
        BINDIR/Velan <velout.H os=0 ds=.05 ns=20 adj=0 inv=1 niter=10 >velinv.H

$ adjoint + modeling
veladjmod.H: veladj.H BINDIR/Velan
	BINDIR/Velan < veladj.H nx=20 ox=0. dx=.025 adj=0 > veladjmod.H

$ inverse + modeling
velinvmod.H: velinv.H BINDIR/Velan
	BINDIR/Velan < velinv.H nx=20 ox=0. dx=.025 adj=0 > velinvmod.H

$output
FIGDIR/left.v : cdp.H
	Mutter < cdp.H tp=.150 > junk.H
	Byte < junk.H pclip=100 | Ta2vplot ARGS title=" " out=FIGDIR/left.v head=/dev/null

FIGDIR/rite.v : mutvel.H
	Byte < mutvel.H pclip=100 | Ta2vplot ARGS title=" " out=FIGDIR/rite.v head=/dev/null

FIGDIR/mutvel.v : FIGDIR/left.v FIGDIR/rite.v
	vp_SideBySideAniso FIGDIR/left.v FIGDIR/rite.v > FIGDIR/mutvel.v

FIGDIR/velan0.v: velin.H
	Wiggle WIGARG title="Initial input" out=FIGDIR/velan0.v < velin.H > /dev/null

FIGDIR/velan1.v: velout.H
	Wiggle WIGARG title="Modeled data" out=FIGDIR/velan1.v < velout.H > /dev/null

FIGDIR/velan2.v: veladj.H
        Wiggle WIGARG title="Adjoint processing" out=FIGDIR/velan2.v < veladj.H > /dev/null

FIGDIR/velan3.v: velinv.H
        Wiggle WIGARG title="Inverse processing" out=FIGDIR/velan3.v < velinv.H > /dev/null

FIGDIR/velan4.v: veladjmod.H
        Wiggle WIGARG title="Adjoint processing + modeling" out=FIGDIR/velan4.v < veladjmod.H > /dev/null

FIGDIR/velan5.v: velinvmod.H
	Wiggle WIGARG title="Inverse processing + modeling" out=FIGDIR/velan5.v < velinvmod.H > /dev/null

FIGDIR/velanmod.v : FIGDIR/velan0.v FIGDIR/velan1.v
        vp_SideBySideAniso FIGDIR/velan0.v FIGDIR/velan1.v  > FIGDIR/velanmod.v

FIGDIR/velanadj.v : FIGDIR/velan2.v FIGDIR/velan4.v
        vp_SideBySideAniso FIGDIR/velan2.v FIGDIR/velan4.v > FIGDIR/velanadj.v

FIGDIR/velaninv.v : FIGDIR/velan3.v FIGDIR/velan5.v
        vp_SideBySideAniso FIGDIR/velan3.v FIGDIR/velan5.v > FIGDIR/velaninv.v


$ make executables
BINDIR/Velan : OBJDIR/Velan.o
        CPPLINK(OBJDIR/Velan.o,a.out)
        CPPINST(BINDIR/Velan)

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

clean&: texclean clopclean jclean

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