Skip to main content

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:

seisvelan GUI

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)

Source distribution for seisvelan 0.1.1
File Size Uploaded
seisvelan-0.1.1.tar.gz 47.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for seisvelan 0.1.1
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page