/* Copyright (c) Colorado School of Mines, 2003.*/ /* All rights reserved. */ /*----------------------------------------------------------------------- * segd.h - include file for SEGD traces * Version 2.1, 10/10/94, Marc Schaming * Version 2.2, 17/08/95, Celine Girard et Marc Schaming * Version 2.3, 04/1997, Marc Schaming * Version 2.4, 02/1998, Stewart A. Levin (SEP) * changed general_header_1.f to unsigned char[2] * changed non-struct typedefs to struct typedefs * to allow for uniform future expansion * Version 2.5, 02/2001, Stewart A. Levin (SEP) * Little endian fix up for channel_set_header.cs * and dem_trace_header,tn * * declarations for: 版本1 版本2 * typedef struct {} segd_tape_label : 无 tape label * typedef struct {} segd_general_header_1 : general header 与1相同 * typedef struct {} segd_general_header_2 : general header 与1相同 * typedef struct {} segd_general_header_n : general header 与1相同 * typedef struct {} segd_gen_head_sn358 : general header for sn358 * typedef struct {} segd_channel_set_header: channel set descriptor 与1相同,29字节稍扩展 * typedef struct {} segd_sample_skew : sample skew block * typedef struct {} segd_extended_header : extended header * typedef struct {} segd_external_header : external header * typedef struct {} segd_general_trailer : general trailer 与1相同 * typedef struct {} segd_demux_trace_header: Demux trace header 与1相同 * typedef struct {} segd_trace_header_ext : trace header extension 长度相同,做了扩展 * typedef struct {} segd_general_trailer : general trailer 与1相同 * * * Reference: * SEG Subcommitee on Digital Tape Formats, "Digital field tape format standards - SEG-D" * * Digital field tape format standards - SEG-D, REVISION 1 (1994) Geophysics, vol. 59, p.668-684 * * 版本2中在开始位置比版本1多记录了128字节的磁带标签信息,指明了该磁带的一些记录参数和格式信息, * 其中5~9字节内容为“SD2.0”,说明为SegD版本2格式。 * *---------------------------------------------------------------------*/ namespace NSegD { ////////////////////////////////////////////////////////////////////// //版本2增加的磁带头定义,在文件开始 /*---------------- Tape Label --------------------------------------*/ typedef struct stuSegDTapeLabel{ unsigned char susn[4]; /* 01-04 Storage unit sequence number */ unsigned char rev[5]; /* 05-09 SegD Revision ,必须为SD2.0,由此判断是否为2.0格式 */ unsigned char sus[6]; /* 10-15 Storage unit structure */ unsigned char ba[4]; /* 16-19 Binding addition */ unsigned char mbs[10]; /* 20-29 Maximum block size */ unsigned char acode[10];/* 30-39 API Producer organization code */ unsigned char cdate[11];/* 40-50 Creation date */ unsigned char sn[12]; /* 51-62 Serial number */ unsigned char res[6]; /* 63-68 Reserved */ //Storage set identifier 60个字节 unsigned char eln[12]; /* 69-80 External Label Name */ unsigned char ren[24]; /* 81-104 Recording Entity Name */ unsigned char ud[14]; /* 105-118 User defined */ unsigned char msr[10]; /* 119-128 Max shot records per field record */ } SEGD_TAPE_LABEL; //头段块包括至少两个通用头段,一个或多个扫描类型头段以及可选的 // 扩展头段、外部头段,其大小均为32字节 // // // ----------------------------------------------------------------------------------- // | | | | | | | | // | 通用头1 | 通用头2 | 通用头 | 通道 | 通道 | 通道 | ... | // | | | (可选) | 设置1 | 设置2 | 设置3 | | // ----------------------------------------------------------------------------------- // | 32字节 | 32B | 32 | 32 | 32 | 32 | ... | // 个数由头1 // 中定义 /*---------------- General header block #1 -------------------------*/ typedef struct stuSegDGeneralHeader1{ unsigned char f[2]; /* 01-02 File number (0-9999) 文件号, 如果超出9999范围,由该处为FFFF,个数记录在头段2的第1~3字节处 */ unsigned short fc; /* 03-04 Format code 格式代码 */ char k1_k2; /* 05 General constants */ char k3_k4; /* 06 General constants */ char k5_k6; /* 07 General constants */ char k7_k8; /* 08 General constants */ char k9_k10; /* 09 General constants */ char k11_k12; /* 10 General constants */ unsigned char year; /* 11 Year (0-99) */ unsigned char gh_day1;/* 12 Number blocks in general header 头段块的个数(高四位)*/ /* 12 - day of year (x--) */ unsigned char day; /* 13 Day of year (xx) */ unsigned char hour; /* 14 Hour of day */ unsigned char minute; /* 15 Minute of hour */ unsigned char second; /* 16 Second of minute */ unsigned char m[3]; /* 17 Manufacturer's code 生产商代码*/ /* 18-19 and serial number */ unsigned char b[3]; /* 20-22 Bytes per scan (multiplexed only) 每个扫描的字节数,仅时序时*/ unsigned char i; /* 23 Base scan interval 采样间隔*/ unsigned char p_sbx; /* 24 Polarity */ /* 24 - Number of scans per block */ unsigned char sb; /* 25 Number of scans per block */ unsigned char z_r1; /* 26 Record type */ /* 26 - Record length 记录长度,还可定义在头段2中的15~17字节*/ unsigned char r; /* 27 Record length */ unsigned char str; /* 28 Scan types per record 扫描类型个数 */ unsigned char cs; /* 29 Channels sets per scan type 每个扫描类型中的道组数, 表示范围为0~99,如果大于99时,则记录在头段2的4、5字节上*/ unsigned char sk; /* 30 Sample Skew blocks 采样时偏头段个数,为0时表示没有*/ unsigned char ec; /* 31 Extended header length 扩展头段个数, 表示范围为0~99,如果扩展头个数超过99个时,则该字节内容为FF, 个数记录在头段2的第6、7字节上 */ unsigned char ex; /* 32 External header length 外部头个数, 表示范围0~99,超过时记录在头段2的8、9字节上*/ } SEGD_GENERAL_HEADER_1; /*---------------- General header block #2 -------------------------*/ typedef struct stuSegDGeneralHeader2{ unsigned char ef[3]; /* 01-03 Extended file number */ unsigned char en[2]; /* 04-05 Extended channel sets and scan types */ unsigned char ecx[2]; /* 06-07 Extended header blocks 扩展头个数,仅当扩展头个数大于99时才使用*/ unsigned char eh[2]; /* 08-09 external header blocks 外部头个数 */ char x1; /* 10 undefined */ unsigned char rev[2]; /* 11-12 SEG-D revision number */ unsigned short gt; /* 13-14 General trailer number */ unsigned char erl[3]; /* 15-17 Extended record length 扩展记录长度 */ char x2; /* 18 undefined */ unsigned char bn; /* 19 General header block number 通用头段块个数*/ char x3[13]; /* 20-32 undefined */ } SEGD_GENERAL_HEADER_2; /*---------------- General header block #n -------------------------*/ typedef struct stuSegDGeneralHeaderN{ char x1[3]; /* 01-03 undefined */ unsigned char sln[5]; /* 04-08 Source line number,4-5为整数部分,7-8为小数部分 */ unsigned char spn[5]; /* 09-13 Source point number,9-11为整数部分,12-13为小数部分 */ unsigned char spi; /* 14 Source point index */ unsigned char pc; /* 15 Phase control */ unsigned char v; /* 16 Type vibrator */ short pa; /* 17-18 Phase angle */ unsigned char bn; /* 19 General header block number */ unsigned char ss; /* 20 Source set number */ char x2[12]; /* 21-32 undefined */ } SEGD_GENERAL_HEADER_N; /*---------------- General header extension (Sercel SN358) ---------*/ typedef struct stuSegDGeneralHeaderSN358{ unsigned char fc1; /* 01 first and last channel of seismic param 1 */ unsigned char lc1; /* 01-02 last channel of seismic param 1 */ unsigned char fc2; /* 03-04 first channel of seismic param 2 */ unsigned char f_lc2; /* 03-04 first and last channel of seismic param 2 */ unsigned char lc2; /* 04-05 last channel of seismic param 2 */ unsigned char fc3; /* 06-07 first channel of seismic param 3 */ unsigned char f_lc3; /* 07 fist and last channel of seismic param 3 */ unsigned char lc3; /* 07-08 last channel of seismic param 3 */ unsigned char fc4; /* 09-10 first channel of seismic param 4 */ unsigned char f_lc4; /* 10 first and last channel of seismic param 4 */ unsigned char lc4; /* 10-11 fist channel of seismic param 4 */ unsigned char f_lac1; /* 12 first and last aux channel of scan type 1 */ unsigned char fsc1; /* 13-14 first seismic channel of scan type 1 */ unsigned char f_lsc1; /* 14 first and last seismic channel of scan type 1 */ unsigned char lsc1; /* 14-15 last seismic channel of scan type 1 */ unsigned char sam_int1; /* 16 sample interval of scan type 1 */ unsigned char fac2; /* 17 first and last aux channel of scan type 2 */ unsigned char fsc2; /* 18-19 first seismic channel of scan type 2 */ unsigned char f_lsc2; /* 19 first and last seismic channel of scan type 2 */ unsigned char lsc2; /* 19-20 last seismic channel of scan type 2 */ unsigned char sam_int2; /* 21 sample interval of scan type 2 */ unsigned char bl_sig_le; /* 22 block signature length (n*0.1 s) */ unsigned char rec_length[2]; /* 23-24 record length n*0.1 s (00.0-99.9) s */ unsigned char dyn_swit_del[2]; /* 25-26 dynamically switching delay (00.0-99.9 s) */ unsigned char rec_del[2]; /* 27-28 recording delay (00.0-99.9s) */ unsigned char ty_a_cha12; /* 29 type of auxiliary channel 1, channel 2 */ unsigned char ty_a_cha34; /* 30 type of auxiliary channel 3, channel 4 */ unsigned char ty_a_cha56; /* 31 type of auxiliary channel 5, channel 6 */ unsigned char ty_a_cha78; /* 32 type of auxiliary channel 7, channel 8 */ unsigned char mode_num; /* 33 mode number */ unsigned char an_sys_co; /* 34 analog sys count (1-2), tape transport num */ unsigned char reel_num[2]; /* 35-36 reel number (0-9999) */ unsigned char file_num[2]; /* 37-38 file logical number */ unsigned char sp_num[2]; /* 39-40 shot point number */ unsigned char lc_nf; /* 41 lc=0 lowcut fi. out, nf=0 notch fi. out */ unsigned char fg_ic; /* 42 fg=1 fist fixed gain, ic=1 internal osc. */ unsigned char of1; /* 43-45 oscillator frequency (0-9999.9 Hz) */ unsigned char of2; /* 43-45 oscillator frequency (0-9999.9 Hz) */ unsigned char of3; /* 43-45 oscillator frequency (0-9999.9 Hz) */ unsigned char osc_att; /* 46 oscillator attenuator */ unsigned char t_sig_ph; /* 47 test signal phase (1:+,0:-) */ unsigned char m_gain; /* 48 main gain amplifier (0-15) 16: IFP */ unsigned char dum[16]; /* 49-64 additional information */ } SEGD_GEN_HEAD_SN358; /*---------------- Scan type header (Channel set descriptor ) ------*/ typedef struct stdSegDChannelSetHeader{ unsigned char st; /* 01 Scan type 扫描类型*/ unsigned char cn; /* 02 Channel set number 道组号*/ unsigned short tf; /* 03-04 Channel set start time 开始时间*/ unsigned short te; /* 05-06 Channel set end time 结束时间*/ unsigned char mp[2]; /* 07-08 Descaling exponent 反换算因子*/ unsigned char cs[2]; /* 09-10 Channels in this channel set 本道组包含的道数*/ unsigned char c; /* 11 Channel type identification */ unsigned char sc_j; /* 12 Sample/channel gain 子样个数*/ /* 12 - Gain control method 增益控制方式*/ unsigned short af; /* 13-14 Alias filter frequency 去假频滤波器截止频率*/ unsigned short as; /* 15-16 Alias filter slope 去假频滤波器陡度*/ unsigned short lc; /* 17-18 Low cut filter frequency 低切滤波器截止频率*/ unsigned short ls; /* 19-20 Low cut filter slope 低切滤波器陡度*/ unsigned short nt[3]; /* 21-26 Notch filter frequency 陷波滤波器频率*/ unsigned short ecs; /* 27-28 Extended channel set number 扩展道组号*/ unsigned char efh; /* 29 Extended header flag 在版本2中有扩展*/ unsigned char vs; /* 30 Vertical stack */ unsigned char cab; /* 31 Streamer number */ unsigned char ary; /* 32 Array forming */ } SEGD_CHANNEL_SET_HEADER; /*---------------- Sample skew 采样时偏-------------------------------------*/ //是指各道第一次采样时刻相对于第一次扫描开始时刻(即第一个计时字)的偏移 typedef struct stuSegDSampleSkew { unsigned char skew[32]; } SEGD_SAMPLE_SKEW; /*---------------- Extended header 扩展头---------------------------------*/ typedef struct stuSegDExtendedHeader { unsigned char dummy[32]; } SEGD_EXTENDED_HEADER; /*---------------- External header 外部头---------------------------------*/ typedef struct stuSegDExternalHeader { unsigned char dummy[32]; } SEGD_EXTERNAL_HEADER; // // ----------------------------------------------------------------------------------- // | | | | | | | | | // | 道头 | 道头 | 道头 | 道头 | 道头 | 道头 | ... | 数据道 | // | | 扩展1 | 扩展2 | 扩展3 | 扩展4 | 扩展5 | | | // ----------------------------------------------------------------------------------- // | 20字节 | 32B | 32 | 32 | 32 | 32 | ... | | // /*--------------- Demux trace header 道头------------------------------*/ typedef struct stuSegDDemuxTraceHeader { unsigned char f[2]; /* 01-02 file number 文件号 */ unsigned char st; /* 03 scan type (1-2) 扫描类型 */ unsigned char cn; /* 04 channel set 道组数 */ unsigned char tn[2]; /* 05-06 trace number 道号 */ unsigned char t[3]; /* 07-09 timing word of the first sample if the data were written in the multiplexed format */ unsigned char the; /* 10 trace header extensions 扩展道头的个数 */ unsigned char ss; /* 11 sample skew of the first sample of the trace. It is a part of the fractional part of the base scan interval. Res :1/256 scan interval */ unsigned char tr; /* 12 trace edit */ unsigned char tw[3]; /* 13-15 time from time break to the end of the internal time break window (binary number, inc 1ms) */ unsigned char en[2]; /* 16-17 extended channel set number */ unsigned char efn[3]; /* 18-20 extended file number */ } SEGD_DEMUX_TRACE_HEADER; /*---------------- Trace header extension 道头扩展--------------------------*/ typedef struct stuSegDTraceHeaderExtension { unsigned char rln[3]; /* 01-03 Receiver line number 接收线号 */ unsigned char rpn[3]; /* 04-06 Receiver point number 接收点号 */ unsigned char rpi; /* 07 Receiver point index 接收点索引 */ unsigned char nbs[3]; /* 08-10 Number of samples per traces 每道采样点个数*/ //在Rev1中11-32没有定义 //char x[22]; /* 11-32 undefined */ //在Rev2中进行了扩展: unsigned char erln[5]; /* 11-15 Extended Receiver Line Number */ unsigned char erpn[5]; /* 16-20 Extended Receiver Point Number */ unsigned char sen; /* Sensor Type recorded on this trace */ char x[11]; /* 22-32 undefined */ } SEGD_TRACE_HEADER_EXT; /*---------------- General trailer ---------------------------------*/ typedef struct stuSegDGeneralTrailer { unsigned short gt; /* 01-02 General trailer number */ char x1[8]; /* 03-10 undefined */ unsigned char c; /* 11 Channel type identification */ char x2[21]; /* 12-32 undefined */ } SEGD_GENERAL_TRAILER; }//namespace using namespace NSegD;