2. 地震数据检查准备

SEG-Y数据检查不是打开文件随便翻几炮就能完成的工作。真正决定检查效率与结论可靠性的,是检查开始之前的准备工作:一个可复现的运行环境、一组覆盖典型情况的样本数据,以及一份把"查什么、怎么查、查到什么程度算通过"写清楚的清单与流程。准备工作做得扎实,后续的字节级解析、道头核对、坐标校验和格式转换才有稳定的参照基准;准备不足,往往会在检查中途才发现缺少某类样本、工具版本不一致或判据含糊,导致返工。

一、搭建可复现的检查环境

检查环境的核心要求是"可复现"——同一份SEG-Y文件,在不同时间、不同机器上检查,应得到一致的解析结果。建议从三个层面搭建。

1. 解释型脚本环境。Python是目前处理SEG-Y最便利的选择,常用库包括 segyio(读写SEG-Y、访问道头)、numpy(道集数值统计)、pandas(整理道头表、生成检查报告)。建议固定版本并记录在环境说明中,例如:

python 3.10.x
segyio 1.9.x
numpy 1.24.x
pandas 2.0.x

版本固定的意义在于:不同版本的segyio对某些非标准文本头或扩展文本头的容错行为可能不同,若不记录版本,出现"上次能读、这次报错"时难以定位原因。

2. 命令行工具环境。除脚本外,应准备至少一套成熟的SEG-Y工具用于交叉验证,例如 segysak、Seismic Unix(SU)中的 segyread/surange,或商业软件(如Promax、Omega、Geovation)的SEG-Y输入模块。交叉验证的价值在于:当脚本解析结果与商业软件显示不一致时,能快速判断是文件本身不规范,还是解析代码对某个字段的理解有偏差。

3. 目录与记录规范。建议按"样本—脚本—输出—日志"分离的目录结构组织工作区,例如 samples/ 存放待检SEG-Y,scripts/ 存放解析与统计脚本,reports/ 存放道头统计表与检查结论,logs/ 存放每次运行的命令与输出。所有检查结论都应能追溯到具体命令和具体文件,避免"凭印象判断"。

检查环境不必追求复杂,但必须满足两点:一是能稳定读取文本头(EBCDIC/ASCII)与二进制头;二是能批量导出道头字段并做统计。这两项能力覆盖了SEG-Y检查的绝大部分工作。

二、准备典型SEG-Y样本

样本的代表性直接决定检查清单能否被真正"跑通"。建议按"采集年代、仪器类型、数据形态"三个维度组织样本集,每个维度至少覆盖两类情况。

维度建议覆盖的样本类型主要检查关注点
采集年代1990年代前后老资料、2010年以后新资料文本头编码(EBCDIC/ASCII)、道头字段是否齐全、采样率与样点数是否规范
仪器类型不同遥测系统(如Sercel 408/428、ION、INOVA等)输出道头中仪器相关字段、辅助道、扩展文本头是否存在
数据形态二维测线、三维炮集、叠加/偏移成果、转换波或VSP道头坐标单位、道集组织方式、CDP/Inline/Crossline编号规则

样本数量不必多,但每个样本都应有明确的"身份说明":来源、采集年份、仪器型号、坐标系与单位、已知的格式特点(例如是否为IEEE浮点、是否含扩展文本头)。这份说明是后续判断"解析结果是否合理"的基准。例如,一个已知采用EBCDIC编码文本头的老样本,若解析后文本头出现大量乱码,就应优先怀疑编码识别逻辑,而不是文件损坏。

此外,建议准备少量"问题样本"用于验证检查流程的敏感性,例如道头坐标全为零、采样率字段与实际不符、道数少于二进制头声明道数的文件。问题样本的作用是检验清单中的判据是否真的能触发告警,避免清单形同虚设。

三、制定检查清单与流程

检查清单应围绕SEG-Y的物理结构逐层展开,从外到内、从整体到局部。下图给出了一条推荐的检查主线:从文件级结构开始,依次核对文本头、二进制头、道头与道数据,最终汇入格式转换前的判定节点。

SEG-Y 检查主线:由外到内逐层核对 ① 文件级结构 文件大小 / 道数 3600字节头 + 道记录 ② 文本头 3200B EBCDIC / ASCII 识别 线名、队名、采样信息 ③ 二进制头 400B 采样间隔 / 样点数 数据格式码 / 道数 ④ 道头 240B 坐标 / CDP / 道号 单位与比例因子 ⑤ 道数据体 样点数 × 道数 是否与头段一致;数值范围、空道、异常振幅 ⑥ 转换前判定 头段一致性通过?坐标单位明确?格式码可映射? 通过 → 进入格式转换 记录检查结论与参数映射 不通过 → 回溯定位 编码/字段/单位/道数逐项排查

清单中的每一项都应给出可执行的判据,而不是笼统的"检查是否正常"。以下是一份可直接使用的检查清单示例,字段与判据均针对SEG-Y的实际结构:

检查项具体内容判据示例
文件完整性文件大小是否等于 3600 + 道数 ×(240 + 样点数 × 每样字节数)偏差为0;若不为0,定位是道数声明错误还是截断
文本头编码前3200字节按EBCDIC与ASCII分别解码可读字符占比高者判定为实际编码,并记录
二进制头关键字段采样间隔(μs)、样点数、数据格式码、道数采样间隔与样点数在合理范围;格式码为1/2/3/5/8等已知值
道头坐标炮点/检波点X、Y及比例因子坐标非全零;比例因子与坐标量级匹配;单位(m/ft)明确
道集组织CDP、Inline、Crossline、道号连续性编号无异常跳变;炮集内道序符合观测系统
道数据质量样点数值范围、空道、异常大值无全零道;振幅分布无极端离群;无NaN/Inf

流程上建议采用"先整体后局部、先结构后数值"的顺序:先用文件大小与道数做一次总量核对,快速发现截断或道数声明错误;再解析文本头确定编码与采集信息;然后核对二进制头的采样参数与格式码;最后批量导出道头做统计,并对道数据抽样检查。每一步的结论都应写入检查记录,形成"文件—检查项—结论—依据"的对应关系。

常见误区是跳过文本头编码识别直接按ASCII读取,导致老资料文本头乱码后误判为文件损坏;或在未确认坐标比例因子与单位的情况下直接做坐标转换,造成后续成果坐标整体偏移。检查清单中这两项应作为强制项,不可省略。

完成上述准备后,检查工作就具备了稳定的基准:环境可复现、样本有代表性、清单有明确判据、流程有固定顺序。此时再进入具体的字节解析与字段核对,结论才具备可追溯性和可比性,也才能为后续的格式转换提供可靠的输入依据。