예제 #1
0
파일: migzrots.c 프로젝트: 717524640/src
/*...........................................................................*/
void derive_2( int n1, int n2, float d2,
               float **y, float **dyd2 )
/*< derive 2 >*/
{
    int n=6,i1,i2;
    float *yy=NULL,*der2=NULL;
/*
  hilbert_init(n2, n, 0.);
  der2 = sf_floatalloc(n2);
  
  for (i1=0;i1<n1;i1++) {
  for(i2=0;i2<n2;i2++) taux[i2] = tsg[i2*n1+i1];
  deriv(taux,der2);
  for(i2=0;i2<n2;i2++) dtdx[i2*n1+i1] = der2[i2]/d2;
  }
*/
    
    sf_deriv_init(n2, n, 0.);
    yy   = sf_floatalloc(n2);
    der2 = sf_floatalloc(n2);
    
    for (i1=0;i1<n1;i1++) {
	for(i2=0;i2<n2;i2++) yy[i2] = y[i2][i1];
	sf_deriv(yy,der2);
	for(i2=0;i2<n2;i2++) dyd2[i2][i1] = der2[i2]/d2;
    }
    
    free(yy); free(der2);
    sf_deriv_close();
    
}
예제 #2
0
파일: alias1.c 프로젝트: 1014511134/src
/*-----------------------------------------------------------------------------*/
int angleMap(
    sf_complex **rays,  
    boxrays b, 
    float **map )
/*< angle >*/
{
    int flag=0, it, ig, norder=6;
    float *x, *z, *dxdg, *dzdg, zero=.00001, ang, halfpi;
    
    x    = (float *) malloc(b.ng*sizeof(float));
    z    = (float *) malloc(b.ng*sizeof(float));
    dxdg = (float *) malloc(b.ng*sizeof(float));
    dzdg = (float *) malloc(b.ng*sizeof(float));
    
    sf_deriv_init(b.ng, norder, 0.);
    
    halfpi = 2*atan(1);
    for(it=0;it<b.nt;it++){
	for(ig=0;ig<b.ng;ig++){
	    x[ig]=crealf(rays[it][ig]);
	    z[ig]=cimagf(rays[it][ig]);
	}
	sf_deriv(x,dxdg);
	sf_deriv(z,dzdg);    
	for(ig=0;ig<b.ng;ig++){
	    if(dxdg[ig]>zero) {ang=atan(dzdg[ig]/dxdg[ig]);
	    }else{ang=halfpi;}
	    map[it][ig]=fabs(ang);
	}
    }
    
    sf_deriv_free();
    free(x); free(z); free(dxdg); free(dzdg);
    flag = 1;
    
    return flag;
}
예제 #3
0
파일: migzrots.c 프로젝트: 717524640/src
/*...........................................................................*/
void derive_1( int n1, int n2, float d1, 
               float **y, float **dyd1 )
/*< derive 1 >*/
{
    int n=6,i1,i2;
    
    sf_deriv_init(n1, n, 0.);
    
    for (i2=0;i2<n2;i2++) {
	sf_deriv(y[i2],dyd1[i2]);
	for(i1=0;i1<n1;i1++) dyd1[i2][i1] /= d1;
    }
    
    sf_deriv_close();
    
}
예제 #4
0
파일: Mderiv.c 프로젝트: housian0724/src
int main (int argc, char* argv[])
{
    bool scale;
    int n1,n2, i1,i2, n;
    float d1, *dat, *der;
    sf_file in=NULL, out=NULL;

    sf_init (argc,argv);
    in = sf_input("in");
    out = sf_output("out");

    if (SF_FLOAT != sf_gettype(in)) sf_error("Need float input");
    if (!sf_histint(in,"n1",&n1)) sf_error("No n1= in input");
    n2 = sf_leftsize(in,1);

    dat = sf_floatalloc(n1);
    der = sf_floatalloc(n1);

    if (!sf_getint("order",&n)) n=6;
    /* filter order */

    if (!sf_getbool("scale",&scale) || 
	!sf_histfloat(in,"d1",&d1)) scale=false;
    /*(scale=n if scale by 1/dx )*/

    sf_deriv_init(n1, n, 0.);

    for (i2=0; i2 < n2; i2++) {
	sf_floatread(dat,n1,in);
	sf_deriv(dat,der);

	if (scale) {
	    for (i1=0; i1 < n1; i1++) {
		der[i1] /= d1;
	    }
	}

	sf_floatwrite(der,n1,out);
    }


    exit(0);
}
예제 #5
0
파일: Minstattr.c 프로젝트: 1014511134/src
int main (int argc, char* argv[])
{
    int nh, n1, n2, i1,i2, i, dim, n[SF_MAX_DIM];
    float *trace, *hilb, *dtrace, *dhilb, *attr, *dert=NULL, c, d1;
    char *type;
    bool hertz, hires, der2, verb;
    sf_file in, out;

    sf_init (argc,argv);
    in = sf_input("in");
    out = sf_output("out");

    if (SF_FLOAT != sf_gettype(in)) sf_error("Need float input");
    
    dim = sf_filedims (in,n);
    n1 = n[0];
    n2 = 1;
    for (i=0; i < dim; i++) {
	n2 *= n[i];
    }
    n2 /= n1;

    if (NULL == (type=sf_getstring("type"))) type="amplitude";
    /* [amplitude,phase,frequency] attribute type, the default is amplitude */

    if (!sf_histfloat(in,"d1",&d1)) d1=1.;

    if (!sf_getint("order",&nh)) nh=10;
    /* Hilbert transformer order */

    if (!sf_getfloat("ref",&c)) c=1.;
    /* Hilbert transformer reference (0.5 < ref <= 1) */

    if (!sf_getbool("hertz",&hertz)) hertz=true;
    /* if y, convert output to Hertz */

    if (!sf_getbool("hires",&hires)) hires=false;
    /* if y, compute high resolution instantaneous attributes */

    if (hires) {
	if (!sf_getbool("der2",&der2)) der2=false;
	/* if y, compute 2nd-order derivative to use with hires=y */
    }

    if (!sf_getbool("verb",&verb)) verb = false;
    /* verbosity flag */

    if (hires) dert = sf_floatalloc(n1);
    trace = sf_floatalloc(n1);
    hilb = sf_floatalloc(n1);
    dtrace = sf_floatalloc(n1);
    dhilb = sf_floatalloc(n1);
    attr = sf_floatalloc(n1);

    sf_hilbert_init(n1, nh, c);
    if ('f'==type[0] || hires) sf_deriv_init(n1, nh, c);
    
    d1 = 1./(2.*SF_PI*d1);
    for (i2=0; i2 < n2; i2++) {
	if (verb) sf_warning("trace %d of %d;",i2+1,n2);

	sf_floatread(trace,n1,in);

	for (i1=0; i1 < n1; i1++) {
	    hilb[i1] = 0.;
	    dtrace[i1] = 0.;
	    dhilb[i1] = 0.;
	    if (hires) dert[i1] = 0.;
	}
	if (hires) {
	    sf_deriv(trace,dert);
	    if (der2) {
		sf_deriv(dert,trace);
	    } else {
		for (i1=0; i1 < n1; i1++) {
		    trace[i1] = dert[i1];
		}
	    }
	}
	sf_hilbert(trace,hilb);
	switch(type[0]) {
	    case 'a':
		for (i1=0; i1 < n1; i1++) {
		    attr[i1] = hypotf(trace[i1],hilb[i1]);
		}
		break;

	    case 'p':
		for (i1=0; i1 < n1; i1++) {
		    attr[i1] = atanf(hilb[i1]/
				     (trace[i1]+FLT_EPSILON))*90./SF_PI;
		    if (hires) {
			if (der2) {
			    attr[i1] *= -1.;
			} 
		    }
		}

		break;

	    case 'f':
		sf_deriv(trace,dtrace);
		sf_deriv(hilb,dhilb);
		for (i1=0; i1 < n1; i1++) {
		    attr[i1] = (trace[i1]*dhilb[i1]-dtrace[i1]*hilb[i1])/
			(trace[i1]*trace[i1]+hilb[i1]*hilb[i1]+FLT_EPSILON);
		}

		if (hertz) {
		    /* convert to Hertz */    
		    for (i1=0; i1 < n1; i1++) {
			attr[i1] *= d1;
		    }
		}
		break;

	    default:
		sf_error("Unknown attribute type=%c",type[0]);
		break;
	}
	sf_floatwrite(attr,n1,out);
    }
    if (verb) sf_warning(".");   
    exit(0);
}
예제 #6
0
파일: alias1.c 프로젝트: 1014511134/src
/*-----------------------------------------------------------------------------*/
int indexMap(
    sf_complex **rays,
    boxrays b, 
    float **vel, 
    sf_axis ax, 
    sf_axis az, 
    float dx, 
    float dz,
    int nf, 
    float df, 
    float fmax, 
    int **map )
/*< index >*/
{
    int flag=0, it, ig, norder=6, index;
    float *x, *z, *dxdg, *dzdg, zero=.02, tg, tg90=9999.;
    float fx, fz, fc, arg, vv;
    pt2d p;
    
    x    = (float *) malloc(b.ng*sizeof(float));
    z    = (float *) malloc(b.ng*sizeof(float));
    dxdg = (float *) malloc(b.ng*sizeof(float));
    dzdg = (float *) malloc(b.ng*sizeof(float));
    
    sf_deriv_init(b.ng, norder, 0.);
    hwt2d_init(vel,az,ax,az,ax);
    
    for(it=0;it<b.nt;it++){
	for(ig=0;ig<b.ng;ig++){
	    x[ig]=crealf(rays[it][ig]);
	    z[ig]=cimagf(rays[it][ig]);
	}
	sf_deriv(x,dxdg);
	sf_deriv(z,dzdg);
	for(ig=0;ig<b.ng;ig++){
	    if(dxdg[ig]>zero) {tg=fabs(dzdg[ig]/dxdg[ig]);
	    }else{tg=tg90;}
	    arg = sqrt(1+tg*tg);
	    p.x = crealf(rays[it][ig]);
	    p.z = cimagf(rays[it][ig]);
	    vv  = hwt2d_getv(p);
	    fx  = vv/(2*dx*arg);
	    /* REVER fz
	       if(tg==tg90) fz=vv/(2*dz);
	       else fz=vv*tg/(2*dz*arg);*/
	    fz=vv/(2*dz);
	    if(fx<fz) fc=fx;
	    else fc=fz;
	    /* DUVIDA
	       if(fc>(fmax-df)) index=0;
	       else index = floor((fmax-df-fc)/df);*/
	    if(fc>fmax) index=0;
	    else index = floor((fmax-fc)/df);
	    if(index<0) index=0;
	    if(index>(nf-1)) index=nf-1;
	    map[it][ig]=index;
	}
    }
    
    sf_deriv_free();
    free(x); free(z); free(dxdg); free(dzdg);
    flag = 1;
    
    return flag;
}
예제 #7
0
파일: alias1.c 프로젝트: 1014511134/src
/*-----------------------------------------------------------------------------*/
int indexMap2( 
    sf_complex **rays,  
    boxrays b, 
    float **vel, 
    sf_axis ax, 
    sf_axis az, 
    float dx, 
    float dz,
    int nf, 
    float df, 
    float fmax, 
    int **map )
/*< index 2 >*/
{
/* this functions was not tested */
    int flag=0, it, ig, norder=6, index;
    float *x, *z, *dxdt, *dzdt, zero=.02, tg, tg90=9999.;
    float fx, fz, fc, arg, vv;
    pt2d p;
    
    x    = (float *) malloc(b.nt*sizeof(float));
    z    = (float *) malloc(b.nt*sizeof(float));
    dxdt = (float *) malloc(b.nt*sizeof(float));
    dzdt = (float *) malloc(b.nt*sizeof(float));
    
    sf_deriv_init(b.nt, norder, 0.);
    hwt2d_init(vel,az,ax,az,ax);
    
    for(ig=0;ig<b.ng;ig++){
	for(it=0;it<b.nt;it++){
	    x[it]=crealf(rays[it][ig]);
	    z[it]=cimagf(rays[it][ig]);
	}
	sf_deriv(x,dxdt);
	sf_deriv(z,dzdt);
	for(it=0;it<b.nt;it++){
	    if(dxdt[it]>zero) {tg=fabs(dzdt[it]/dxdt[it]);
	    }else{tg=tg90;}
	    arg = sqrt(1+tg*tg);
	    p.x = x[it];
	    p.z = z[it];
	    vv  = hwt2d_getv(p);
	    fx  = vv/(2*dx*arg);
	    /* REVER fz
	       if(tg>zero) fz=tg*vv/(2*dz*arg);
	       else fz=vv/(2*dz);*/
	    fz=vv*tg/(2*dz*arg);
	    if(fx<fz) fc=fx;
	    else fc=fz;
	    if(fz<fx)  fprintf(stderr,"theta=%f fx=%f fz=%f fc=%f\n",57.2957795*atan(tg),fx,fz,fc);
	    if(fc>(fmax-df)) index=0;
	    else index = floor((fmax-df-fc)/df);
	    map[it][ig]=index;
	}
    }
    
    sf_deriv_free();
    free(x); free(z); free(dxdt); free(dzdt);
    flag = 1;
    
    return flag;
}