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

📄 gridclip.c

📁 seismic software,very useful
💻 C
字号:
/* GRIDCLIP grid clip program */#include "usgrid.h"#include "par.h"char    *sdoc ="GRIDCLIP - grid clip program                           \n""\n""gridclip [parameters] <grid.input >grid.output                 \n""\n""Required parameters:                                                   \n""\n""None                                                                   \n""\n""Optional parameters:                                                   \n""\n""pclip=     maximum positive clip value (default to grid max positive)\n""pval=pclip value to assign to input greater than pclip\n"    "\n""nclip=     maximum negative clip value (default to grid max negative)\n""nval=nclip value to assign to input greater than pclip\n"    "\n""zero=0.0   value to be used outside the passing zone defined by      \n""           (min1, max1, min2, max2, min3, max3, min4, max4, min5, max5) \n""\n""min1=1     minimum 1st index of the passing zone     \n""max1=n1    maximum 1st index of the passing zone     \n""min2=1     minimum 2nd index of the passing zone     \n""max2=n2    maximum 2nd index of the passing zone     \n""min3=1     minimum 3rd index of the passing zone     \n""max3=n3    maximum 3rd index of the passing zone     \n""min4=1     minimum 4th index of the passing zone     \n""max4=n4    maximum 4th index of the passing zone     \n""min5=1     minimum 5th index of the passing zone     \n""max5=n5    maximum 5th index of the passing zone     \n""\n""rbeg=      replaced value at beginning of clip value at each trace \n""rend=      replaced value at end of each trace \n""           when rbeg and rend are given, at any trace with a value \n""           larger than pclip, the remaing portion starting from this \n""           value will be linearly interpolated from rbeg to rend \n""Notes:                                                             \n"" 1. This program will check grid values and clip data within      \n""    (nclip,pclip) range                                           \n"" 2. gmin and gmax will be computed and updated in the output grid \n""    header                                                        \n""\n""AUTHOR:                Zhiming Li,       ,     8/16/94            \n""Revised:               Reginald Beardsley      "__DATE__;int main(int argc, char **argv){   FILE    *infp = stdin, *outfp = stdout;   int      n1, n2, n3, n4, n5;   float   *trace;   int      ierr, i2, n, i1;   float    pclip, nclip;   float    pval, nval;   int      ip = 1, in = 1;   int      i3, i4, i5;   float    gmin, gmax, zero;   int      min1, min2, min3, min4, min5;   int      max1, max2, max3, max4, max5;   float    rbeg, rend, tmp;   float    ir = 0, ibeg;   usghed   usgh;   /*----------------*/   /* initialization */   /*----------------*/   initargs(argc, argv);   askdoc(1);   if (!getparfloat("pclip", &pclip)){      ip = 0;   }else{      pval=pclip;      }   if (!getparfloat("nclip", &nclip)){      in = 0;   }else{      nval=nclip;      }   getparfloat("nval", &nval);   getparfloat("pval", &pval);   /*---------------------------*/   /* get input grid parameters */   /*---------------------------*/   ierr = fgetusghdr(infp, &usgh);   if (ierr != 0)      err(" nonstandard grid file ");   n1 = usgh.n1;   n2 = usgh.n2;   n3 = usgh.n3;   n4 = usgh.n4;   n5 = usgh.n5;   if (n2 == 0){      n2 = 1;   }   if (n3 == 0){      n3 = 1;   }   if (n4 == 0){      n4 = 1;   }   if (n5 == 0){      n5 = 1;   }   if (!getparint("min1", &min1)){      min1 = 1;   }   if (!getparint("min2", &min2)){      min2 = 1;   }   if (!getparint("min3", &min3)){      min3 = 1;   }   if (!getparint("min4", &min4)){      min4 = 1;   }   if (!getparint("min5", &min5)){      min5 = 1;   }   if (!getparint("max1", &max1)){      max1 = n1;   }   if (!getparint("max2", &max2)){      max2 = n2;   }   if (!getparint("max3", &max3)){      max3 = n3;   }   if (!getparint("max4", &max4)){      max4 = n4;   }   if (!getparint("max5", &max5)){      max5 = n5;   }   if (!getparfloat("zero", &zero)){      zero = 0.;   }   ir = 0;   if (getparfloat("rbeg", &rbeg) && getparfloat("rend", &rend)){      ir = 1;   }   min1 = min1 - 1;   min2 = min2 - 1;   min3 = min3 - 1;   min4 = min4 - 1;   min5 = min5 - 1;   max1 = max1 - 1;   max2 = max2 - 1;   max3 = max3 - 1;   max4 = max4 - 1;   max5 = max5 - 1;   n = n2 * n3 * n4 * n5;   trace = (float *) emalloc(n1 * sizeof(float));   efseek(infp, 0, 0);   for (i5 = 0; i5 < n5; i5++) {      for (i4 = 0; i4 < n4; i4++) {         for (i3 = 0; i3 < n3; i3++) {            for (i2 = 0; i2 < n2; i2++) {               efread(trace, sizeof(float), n1, infp);               if (in == 1) {                  for (i1 = 0; i1 < n1; i1++) {                     if (trace[i1] < nclip)                        trace[i1] = nval;                  }               }               if (ir == 0) {                  if (ip == 1) {                     for (i1 = 0; i1 < n1; i1++) {                        if (trace[i1] > pclip)                           trace[i1] = pval;                     }                  }               } else {                  ibeg = 0;                  for (i1 = 0; i1 < n1; i1++) {                     if (trace[i1] > pclip) {                        ibeg = i1;                        break;                     }                  }                  if (ibeg != 0) {                     if (ibeg != n1 - 1) {                        tmp = (rend - rbeg) / (n1 - ibeg - 1);                     } else {                        tmp = 0.;                     }                     for (i1 = ibeg; i1 < n1; i1++) {                        trace[i1] = rbeg + (i1 - ibeg) * tmp;                     }                  }               }               if (i5 < min5 || i5 > max5 ||                   i4 < min4 || i4 > max4 ||                   i3 < min3 || i3 > max3 ||                    i2 < min2 || i2 > max2) {                  for (i1 = 0; i1 < n1; i1++){                     trace[i1] = zero;                  }               } else {                  for (i1 = 0; i1 < min1; i1++){                     trace[i1] = zero;                  }                  for (i1 = max1 + 1; i1 < n1; i1++){                     trace[i1] = zero;                  }               }               if (i2 == 0 && i3 == 0 && i4 == 0 && i5 == 0) {                  gmin = trace[0];                  gmax = trace[0];               }               for (i1 = 0; i1 < n1; i1++) {                  if (trace[i1] > gmax){                     gmax = trace[i1];                  }                  if (trace[i1] < gmin){                     gmin = trace[i1];                  }               }               efwrite(trace, sizeof(float), n1, outfp);            }         }      }   }   usgh.gmin = gmin;   usgh.gmax = gmax;   ierr = fputusghdr(outfp, &usgh);   if (ierr != 0)      err("error in output gridheader");   efclose(outfp);   efclose(infp);   free(trace);   exit(0);}

⌨️ 快捷键说明

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