zoukankan      html  css  js  c++  java
  • su入门帮助

    【转】CWP/SU地震软件使用-1  

    2009-10-12 10:37:37|  分类: 十字路口 |  标签:地震数据处理  su  seismic  unix   |字号 订阅

     
     
    第一章(缺)
    第二章 帮助工具

    就像Unix操作系统一样,Seismic Unix可以看成是一种语言(或者元语言)。像任何语言一样,在能够有效的运用之前,必须要掌握一定量的词汇。因为SU含有很多的程序,所以必须得有个字典似的东西来回答词汇的问题。这个手册的作用就是个初学字典。

    SU不像Uinx一样有man pages,不过它有同等的内部文档。对于代码的特殊方面,程序的主体有一个selfdoc-自述文档,只要在命令行的模式下键入程序名(不带任何参数)。

    下面的工具提供详细程度不等的内部文档,包括主程序、shell scripts以及程序包的库函数。

    SUHELP – 显示CWP/SU的程序和shells

    SUNAME – 显示程序selfdoc的第一行以及源码的位置

    SUDOC – get DOC listing for code

    SUFIND – 从self-docs里得到信息

    GENDOCS

    Suhelp.html-是SU程序的大体信息的HTML

    SUKEYWORD – 对segy.h文件中的SU关键字解释

    这一章就讨论这些工具,希望能使读者学会查找SU的帮助。

    2.1 SUHELP – 显示可执行的程序和Shelll Scripts

    2.2 SUNAME – 显示SU中每一项的名字和简短描述

    比上面的内容要详细。

    2.3 The Selfdoc –程序的自述文档

    每个程序内部都有一段自述文档,当输入命令而不带任何参数就可以在屏幕上显示出来。

    2.4 SUDOC-显示SU中任意项的详细在线文档。

    SU中有一个数据库,包含每个主程序、shell script 和库函数的自述文档。数据库位于$CWPROOT/src/doc目录下。

    因为不是所有selfdocs的条目可执行,因此对这些条目需要额外的操作。例如,要找Abel transform程序,位于$CWPROOT/src/cwp/lib/abel.c,可以通过:

    %sudoc abel

    会出现:

    In /usr/local/cwp/src/cwp/lib:

    ABEL - Functions to compute the discrete ABEL transform:

    abelalloc allocate and return a pointer to an Abel transformer

    ..........

    References:

    Hansen, E. W., 1985, Fast Hankel transform algorithm: IEEE Trans. on

    Acoustics, Speech and Signal Processing, v. ASSP-33, n. 3, p. 666-671.

    (Beware of several errors in the equations in this paper!)

    Authors: Dave Hale and Lydia Deng, Colorado School of Mines, 06/01/90

    可以看到sudoc显示了关于函数的信息,包括名字、用法,以及所用的相关一些理论,出版的参考物和作者的名字。

    总的来说,sudoc列出的内容比selfdoc列出的要多。Selfdoc只是做一个快速的参考,而sudoc可以提供额外的信息,这些并不是每次都要看到的,因为有时只是想简单的知道特定的参数方式。

    2.5 SUFIND – 使用给定的字符串查找SU项

    可以在“doc”数据查找特定的字符串或topics。Shell 脚本sufind就是用来做这个的。如果输入不含任何参数的sufind,就会显示sufind的信息,例如:

    % sufind

    sufind - get info from self-docs about SU programs

    Usage: sufind [-v -n -P<command_pattern>] string

    ("string" can be an "egrep" pattern)

    "sufind string" gives brief synopses

    "sufind -v string" verbose hunt for relevant items

    "sufind -n name_fragment" searches for command name

    "sufind -P<pattern> string"

    gives brief synopses by searching for "string" among

    commands/libraries whose names match the "pattern"

    显示有一些有用的功能可以帮你在SU package查找特定的类型。

    举个例子来说,如果我们要在SU中查找使用Fourier transform算法的程序,可以输入:

    % sufind fft

    FFTLAB - Motif-X based graphical 1D Fourier Transform

    Usage: fftlab

    HANKEL - Functions to compute discrete Hankel transforms

    hankelalloc allocate and return a pointer to a Hankel transformer

    hankelfree free a Hankel transformer

    PFAFFT - Functions to perform Prime Factor (PFA) FFT's, in place

    npfa return valid n for complex-to-complex PFA

    等等一系列的东西。

    2.6 GENDOCS -包含所有Selfdocs的LaTeX文档

    2.7 Suhelp.html-包含suhelp的网页

    2.8 Demos

    SU中包含了一套demos,位于目录$CWPROOT/src/demos下,主要是shell脚本。

    使用方式在$CWPROOT/src/demos/README里面。

    Making_Data demos 显示了如何使用susynlv来制作合成记录(shot gathers 和 common offse sections。Particular attention is paid to illustrating good display labeling.

    Filtering/Suflter演示了去除地滚波和初至波的真实数据处理。Filtering 子目录里给出了如何从CWP ftp上得到数据。

    Deconvolution demo使用简单合成spike道来证明dereverberation和spikeing,使用了supef和其他的工具。演示中包括使用循环系统得检查了滤波器参数的效果。

    Sorting_Traces Tutorial是交互的脚本,需要基本的UNIX和SU知识。

    然后是Seleting_Traces Demo,还有NMO Demo。

    还有其他的demo,你可以找自己感兴趣的。

    2.9 其他的帮助方式

    SUKEYWORD – 很多的SU程序的自述文档里有诸如“key=”的参数,with the reference to “keywords”。SU的keywords是基于SEGY道头的。要找出这些道头和它们在SU中代表的数据类型,输入

    %sukeyword –o

    3.5.3可以找到这个命令的详细使用。很多程序使用了SU 道头,所以sukeyword是个常用的工具。

    SU使用本质上是shell程序指令。Su/examples目录里包含了很多这样的程序。

    Faq文件夹包含了很多关于SU问题的解答,包括磁带的读写,数据格式问题和地震处理的提示。

    John A. Scales写的书Theory of Seismic Imaging可以在我们的ftp上找到pub/samizdat/texts/imaging/imaging_300dpi.ps.Z or imaging_400dpi.ps.Z.,这里面广泛使用了SU。

    你应该毫不犹豫的看源代码。10.2解释了关键的SU编程习惯。

    第三章 核心SU程序

    在很多研究和处理中,有很大一部份任务是基本的原则,而SU程序的核心就是用来完成这些任务。不过有一些是地震方面特有的,我们都在下面的文字中标示出来。

    这些任务包括:

    输入/输入
    数据格式转换
    设置、查看和编辑道头文件
    查看SU数据
    开窗显示、抽道集和编辑数据
    一般操作
    变换和滤波操作
    对SU数据的地震操作
    这一章的内容就是关于上面的事项。需要注意的是我们所讨论的任何程序的详细资料都可以通过在命令行上输入不带参数的程序名而得到。

    %programname

    或者输入

    %sudoc programname

    来看自述文档。

    这一章并不能涵盖所有的SU程序,但也足够帮助一个有一些Unix经验的人来开始软件的学习。当你对SU的使用有一定的认识,你可以使用帮助工具来发现软件包里面的其它程序。

    3.1 从磁带上读写数据

    读取磁带更像是一门艺术而不是科学。这句话普遍适用,特别是对SU。硬件格式的变化,还有磁带数据格式的变化,使得编写一种万能磁带格式读取工具几乎是一项不可能的任务。

    下面的程序对于地球物理应用中特定的数据输入和输出任务是有用的,对内部SU数据格式也一样。

    BHEDTOPAR – 把二进制磁带HEaDer文件转换成PAR文件格式

    DT1TOSU – 把Sensors & Software X.dtl GPR的地质雷达数据转成SU格式

    SEGDREAD – 读取SEG-D磁带

    SEGYCLEAN - zero out unassigned portion of header

    SEGYREAD – 读SEG-Y磁带

    SEGYHDRS – 为segywrite构造SEG-Y文件的ascii和二进制头文件SEGYWRITE –写SEG-Y磁带

    SETBHED - 设置一个SEGY二进制磁带HEaDer文件的道头字

    SUADDHEAD – 为裸道加上头文件并设置tracl和ns道头字

    SUSTRIP – 从道中去掉SEGY头文件

    SUPASTE – 为已存在的数据加上已存在的SEGY头文件

    下面的程序可以用于一般的数据输入,输出和数据格式转换,在磁带读写中也可以使用。

    A2B – 把ascii float转成二进制

    B2A -把二进制float转成ascii

    FTNSTRIP – 把Fortran的float转成C格式的float

    H2B - convert 8 bit hexidecimal oats to binary

    RECAST – 改变数据类型(从一种数据类型转到另一种)

    TRANSP – 转置一个n1×n2个元素的矩阵

    3.1.1 SEGY格式和SU数据格式

    CWP/SU软件包中所有名字以su打头的程序(除了程序subset)所期望的数据格式是:用你机器的二进制格式所写的SEGY道。要明白这句话的意思,必须首先明白什么是SEGY标准。

    在二十世纪80年代早期,最常用的数据存储格式就是SEG-Y。这是SEG出版的数字磁带标准(Digital Tape Standards)中所描述的Society of Exploration Geophysicists Y 格式。这种格式现在还在广泛使用,尽管没人保证书面上也用这种格式。

    SEGY数据格式包括三个部分。第一个部分是3200字节的 EBCDIC卡片,包括40个卡片(等于每行包含80个字符的40行文本),用来磁带。第二个部分时400个字节的二进制头文件,含有磁带卷内容的信息。 SEGY格式的第三个部分是真正的地震道数据。每道有240个字节的道头文件。接下来,是32位的IBM浮点型数据(在IBM Form GA 22-6821中定义)。注意,IBM格式和现代IBM PC上所用的IEEE格式是不同的。

    SU数据格式是基于SEGY格式的道部分。 SEGY道和SU道的主要不同在于SU格式的道数据是浮点型,是和你运行SU程序的计算机上的浮点格式一致的。SU数据只含有SEGY的道部分!SU格式中不保存EBCDIC和二进制卷头,所以无法在任何SU程序中直接使用SEGY文件。

    为了把SEGY数据转成SU程序所用的格式,需要使用segyread。

    3.1.2 SEGYREAD – 将SEG-Y数据读入SU

    程序segyread用来把数据从SEGY格式转成SU格式。如果你输入:

    %segyread

    你会看到这个程序的自述文档。

    当读取SEGY磁带或数据文件时,你需要知道你所使用的机器的byte-order(endian)。SGI,SUN,IBM RS6000使用的是所谓“big-endian”或high-byte IEEE格式,而基于Intel和Dec芯片的系统用的是“little-endian”或low-byte。You will also need to know what Unix device your tape drive is。

    在big-endian机器上运行segyread的典型方式如下所示:

    %segyread tape=/dev/rmt0 verbose=1 endian=1 > data.su

    更经常使用的是如下的格式来为big-endian平台读入数据:

    %segyread tape=/dev/rmt0 verbose=1 endian=1 | segyclean >data.su

    在SEGY道头里有可选的道头字(字节181-240)。这些道头字的内容是没有标准的,所以很多人按自己的需要来填写。SU也不例外。有几个SU图形程序使用的参数存储在这些道头字里。程序segyclean会把可选道头字里容易让SU图形程序产生误解的参数清零。

    此外还有,你的设备是有缓冲(buffered)还是无缓冲(unbufferd)(i.e. 9 track 1/2 reel tape,或者8mm Exabyte)需要实际读取时进行试验。另外,如果你要用一个的系统来读取非它制作的磁带,完全不可能。

    当读磁带时最常见的问题是使得磁带机匹配写磁带时的密度。一些系统,例如Silicon Graphics(SGI)系统,有很多磁带设备,可以支持不同的硬件配置和磁带密度。其他的系统,最值得注意的是新版的linux有一个改进的Unix命令“mt”带着一个“setdensities”选项。在其它的情形,一般是使用磁带机的缺省设置和缺省密度来读写。

    最新的读取磁带都是用Unix的device-to-device拷贝命令程序dd来在硬盘上作整个磁带的镜像。

    %dd if=/dev/rmtx of=filename bs=32767 conv=noerror

    这里用你的tapedrive device 来替换/dev/rmtx,filename是你选的一些文件名。如果这个起作用,下一步就是使用上面的segyread,带tape=filename参数。如果dd失败了,那可能是硬件格式和磁带不兼容。

    当然,要防止磁带读取问题发生最好的办法就是与写磁带的人交流。特别是SGI系统,磁带格式的选项太多了,如果要保证磁带可读,那么写磁带的人在写之前必须要知道这个磁带打算在哪个平台读取。

    3.1.3 不规范的SEG-Y

    糟糕的是有很多号称SEGY但却不符合SEG的标准SEGY格式。最常见的变化就是为了方便,道部分是用IEEE格式。

    这种数据用下面的命令来读取:

    %segyread tape=/dev/rmt0 verbose=1 endian=1 conv=0 | segyclean > data.su

    这里conv=0是告诉程序不进行IBM到float的转换。

    DOS SEGY

    还有DOS SEGY格式,基本与前面相同,除了他的道和头都是用little-endian格式写的。如果用big-endian机器来读的话用下面的命令:

    %segyread tape=/dev/rmt0 verbose=1 endian=0 conv=0 | segyclean > data.su

    注意:endian=0是设置交换字节(所有的字节,头和数据都是交换格式)。在little-endian机器上,程序是:

    %segyread tape=/dev/rmt0 verbose=1 endian=1 conv=0 | segyclean > data.su

    endian=1会阻止交换字节。

    在所有的情况下,如果我们的有filename的磁盘文件,那么使用tape=filename。

    SEISWORKS中的Landmark BCM2D 格式

    商业地震软件是非标准SEGY格式的来源。除了对正式头文件字的非标准使用,还会使用部分可选头文件字。

    Matthias Imhoff of Virginia Tech提供了这个问题的补救措施。在segyread里有remapping方式,可以把非标准的道头字remap到SU头文件中兼容的位置。选项 remap=来制定在SU头文件中的位置,byte=指定在SEGY道头中的字节位置和类型。

    例如对于Landmark BCM2D格式,头文件字73和77时float,但在标准的SEGY里应该是int,所以SU里也是int。BCM2D把181和185设为longs。使用如下的segyread来读:

    %segyread tape=… remap=d1,d2,gelev,selev byte=73f,77f,181l,185l > …

    73和74的float映射到d1和d2,181和185的long integers映射到gelev和selev,在SU中它们是intergers。通过选择一致的头文件保存了精度。

    3.1.4 SEGYWRITE – 写SEGY磁带或磁盘文件

    与segyread相对应的命令是segywrite。这个程序允许利用带点变化的SEGY格式把数据写成磁带或磁盘文件。在把数据写成商业软件可以读写的形式时会非常有用。在学习使用完整的segywrite之前,有几个需要的准备步骤必须要讨论一下。

    3.1.5 SEGYHDRS – 为segywrite准备ascii和二进制头文件。

    要写一个符合SEG数字磁带标准的SEGY格式,你需要提供ASCII和二进制的卷头文件,在SEGY磁带或文件里会变成EBCDIC和二进制的卷头文件。也就是segywrite创建文件时需要有header部分和binary部分。

    如果你没有binary和header文件,你必须用程序sgyhdrs(创建SEG Y文件)来创建它们。命令

    %segyhdrs < data.su

    会在当前工作目录下写header和binary文件。举例来说:利用suplane来做一个文件然后对它使用segyhdrs:

    %suplane > data.su

    %segyhdrs < data.su

    你会看到binary和header文件出现在当前工作目录下。

    这个命令带有选项,允许你设置binary header fields的值。这些字可以用如下的方式看到:

    % sukeyword jobid

    int jobid; /* job identification number */

    int lino; /* line number (only one line per reel) */

    int reno; /* reel number */

    short ntrpr; /* number of data traces per record */

    short nart; /* number of auxiliary traces per record */

    unsigned short hdt; /* sample interval in micro secs for this reel */

    unsigned short dto; /* same for original field recording */

    ……

    jobid是第一个binary header field。

    文件header是一个ASCII文件,可以用正常的文本编辑器来编辑。可以放任意内容,只有格式是每行80个字符的40行。Segywrite会自动把segyhdrs产生的缺省头文件转成下面的格式:

    C This tape was made at the

    C

    C Center for Wave Phenomena

    C Colorado School of Mines

    C Golden, CO, 80401

    C

    ...

    C

    C

    3.1.6 BHEDTOPAR,SETBHED – 编辑二进制头文件

    要编辑二进制头文件,首先要转成ASCII格式。程序bhedtopar允许把binary文件写成parfile的格式:

    %bhedtopar < binary outpar=binary.par

    例如对于上面产生的测试文件会出现下面的内容:

    jobid=1

    lino=1

    reno=1

    ntrpr=0

    nart=0

    hdt=4000

    ...

    这些值可以进行修改,然后通过setbhed来重新读入:

    %setbhed bfile=binay par=binary.par

    也可以单独设置头文件字。例如:

    %setbhed bfile=binary par=binary.par lino=3

    使用了binary.par的内容,但是lino单独设为3。

    最后,可以通过下面的命令来写磁带:

    %segywrite tape=/dev/rmtx verbose=1 < data.su

    注意header文件和binary文件是在当前目录下的。你也可以使用你自己的文件名。Segywrite的选项bfile=和hfile=用来输入你指定的文件名。

    3.1.7 SEGDREAD – 其它的SEG格式

    还有些其它的SEG格式(SEG-A, SEG-B, SEG-X, SEG-C, SEG-D, SEG-1, and SEG-2)。SEG-D, SEG-B, 和 SEG-2可能会经常遇到。只有SEG-D可以用Segdread来读取。

    在目录$CWPROOT/Third Party/有个seg2segy转换程序,可以把SEG-2格式转成SEG-Y。(将来会作seg2read程序)

    3.1.8 DT1TOSU – Non-SEG 磁带格式

    目前,SU只支持一种非SEG格式,还有两种是通过第三方软件来支持的(还未加入软件包)。完全支持的是Sensors & Software DT1格式,通过dt1tosu,这是一种GPR(地质雷达)格式。在$CWPROOT/src/Third Party目录里还有两个额外的非SEG转换程序,segytoseres和bison2su。将来会包含到CWP/SU主程序包里。

    3.2数据格式转换

    经常需要把来自其它系统或不同格式的输入数据进行转换。在SU里有很多工具和方法来做处理这些事情。

    下面的程序就是用来处理这种转换的问题

    A2B – 把ascii浮点型转换成二进制

    B2A - 把二进制转换成ascii浮点型

    FTNSTRIP – 把Fortran floats转成C-style floats

    FTNUNSTRIP – 把C-style floats转换成Fortran-style floats

    H2B – 把8 bit hexidecimal floats to binary

    RECAST – 改变数据类型(从一种数据类型转到另一种)

    TRANSP – 转置一个n1×n2的矩阵

    3.2.1A2B 和B2A ASCII to Binary, Binary to ASCII

    在所有的数据格式中,ASCII是最常传送的(也是最耗空间的)。不管你使用什么系统,都可能需要把ASCII转来或转去。而且,因为文本编辑器支持ASCII,因此经常可能要用文本编辑器来做数据输入或编辑。

    这种格式大都是多行格式,用空格或tab来隔开。要转换一个例如5行的数据到二进制,键入:

    %a2b < data.ascii n1=5 > data.binary

    相反的操作就是:

    %b2a < data.binary n1=5 > data.ascii

    3.2.2 FTNSTRIP – 把Fortran数据输入到C

    Fortran 在地震数据处理中是比较流行的语言,因此常常需要处理Fortran创建或处理过的数据。Fortan的二进制数据是被beginning-of- record和end-of-record分隔符隔开的。而C程序创建的二进制数据没有这些分隔符。要在C程序中使用Fortran数据需要去掉这些 Fortran标签,通过:

    ftnstrip < fortdata > cdata

    这会产生C形式的float。程序假定fortran数据的每个记录之前或之后有一个



    3.2.7 FARITH – 对二进制数据做简单的算术

    很多时候需要对文件做算术操作,或者在两个二进制数据文件之间。程序farith用来完成许多类似的任务。

    Farith对单个文件的操作包括:

    Scaling value(缩放数值)

    Polarity reversal(极性反转)

    Signum function(正负号函数)

    absolute value, 绝对值

    exponential,指数

    logarithm,对数

    square root 平方根

    square平方

    inverse (punctuated),

    inverse of square (punctuated),

    inverse of square root (punctuated).

    二元操作(对两个文件的操作)包括

    addition

    subtraction

    multiplication

    division

    Cartesian product笛卡尔乘积:从给定的集合X和Y中构成的所有(x,y)元素对集合

    地震操作()包括

    slowness perturbation

    sloth perturbation

    使用farith的事例:

    farith in=data.binary op=pinv out=data.out.bin

    farith in=data1.binary in2=data2.binary op=add > data.out2.bin

    3.3道头操作(manipulation)

    SU数据格式继承了SEGY的道头。如果你的数据不是SEGY,而是从其它格式转换得到的,就需要设置一些道头关键字,以使得数据与SU程序协调一致。

    这一节涉及的问题(issues)包括:

    加道头

    去道头

    pasting trace headers back on

    3.3.1 SUADDHEAD-给二进制数据加SU Headers
     
     
     
     
      评论这张
    转发至微博
    转发至微博
    0  分享到:        
    阅读(774)| 评论(2)| 转载 (4) |举报
     

    历史上的今天

    相关文章

     
     

    评论

    点击登录|昵称:
      取消
     
    2009-12-08 22:17

    这个东东太好了,我现在正在用呢!全是英文的,很多地方都不是太懂啊!

    回复
    2009-12-13 22:03
     any2sky 回复 oajiu
    大家共同学习
    回复
     
     
     
     
  • 相关阅读:
    程序员应该看的书
    linux下grep命令详解
    apache基本配置
    shell脚本从windows下发送到linux下运行失败的问题
    nginx服务器的安装和配置基础
    linux下ps命令用法
    apache的python部署
    《我刀刻我心——关羽往事》新书发布会在京举行
    C++图书中的王者
    C++应用程序性能优化
  • 原文地址:https://www.cnblogs.com/guosj/p/2553316.html
Copyright © 2011-2022 走看看