Beispiel #1
0
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);
}
Beispiel #2
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);
}