Skip to content

Run directory

Every search writes its results into a run directory, named after the configuration file: qseek search my-search.json creates my-search/. Qseek adds each detection while the search runs, so you can look at the results before the search ends.

my-search/
├── search.json                     # the configuration of the run
├── progress.json                   # how far the search got, for `qseek continue`
├── qseek.log                       # the log of the search
├── detections.json                 # all detections, one JSON object per line
├── detections_receivers.json       # modeled and picked arrivals of every detection
├── semblance.mseed                 # the detection function over time
├── csv/
│   ├── detections.csv              # the detections as a table
│   ├── detections_jittered.csv     # the same, with jittered locations
│   └── stations.csv                # the stations of the search
├── pyrocko_detections.list         # the detections as Pyrocko events
├── pyrocko_detections_jittered.list
├── pyrocko_stations.yaml           # the stations as Pyrocko stations
└── pyrocko_markers/                # event and phase markers for Snuffler

With save_images, Qseek also writes the phase images into images/. Searches with 3D velocity models export the models to 3d-models/, see visualize 3D models. pyrocko_markers/ holds one file per detection with its event marker and the modeled and picked phase markers, which qseek snuffler shows with the waveforms.

Detections

detections.json holds all detections in the JSON Lines format, one detection per line. The modeled and picked arrivals at every station are in detections_receivers.json, in the same order.

csv/detections.csv is a table of the detections, for spreadsheets, GIS software and plotting:

Column Description
time Origin time, ISO 8601 in UTC
lat, lon Epicenter in degrees
depth Depth in meters, positive down
east_shift, north_shift Location relative to the center of the search volume in meters
distance_border Distance to the border of the search volume in meters
semblance Peak value of the detection function
azimuthal_coverage 360° minus the largest azimuthal gap between stations with picks, in degrees
n_stations, n_picks Number of stations and of phase picks
rms Root mean square of the travel time residuals of the picks in seconds, averaged over the phases
uncertainty_horizontal, uncertainty_vertical Location uncertainty in meters
WKT_geom The location as a WKT point, for GIS software

Every magnitude adds its own columns.

Jittered locations

The locations of the detections fall onto the nodes of the octree, which can show up as a grid pattern in maps. The _jittered files shift every location randomly by up to half the smallest node size in each direction, for maps and density plots. Use the files without jitter for analysis.

Read the detections in Python

Load the detections of a run
from pathlib import Path

from qseek.models.catalog import EventCatalog

catalog = EventCatalog.load_rundir(Path("my-search"))
print(f"{catalog.n_events} detections")

for detection in catalog:
    lat, lon = detection.effective_lat_lon
    print(detection.time, lat, lon, detection.effective_depth, detection.semblance)

Each detection also holds its magnitudes, features and location uncertainty, see the detections reference.

Next steps

Explore the results in the web UI, in Snuffler or in GIS software, or export them to other formats.