📄 iipick.c
字号:
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 + -