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

$ define figures to be produced
#define FIGLIST wglmostk 
$ stackout stackadj stackiters stackinv

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

$ programs to be built
#define PROGLIST Lmostack Dottest 

$ define arguments for the figures
#define WIGGLEARGS pclip=100 zplot=1. transp=1 yreverse=1

$ default to run in this directory
default&: tube

$ we extract only the the operator chain 
foplmostk.Apply&: foplmostk.cc
        @C++Extract <foplmostk.cc \"foplmostk::foplmostk\" >foplmostk.Apply

$ input
stackin.H: if not exist stackin.H
	Spike n1=100 d1=.004 nsp=3 k1=20,50,80 label1=Time label2=Offset >stackin.H

cdp.H: CLASSDATA/midpts.HH
        Window n3=1 n1=300 < CLASSDATA/midpts.HH > cdp.H

FIGDIR/left.v: cdp.H
        Wiggle WIGGLEARGS out=FIGDIR/left.v title=" " < cdp.H     > /dev/null

$ modeling
wglmostk.H: BINDIR/Lmostack cdp.H
	BINDIR/Lmostack < cdp.H adj=1 vel=1.47 > wglmostk.H

FIGDIR/rite.v: wglmostk.H
	Graph <wglmostk.H transp=y yreverse=y title="LMOstack" label2=amplitude >/dev/null out=FIGDIR/rite.v

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


stackout.H: BINDIR/Lmostack stackin.H 
	BINDIR/Lmostack <stackin.H adj=0 vel=1.5 dx=.025 nx=20 >stackout.H

FIGDIR/stackout.v: stackin.H stackout.H
	Graph <stackin.H transp=y yreverse=y title="Original input" label2=amplitude >/dev/null out=FIGDIR/tmp1.v
	Wiggle <stackout.H transp=y yreverse=y title="Modeled data" >/dev/null out=FIGDIR/tmp2.v
	vp_SideBySideAniso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/stackout.v
	RM_CMD FIGDIR/tmp1.v FIGDIR/tmp2.v

$ processing
stackadj.H: BINDIR/Lmostack stackout.H 
	BINDIR/Lmostack <stackout.H adj=1 vel=1.5 >stackadj.H

stackadjmod.H: BINDIR/Lmostack stackadj.H 
	BINDIR/Lmostack <stackadj.H adj=0 vel=1.5 >stackadjmod.H

FIGDIR/stackadj.v: stackadj.H stackadjmod.H
	Graph <stackadj.H transp=y yreverse=y title="Adjoint processing" label2=amplitude >/dev/null out=FIGDIR/tmp1.v
	Wiggle <stackadjmod.H transp=y yreverse=y title="Adjoint + modeling" >/dev/null out=FIGDIR/tmp2.v
	vp_SideBySideAniso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/stackadj.v
	RM_CMD FIGDIR/tmp1.v FIGDIR/tmp2.v

$ inversion iterations
stackiters.H stackinv.H : BINDIR/Lmostack stackout.H 
	BINDIR/Lmostack <stackout.H niter=2 inv=1 vel=1.5 >tmp1.H
	BINDIR/Lmostack <stackout.H niter=5 inv=1 vel=1.5 >tmp2.H
	BINDIR/Lmostack <stackout.H niter=10 inv=1 vel=1.5 >stackinv.H
	Merge tmp1.H tmp2.H stackinv.H axis=2 space=no >stackiters.H
	Rm tmp1.H tmp2.H 

FIGDIR/stackiters.v: stackiters.H
	Merge stackin.H stackiters.H axis=2 space=no |  Dots title="LMO + Stack inversion" labels="original:2 iterations:5 iterations:10 iterations" gaineach=0  >/dev/null out=FIGDIR/stackiters.v

stackinvmod.H:  BINDIR/Lmostack stackinv.H
	BINDIR/Lmostack <stackinv.H adj=0 vel=1.5 >stackinvmod.H

FIGDIR/stackinv.v: stackinv.H stackinvmod.H
	Graph <stackinv.H transp=y yreverse=y title="Inverse processing" label2=amplitude >/dev/null out=FIGDIR/tmp1.v
	Wiggle <stackinvmod.H transp=y yreverse=y title="Inverse + modeling" >/dev/null out=FIGDIR/tmp2.v
	vp_SideBySideAniso FIGDIR/tmp1.v FIGDIR/tmp2.v >FIGDIR/stackinv.v
	RM_CMD FIGDIR/tmp1.v FIGDIR/tmp2.v

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

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"
