⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iipick.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 5 页
字号:
	maxcdp= 128;	if(getparstring("VELO",&VELO)) {		ihfile = 0;		tty = efopen("/dev/tty","r");		fprintf(stderr,		"Replace velocities in IFILE with those in VELO? (y/n) ->"); 		veloyes = getc(tty);		efclose(tty);                if( (velofp=fopen(VELO,"r"))!=NULL && veloyes=='y') {			/* VELO cards */			 fprintf(stderr,"VELO used to compute velocities \n");			 cdps_velo = (int*) malloc(maxcdp*sizeof(int));			 x_velo = (float*) malloc(maxcdp*sizeof(float));			 z_velo = (float*) malloc(maxp*maxcdp*sizeof(float));			 v_velo = (float*) malloc(maxp*maxcdp*sizeof(float));			 nps_velo = (int*) malloc(maxcdp*sizeof(int));			 sorts = (float*) malloc(maxp*maxcdp*sizeof(float));			 sortindex = (int*) malloc(maxcdp*sizeof(int));			 isort = (int*) malloc(maxcdp*sizeof(int));			 cdpsort = (float*) malloc(maxcdp*sizeof(float));			 veloread(velofp,cdps_velo,z_velo,v_velo,				  &ncdps_velo,nps_velo, maxp, maxcdp);			/*			for(i=0;i<ncdps_velo;i++) {				for(iz=0;iz<nps_velo[i];iz++) 				fprintf(stderr,"%f %f %d %d \n",				z_velo[i*maxp+iz],v_velo[i*maxp+iz],iz+1,i+1);			}			*/			/* sort cdps of VELO cards into ascending order */			for(i=0;i<ncdps_velo;i++) {				sortindex[i] = i;				cdpsort[i] = cdps_velo[i];			}                        if(ncdps_velo>0) qkisort(ncdps_velo,cdpsort,sortindex);                        for(i=0;i<ncdps_velo;i++) {                                cdps_velo[i] = cdpsort[sortindex[i]];                                isort[i] = nps_velo[sortindex[i]];                        }                        for(i=0;i<ncdps_velo;i++) {                                nps_velo[i] = isort[i];                        }                        for(i=0;i<ncdps_velo;i++) {                                bcopy((char*)(v_velo+sortindex[i]*maxp),                                        (char*)(sorts+i*maxp),maxp*4);                        }			for(i=0;i<ncdps_velo;i++) {                                bcopy((char*)(sorts+i*maxp),                                        (char*)(v_velo+i*maxp),maxp*4);                        }                        for(i=0;i<ncdps_velo;i++) {                                bcopy((char*)(z_velo+sortindex[i]*maxp),                                        (char*)(sorts+i*maxp),maxp*4);                        }			for(i=0;i<ncdps_velo;i++) {                                bcopy((char*)(sorts+i*maxp),                                        (char*)(z_velo+i*maxp),maxp*4);                        }			/* DVDZ cards */			 cdps_dvdz = (int*) malloc(maxcdp*sizeof(int));			 x_dvdz = (float*) malloc(maxcdp*sizeof(float));			 zt_dvdz = (float*) malloc(maxp*maxcdp*sizeof(float));			 zb_dvdz = (float*) malloc(maxp*maxcdp*sizeof(float));			 dvdz_dvdz= (float*) malloc(maxp*maxcdp*sizeof(float));			 nps_dvdz = (int*) malloc(maxcdp*sizeof(int));			 dvdzread(velofp,cdps_dvdz,zt_dvdz,zb_dvdz,dvdz_dvdz,				  &ncdps_dvdz,nps_dvdz,maxp,maxcdp);			/* sort cdps of DVDZ cards into ascending order */			for(i=0;i<ncdps_dvdz;i++) {				sortindex[i] = i;				cdpsort[i] = cdps_dvdz[i];			}    			if(ncdps_dvdz>0) qkisort(ncdps_dvdz,cdpsort,sortindex);    			for(i=0;i<ncdps_dvdz;i++) {        			cdps_dvdz[i] = cdpsort[sortindex[i]];        			isort[i] = nps_dvdz[sortindex[i]];    			}    			for(i=0;i<ncdps_dvdz;i++) {        			nps_dvdz[i] = isort[i];			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(dvdz_dvdz+sortindex[i]*maxp),					(char*)(sorts+i*maxp),maxp*4);			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(sorts+i*maxp),					(char*)(dvdz_dvdz+i*maxp),maxp*4);			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(zt_dvdz+sortindex[i]*maxp),					(char*)(sorts+i*maxp),maxp*4);			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(sorts+i*maxp),					(char*)(zt_dvdz+i*maxp),maxp*4);			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(zb_dvdz+sortindex[i]*maxp),					(char*)(sorts+i*maxp),maxp*4);			}    			for(i=0;i<ncdps_dvdz;i++) {        			bcopy((char*)(sorts+i*maxp),					(char*)(zb_dvdz+i*maxp),maxp*4);			}			free(isort);			free(sorts);			free(sortindex);			free(cdpsort);		}		/* convert cdp locations of VELO into x locations */		for(i=0;i<ncdps_velo;i++) { 			x_velo[i] = xmin + (cdps_velo[i]-cdpxmin)*dcdp;		}		/* convert cdp locations of DVDZ into x locations */		/* still store in cdps_dvdz */		for(i=0;i<ncdps_dvdz;i++) 			x_dvdz[i] = xmin + (cdps_dvdz[i]-cdpxmin)*dcdp;		free(cdps_velo);		free(cdps_dvdz);		}	/* read in ifile if any */	nhs = 0;	if(fex==1) {		ifileread(ifilefp,&nhs,x2picks,x1picks,veltops,velbots,difs,			dens,qval,pois,               	     	velavgs,dvdzs,			(char*)hnames,hnums,npicks,maxhs,maxpks,			&xmini,&xmaxi,&zmini,&zmaxi,			&cdpxmini,&cdpxmaxi,&vmini,&vmaxi,			vtypei,dunitsi,zattribi,&dcdpi,&ihfile);		if(ivtopbot==0) {			  ivtopbot=1;			  vtopbot(maxp,maxcdp,ncdps_velo,x_velo,z_velo,				v_velo,nps_velo,				ncdps_dvdz,x_dvdz,zt_dvdz,zb_dvdz, 				dvdz_dvdz,nps_dvdz,				nhs,x2picks,x1picks,npicks,xtol, 				veltops,velbots,velavgs,dvdzs,lhnvelo);		}	}	/* adjust x1beg and x1end to fall on sampled values */	i1beg = NINT((x1beg-f1)/d1);	i1beg = MAX(0,MIN(n1-1,i1beg));	x1beg = f1+i1beg*d1;	i1end = NINT((x1end-f1)/d1);	i1end = MAX(0,MIN(n1-1,i1end));	x1end = f1+i1end*d1;	/* adjust x2beg and x2end to fall on sampled values */	i2beg = NINT((x2beg-f2)/d2);	i2beg = MAX(0,MIN(n2-1,i2beg));	x2beg = f2+i2beg*d2;	i2end = NINT((x2end-f2)/d2);	i2end = MAX(0,MIN(n2-1,i2end));	x2end = f2+i2end*d2;	/* allocate space for image bytes */	n1c = 1+abs(i1end-i1beg);	n2c = 1+abs(i2end-i2beg);	cz = ealloc1(n1c*n2c,sizeof(unsigned char));	/* convert data to be imaged into signed characters */	zscale = (wclip!=bclip)?255.0/(wclip-bclip):1.0e10;	zoffset = -bclip*zscale;	i1step = (i1end>i1beg)?1:-1;	i2step = (i2end>i2beg)?1:-1;	if (style==NORMAL) {		for (i2c=0,i2=i2beg; i2c<n2c; i2c++,i2+=i2step) {			czp = cz+n1c*n2c-(i2c+1)*n1c;			for (i1c=0,i1=i1beg; i1c<n1c; i1c++,i1+=i1step) {				zi = zoffset+z[i1+i2*n1]*zscale;				if (zi<0.0) zi = 0.0;				if (zi>255.0) zi = 255.0;				*czp++ = (unsigned char)zi;			}		}	} else {		czp = cz;		for (i1c=0,i1=i1beg; i1c<n1c; i1c++,i1+=i1step) {			for (i2c=0,i2=i2beg; i2c<n2c; i2c++,i2+=i2step) {				zi = zoffset+z[i1+i2*n1]*zscale;				if (zi<0.0) zi = 0.0;				if (zi>255.0) zi = 255.0;				*czp++ = (unsigned char)zi;			}		}	}	free1float(z);		/* initialize zoom box parameters */	nxb = nx = (style==NORMAL ? n1c : n2c);	nyb = ny = (style==NORMAL ? n2c : n1c);	ixb = iyb = 0;	czb = cz;	x1begb = x1beg;  x1endb = x1end;	x2begb = x2beg;  x2endb = x2end;	/* connect to X server */	if ((dpy=XOpenDisplay(NULL))==NULL)		err("Cannot connect to display %s!\n",XDisplayName(NULL));	scr = DefaultScreen(dpy);	black = BlackPixel(dpy,scr);	white = WhitePixel(dpy,scr);		/* create window */	win = xNewWindow(dpy,xbox,ybox,wbox,hbox,black,white,"ipick");	/* if necessary, create private colormap with gray scale */	if (STREQ(cmap,"gray")) {		XSetWindowColormap(dpy,win,xCreateGrayColormap(dpy,win));	} else if (STREQ(cmap,"hue")) {		XSetWindowColormap(dpy,win,xCreateHueColormap(dpy,win));	} else if (STREQ(cmap,"rgb")) {		XSetWindowColormap(dpy,win,xCreateRGBColormap(dpy,win));	}		/* determine min and max pixels from standard colormap */	pmin = xGetFirstPixel(dpy);	pmax = xGetLastPixel(dpy);			/* make GC for image */	gci = XCreateGC(dpy,win,0,NULL);		/* set normal event mask */	XSelectInput(dpy,win,		StructureNotifyMask |		ExposureMask |		KeyPressMask |		PointerMotionMask |		ButtonPressMask |		ButtonReleaseMask |		Button1MotionMask |		Button2MotionMask);		/* map window */	XMapWindow(dpy,win);						/* determine good size for axes box */	xSizeAxesBox(dpy,win,		labelfont,titlefont,style,		&x,&y,&width,&height);		/* clear the window */	XClearWindow(dpy,win);		/* note that image is out of date */	imageOutOfDate = 1;	savebg = 1;	/*	fprintf(stderr,"xmin=%f\n",xmini);	fprintf(stderr,"xmax=%f\n",xmaxi);	fprintf(stderr,"zmin=%f\n",zmini);	fprintf(stderr,"zmax=%f\n",zmaxi);	fprintf(stderr,"cdpxmin=%d\n",cdpxmini);	fprintf(stderr,"cdpxmax=%d\n",cdpxmaxi);	fprintf(stderr,"vmin=%f\n",vmini);	fprintf(stderr,"vmax=%f\n",vmaxi);	fprintf(stderr,"vtype=%s\n",vtypei);	fprintf(stderr,"dunits=%s\n",dunitsi);	fprintf(stderr,"zattrib=%s\n",zattribi);	fprintf(stderr,"dcdp=%f\n",dcdpi);	fprintf(stderr,"nhs=%d\n",nhs);	for(ih=0;ih<nhs;ih++) fprintf(stderr,"hname=%s\n",hnames[ih]);	*/	ih = nhs + 1;	sprintf(hnames[nhs],"%4s%-3d\0",hname,ih);	hnums[nhs] = ih;	nhs = nhs + 1;	ihsave = 0;	nold = 0;	/* main event loop */	while(True) {		XNextEvent(dpy,&event);		/* if window was resized */		if (event.type==ConfigureNotify &&			(event.xconfigure.width!=winwidth ||			 event.xconfigure.height!=winheight)) {			winwidth = event.xconfigure.width;			winheight = event.xconfigure.height;										/* determine good size for axes box */			xSizeAxesBox(dpy,win,				labelfont,titlefont,style,				&x,&y,&width,&height);			/* clear background */                        if(savebg) XSetWindowBackground(dpy,win,0L);						/* clear the window */			XClearWindow(dpy,win);						/* note that image is out of date */			imageOutOfDate = 1;		/* else if window exposed */		} else if (event.type==Expose) {						/* clear all expose events from queue */			while (XCheckTypedEvent(dpy,Expose,&event));						/* if necessary, make new image */			if (imageOutOfDate) {				if (czbi!=NULL) free1(czbi);				czbi = newInterpBytes(nxb,nyb,czb,					width,height);				if (image!=NULL) XDestroyImage(image);				image = xNewImage(dpy,pmin,pmax,					width,height,czbi);				imageOutOfDate = 0;			}			/* clear background */                        if(savebg) XSetWindowBackground(dpy,win,0L);				/* draw image (before axes so grid lines visible) */			XPutImage(dpy,win,gci,image,0,0,x,y,				image->width,image->height);						/* draw axes on top of image */			cdpbegb = (x2begb - xmin)/dcdp + cdpxmin; 			cdpendb = (x2endb - xmin)/dcdp + cdpxmin; 			xDrawAxesBox(dpy,win,				x,y,width,height,				x1begb,x1endb,0.0,0.0,				d1num,f1num,n1tic,grid1,label1,				cdpbegb,cdpendb,0.0,0.0,				d2num,f2num,n2tic,grid2,label2,				labelfont,title,titlefont,				labelcolor,titlecolor,gridcolor,				style);		/* else if key down */		} else if (event.type==KeyPress) {			XLookupString(&event,keybuf,0,&keysym,&keystat);			/* add the pick to the pick-saved buffers */			pkey = 99;			if (keysym==XK_a) {				pkey = 0;			/* delete the pick */			} else if (keysym==XK_d) {				pkey = 1;			/* insert the pick */			} else if (keysym==XK_i) {				pkey = 2;			/* display the pick */			} else if (keysym==XK_p) {				pkey = 3;			} else if (keysym==XK_c) {				pkey = 5;			} else if (keysym==XK_b) {				pkey = 99;				if(ih>1 && npicks[ih-1]==0) nhs = nhs -1; 				if(ih>1) ih = ih - 1;			} else if (keysym==XK_f) {				if(ih<nhs || npicks[nhs-1]>0) ih = ih + 1;				pkey = 99;				if(ih>nhs) {				     sprintf(hnames[nhs],"%4s%-3d\0",hname,ih);					hnums[nhs] = ih;					nhs = nhs + 1;				}			} else if (keysym==XK_n) {				pkey = 98;			} else if (keysym==XK_1) {				if(nhs>=1) ih = 1;			} else if (keysym==XK_2) {				if(nhs>=2) ih = 2;			} else if (keysym==XK_3) {				if(nhs>=3) ih = 3;			} else if (keysym==XK_4) {				if(nhs>=4) ih = 4;			} else if (keysym==XK_5) {				if(nhs>=5) ih = 5;			} else if (keysym==XK_6) {				if(nhs>=6) ih = 6;			} else if (keysym==XK_7) {				if(nhs>=7) ih = 7;			} else if (keysym==XK_8) {				if(nhs>=8) ih = 8;			} else if (keysym==XK_9) {				if(nhs>=9) ih = 9;			} else if (keysym==XK_0) {				if(nhs>=10) ih = 10;			} else if (keysym==XK_F1) {				if(nhs>=11) ih = 11;			} else if (keysym==XK_F2) {				if(nhs>=12) ih = 12;			} else if (keysym==XK_F3) {				if(nhs>=13) ih = 13;			} else if (keysym==XK_F4) {				if(nhs>=14) ih = 14;			} else if (keysym==XK_F5) {				if(nhs>=15) ih = 15;			} else if (keysym==XK_F6) {				if(nhs>=16) ih = 16;			} else if (keysym==XK_F7) {				if(nhs>=17) ih = 17;			} else if (keysym==XK_F8) {				if(nhs>=18) ih = 18;			} else if (keysym==XK_F9) {				if(nhs>=19) ih = 19;			} else if (keysym==XK_F10) {				if(nhs>=20) ih = 20;			} else if (keysym==XK_F11) {				if(nhs>=21) ih = 21;			} else if (keysym==XK_F12) {				if(nhs>=22) ih = 22;			}			/* reinterpolate velocities if needed */			/* first time, save values */			if(ihsave==0 && npicks[ih-1]>0) {				ihsave = ih; 				jh = ih - 1;				nold = npicks[jh];				if(nold > 1) {					bcopy(x2picks+jh*maxpks,xold,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -