This library contains all the required building blocks to peform 2D turning ray tomography and associated examples codes.
This repository is organized as follows:
- 📂 refrtomo: python library containing routines for 2D turning ray tomography;
- 📂 data: folder containing data
- 📂 notebooks: set of jupyter notebooks reproducing the experiments in the paper (see below for more details);
The following notebooks are provided:
- 📙
Rayshooting_straight.ipynb
: notebook testing raytracer and tomographic matrix engine with straight rays; - 📙
Rayshooting.ipynb
: notebook testing raytracer and tomographic matrix engine with turning rays; - 📙
Rayshooting_Stryde.ipynb
: notebook testing raytracer and tomographic matrix engine with small refraction dataset acquired with Stryde sensors in KAUST; - 📙
RefrTomo.ipynb
: notebook performing refraction tomographic of a portion of synthetic Marmousi model; - 📙
RefrTomo_minimal.ipynb
: notebook performing refraction tomographic of a portion of synthetic Marmousi model (minimal number of steps); - 📙
FirstArrivalPicking_Stryde.ipynb
: notebook performing automated first arrival picking of a small refraction dataset acquired with Stryde sensors in KAUST; - 📙
RefrTomo_Stryde.ipynb
: notebook performing refraction tomographic of a small refraction dataset acquired with Stryde sensors in KAUST. - 📙
RefrTomo_Strydeminimal.ipynb
: notebook performing refraction tomographic of a small refraction dataset acquired with Stryde sensors in KAUST (minimal number of steps).
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 refrtomo
-
Create routine that takes two rays reaching the surface and recursively interpolates a ray in the middle until a given distance from a surface point of interest (to be used to take the two closest rays on either side of a receiver, which are however above the allowed threshold, and find one in the middle below this threshold);
-
Finalize inversion routines using
scipy.optimize.least_squares
(currently the Levenberg-Marquardt cannot be used with non-dense Jacobians and the trust-region methods do not seem to converge as nicely as our Gauss-Newton); -
Add directional smoothing constraints.