int main(int argc, char* argv[]) { int n123, n1, i, ik, dim, nk, nf, sf, niter, nw; int n[SF_MAX_DIM], w[SF_MAX_DIM], k[SF_MAX_DIM]; int sa[SF_MAX_DIM], na[SF_MAX_DIM], sc[SF_MAX_DIM], nc[SF_MAX_DIM]; int ma[SF_MAX_DIM], mc[SF_MAX_DIM]; float *data, *wind, *sign, eps, di, dabs; char varname[6], *lagfile; sf_filter saa, naa, sbb, nbb, scc, ncc; sf_file dat, signal, spef, npef, slag, nlag; sf_init (argc,argv); dat = sf_input("in"); signal = sf_output("out"); spef = sf_input("sfilt"); npef = sf_input("nfilt"); n123 = sf_filesize(dat); if (!sf_histint(spef,"dim",&dim)) sf_error("No dim= in sfilt"); n1 = 1; for (i=0; i < dim; i++) { sprintf(varname,"n%d",i+1); if (!sf_histint(dat,varname,n+i)) sf_error("No %s= in input",varname); n1 *= n[i]; } if (!sf_histints(spef,"w",w,dim)) sf_error("No w= in sfilt"); if (!sf_histints(spef,"k",k,dim)) sf_error("No k= in sfilt"); if (!sf_histints(spef,"a",sa,dim)) sf_error("No a= in sfilt"); if (!sf_histints(npef,"a",na,dim)) sf_error("No a= in nfilt"); if (!sf_histints(spef,"center",sc,dim)) sf_error("No center= in sfilt"); if (!sf_histints(npef,"center",nc,dim)) sf_error("No center= in nfilt"); nk=nw=1; for (i=0; i < dim; i++) { nw *= w[i]; nk *= k[i]; } if (!sf_histint(spef,"n1",&sf)) sf_error("No n1= in sfilt"); if (!sf_histint(npef,"n1",&nf)) sf_error("No n1= in nfilt"); sbb = sf_allocatehelix(sf); nbb = sf_allocatehelix(nf); if (NULL == (lagfile = sf_histstring(spef,"lag")) && NULL == (lagfile = sf_getstring("slag"))) sf_error("Need slag="); slag = sf_input(lagfile); if (NULL == (lagfile = sf_histstring(npef,"lag")) && NULL == (lagfile = sf_getstring("nlag"))) sf_error("Need nlag="); nlag = sf_input(lagfile); sf_intread(sbb->lag,sf,slag); sf_intread(nbb->lag,nf,nlag); if (!sf_getfloat("eps",&eps)) sf_error("Need eps="); /* regularization parameter */ if (!sf_getint("niter",&niter)) niter=20; /* number of iterations */ data = sf_floatalloc(n123); sign = sf_floatalloc(n123); sf_floatread(data,n123,dat); dabs = fabsf(data[0]); for (i=1; i < n123; i++) { di = fabsf(data[i]); if (di > dabs) dabs=di; } for (i=0; i < n123; i++) { data[i] /= dabs; } saa = (sf_filter) sf_alloc(nk,sizeof(*saa)); naa = (sf_filter) sf_alloc(nk,sizeof(*naa)); for (ik=0; ik < nk; ik++) { scc = saa+ik; ncc = naa+ik; scc->nh = sf; ncc->nh = nf; scc->flt = sf_floatalloc(sf); ncc->flt = sf_floatalloc(nf); scc->lag = sbb->lag; ncc->lag = nbb->lag; scc->mis = NULL; ncc->mis = NULL; } wind = sf_floatalloc(nw); for (i=0; i < dim; i++) { mc[i] = SF_MIN(sc[i],nc[i]); ma[i] = SF_MIN(sa[i],na[i]); } tent (dim, w, mc, ma, wind); for (i=0; i < n123-n1+1; i += n1) { signoi_init (naa, saa, niter, nw, eps, false); for (ik=0; ik < nk; ik++) { sf_floatread((naa+ik)->flt,nf,npef); sf_floatread((saa+ik)->flt,sf,spef); } patching (signoi_lop, data+i, sign+i, dim, k, n, w, wind); } sf_floatwrite (sign,n123,signal); exit(0); }
int main(int argc, char* argv[]) { bool spitz, verb; int niter, sa, na, j, dim, nx, n[SF_MAX_DIM], m[SF_MAX_DIM]; float *dd, *ss, eps, na0, sa0; char varname[6], *lagfile; sf_filter naa, saa; sf_file spef, npef, dat, signoi, slag, nlag; sf_init(argc,argv); dat = sf_input("in"); signoi = sf_output("out"); spef = sf_input("sfilt"); npef = sf_input("nfilt"); dim = sf_filedims(dat,n); if (!sf_histint(spef,"n1",&sa)) sf_error("No n1= in sfilt"); if (!sf_histint(npef,"n1",&na)) sf_error("No n1= in nfilt"); naa = sf_allocatehelix(na); saa = sf_allocatehelix(sa); if (NULL == (lagfile = sf_histstring(spef,"lag")) && NULL == (lagfile = sf_getstring("slag"))) sf_error("Need slag="); slag = sf_input(lagfile); if (!sf_histints(slag,"n",m,dim)) sf_error("No n= in %s",lagfile); sf_intread(saa->lag,sa,slag); regrid(dim,m,n,saa); sf_fileclose(slag); if (NULL == (lagfile = sf_histstring(npef,"lag")) && NULL == (lagfile = sf_getstring("nlag"))) sf_error("Need nlag="); nlag = sf_input(lagfile); if (!sf_histints(nlag,"n",m,dim)) sf_error("No n= in %s",lagfile); sf_intread(naa->lag,na,nlag); regrid(dim,m,n,naa); sf_fileclose(nlag); if (!sf_histfloat(spef,"a0",&sa0)) sa0=1.; if (!sf_histfloat(npef,"a0",&na0)) na0=1.; if (!sf_getfloat("epsilon",&eps)) sf_error("Need eps="); /* regularization parameter */ if (!sf_getint("niter",&niter)) niter=20; /* number of iterations */ sprintf(varname,"n%d",dim+1); sf_putint(signoi,varname,2); nx=1; for(j=0; j < dim; j++) { nx *= n[j]; } dd = sf_floatalloc(nx); ss = sf_floatalloc(nx); sf_floatread(dd,nx,dat); sf_floatread(saa->flt,sa,spef); for (j=0; j < sa; j++) { saa->flt[j] /= sa0; } sf_floatread(naa->flt,na,npef); for (j=0; j < na; j++) { naa->flt[j] /= na0; } if (!sf_getbool("spitz",&spitz)) spitz=false; /* if use Spitz method */ if (!sf_getbool("verb",&verb)) verb=false; /* verbosity flag */ signoi_init (naa, saa, niter, nx, eps, verb); if (spitz) { signoi2_lop (false,false,nx,nx,dd,ss); } else { signoi_lop (false,false,nx,nx,dd,ss); } sf_floatwrite(ss,nx,signoi); for (j=0; j < nx; j++) { dd[j] -= ss[j]; } sf_floatwrite(dd,nx,signoi); exit (0); }