Seismic Unix命令XVelocity SuwindsuvelanvelansucontourxcontoursuximageXdataXnmoSUXcontourXContoursuxmovie显示裸数据.bin文件等值线方式绘制地震记录阴影图方式绘制地震记录变面积方式绘制地震记录曲线方式绘制地震记录
Seismic Unix命令
XVelocity
SUWIND - window traces by key word按关键字的窗口痕迹
SUVELAN - compute stacking velocity semblance for cdp gathers计算 cdp 道集的叠加速度相似度
SUXCONTOUR - X CONTOUR plot of Seismic UNIX tracefile via vector plot call通过矢量图调用的 Seismic UNIX 跟踪文件的 X CONTOUR 图
UNISAM - UNIformly SAMple a function y(x) specified as x,y pairs统一采样指定为 x,y 对的函数 y(x)
XGRAPH - X GRAPHer Graphs n[i] pairs of (x,y) coordinates,X GRAPHer 图 n[i] 对 (x,y) 坐标,
XCONTOUR - X CONTOUR plot of f(x1,x2) via vector plot call
XVelocity
这段代码是一个Shell脚本,主要用于显示速度扫描和"picks"(选取的数据点)。让我们逐行分析这段代码的功能:
set -v
:启用脚本的调试模式,将会显示执行的每个命令。
- 定义一些变量:
WIDTH
、HEIGHT
、WIDTHOFF1
、WIDTHOFF2
、WIDTHOFF3
、WIDTHOFF4
、HEIGHTOFF1
:这些变量用于设置显示的宽度和高度,以及窗口的位置偏移。nv
、dv
、fv
、fold
、nout
、dxout
:这些变量用于定义速度扫描的相关参数。
- 设置第一个CDP(Common Depth Point)的值为1500,并对该CDP进行一系列处理和显示:
suwind
:使用suwind
命令从modeldata
文件中选择指定CDP的数据。suvelan
:使用suvelan
命令对所选CDP的数据进行速度分析处理。suxcontour
:使用suxcontour
命令对速度分析结果进行显示。sed
:使用sed
命令对par.$cdp
文件进行编辑,生成unisam1.p
文件。unisam
:使用unisam
命令对unisam1.p
文件中的参数进行处理。xgraph
:使用xgraph
命令显示处理后的数据。
- 设置第二个CDP的值为2000,并对其进行类似的处理和显示。
- 设置第三个CDP的值为2500,但被注释掉了,没有进行处理和显示。
- 设置第四个CDP的值为3000,同样也被注释掉了。
- 生成用于
sunmo
命令的参数文件stkvel.p
,其中包括了1500、2000、2500和3000四个CDP的参数。
- 脚本执行完毕后退出。
需要注意的是,部分命令被注释掉了,可能是因为在实际运行时不需要执行或者有其他原因。
Suwind
这是一个名为
suwind
的程序,用于根据关键词窗口化地震数据。以下是对代码的逐行分析:- 第1行到第5行是版权声明和引入头文件。
- 第9行到第52行是程序的自述文档。
- 第54行声明了一个名为
tr
的segy
结构体,用于存储地震数据的道头信息和道数据。
- 第56行到第60行是
main
函数的定义。
- 第61行到第67行定义了一些变量,并初始化了一些参数。
- 第70行到第74行打开输入文件,如果没有指定输入文件,则使用标准输入。
- 第75行到第78行判断输入数据是否是地震数据。
- 第79行到第88行获取用户输入的参数,并设置默认值。
- 第91行到第95行根据输入数据的类型获取时间采样间隔和第一个采样点的值。
- 第97行到第107行获取用户输入的时间窗口参数,并计算相关的时间采样点和采样个数。
- 第112行到第123行检查用户输入的参数是否合法。
- 第126行到第131行计算需要填充的零值个数和指针。
- 第134行和第135行获取关键词的类型和索引。
- 第138行到第157行获取拒绝(reject)和接受(accept)的关键词值。
- 第160行到第165行检查用户输入的参数是否合法。
- 第168行到第172行根据用户输入的参数输出相关的信息。
- 第174行调用
initargs
函数初始化参数。
- 第175行调用
requestdoc
函数显示自述文档。
- 第178行到第182行判断输入数据是否是地震数据,并获取时间采样间隔和第一个采样点的值。
- 第186行和第187行检查是否需要跳过部分数据。
- 第189行调用
gettr
函数获取第一道地震数据。
- 第192行到第200行获取第一道地震数据的采样点个数,并根据用户输入的参数计算时间窗口的相关值。
- 第205行到第213行根据关键词的类型和索引,判断当前道是否满足窗口条件。
- 第215行和第216行检查是否需要跳过该道数据。
- 第219行到第224行根据关键词的值判断是否拒绝(reject)该道数据。
- 第226行到第234行根据关键词的值判断是否接受(accept)该道数据。
- 第236行到第246行将满足窗口条件的道数据写入输出。
- 第250行到第255行释放内存并关闭文件。
以上是对代码的简要分析。
suwind
程序的主要功能是根据用户指定的关键词对地震数据进行窗口化处理。suvelan
- /src/su/main/velocity_analysis
这段代码是用于计算CDP(Common Depth Point)叠加速度相似性的程序。以下是对代码中的主要步骤和相关说明:
- 导入必要的头文件和结构体:代码中包含了"su.h"和"segy.h"头文件,其中定义了与数据处理和地震道相关的结构体。
- 解析命令行参数:使用getpar函数解析命令行输入的可选参数,如速度采样数量、采样间隔、初始速度等。
- 获取输入参数和数据:通过gettr函数获取第一条地震道数据的参数,如采样点数、采样间隔、起始时间等,并将数据存储在data数组中。
- 设置输出参数:根据输入参数和数据设置输出地震道的参数,包括采样点数、采样间隔等。
- 进行速度循环:根据给定的速度范围和采样间隔,循环计算每个速度下的叠加速度相似性。
- 计算偏移/速度平方:根据地震道的偏移和当前速度,计算偏移/速度平方。
- 计算NMO(Normal Moveout):使用快速且简单的线性插值方法计算NMO,即根据偏移/速度平方对地震道进行时间拉伸。
- 累积相似性的分子和分母:对于每个速度下的NMO后的地震道,将其分别累积到相似性的分子和分母中。
- 输出相似性结果:对于每个速度,根据累积的相似性分子和分母计算相似性,并将结果存储在sem数组中。
- 对相似性进行幂运算:根据给定的幂参数,对相似性进行幂运算。
- 输出结果:将计算得到的相似性结果写入输出地震道的数据部分。
- 清空累积器:在处理下一个速度之前,将相似性分子和分母的累积器清零。
- 循环处理下一个速度:继续循环处理下一个速度,直到覆盖所有速度范围。
- 重复步骤5至13,直到处理完所有的地震道数据。
需要注意的是,该代码的主要功能是计算CDP叠加速度相似性,并将结果输出到地震道数据中。其中涉及了NMO处理、相似性计算和输出结果等步骤。具体的实现细节和参数设置可以通过命令行参数来调整和配置。
velan
这段脚本是一个用于CMP道集速度分析的Shell脚本。下面对脚本的主要部分进行解析:
- 设置参数:
velpanel
:速度分析的CMP道集数据文件名。vpicks
:保存速度分析结果的文件名。normpow
:规范化幂次,用于校正振幅。slowness
:慢度,用于速度分析。cdpmin
、cdpmax
、dcdp
:CMP道集的起始号、结束号和步长。fold
:叠加折叠道数。
- 设置速度采样和带通滤波器:
nv
:速度采样点数。dv
:速度采样间隔。fv
:速度采样起始值。f1
、f2
、f3
、f4
:带通滤波器的频率参数。
- 获取文件的头部信息:
nout
:采样点数。dt
:采样间隔。dxout
:时间单位转换为秒。
- 执行速度分析:
- 使用循环对每个CMP道集进行速度分析。
suwind
命令根据CDP范围选择CMP道集。sugain
命令进行增益校正。sufilter
命令进行带通滤波。suvelan
命令进行速度分析。suximage
命令可视化速度扫描结果。sort
和mkparfile
命令用于生成速度函数。unisam
和xgraph
命令可视化速度函数。
- 合并选择的速度分析结果:
- 通过循环将每个CMP道集的速度分析结果合并到一个文件中。
- 清理临时文件。
该脚本的功能是进行CMP道集的速度分析,并将分析结果保存到文件中。它会对每个CMP道集进行速度分析,通过交互方式选择并保存速度分析结果,并将所有选择结果合并到一个文件中。
echo "tracl=$tracl" >> par.$cdp echo "tracr=$tracr" >> par.$cdp echo "offset=$offset" >> par.$cdp
sucontour
这段代码是一个Seismic UNIX(SU)程序,名为"SUXCONTOUR"。它用于绘制地震数据的等值线图,通过调用矢量绘图程序"xcontour"实现。
代码中的主要部分是
main
函数,它包含了程序的主要逻辑。下面是对代码的详细分析:main
函数开始处定义了一些全局变量和函数原型,以及一些自文档字符串。
- 在
main
函数中,首先对程序的输入参数进行处理,包括从命令行获取各种参数、初始化一些变量等。
- 接下来,根据获取到的参数,设置绘图所需的一些参数,如采样间隔、起始位置等。
- 如果用户提供了
key
参数,则从地震数据的头部字段中获取相应的值作为x2坐标,这样可以绘制非等间距的地震道。否则,默认情况下,程序会以等间距的方式处理地震道。
- 接下来,根据用户提供的
tmpdir
参数或系统环境变量中的CWP_TMPDIR
值,确定存储临时文件的目录路径。
- 然后,程序根据是否已知地震道数目(通过命令行参数或数据头部字段),以及地震道是否非等间距,来决定如何读取和存储地震道数据。
- 如果地震道数目未知或地震道是非等间距的,则将地震道数据存储在临时文件中,并将地震道数据逐个发送到绘图程序。
- 如果地震道数目已知且地震道是等间距的,则直接发送地震道数据到绘图程序。
- 最后,通过调用绘图程序
xcontour
,将临时存储的地震道数据发送到该程序进行绘图。
综上所述,这段代码实现了通过调用绘图程序
xcontour
绘制地震数据的等值线图的功能,并提供了一些参数选项来控制绘图的方式和结果。xcontour
- /src/xplot/lib
这段代码是一个用于绘制二维数组轮廓图的函数。它使用X Window System库来实现绘图功能。以下是对代码的分析:
该函数的输入参数包括:
dpy
:显示器句柄
win
:窗口句柄
gcc
:轮廓线的图形上下文
gcl
:轮廓标签的图形上下文
cp
:指向轮廓值的指针
nx
:x坐标数组的长度
x
:x坐标数组
ny
:y坐标数组的长度
y
:y坐标数组
z
:二维数组的值
lcflag
:轮廓标签的标志
lcf
:轮廓标签的字体名称
lcc
:轮廓标签的颜色
w
:用于控制轮廓标签显示范围的数组
nplaces
:保留小数位数
代码的主要思路是使用线性插值对给定的二维数组进行轮廓描绘。具体步骤如下:
- 根据输入的坐标数组,确定绘图区域的边界范围。
- 根据轮廓值与二维数组的值之间的关系,确定轮廓线与二维数组的交点,并将这些交点用特殊的位标记起来。
- 遍历数组,找到轮廓线与边界的交点,并沿轮廓线绘制出整个轮廓图。
- 根据轮廓标签的标志和控制数组,对轮廓线进行标记和标签绘制。
需要注意的是,该代码中使用了X Window System库的相关函数来绘制图形和文本。具体的绘图操作是通过调用
XDrawLine
和XQueryTextExtents
等函数来实现的。这段代码的作者是Morten Wendell Pedersen和Dave Hale,基于先前的psContour代码进行了修改和改进,并加入了轮廓标签的功能。
请注意,这只是对代码的粗略分析,具体的细节可能需要进一步的阅读和理解。
suximage
- /src/su/graphics/xplot
suximage < modeldata perc=99 legend=1 f1=0 f2=0 d2=tr.d2 d1=tr.d1 title="test_su" cmap=rgb1 &
- prec 控制成图数据范围的百分比参数,越小越清晰,但细节稍差,用鼠标点击图形,按R或H变换显示图形的色谱
- f1、f2、d1、d2定义坐标起始点和刻度点间距
suximage < modeldata legend=1 d2=tr.d2 d1=tr.d1 title="test_su" cmap=rgb1 &
该代码是一个用于在X窗口中绘制SEGY数据集的图像的程序。它使用C语言编写,主要调用了CWP库和ximage程序进行图像绘制。
代码的主要流程如下:
- 包含了一些头文件,包括"su.h"和"segy.h"。
- 定义了一些全局变量和静态函数。
- 实现了一个主函数
main
,用于解析命令行参数、读取SEGY数据和调用ximage程序进行图像绘制。
- 在主函数中,首先根据命令行参数获取绘图所需的一些参数,如数据文件名、采样率、采样点范围等。
- 然后根据参数打开输入的SEGY数据文件,并读取第一道数据,获取数据的一些信息,如采样点数、道数等。
- 根据命令行参数和数据信息,确定绘图所需的参数,如快速维度采样间隔、慢速维度采样间隔、快速维度起始位置、慢速维度起始位置等。
- 根据是否提供了绘图的区间和步长参数,决定是直接读取数据进行绘图,还是先统计数据的道数再进行绘图。
- 绘图使用了ximage程序,通过构建一个系统命令字符串
plotcmd
,使用popen
函数调用ximage进行图像绘制。
- 最后关闭文件和释放内存。
需要注意的是,该代码是根据Colorado School of Mines的版权进行编写的,用于绘制SEGY数据集的图像。
#include "su.h" #include "segy.h" #include <signal.h> static void closefiles(void); /* Globals (so can trap signal) defining temporary disk files */ char tracefile[BUFSIZ]; /* filename for trace storage file */ FILE *tracefp; /* fp for trace storage file */ segy tr; int main(int argc, char **argv) { char plotcmd[BUFSIZ]; /* build ximage command for popen */ float *trbuf; /* trace buffer */ FILE *plotfp; /* fp for plot data */ int nt; /* number of samples on trace */ int ntr; /* number of traces */ int verbose; /* verbose flag */ float d1; /* time/depth sample rate */ float d2; /* trace/dx sample rate */ float f1; /* tmin/zmin */ float f2; /* tracemin/xmin */ cwp_Bool seismic; /* is this seismic data? */ cwp_Bool have_ntr=cwp_false;/* is ntr known from header or user?*/ char *tmpdir; /* directory path for tmp files */ cwp_Bool istmpdir=cwp_false;/* true for user given path */ char *infile=NULL; /* dataset file name */ FILE *infp=stdin; /* input SU dataset to be viewed */ int dtr,ftr,ntraces,nseek,jtr; /* work variables */ char *cwproot=NULL; /* value of CWPROOT environment variable*/ char *bindir; /* directory path for tmp files */ cwp_String skey=NULL, stype=NULL ; /* trace annotation */ Value val1 ; /* trace annotation */ cwp_Bool akey = 0 ; /* trace annotation */ /* Initialize */ initargs(argc, argv); requestdoc(1); /* ZM: begin: get the line number, trace number type of control parameters for plotting */ if (!getparint("ftr", &ftr)) ftr=1; /* using fortran convention */ if (!getparint("dtr", &dtr)) dtr=1; if (ftr==0) ftr=1; /* for C-people like me */ ftr--; /* convert to C convention */ if (ftr<0) err("First trace to be plotted ftr=%d must be positive",ftr); if (dtr<=0) err("Trace increment dtr=%d must be positive",dtr); if (ftr<0) err("ftr=%d must not be negative",ftr); if (!getparstring("infile",&infile)) { /* default is stdin */ infile=NULL; infp=stdin; } else /* must provide a valid dataset name */ if ((infp=fopen(infile, "r"))==NULL) err("Can not open %s to plot",infile); /* ZM: end: get the line number, trace number type of control parameters for plotting */ /* Get info from first trace */ if (!fgettr(infp,&tr)) err("can't get first trace"); seismic = ISSEISMIC(tr.trid); nt = tr.ns; ntr = tr.ntr; if (ntr) have_ntr = cwp_true; if (!getparint("verbose", &verbose)) verbose=0; if (!getparfloat("d1", &d1)) { if (tr.d1) d1 = tr.d1; else if (tr.dt) d1 = ((double) tr.dt)/1000000.0; else { if (seismic) { d1 = 0.004; warn("tr.dt not set, assuming dt=0.004"); } else { /* non-seismic data */ d1 = 1.0; warn("tr.d1 not set, assuming d1=1.0"); } } } if (fabs(d1)<=0.1E-20) d1=1.0; if (!getparstring("key", &skey)) { akey = 0 ; skey = "" ; } else { akey = 1 ; gethdval(&tr, skey, &val1) ; stype = hdtype(skey) ; } if (!getparfloat("d2", &d2)) d2 = (tr.d2) ? tr.d2 : 1.0; if (fabs(d2)<=0.1E-20) d2=1.0; if (!getparfloat("f1", &f1)) { if (tr.f1) f1 = tr.f1; else if (tr.delrt) f1 = (float) tr.delrt/1000.0; else f1 = 0.0; } if (!getparfloat("f2", &f2)) { if (tr.f2) f2 = tr.f2; else if (akey) f2 = vtof(stype,val1) ; else if (tr.tracr) f2 = (float) tr.tracr; else if (tr.tracl) f2 = (float) tr.tracl; else if (seismic) f2 = 1.0; else f2 = 0.0; } /* Look for user-supplied tmpdir */ if (!getparstring("tmpdir",&tmpdir) && !(tmpdir = getenv("CWP_TMPDIR"))) tmpdir=""; if (!STREQ(tmpdir, "") && access(tmpdir, WRITE_OK)) err("you can't write in %s (or it doesn't exist)", tmpdir); /* See if CWPBIN environment variable is not set */ if (!(bindir = getenv("CWPBIN"))) { /* construct bindir from CWPROOT */ bindir = (char *) emalloc(BUFSIZ); /* Get value of CWPROOT environment variable */ if (!(cwproot = getenv("CWPROOT"))) cwproot ="" ; if (STREQ(cwproot, "")) { warn("CWPROOT environment variable is not set! "); err("Set CWPROOT in shell environment as per instructions in CWP/SU Installation README files"); } /* then bindir = $CWPROOT/bin */ /* sprintf(bindir, "%s/bin", cwproot); */ } /* strcat(bindir,"/"); */ /* put / at the end of bindir */ /* Allocate trace buffer */ trbuf = ealloc1float(nt); /* ZM: begin: get n2 by random access */ /* Get or set ntr */ if (getparint("n2", &ntr) || getparint("ntr", &ntr)) have_ntr = cwp_true; else if (infp!=stdin) { /* ZM */ if (efseeko(infp,(off_t) 0,SEEK_END)==-1) err("input file size unknown; specify n2\n"); if (verbose) warn("eftello(infp)=%ld",eftello(infp)); ntraces = (int) (eftello(infp)/((nt+60)*FSIZE)); if (verbose) warn("There are ntraces=%d in the dataset",ntraces); if (ftr>=ntraces) err("First trace pass End of File: ftr=%d ntraces=%d",ftr,ntraces); ntr = (int) ((ntraces-1-ftr)/dtr); if (verbose) warn("Number of traces to be plotted",ntr); /* efseeko(infp,(off_t)0,SEEK_SET); */ have_ntr = cwp_true; } /* ZM: end: get n2 by random access */ if (!have_ntr) { /* count traces */ if (verbose) { warn("n2 not getparred and ntr header field not set"); warn(".... counting traces"); } /* Create temporary "file" to hold data */ if (STREQ(tmpdir,"")) { tracefp = etmpfile(); if (verbose) warn("using tmpfile() call"); } else { /* user-supplied tmpdir */ char directory[BUFSIZ]; strcpy(directory, tmpdir); strcpy(tracefile, temporary_filename(directory)); /* Handle user interrupts */ signal(SIGINT, (void (*) (int)) closefiles); signal(SIGQUIT, (void (*) (int)) closefiles); signal(SIGHUP, (void (*) (int)) closefiles); signal(SIGTERM, (void (*) (int)) closefiles); tracefp = efopen(tracefile, "w+"); istmpdir=cwp_true; if (verbose) warn("putting temporary files in %s", directory); } /* Loop over input data and read to temporary file */ ntr = 0; do { ++ntr; efwrite(tr.data, FSIZE, nt, tracefp); } while (fgettr(infp,&tr)); } /* Set up ximage command line */ if (verbose) { fprintf(stderr, "%s/bin/ximage n1=%d n2=%d d1=%f d2=%f f1=%f f2=%f", cwproot, nt, ntr, d1, d2, f1, f2); } sprintf(plotcmd, "%s/bin/ximage n1=%d n2=%d d1=%f d2=%f f1=%f f2=%f verbose=%d ", cwproot, nt, ntr, d1, d2, f1, f2, verbose); for (--argc, ++argv; argc; --argc, ++argv) { if (strncmp(*argv, "d1=", 3) && /* skip those already set */ strncmp(*argv, "d2=", 3) && strncmp(*argv, "f1=", 3) && strncmp(*argv, "verbose=", 8) && strncmp(*argv, "n1=", 3) && strncmp(*argv, "n2=", 3) && strncmp(*argv, "f2=", 3)) { strcat(plotcmd, " "); /* put a space between args */ strcat(plotcmd, "\""); /* user quotes are stripped */ strcat(plotcmd, *argv); /* add the arg */ strcat(plotcmd, "\""); /* user quotes are stripped */ } } /* Open pipe to ximage and send the traces */ plotfp = epopen(plotcmd, "w"); if (!have_ntr) { /* send out stored traces one by one by sequential access*/ rewind(tracefp); { register int itr; for (itr = 0; itr < ntr; ++itr) { efread (trbuf, FSIZE, nt, tracefp); if (itr>=ftr && (itr-ftr)/dtr*dtr==(itr-ftr)) efwrite(trbuf, FSIZE, nt, plotfp); } } } else { /* ZM: just pump out traces and let ximage do the work by random access */ for (jtr=0;jtr<ntr;jtr++) { nseek = (off_t)(60+nt)*(ftr+jtr*dtr); efseeko(infp,nseek*((off_t) FSIZE),SEEK_SET); if (!fgettr(infp,&tr)) break; efwrite(tr.data, FSIZE, nt, plotfp); } /* ZM: end: reading by random access */ } /* Clean up */ epclose(plotfp); if (!have_ntr) { efclose(tracefp); if (istmpdir) eremove(tracefile); } else efclose(infp); return EXIT_SUCCESS; } /* for graceful interrupt termination */ static void closefiles(void) { efclose(tracefp); eremove(tracefile); exit(EXIT_FAILURE); }
Xdata
这段代码是一个Shell脚本,用于在Unix或Linux环境下执行一系列命令。以下是对代码和命令的分析:
#! /bin/sh
:这是Shebang行,指定要在脚本中使用的解释器,这里使用的是/bin/sh。
WIDTH=300
:设置变量WIDTH
的值为300。
WIDTHOFF=315
:设置变量WIDTHOFF
的值为315。
HEIGHT=400
:设置变量HEIGHT
的值为400。
HEIGHTOFF=50
:设置变量HEIGHTOFF
的值为50。
- 注释部分:以
#
开头的行是注释,用于提供对代码功能的说明。这些行是关于绘制整个数据集的代码,但在此处没有显示。
suwind <modeldata key=sx s=1400 j=250 |
:这是一个命令,使用suwind
工具从modeldata
文件中选择特定的数据。key=sx
表示使用sx
键作为选择的依据,s=1400
表示起始位置为1400,j=250
表示步长为250。通过管道(|
)将该命令的输出传递给下一个命令。
sugain tpow=2 gpow=0.5 |
:这是另一个命令,使用sugain
工具对数据进行增益处理。tpow=2
表示时间增益的指数为2,gpow=0.5
表示振幅增益的指数为0.5。同样,通过管道将输出传递给下一个命令。
suximage label1="Time" label2="Gather" ...
:这是一个命令,使用suximage
工具绘制图像。它指定了标签和标题,设置了轴的参数(f2
、d2
、f2num
、d2num
),并且使用了框的参数(wbox
、hbox
、xbox
、ybox
)。通过&
符号将命令放入后台运行。
exit
:脚本的最后一行,用于退出脚本的执行。
总体而言,这段代码是在绘制图像之前,对数据进行了选择和增益处理。然后使用
suximage
工具绘制图像,显示了每五个shot record的振幅数据。绘图使用了一些参数来调整图像的外观,例如图像的大小、偏移等。Xnmo
这段代码是一个Shell脚本,用于在Unix或Linux环境下执行一系列命令。以下是对代码和命令的分析:
#! /bin/sh
:Shebang行,指定脚本使用的解释器为/bin/sh。
- 注释部分:以
#
开头的行是注释,用于提供对代码功能的说明。
WIDTH=300
:设置变量WIDTH
的值为300。
WIDTHOFF3=630
:设置变量WIDTHOFF3
的值为630。
WIDTHOFF4=945
:设置变量WIDTHOFF4
的值为945。
HEIGHT=400
:设置变量HEIGHT
的值为400。
HEIGHTOFF=50
:设置变量HEIGHTOFF
的值为50。
sunmo <modeldata par=stkvel.p >nmodata
:这是一个命令,使用sunmo
工具对modeldata
文件进行NMO(Normal Moveout)处理,并将结果输出到nmodata
文件中。
suwind <nmodata key=sx s=1400 j=250 |
:这是一个命令,使用suwind
工具从nmodata
文件中选择特定的数据。key=sx
表示使用sx
键作为选择的依据,s=1400
表示起始位置为1400,j=250
表示步长为250。通过管道将该命令的输出传递给下一个命令。
sugain tpow=2 gpow=0.5 |
:这是另一个命令,使用sugain
工具对数据进行增益处理。tpow=2
表示时间增益的指数为2,gpow=0.5
表示振幅增益的指数为0.5。同样,通过管道将输出传递给下一个命令。
suximage label1="Time" label2="Gather" ...
:这是一个命令,使用suximage
工具绘制图像。它指定了标签和标题,设置了轴的参数(f2
、d2
、f2num
、d2num
),并且使用了框的参数(wbox
、hbox
、xbox
、ybox
)。通过&
符号将命令放入后台运行。
susort <nmodata |
:这是一个命令,使用susort
工具对nmodata
文件进行排序。通过管道将输出传递给下一个命令。
sustack normpow=1.0 >stackdata
:这是一个命令,使用sustack
工具对数据进行叠加。normpow=1.0
表示叠加时使用的归一化幂值。将结果输出到stackdata
文件中。
sugain <stackdata tpow=2 gpow=0.5 |
:这是另一个命令,使用sugain
工具
SUXcontour
这段代码是一个Seismic UNIX(SU)的程序,名为"SUXCONTOUR",用于通过矢量图调用绘制程序xcontour,绘制地震数据的轮廓图。以下是代码的分析:
- 代码包含一些头文件包含和全局变量的定义,以及一个用于关闭文件的函数。
- 主函数main()是程序的入口点。
- 程序通过解析命令行参数获取绘图所需的信息,例如数据文件的采样率、采样点数量、数据文件中的首个采样点位置等。
- 程序会创建一个临时文件来存储数据,并将数据写入该文件。
- 如果数据文件中的采样点位置不是等间隔的,程序将从文件头信息中获取x2(通常是距离)的值,以便绘制不等间距的轮廓图。
- 程序会构建一个xcontour命令,并通过管道将数据发送给xcontour程序进行绘图。
该程序是一个辅助工具,用于通过调用xcontour绘制地震数据的轮廓图。xcontour是一个地震数据处理和绘图程序,用于生成地震数据的轮廓图,以便更好地理解地震数据的空间分布特征。
请注意,该代码片段可能是完整程序的一部分,缺少了一些定义和实现的部分,因此无法准确判断程序的完整功能和用途。如果需要更详细的分析和理解,请提供完整的代码或更多相关信息。
XContour
- /src/xplot/lib
该代码是用C语言编写的一个绘制二维数组轮廓的函数xContour。它使用X向量绘图调用来绘制轮廓。以下是对代码和命令的分析:
- 代码中的注释提供了关于代码的详细信息,包括功能、输入、说明和参考文献等。注释提到该代码是在Colorado School of Mines开发的基础上修改的版本。
- 代码包含了一些宏定义和函数定义。宏定义定义了一些位掩码操作和辅助计算的宏。函数定义包括了一些内部函数的前向声明,以及主函数xContour的定义。
- xContour函数的输入参数包括Display *dpy、Window win、GC gcc、GC gcl等用于X绘图的参数,以及一些数组和标志参数等。
- xContour函数的主要功能是绘制二维数组的轮廓。它首先根据输入的x和y坐标数组确定绘图区域的边界。然后根据轮廓值和数组z中的数据,计算数组z在绘图区域内的轮廓线的交点,并使用X向量绘图调用连接这些交点,形成轮廓线。同时,根据标志参数lcflag的设置,可以选择是否绘制轮廓线的标签。
- 代码中的connect函数用于连接轮廓线的交点,实现轮廓线的绘制。
- 代码中的labelc函数用于绘制轮廓线的标签,即轮廓值的文本标注。
- 代码中的wcell函数用于限制轮廓线标签的绘制范围。
总体而言,该代码通过使用X向量绘图调用,实现了绘制二维数组轮廓的功能,并可以选择性地添加轮廓线的标签。
suxmovie
suxmovie < modeldata1 n2=32 loop=2
显示裸数据.bin文件
裸数据的命令参数跟SU数据显示参数几乎一致,只是裸数据必须提供n1,就是采样点个数
sustrip < modeldata.su head=head.bin> modeldata.bin sustrip < modeldata1 > modeldata.bin sustrip < modeldata1 head=head.bin> modeldata.bin
生成一个header文件和.bin文件
等值线方式绘制地震记录
xcontour < modeldata.bin n1=750
阴影图方式绘制地震记录
ximage < modeldata.bin n1=750
变面积方式绘制地震记录
xwigb < modeldata.bin n1=750
曲线方式绘制地震记录
xgraph < modeldata.bin n1=750
ximage <data.su> bclip=0.2 wclip=0.0 \ box1=10,20,50,100 color1=red \ box2=30,400,50,100 color2=red
ximage <data.su> bclip=0.2 wclip=0.0 \ -box1 100,200,500,1000 -boxcolor1 255,0,0 \ -box2 300,400,500,1000 -boxcolor2 255,0,0