Processing profiles

A processing profile stores the settings of the Pick processing and Origin processing panels, the database bar, the QC rule sets and the aggregation rules, so the same setup can be reused, for example one profile per network or region. Profiles are declared in the SeisComP application configuration (catalyst.cfg). Each one points to a .profile file that holds the actual key = value settings.

Declare profiles in catalyst.cfg

Put this in @SYSTEMCONFIGDIR@/catalyst.cfg ($SEISCOMP_ROOT/etc/catalyst.cfg) or in the user configuration @CONFIGDIR@/catalyst.cfg (~/.seiscomp/catalyst.cfg):

# Available processing profiles.
profiles = iceland, ukraine

# Profile applied at start-up. Default: the first one in the list.
defaultProfile = iceland

# Each profile points to a settings file. @SYSTEMCONFIGDIR@, @CONFIGDIR@,
# @DATADIR@ and @ROOTDIR@ are resolved by SeisComP.
profile.iceland.configFile = @SYSTEMCONFIGDIR@/iceland.profile
profile.ukraine.configFile = @SYSTEMCONFIGDIR@/ukraine.profile

At start-up Catalyst reads the profiles list, resolves each configFile path and fills the Profile dropdown in the toolbar. It then applies the profile named by defaultProfile. If that name is not in the list, Catalyst logs a warning and uses the first profile. The profile is applied at the end of start-up, after the locator and travel-time lists have been filled, so the dropdown never shows a profile whose settings are not in effect.

If no profiles are configured, the dropdown shows “(no profiles configured)” and the controls keep their built-in defaults.

Profiles shipped with Catalyst

Three profiles are installed with Catalyst and declared in the default configuration (etc/defaults/catalyst.cfg):

Profile

Content

infra

Infrasound arrays: Is picks from Lambda / autolambda (PMCC), back projection with EDT stacking, Azimuth locator, the iasp91_scanloc_icel026 Is table, the Infrasound tab and three QC rule sets on the array picks (Reject, Check, Confirm). Tested on Romanian, Dutch and German arrays at 60–800 km.

alaska

Regional earthquakes in Alaska and the Aleutians (AK/AT/AV): DBSCAN nucleation, LOCSAT iasp91, QC rules derived from analyst-reviewed events of the Alaska Earthquake Center, the spectra test within 200 km, QC zones Aleutians / mainland and a 0.5° grid for the grid search. It is the profile of the tutorial.

newmexico

Local and regional earthquakes in New Mexico and the Delaware Basin, tuned on 118 reviewed ComCat events: DBSCAN on P, LOCSAT with the iasp91_scanloc tables (installed with scanloc), QC rules that reject none of the reviewed events, the spectra test within 100 km and an adaptive 0.25° grid for the grid search.

The files are in @DATADIR@/catalyst/profiles/ together with the files they refer to (QC zones, grids). An update replaces them: to change a shipped profile, copy it to @SYSTEMCONFIGDIR@ and point its configFile there. A profiles list in etc/catalyst.cfg or ~/.seiscomp/catalyst.cfg replaces the default list; add infra, alaska or newmexico to it to keep them.

File paths inside a profile (qc.zones, nucleator.gridsearch.gridFile, nucleator.gridsearch.stationFile, nucleator.edtloc.stationFile, infra.arraysConfig) may use ~ and the SeisComP variables @DATADIR@, @CONFIGDIR@, @SYSTEMCONFIGDIR@ and @ROOTDIR@.

Other module settings

Settings that belong to the installation rather than to a profile, such as the score plugin, the 3D-view files (gui.*) or the runaway guard nucleator.maxOrigins, are set in catalyst.cfg only. See configuration.

The .profile files

A .profile file is a plain key = value list. Lines starting with # are comments. The keys are grouped by namespace: the nucleator settings use the parameter names of the nucleator plugins (nucleator.<plugin>.<name>, the same names as in catalyst.cfg), the other settings are grouped by panel (locator.*, association.*, merge.*, qc.*, picks.*, spectra.*, infra.*, swarm.*, database.*, gui.*). Save as… writes the keys sorted, so each namespace forms a block. Shortened example:

# Catalyst processing profile - Iceland (IMO)
association.maxDistance       = 100
association.tolerance         = 2
association.tttInterface      = LOCSAT
association.tttModel          = sil
gui.cities                    = "Reykjavik, Grindavík, Húsavík, Akureyri, Selfoss"
locator.interface             = LOCSAT
locator.profile               = sil
merge.distance                = 0.05
merge.minSharedPicks          = 3
merge.pickMatch               = 0.2
merge.time                    = 1
nucleator.dbscan.maxDistP     = 12
nucleator.dbscan.maxDistS     = 15
nucleator.dbscan.maxPickDelay = 90
nucleator.dbscan.minPts       = 6
nucleator.dbscan.phaseType    = P+S
nucleator.dbscan.velP         = 7
nucleator.dbscan.velS         = 4
nucleator.method              = dbscan
picks.aggregation.window      = 1
qc.zones                      = ~/SC_configs/IMO/zones.geojson

Rules for loading:

  • A key that is missing keeps the control’s current value.

  • Unknown keys are ignored. This includes the flat keys of versions before the namespaces (nucMethod, dbscanMaxDistP, qcProfiles, …): convert such a profile with apps/catalyst/docs/profile_keys.py from the source tree (see Converting old profiles).

  • Combo values (nucleator.dbscan.phaseType, locator.interface, locator.profile, association.tttInterface, association.tttModel) are applied only if the option exists in that dropdown on this installation. Otherwise the field is left unchanged, a warning is logged, and a dialog lists the settings that could not be applied.

  • Booleans accept true or 1. Everything else counts as false.

  • A leading ~/ in qc.zones is expanded to the home folder.

Using profiles in the GUI

  • The Profile dropdown in the toolbar lists the configured profiles.

  • Load applies the selected profile. Nothing runs automatically, except that the QC zone file and the bearing catalogue are loaded if their paths are set and the files exist.

  • Save as… writes the current settings to a .profile file. The dialog starts with the selected profile’s configFile, so pressing Enter overwrites it. If you don’t have write access to @SYSTEMCONFIGDIR@, save under ~/.seiscomp/ instead. When the target file already exists, keys the GUI does not manage (for example gui.cities) are kept. After creating a new file, add profiles and profile.<name>.configFile entries for it to catalyst.cfg so it appears in the dropdown next time.

Settings keys

Nucleation

The names after nucleator.<plugin>. are the parameter names of the nucleator plugins, as in catalyst.cfg. .velS stands for nucleator.dbscan.velS, and so on.

Key

Setting

nucleator.method

Nucleation tab: dbscan, backprojection, gamma, gridsearch or edtloc

nucleator.dbscan.phaseType

DBSCAN: Phase (P, S, P+S or Is). The grid search also uses only the picks of this phase.

nucleator.dbscan.velP / .velS / .velIs

DBSCAN: Vel P / Vel S / Vel Is [km/s]

nucleator.dbscan.maxDistP / .maxDistS / .maxDistIs

DBSCAN: Max dist P / S / Is [s]

nucleator.dbscan.minPts

DBSCAN: Min size (picks)

nucleator.dbscan.minStations

DBSCAN: Min sta

nucleator.dbscan.maxPickDelay

DBSCAN: Window [s]

nucleator.dbscan.use3D

DBSCAN: Use 3D distances

nucleator.dbscan.autoDistPercentile

DBSCAN: Dist pctl [%] used by Auto dist.

nucleator.dbscan.autoVelMaxDist

DBSCAN: Pg max [km] for the apparent-velocity fit of Auto vel. (0 = all picks)

nucleator.backprojection.gridKm

Back projection: Grid [km]

nucleator.backprojection.depth

Back projection: Depth [km]

nucleator.backprojection.maxRange

Back projection: Max range [km]

nucleator.backprojection.minPts

Back projection: Min size

nucleator.backprojection.phaseP / .phaseS / .phaseIs

Back projection: phases used (several = joint search)

nucleator.backprojection.t0Tol

Back projection: t0 tol [s]

nucleator.backprojection.azTol

Back projection: Az tol [deg]

nucleator.backprojection.maxAzGap

Back projection: Max az gap [deg] (360 = off)

nucleator.backprojection.useEDT

Back projection: EDT stacking

nucleator.backprojection.edtSigma

Back projection: EDT σ [s]

nucleator.backprojection.windowSec

Back projection: Window [s] (currently has no effect)

nucleator.gamma.gridKm

GaMMA-lite: Grid [km]

nucleator.gamma.coarseWin

GaMMA-lite: Coarse window [s]

nucleator.gamma.otTol

GaMMA-lite: OT tol [s]

nucleator.gamma.windowSec

GaMMA-lite: Processing window [s]

nucleator.gamma.minPts

GaMMA-lite: Min size

nucleator.gamma.depth

GaMMA-lite: Depth [km]

nucleator.gamma.maxRange

GaMMA-lite: Max range [km]

nucleator.gamma.maxSpread

GaMMA-lite: Max OT spread [s]

nucleator.gridsearch.gridFile

Grid search: Grid file (grid.conf, scautoloc format)

nucleator.gridsearch.stationFile

Grid search: Station file (station.conf, scautoloc format)

nucleator.gridsearch.minStations

Grid search: Min. stations

nucleator.gridsearch.dmax

Grid search: Max. distance [deg]

nucleator.gridsearch.dt0

Grid search: Agreement offset [s]

nucleator.gridsearch.defaultDt

Grid search: Projected window [s]

nucleator.gridsearch.maxRadiusFactor

Grid search: Max. radius factor

nucleator.gridsearch.windowSec

Grid search: Processing window [s]

nucleator.edtloc.windowSec

EDT location: Window [s]

nucleator.edtloc.minPts

EDT location: Min. picks

nucleator.edtloc.sigma

EDT location: Pick sigma [s]

nucleator.edtloc.missProb

EDT location: Miss prob.

nucleator.edtloc.searchRadius

EDT location: Search radius [km]

nucleator.edtloc.maxDepth

EDT location: Max. depth [km]

nucleator.edtloc.maxResidual

EDT location: Max. residual [s]

nucleator.edtloc.maxRMS

EDT location: Max. RMS [s]

nucleator.edtloc.useSilent

EDT location: Use stations that have not picked (true/false)

nucleator.edtloc.exemptOverdetecting

EDT location: Ignore the silence of over-detecting stations

nucleator.edtloc.exempt

EDT location: Exempt stations (NET.STA, NET.*, *.STA)

nucleator.edtloc.stationFile

EDT location: Station file (station.conf, scautoloc format)

Pick aggregation and filters

Key

Setting

picks.aggregation.window

Aggregation: Dup. win [s]

picks.aggregation.mode

Aggregation: Mode (0 = Generate virtual pick, 1 = Keep preferred pick)

picks.aggregation.acrossPhases

Aggregate picks of different phases together (no GUI control)

picks.aggregation.preferRules

Aggregation: preferred-pick priority list (format below)

picks.isolated.minStations

Isolated-pick filter: minimum stations (no GUI control)

picks.isolated.window

Isolated-pick filter: time window [s] (no GUI control)

picks.isolated.overdetectingOnly

Isolated-pick filter: apply only to over-detecting stations (no GUI control)

picks.traceVelocity.filter

Pick filter: trace-velocity filter for Is picks on/off

picks.traceVelocity.min / .max

Pick filter: trace-velocity range [km/s]

Relocation, association and merging

Key

Setting

locator.interface

Locator Interface

locator.profile

Locator Profile

locator.fixDepth

Fix depth on/off

locator.fixDepthValue

Fix depth [km]

locator.ignoreInitial

Ignore initial location

locator.dropDuplicateStations

Drop duplicate stations

locator.monteCarlo.draws

Monte Carlo rescue: MC draws

locator.monteCarlo.minSet

Monte Carlo rescue: min set (smallest number of picks in a subset)

locator.smartLocate.minPhases

Smart-locate: min phases of a result (default 5, at least 4)

locator.smartLocate.fast

Fast smart-locate (true/false)

locator.considerVirtualPicks

Consider virtual picks: add the source picks of a virtual pick with weight 0 when locating (true/false)

association.tttInterface

Association: TTT interface

association.tttModel

Association: TTT model

association.tolerance

Association: Assoc. tol [s]

association.maxDistance

Association: Max distance [km] (0 = no limit)

merge.distance

Merge: Merge dist [km]

merge.time

Merge: Merge time [s]

merge.pickMatch

Merge: Pick match [s]

merge.minSharedPicks

Merge: Min shared picks

merge.preferRules

Preferred-origin ranking used when merging (format below)

QC, references and display

Key

Setting

qc.ruleSets

Named QC rule sets (format below)

qc.zones

GeoJSON file with the QC zones, loaded with the profile

swarm.bearingCatalog

Slow/baz source catalogue (CSV), loaded with the profile

swarm.templateTimeTol

Template match time tolerance [s]; 0 = association tol.

gui.cities

Reference cities in the 3D view, comma-separated in quotes. Overrides gui.cities in catalyst.cfg.

gui.columns.origins

Shown columns of the origin table, in display order

gui.columns.picks

Shown columns of the pick table, in display order

gui.columns.arrivals

Shown columns of the arrival table, in display order

gui.moveout.phase

Phase family of the Move-out plot: P, S or Is

Spectra tab

See Spectra. Only keys present in the profile change the settings.

Key

Setting

spectra.enabled

Show the Spectra tab (true / false)

spectra.stations

Number of nearest stations (an array counts as one); the Stations box of the Spectra tab

spectra.maxDistance

Stations farther away [km] are left out. 0 = no limit. The within box of the Spectra tab.

spectra.threshold

Arch [dB] above which a station counts as event

spectra.scan / spectra.scanRange

Shift P and S around the predicted times / by up to this many s

spectra.postGap

Gap before the window after S, in units of S−P

spectra.splitHz

Centre frequency of the mirrored plot axis [Hz]

spectra.timeout

Waveform request timeout [s]

spectra.parallel

Origins analysed in parallel by Calculate spectra (1–8)

spectra.isLead / spectra.isLength

Is window: start before the Is pick / length [s] (default 5 / 30)

spectra.isBand

Band of the Is height [Hz], min,max (default 1,10)

spectra.pMaxIs

Longest P window when Is is the right half [s] (default 30)

spectra.suspect

Array element suspect when this many dB below the others (default 6)

Infrasound tab

See Infrasound. Only keys present in the profile change the settings.

Key

Setting

infra.enabled

Show the Infrasound tab (true / false)

infra.arrays

Array names, comma-separated, as in the Lambda configuration (for example LISA, DBN). Empty: every station whose picks carry a back-azimuth counts as one array.

infra.arraysConfig

Lambda configuration files that define the arrays (arrays.<name>.channels), comma-separated. ~ and the SeisComP variables are resolved, for example @SYSTEMCONFIGDIR@/autolambda.cfg.

infra.celerity

Celerity band [km/s], min,max. Default 0.25,0.35; the infra profile uses 0.22,0.35.

infra.appVel

Apparent-velocity band [km/s], min,max. Default 0.3,0.45.

infra.bazNSigma

Back-azimuth tolerance as a multiple of the pick’s uncertainty. The tolerance is the larger of this and the back projection Az tol. Default 3.

infra.celSpread

Allowed difference [km/s] from the celerity of the other arrays. Default 0.015; 0 = band only.

infra.maxDistance

Arrays farther away [km] are left out. 0 = no limit.

infra.seasonal

Apply the seasonal up/downwind rule (true / false). Default true.

Database bar

Key

Setting

database.picks / database.origins

picks / origins: load all picks / all origins in the window

database.prefOrigins / database.prefPicks

pref. origins / pref. picks: load only each event’s preferred origin / only the picks associated with it

database.aggregate

aggregate: aggregate the picks after every load

database.keepPicks / database.keepOrigins

keep picks / keep origins: add to what is loaded instead of replacing it

database.start / database.end

Time window, ISO 8601 (for example 2025-11-01T00:00:00Z)

Rule formats

qc.ruleSets

Rule sets are joined with |. Each one is name=chain, and a chain is a ;-separated list of conditions:

qc.ruleSets = Gap zones=0,2,2,180,0;0,14,4,1,0|Weak=0,1,0,6,0;1,3,2,1,0

Each condition is conn,field,op,threshold,indent:

  • conn: how the condition joins the one above. 0 = AND, 1 = OR. AND binds more tightly than OR. Ignored for the first condition.

  • field:

    Code

    Field

    Code

    Field

    0

    Depth [km]

    9

    S cov (0 = good)

    1

    Phase count

    10

    Fault Q (0 = good)

    2

    Azimuthal gap [deg]

    11

    Min sta dist [km]

    3

    RMS [s]

    12

    Mode (0 = automatic, 1 = manual, -1 = not set)

    4

    Mismatch

    13

    Status (0 = preliminary, 1 = confirmed, 2 = reviewed, 3 = final, 4 = rejected, 5 = reported, -1 = not set)

    5

    Move-out 0–1

    14

    Zone

    6

    DD ref ties

    15

    Clean Q (0 = good)

    7

    DD residual [s]

    16

    Score

    8

    DD qual (0 = good)

  • op: 0 <, 1 ≤, 2 >, 3 ≥, 4 =, 5 ≠

  • threshold: number

  • indent: grouping depth (0 = top level)

The custom (“(custom)”) query is scratch space and is not saved. It always starts empty when a profile is loaded. Loading a profile that contains qc.ruleSets replaces all named rule sets. The built-in defaults are added back if they are missing.

merge.preferRules

Preferred-origin ranking, ;-separated, in priority order. Each rule is field,value. For numeric fields (the QC field codes above), value is 1 to prefer higher values or 0 to prefer lower ones. For Author (1000) and Method (1001), value is the author or method name to prefer.

merge.preferRules = 12,1;3,0;1000,scautoloc

picks.aggregation.preferRules

Preferred-pick priority list for “Keep preferred pick”, in the same field,value format:

Code

Field

2000

Manual (manual beats automatic)

2001

Status (more vetted wins)

2002

Time uncertainty [s]

2003

Time (earliest / latest)

2004

Author (value = author name)

2005

Method (value = methodID)

Not stored in profiles

These settings currently live only in the GUI session: the aggregation time mode, cell size and carried measurements, the swarm, template and fingerprint matching parameters (except the template match time tolerance, swarm.templateTimeTol), the map clustering settings, and the pick and origin filters except the trace-velocity filter.

Converting old profiles

Profiles written before the namespaced keys use flat names such as nucMethod, dbscanMaxDistP or qcProfiles, which are no longer read. Convert them with the script in the source tree:

# print the converted profile
python3 apps/catalyst/docs/profile_keys.py old.profile > new.profile

# convert in place; --sort groups the keys by namespace as Save as... does,
# --align lines up the values of hand-written files
python3 apps/catalyst/docs/profile_keys.py --in-place --sort my.profile

Comments are kept. Keys the script does not know are kept unchanged and reported; obsolete keys (avgVelocity, maxDist, qcRules, confidence) are dropped. The script also holds the complete table of old and new names.