seisvelan
Interactive seismic normal-moveout velocity analysis.
Description
The seisvelan package provides an interactive GUI for picking seismic normal-moveout velocities on CMP gathers.
This little program is not meant to replace commercial seismic software optimized to run velocity analysis on large amounts of data. It's primarily meant for smaller projects in, for instance, academic environments to facilitate practical velocity picking in lectures, exercises or field practicals.
Key features
- Pure Python code based on tkinter, i.e., minimal external dependencies.
- Uses the seisio module for flexible I/O of seismic data.
- GUI allows users to interactively change clips, axis labels, axis ticks, colormaps, and many more parameters.
- OS-independent, i.e., should work on Linux, Windows, etc.
Getting Started
Dependencies
Required: matplotlib, numpy, seisio, tabulate, tkinter-tooltip, tkinter-icons[bootstrap]
The seisio packages requires: numba, numpy, pandas, tabulate
Installation
Install from PyPI:
$> pip install seisvelan
Afterwards, simply call
$> seisvelan
at the commandline. You can use option -v to obtain additional logging information or -vv to put all modules that use the standard logging facility into debug mode, including seisvelan itself.
Install directly from gitlab:
$> pip install git+https://gitlab.kit.edu/thomas.hertweck/seisvelan.git
Editable install from source:
This version is intended for experts who would like to test the latest version or make modifications. Normal users should prefer to install a stable version.
$> git clone https://gitlab.kit.edu/thomas.hertweck/seisvelan.git
Once you acquired the source, you can install an editable version of seisvelan with:
$> cd seisvelan
$> pip install -e .
An alternative location of the source is https://github.com/ThomasHertweck/seisvelan.
Overview
Here is a screenshot of the GUI with some explanations:
JSON output file
The JSON file produced by the interactive GUI can easily be read into Python:
import ast
import json
from sortedcontainers import SortedDict
def _extract_picks(json_pickdata):
pos = []
times_per_pos = []
velos_per_pos = []
etas_per_pos = []
for p, pks in json_pickdata.items():
pos.append(ast.literal_eval(p)[0])
times_per_pos.append([val["t"] for val in pks])
velos_per_pos.append([val["v"] for val in pks])
etas_per_pos.append([val["e"] for val in pks])
return pos, times_per_pos, velos_per_pos, etas_per_pos
def get_pickvalues_as_list(pick_file):
with open(pick_file, "r", encoding="utf-8") as f:
json_data = json.load(f)
pickdata = json_data["picks"]
if not pickdata:
raise RuntimeError(f"JSON file {pick_file} seems to contain no picks.")
pos, t, v, e = _extract_picks(pickdata)
return pos, t, v, e
def get_pickvalues_as_dict(pick_file):
pos, t, v, e = get_pickvalues_as_list(pick_file)
pdict = SortedDict()
for i, key in enumerate(pos):
pdict[key] = {"t": t[i], "v": v[i], "e": e[i]}
return pdict
Testing
The current version of the seisvelan package has primarily been tested on Linux and Windows using Python 3.13 and 3.14.
Main author
Dr. Thomas Hertweck, geophysics@email.de
Citation
If you use the seisvelan package and you find it useful, getting some feedback would be very much appreciated. If you would like to cite this package, please use, for instance:
Hertweck, T. (2026). seisvelan: A Python GUI for interactive seismic velocity analysis. Version 0.1. url: https://gitlab.kit.edu/thomas.hertweck/seisvelan/ (visited on 08/25/2026).
Adjust year, version and last visited date as required. Here's a BibTeX entry:
@software{seisvelan,
author = {Hertweck, Thomas},
year = {2026},
title = {seisvelan: A Python GUI for interactive seismic velocity analysis},
url = {https://gitlab.kit.edu/thomas.hertweck/seisvelan/},
urldate = {2026-08-25},
version = {0.1.0}
}
License
This project is licensed under the GPL v3.0 License - see the LICENSE.md file for details
Metadata
Release files for seisvelan 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| seisvelan-0.1.1.tar.gz | 47.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| seisvelan-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.6 kB
Release files / seisvelan-0.1.1.tar.gz
| Download URL | seisvelan-0.1.1.tar.gz |
|---|---|
| Size | 47.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
941377aa2187c7efdb34b40f8ed9047b38a5262398c68b22b47401af59e11486
|
|
BLAKE2b-256 checksum How to use checksums |
e9a46f8acee78da90a76ce0dbe2196c13d06d43d6a4c3cc294620e0b0a7d2e70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|
Release files / seisvelan-0.1.1-py3-none-any.whl
| Download URL | seisvelan-0.1.1-py3-none-any.whl |
|---|---|
| Size | 49.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4f24fa8c62914be75a779ded9b5b30b610da4f39b7d3ba31f79354582b3738f
|
|
BLAKE2b-256 checksum How to use checksums |
056ecd92dfbf595427c6cf391c5b3816dc98e4b62d679fa9464be6416b7346a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.4
|