I recently joined a geophysics project to assist with some of their machine learning modeling but am trying to gather the domain knowledge required to participate.

Something I don't quite understand is the common-midpoint stack, Normal MoveOut & raw data. I have these seg-y files and I am able to plot them in python. They look fine to me, but I am reading a lot about CMP stacking, weighted CMP stacking and NMO. Are seg-y files considered to be "raw seismic data". Is the CMP and NMO process something that happens at the stage I am getting the files? I am confused because these seem to be standard practices yet I am unable to find an implementation for any of this in any programming language. Are there any tools you recommend for preparing seismic data for machine learning modeling?


1 Answer 1


SEG-Y files are a general purpose archival format. So they can be "anything". 2D seismic, 3D seismic, raw, processed, unstacked or even derivatives (seismic attributes).

How to get information about your data in the SEG-Y file: SEG-Y contain 3 types of headers that describe the data. SEG-Y structure. CC-BY-SA Agile Scientific The EBCDIC header is a 40 by 80 character sheet that is a remnant from the times of punchhole cards (I'm not joking). Usually it contains info about the state of the seismic. Processing workflow, acquisition geometries etc. The binary header has some more fixed data about the data set. The trace headers contrain every separate data set from the acquisition. Nice blog by Agile Scientific here.

You can read about the details of seismic processing and conventions in the open access book "Seismic Data Analysis". It used to be several hundred dollars and has been cited in every seismic lecture I have ever attended. However, I'll give you some answers now.

Common Midpoints

CMP stacking, weighted CMP and NMO are highly entangled.

CMP Definition

A seismic measurement, listens really close to the reflection from the subsurface. However, it's a little noisy. "Stacking" is recording the same place over and over, then adding it up to cancel out random noise and enhance coherent signal. However, just doing it in the same area would be very inefficient, therefore we change the acquisition over the point we illuminate, in the picture you see that we have a nice fan of ray geometries going to the same point in the middle, the Common MidPoint CMP. This leads some interesting behaviour.

Normal Moveout

NMO equation this is the formulation to calculate how a record from a different angle can be shifted to be in line with another record for the aforementioned stacking. As you can imagine the records that have longer ray paths take longer, depending on the velocity of the rock they travel through. This shift down-ward is namen Normal MoveOut (NMO). The equation above is an approximation, but it's good enough for this explanation, check out the book for more info on this.

Post-Stack vs. Pre-Stack

A seismic acquisition over a 2D area is named 3D seismic, because X-Y-T (recording time). The data, repeated over the same point in X-Y as mentioned above will have several record with the same T and a different "offset" between the source and the receiver. That means, 3D seismic data coming fresh out of the field will be four-dimensional. This is called pre-stack. Once we do a lot of data preconditioning and filtering and a smarter version of the CMP stacking above, we get 3D seismic that is actually three-dimensional.

Stacking versus Migration

Stacked data will have all kinds of weird wave effects in it. Usually geologists will work on "migrated" data. A migration aims to find the "true" location of a reflector, reversing wave effects. I suspect you might get this one.

Time versus Dpeth

You may have wondered from before about X-Y-T. T stands for time not depth, that is because our data is measured in recording time and most geophysicists will work in time. Most likely the migration even is done in time and you get a X-Y-T cube. However, depth-conversion does happen, but it depends on a accurate time-depth relationship. People tend not to trust these too much. Caveat: A depth migration does not have to result in a X-Y-Z cube that you get.

Practical Advice

As a practical guide, you may want to start at the EBCDIC header. Was your data processed? Stacked? Migrated? Do you have a T-cube or Z-cube? Familiarize yourself with the binary header and a couple trace headers. What are the extents of your data? Etc.

Machine Learning

Most machine learning is done in proprietary code. The only open source code I know of in seismic deep learning is MalenoV. However, loading a full 3D seismic into RAM will not always be possible. Loading it into the GPU RAM will seldomly be possible. This is the first place, where you are free to come up with a smart solution.


Here is a list of Free Geophysics Software and an awesome list of open geoscience. These aren't exhaustive, but a good start.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.