SU使用笔记刘卫华第一章帮助工具1.suhelp显示可执行的程序和Shell脚本。2.suname列出SU中各项命令的名字和简短描述,以及编码的地址。3.sudoc得到编码的DOC列表,列出SU中各条目的在线文档。4.sufind在自述文档中得到信息,使用给定的字符串查找SU命令。5.Demo演示程序:SU软件包中有一套Shell脚本演示程序,放在目录$CWPROOT/src/demos下。$CWPROOT/src/demos/README文件是这些演示程序的说明书。MakingData演示程序显示使用susynlv程序制作合成记录炮集和共偏移距道集的基础内容。应当特别注意演示中好的标注风格。Filter/Sufilter使用实际数据处理例子演示说明消除地滚波和初至。Deconvolution使用supef和其它工具简单合成脉冲道集来实例说明去混响和脉冲反褶积处理。演示程序包括使用loops系统检验滤波参数影响的命令。6.sukeyword列出SU道头中的关键字sukeyword–o7.SU基本用法是通过创建Shell脚本来实现相应的数据处理。su/examples目录下有很多这样的例子。第二章核心SU程序一、从磁带上读写数据下面的程序对于地球物理应用中特定的数据输入和输出任务是有用的,对内部SU数据格式也一样。BHEDTOPAR–把二进制磁带HEaDer文件转换成PAR文件格式DT1TOSU–把Sensors&SoftwareX.dtlGPR的地质雷达数据转成SU格式SEGDREAD–读取SEG-D磁带SEGYCLEAN-zerooutunassignedportionofheaderSEGYREAD–读SEG-Y磁带SEGYHDRS–为segywrite构造SEG-Y文件的ascii和二进制头文件SEGYWRITE–写SEG-Y磁带SETBHED-设置一个SEGY二进制磁带HEaDer文件的道头字SUADDHEAD–为裸道加上头文件并设置tracl和ns道头字SUSTRIP–从道中去掉SEGY头文件SUPASTE–为已存在的数据加上已存在的SEGY头文件下面的程序可以用于一般的数据输入,输出和数据格式转换,在磁带读写中也可以使用。A2B–把asciifloat转成二进制B2A-把二进制float转成asciiFTNSTRIP–把Fortran的float转成C格式的floatH2B-convert8bithexidecimalfloatstobinaryRECAST–改变数据类型(从一种数据类型转到另一种)TRANSP–转置一个n1×n2个元素的矩阵1.SEGY格式和SU数据格式SEGY数据格式包括三个部分。第一个部分是3200字节的EBCDIC卡片,包括40个卡片(等于每行包含80个字符的40行文本),用来磁带。第二个部分时400个字节的二进制头文件,含有磁带卷内容的信息。SEGY格式的第三个部分是真正的地震道数据。每道有240个字节的道头文件。接下来,是32位的IBM浮点型数据(在IBMFormGA22-6821中定义)。注意,IBM格式和现代IBMPC上所用的IEEE格式是不同的。SU数据格式是基于SEGY格式的道部分。SEGY道和SU道的主要不同在于SU格式的道数据是浮点型,是和你运行SU程序的计算机上的浮点格式一致的。SU数据只含有SEGY的道部分!SU格式中不保存EBCDIC和二进制卷头,所以无法在任何SU程序中直接使用SEGY文件。为了把SEGY数据转成SU程序所用的格式,需要使用segyread。2.SEGYREAD将SEGY数据读入SU程序segyread用来把数据从SEGY格式转成SU格式。当读取SEGY磁带或数据文件时,你需要知道你所使用的机器的byte-order(endian)。SGI,SUN,IBMRS6000使用的是所谓“big-endian”或high-byteIEEE格式,而基于Intel和Dec芯片的系统用的是“little-endian”或low-byte。在big-endian机器上运行segyread的典型方式如下所示:segyreadtape=/dev/rmt0verbose=1endian=1data.su更经常使用的是如下的格式来为big-endian平台读入数据:segyreadtape=/dev/rmt0verbose=1endian=1|segycleandata.su在SEGY道头里有可选的道头字(字节181-240)。这些道头字的使用没有标准,所以很多人按自己的需要来填写。SU也不例外。有几个SU图形程序使用的参数存储在这些道头字里。程序segyclean会把可选道头字里容易让SU图形程序产生误解的参数清零。糟糕的是有很多号称SEGY格式,但却不符合SEG的标准SEGY格式。最常见的情况就是为了方便,道部分是用IEEE格式。这种IEEE格式数据可用下面的命令来读取:segyreadtape=/dev/rmt0verbose=1endian=1conv=0|segycleandata.su这里conv=0是告诉程序不进行IBM型到float浮点型的转换。还有DOSSEGY格式,基本与前面相同,除了他的道和头都是用little-endian格式写的。如果用big-endian机器来读的话用下面的命令:segyreadtape=/dev/rmt0verbose=1endian=0conv=0|segycleandata.su注意:endian=0是设置交换字节(所有的字节,头和数据都是交换格式)。在little-endian机器上,程序是:segyreadtape=/dev/rmt0verbose=1endian=1conv=0|segycleandata.suendian=1会阻止交换字节。不管哪种情况,如果我们的磁盘文件名为“filename”,那么应该使用“tape=filename”参数。3.SEGYWRITE写SEGY格式的磁带或磁盘文件与segyread相对应的命令是segywrite。这个程序可以将SEGY格式按多种不同的方式把数据写到磁带或磁盘文件。该程序可用于把数据写成商业软件可以使用的形式。在学习如何使用segywrite命令之前,有几个需要的准备步骤必须要讨论一下。4.SEGYHDRS–为segywrite准备ascii和二进制头文件。要写一个符合SEG数字磁带标准的SEGY格式,你需要提供ASCII和二进制的卷头文件,在SEGY磁带或文件里会变成EBCDIC和二进制的卷头文件。也就是segywrite创建文件时需要有header部分和binary部分。如果你没有binary和header文件,你必须用程序sgyhdrs(创建SEGY文件)来创建它们。命令:segyhdrsdata.su会在当前工作目录下写header和binary文件。举例来说:利用suplane来做一个文件然后对它使用segyhdrs:suplanedata.susegyhdrsdata.su你会看到binary和header文件出现在当前工作目录下。这个命令带有选项,允许你设置binaryheaderfields的值。这些字可以用如下的方式看到:sukeywordjobid文件header是一个ASCII文件,可以用正常的文本编辑器来编辑。可以放任意内容,只有格式是每行80个字符的40行。Segywrite会自动把segyhdrs产生的缺省头文件转成下面的格式:CThistapewasmadeattheCCCenterforWavePhenomenaCColoradoSchoolofMinesCGolden,CO,80401C...CC5.BHEDTOPAR,SETBHED–编辑二进制头文件要编辑二进制头文件,首先要转成ASCII格式。程序bhedtopar允许把binary文件写成“parfile”的格式:bhedtoparbinaryoutpar=binary.par可以编辑产生的ASCII码文件“binary.par”进行修改,然后通过setbhed来重新读入:setbhedbfile=binaypar=binary.par也可以单独设置头文件字。例如:setbhedbfile=binarypar=binary.parlino=3使用了binary.par的内容,但是lino单独设为3。最后,可以通过下面的命令来写磁带:segywritetape=/dev/rmtxverbose=1data.su注意header文件和binary文件是在当前目录下的。你也可以使用你自己的文件名。Segywrite的选项bfile=和hfile=用来输入你指定的文件名。二、数据格式转换经常需要把来自其它系统或不同格式的输入数据进行转换。在SU里有很多工具和方法处理这些问题。下面的程序就是用来处理这种转换的问题:A2B–把ascii浮点型转换成二进制B2A-把二进制转换成ascii浮点型FTNSTRIP–把Fortranfloats转成C-stylefloatsFTNUNSTRIP–把C-stylefloats转换成Fortran-stylefloatsH2B–把8bithexidecimalfloatstobinaryRECAST–改变数据类型(从一种数据类型转到另一种)TRANSP–转置一个n1×n2的矩阵1.A2B和B2A-ASCIItoBinary,BinarytoASCII在所有的数据格式中,ASCII是最常传送的(也是最耗空间的)。不管你使用什么系统,都可能需要把ASCII转来或转去。而且,因为文本编辑器支持ASCII,因此经常可能要用文本编辑器来做数据输入或编辑。这种格式大都是多行格式,用空格或tab来隔开。要转换一个例如5行的数据到二进制,键入:a2bdata.asciin1=5data.binary相反的操作就是:b2adata.binaryn1=5data.ascii2.FTNSTRIP–把Fortran数据转换成C语言格式Fortran在地震数据处理中是比较流行的语言,因此常常需要处理Fortran创建或处理过的数据。Fortan的二进制数据是被beginning-of-record和end-of-record分隔符隔开的。而C程序创建的二进制数据没有这些分隔符。要在C程序中使用Fortran数据需要去掉这些Fortran标签,通过:ftnstripfortdatacdata3.RECAST–改变数据类型(从一种数据类型转到另一种)float浮点型,double双精度,int(带符号)整型,char字符,uchar无符号字符,short短整型,long长整型,ulong无符号长整型例如,把整型转换成浮点型:recastdata.intsin=intout=floatdata.floats4.TRANSP–转置一个n1×n2个元素的矩阵5.Farith-对二进制数据作简单的算术运算很多时候需要对文件做算术操作,或者在两个二进制数据文件之间。程序farith用来完成许多类似的任务.Farith对单个文件的操作包括:Scalingvalue(缩放数值)Polarityreversal(极性反转)Signumfunction(正负号函数)absolutevalue(绝对值)exponential(取指数)logarithm(取对数)squareroot(开平方根)square(取平方)inverse(punctuated),(取道数,带小数点)inverseofsquare(punctuated),(取平方倒数,带小数点)inverseofsquareroot(punctuated)(取平方根倒数,带小数点)二元操作(对两个文件的操作)包括addition(加法)subtraction(减法)multiplication(乘法)division(除法)Cartesianproduct笛卡尔乘积:从给定的集合X和Y中构