mcslopes
is a Python library providing the fundamental building blocks to perform local slopes estimation and slope-assisted
data reconstruction of multi-component seismic data. It is primarily built on top of PyLops and contains both CPU and GPU versions
of each code (see notebooks
and scripts
folders).
Note that the USE_CUPY
variable can be used to switch between the CPU and GPU versions of each code. Also note that the CPU
version of the overthrust3d
example will be very slow compared to its GPU equivalent!
For more details refer to the accompanying paper Multichannel wavefield reconstruction using smooth slopes information from multicomponent data - Ravasi M., Ruan, J, and Vasconcelos I. submitted to EAGE 2023.
This repository is organized as follows:
- 📂 mcslopes: python library containing routines for local slopes estimation and slope-assisted data reconstruction of multi-component seismic data;
- 📂 data: folder containing data;
- 📂 notebooks: set of jupyter notebooks reproducing the experiments in the paper (see below for more details);
- 📂 scripts: set of python scripts used to run the slope-assisted data reconstruction algorithm on any data of choise.
The following notebooks are provided:
- 📙
others/Slopes_comparison_hyperbolic.ipynb
: notebook comparing different slope estimation methods on a set of hyperbolic events; - 📙
others/NMO_gradient.ipynb
: notebook computing NMO of gradient data as in Robertsson et al., 2008; - 📙
gom/Create_data.ipynb
: notebook showing how to synthetically create multi-channel, subsampled data to be fed to our reconstruction notebooks ans scripts; - 📙
gom/Interpolation_GOM.ipynb
: notebook performing single-channel, multi-channel and slope-assisted multi-channel data reconstruction on a 2D shot gather from the Missisipi Canyon data; - 📙
overthrust3d/Create_data.ipynb
: notebook saving FD model data and correcting the particle velocity measurement to a pressure spatial gradient data; - 📙
overthrust3d/Derivativechecking_Ove3D.ipynb
: notebook comparing 2 approaches to compute spatial derivatives of pressure data; - 📙
overthrust3d/Interpolation_Ove3D.ipynb
: notebook performing single-channel, multi-channel and slope-assisted multi-channel data reconstruction on a 3D shot gather modelled from the SEG/EAGE Overthrust model; - 📙
overthrust3d/Interpolationwin_Ove3D.ipynb
: notebook performing single-channel, multi-channel and slope-assisted multi-channel data reconstruction with fk sliding windows on a 3D shot gather modelled from the SEG/EAGE Overthrust model;
The following scripts are provided:
- 📙
2d/Interpolation_slopes.py
: script performing multi-channel interpolation with local slopes of a 2d shot gather; - 📙
3d/Interpolation_slopes.py
: script performing multi-channel interpolation with local slopes of a 3d shot gather.
Both scripts require an input .npz
file containing the following fields.
For 2d case:
- 📇
data
: 2-dimensional pressure data to interpolate of sizent x nx
. - 📇
grad1
: 2-dimensional first-order gradient data of sizent x nx
. - 📇
grad2
: 2-dimensional second-order gradient data of sizent x nx
. - 📇
t
: time axis of sizent
. - 📇
x
: sparsely sampled spatial axis of sizenx
. - 📇
xorig
: finely sampled spatial axis of sizenx_orig
. Note thatsubfactor = nx_orig / nx
, which is the subsampling factor of the data.
For 3d case:
- 📇
data
: 3-dimensional pressure data to interpolate of sizeny x nx x nt
- 📇
grad1
: 3-dimensional first-order gradient data to interpolate of sizeny x nx x nt
- 📇
t
: time axis of sizent
. - 📇
x
: finely sampled inline axis of sizenx
. - 📇
y
: sparsely sampled crossline axis of sizeny
- 📇
yorig
: finely sampled crossline axis of sizeny_orig
. Note thatsubfactor = ny_orig / ny
, which is the subsampling factor of the data.
In synthetic examples one can also provide a second .npz
file containing the following fields (which will be used to compare the
true wavefield with the reconstructed one).
For 2d case:
- 📇
data
: 2-dimensional pressure data to interpolate of sizent x nx_orig
. - 📇
grad1
: 2-dimensional first-order gradient data of sizent x nx_orig
. - 📇
grad2
: 2-dimensional second-order gradient data of sizent x nx_orig
. - 📇
t
: time axis of sizent
. - 📇
x
: finely sampled spatial axis of sizenx_orig
.
For 3d case:
- 📇
data
: 3-dimensional pressure data to interpolate of sizeny_orig x nx x nt
. - 📇
grad1
: 2-dimensional first-order gradient data of sizeny_orig x nx x nt
. - 📇
t
: time axis of sizent
. - 📇
x
: finely sampled inline axis of sizenx
. - 📇
y
: finely sampled crossline axis of sizeny
.
To ensure reproducibility of the results, we suggest using the environment.yml
file when creating an environment.
Simply run:
./install_env.sh
It will take some time, if at the end you see the word Done!
on your terminal you are ready to go. After that you can simply install your package:
pip install .
or in developer mode:
pip install -e .
Remember to always activate the environment by typing:
conda activate mcslopes
Finally, to run tests simply type:
pytest
Disclaimer: All experiments have been carried on a Intel(R) Xeon(R) CPU @ 2.10GHz equipped with a single NVIDIA GEForce RTX 3090 GPU. Different environment configurations may be required for different combinations of workstation and GPU.