Skip to main content

PyPI Crates.io CI codecov

Ridal — Speeding up Ground Penetrating Radar (GPR) processing

The aim of ridal is to quickly and accurately process GPR data. In one command, most data can be processed in pre-set profiles or with custom filter settings, and batch modes allow for sequences of datasets to be processed with the same settings. It can be used from the command line, from Python, or through a browser GUI for looking at and interpreting the results. Built in rust with a high focus on testing and performance, ridal may be for you if large data volumes and strange fileformats are common issues.

The name is a take on the loosely defined "Data Abstraction Library" (DAL) projects like GDAL and PDAL, but for radar. A near-term goal of Ridal is to enable easy conversion between formats, such as ridal convert input.rad output.dzt (this is not yet implemented).

Much of the functionality has been inspired from the projects RGPR and ImpDAR; both of which are more mature projects. For example, Ridal currently only works on Malå (.rd3), GSSI (.dzt) and pulseEKKO (.dt1) radar formats. For many uses, these will more likely be the tools for you!

Image of a glacier radargram Radargram (100 MHz Malå) of Kroppbreen in Svalbard. Collected 28 Feb. 2023.

Notes

  • Prior to Feb. 2026, this program was called rsgpr.
  • The CLI/Python interface changed completely in version 0.5. See Issue #82 for more info.

Installation

Requirements

  • cargo(only for the CLI; not the python package). Easiest installed using rustup.
  • gdal (optional, for sampling heights from DEMs). For Debian or derivatives, this means gdal-bin.
  • proj (optional, for CRS support other than WGS84 UTM Zones). For Debian or derivatives, this means proj-bin.

Using cargo, the ridal CLI can be installed (after installing the requirements):

cargo install ridal

with nix, the flake can be used without worrying about the requirements above:

inputs = {
  ridal.url = "github:erikmannerfelt/ridal";
};

or in an ephemeral shell:

nix shell github:erikmannerfelt/ridal

Python

There's an early implementation of a Python package:

pip install ridal
>>> import ridal
# Print useful info as a dictionary
>>> ridal.info("path/to/file.rad")
'{...}'
# Process and save to a file
>>> ridal.process("path/to/file.rad", steps=["zero_corr", "auto_gain"], output="processed.nc")
# Process and load into memory
>>> ridal.process("path/to/file.rad", steps=["zero_corr"], return_dataset=True, return_dataset_format="xarray")
<xarray.Dataset> Size: ...
Dimensions:     (y: ..., x: ...)
Coordinates:
...
# Only load into memory with no processing
>>> ridal.read("path/to/file.rad", return_dataset_format="xarray")
<same as above>

See scripts/render_kroppbreen.py for an example of how it can be used.

Simple CLI usage

See the help page of ridal for info on how to interact with the CLI:

ridal -h

To toggle useful information on a file, the info subcommand shows the metadata and a summary of the location data:

ridal info DAT_001_A1.rd3

Processing a file using the default processing profile:

ridal process DAT_001_A1.rd3 --default

All processing steps are shown in the steps.md file. It can also be printed with ridal steps.

A processing step pipeline is defined using ridal process file.rad --steps "zero_corr,dewow,..." or using a file: --steps steps.txt:

subset(1 100) # Comments are supported!
zero_corr
dewow

correct_topography

The output will be a NetCDF file with the same name but an .nc suffix. By default, the output is saved in the same directory as the input. For more control, the output directory and/or filename can be controlled with -o or --output.

To process multiple files in "batch mode", provide a "glob" pattern as the filename. Optionally, for many sequential files, the --merge argument allows merging multiple files into one.

ridal batch-process data/*.rd3 --merge "10 min" --default -o output/

A profile renderer is available with the -r argument. This will be saved in the same location as the output file as a JPG if another filename is not given. Files that are already processed can be rendered on their own with the render subcommand:

ridal render processed.nc -o profile.png

The browser GUI

New in version 0.6.0.

Processed files can be looked at in a browser:

ridal gui path/to/processed/

Every Ridal .nc file below that directory is found and listed, grouped by survey, with a map of where each survey's lines were collected. Opening one gives a zoomable view of the radargram, where the cursor reports the trace number, the distance along the line, the two-way travel time and the depth, and a map shows where on the ground that point is. Radargrams are rendered where Ridal runs, and only the parts being looked at, so files larger than memory are not a problem.

Reflectors can also be picked in the browser, which needs somewhere to keep them: a project. Making one in the directory with the processed files is all that is required:

cd my_survey/
ridal project init
ridal gui

Without a path, ridal gui looks for the project by searching upwards from the current directory. Picked layers can be exported as points, as GeoJSON or CSV, from the browser or with ridal interp export.

ridal gui is for looking at your own files on your own computer, and it stops when you do. To keep a project up for longer, or to share it with colleagues, ridal server start binds a fixed port instead:

ridal server start my_survey/ --port 8000

Everyone who reaches that address is the same anonymous user until the project has accounts. The first account is made from the command line, since there is no one to ask for permission yet:

ridal project user add erik --role admin

This prints a single-use invite link to send to that person, which is where they set their own password. Ridal does not encrypt anything itself, so serving a project beyond your own machine means leaving it on 127.0.0.1 and putting a reverse proxy in front of it.

The proxy needs two settings that its defaults get wrong for radargrams (#248). With nginx:

location / {
    proxy_pass http://127.0.0.1:8000;

    # nginx refuses a request body over 1 MB by default, which every
    # radargram exceeds. It does so before Ridal sees the upload, so what
    # reaches the browser is nginx's 413 rather than anything Ridal can
    # explain. Ridal already caps uploads itself, against `max_bytes` under
    # `[radargrams]` in ridal.toml, and says what it refused and why -- so
    # removing the limit here leaves one cap rather than two, and the one
    # that can describe itself.
    client_max_body_size 0;

    # Ridal checks an upload against that cap as the bytes arrive. Left on,
    # nginx buffers the whole file to its own disk before passing on a
    # byte, so an over-cap upload costs a full transfer and a second copy on
    # the proxy before anything refuses it.
    proxy_request_buffering off;

    # A radargram takes longer to upload than the default 60s.
    client_body_timeout 300s;
    proxy_read_timeout 300s;
    proxy_send_timeout 300s;
}

Ridal cannot detect or work around a limit imposed in front of it, so if an upload fails with a message about the web server in front of Ridal, this is the section to check.

Papers using Ridal

... and many others in preparation/review

Metadata

Release files for ridal 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for ridal 0.7.0
File
ridal-0.7.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
ridal-0.7.0-cp314-cp314-manylinux_2_39_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.39+ x86-64 Details
ridal-0.7.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
ridal-0.7.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
ridal-0.7.0-cp313-cp313-manylinux_2_39_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.39+ x86-64 Details
ridal-0.7.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
ridal-0.7.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
ridal-0.7.0-cp312-cp312-manylinux_2_39_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.39+ x86-64 Details
ridal-0.7.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
ridal-0.7.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
ridal-0.7.0-cp311-cp311-manylinux_2_39_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.39+ x86-64 Details
ridal-0.7.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details

Total release size: 58.5 MB

Release files / ridal-0.7.0-cp314-cp314-win_amd64.whl

Download URL ridal-0.7.0-cp314-cp314-win_amd64.whl
Size 5.7 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
c7bfc1a674b96f792bc8c9e375445527032edfb4646a9966d941bf89ae5db44a
BLAKE2b-256 checksum
How to use checksums
577fd36589d0af9df3dd68925efe7b06bfa606e6f421ecff0642216258edbed9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp314-cp314-manylinux_2_39_x86_64.whl

Download URL ridal-0.7.0-cp314-cp314-manylinux_2_39_x86_64.whl
Size 4.6 MB
Tags CPython 3.14 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
6905379575e5378bff722bbf1009d3ed66a35f64dd04f84a1db1fe01591d2448
BLAKE2b-256 checksum
How to use checksums
a11ac858e17d8697cbf27d5316924cb865e5d01b720a4b86af4d37d9ce8fadc4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL ridal-0.7.0-cp314-cp314-macosx_11_0_arm64.whl
Size 4.3 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
80cc4fb4adce95d49dde4d976ac07ed5b837c298d43d1305e816cdd2b0c8ecd4
BLAKE2b-256 checksum
How to use checksums
6abc232d95ae478c85a2161c7282bc8deaac1af3b93a09a84c32aa89535d61a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp313-cp313-win_amd64.whl

Download URL ridal-0.7.0-cp313-cp313-win_amd64.whl
Size 5.7 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
0ef59232b458daf7de25bda13422f616c4902fa395bb659a02f3cdcc7a168c4f
BLAKE2b-256 checksum
How to use checksums
db1330b2e930e440181b1f59c89447f4d1f721be4fdb36abb44c2aabc4ebf54f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp313-cp313-manylinux_2_39_x86_64.whl

Download URL ridal-0.7.0-cp313-cp313-manylinux_2_39_x86_64.whl
Size 4.6 MB
Tags CPython 3.13 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
d6cc633767a6816a6d0a1afd3b697f73b4319217766e1f8c4017cd5fc1dcde90
BLAKE2b-256 checksum
How to use checksums
cc80e58fdc73287eaf7434a8b653c8e14c9c14948331aac2a9ea45e35cff0808
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL ridal-0.7.0-cp313-cp313-macosx_11_0_arm64.whl
Size 4.3 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
646d20fa5ceb634c1d7f2c30d643bfb042ee3453284b945a16f4ad457cf7c126
BLAKE2b-256 checksum
How to use checksums
8566c9ddf61f01aa9bbe8c5afaf703b10d4900750ffa0f3f97a5be37b18fd51c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp312-cp312-win_amd64.whl

Download URL ridal-0.7.0-cp312-cp312-win_amd64.whl
Size 5.7 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
f6763fecba7a55e54a57845d034aae7c593523a3a1c0a6139c2d74c07730552a
BLAKE2b-256 checksum
How to use checksums
e61e0b50d660135686ca7f41cd3c68f68ccb67b8d5b24b3519747230e8e64c13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp312-cp312-manylinux_2_39_x86_64.whl

Download URL ridal-0.7.0-cp312-cp312-manylinux_2_39_x86_64.whl
Size 4.6 MB
Tags CPython 3.12 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
48b801f3bf78c8e1d8fe8c9b58e29cfdf0b2df740699975022b66554cfe4647f
BLAKE2b-256 checksum
How to use checksums
5c053c8ee04b75515415f4801ae772f221270c635a2dad7340d86d5f9e9dc8df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL ridal-0.7.0-cp312-cp312-macosx_11_0_arm64.whl
Size 4.3 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8aaeb8ebb2a9d7022f8936ec5a73f4aa159091ec578d7425218f5c40ae85d21b
BLAKE2b-256 checksum
How to use checksums
6bd7fad48557683a9ebf9084a11a82889c440793080555a1da15952c41a57494
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp311-cp311-win_amd64.whl

Download URL ridal-0.7.0-cp311-cp311-win_amd64.whl
Size 5.7 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
0c6d204cfa848f26b9b5cc203caeee49cdc5ca95cd812bf07e6c33c2c68df83c
BLAKE2b-256 checksum
How to use checksums
f3ba0c627a7732e60777069267d7b87e7de617db1c42320dbaffb55cd0f499a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp311-cp311-manylinux_2_39_x86_64.whl

Download URL ridal-0.7.0-cp311-cp311-manylinux_2_39_x86_64.whl
Size 4.6 MB
Tags CPython 3.11 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
80c7c5411ea44d935969e523938be6d8eaca6c25c90f84c930200452d811c39d
BLAKE2b-256 checksum
How to use checksums
3e33ec256cc39f75f567cacf54e24edd0c40bd5d961926379227ee0eea96f87c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / ridal-0.7.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL ridal-0.7.0-cp311-cp311-macosx_11_0_arm64.whl
Size 4.3 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
84f56c928cacb5b1d2b2e3f12d86bfa0313c5100f870305a10317732bbd752e4
BLAKE2b-256 checksum
How to use checksums
735cdd4211ac05325386df38e08e7874da17358f1bf02cbcb2a427057d2e554b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for ridal 0.7.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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