.. |scbin| replace:: `seiscomp`
.. |scname| replace:: `SeisComP`
.. |gempa| replace:: `gempa`

**access.\***
*Defines access to restricted data. When defined it will add the listed users to the list of authorized users to access certain restricted data give the parameters on this binding.*

Defines access to restricted data. When defined it will add the listed users to the list of authorized users to access certain restricted data give the parameters on this binding.

List of users \(e\-mail addresses\) allowed to access the restricted data.

When disableStationCode option is set to true the access entries will be generated only for the network level \(and optionally stream level\), no station code will be filled \(this can potentially reduce the number of entries on the access table, and save memory on the request handler when used\).

List of locations.streams this access rule applies to. The location code is optional \(optional, allow wildcards\).

**Synchronize key files with configuration database or convert them to
configuration XML.**

Synchronize key files with configuration database or convert them to
configuration XML.

bindings2cfg dumps the bindings configuration from a specific key directory
to the given database or a configuration XML. In this way, the bindings parameters
can be configured in a directory different from $SEISCOMP_ROOT/etc/. From this
non-standard directory the configuration XML can be created without
prior writing the bindings to a database and reading from there using e.g.
:ref:`scxmldump`.

Write the bindings configuration from some key directory to a configuration
XML file:

.. code-block:: sh

  bindings2cfg --key-dir ./etc/key -o config.xml

XML file:

Write the bindings configuration from some key directory to the seiscomp
database on localhost

   bindings2cfg --key-dir ./etc/key -d mysql://sysop:sysop@localhost/seiscomp

bindings2cfg --key-dir ./etc/key -d mysql://sysop:sysop@localhost/seiscomp

bindings2cfg inherits :ref:`global options<global-configuration>`.

Use alternative configuration file. When this option is
used the loading of all stages is disabled. Only the
given configuration file is parsed and used. To use
another name for the configuration create a symbolic
link of the application or copy it. Example:
scautopick \-> scautopick2.

scautopick -> scautopick2.

Run as daemon. This means the application will fork itself
and doesn't need to be started with \&.

Enable\/disable self\-shutdown because a master module shutdown.
This only works when messaging is enabled and the master
module sends a shutdown message \(enabled with \-\-start\-stop\-msg
for the master module\).

Set the name of the master\-module used for auto\-shutdown.
This is the application name of the module actually
started. If symlinks are used, then it is the name of
the symlinked application.

Set the name of the master\-username of the messaging
used for auto\-shutdown. If \"shutdown\-master\-module\" is
given as well, this parameter is ignored.

Verbosity level [0..4]. 0:quiet, 1:error, 2:warning, 3:info,
4:debug.

Limit the logging to a certain component. This option can
be given more than once.

Use syslog logging backend. The output usually goes to
\/var\/lib\/messages.

Execute in debug mode.
Equivalent to \-\-verbosity\=4 \-\-console\=1 .

The database connection string, format:
service:\/\/user:pwd\@host\/database.
\"service\" is the name of the database driver which
can be queried with \"\-\-db\-driver\-list\".

Load the inventory from the given database or file, format:
[service:\/\/]location .

Load the configuration from the given database or file,
format: [service:\/\/]location .

format: [

Overrides configuration parameter :confval:`connection.username`.

Overrides configuration parameter :confval:`connection.timeout`.

Overrides configuration parameter :confval:`connection.primaryGroup`.

A group to subscribe to.
This option can be given more than once.

Overrides configuration parameter :confval:`connection.contentType`.

Override the location of the default key directory,
which is \$SEISCOMP_ROOT\/etc\/key .

If given then a notifier message containing all notifiers
will be written to the output XML. This option only applies
if an output file is given. Notifier creation either requires
and input database and an input config XML as reference.

Hyperlink target "bindings2cfg-configuration" is not referenced.

Diskmon is a SeisComP init script that checks on each call to :program:`seiscomp check`
the filesystem by running the following command:

where "%d" is replaced by the configured threshold. If there are lines in the
output (which means some filesystem exceed the usage threshold) it sends
the output along with a description line to all configured receipients using
the :program:`mail` command.

where “%d” is replaced by the configured threshold. If there are lines in the
the 

To make diskmon work it is important that :program:`mail` is working on the shell.

diskmon is a :term:`standalone module` and does not inherit :ref:`global options <global-configuration>`.

Disk usage threshold in percent. Each time when the disk usage exceeds this level,
an alert e\-mail is send to the user. Note that disk usage is only checked when a
cron job of seiscomp check is installed or seiscomp check is called
regularly by other means.

an alert e-mail is send to the user. Note that disk usage is only checked when a

Comma\-separated list of e\-mail addresses to notify when disk usage
threshold is exceeded.

dlsv2inv converts dataless `SEED <http://www.iris.edu/data/dataless.htm>`_ to
SeisComP XML (:term:`SCML`). Due to the limitations of dataless SEED dlsv2inv allows to set
attributes which are not available in dataless such as network type, network
description and so on.

). Due to the limitations of dataless SEED dlsv2inv allows to set

The SeisComP inventory network and station objects have the attribute archive
which should contain the local datacenter where the information comes from.

While importing the attribute :confval:`datacenterID` is read and written into
the archive attribute of all networks and stations available in the dataless.
The datacenterID can be overridden with the ``--dcid`` command-line option.

 is read and written into
The datacenterID can be overridden with the 

Conversion of inventory in |scname| XML to dataless SEED is provided by :ref:`inv2dlsv`.

Convert a given dataless SEED file to SeisComP XML.

   dlsv2inv GE.dataless GE.xml

Override the datacenterID and leave it blank in the output.

   dlsv2inv --dcid "" GE.dataless GE.xml

For each log entry print the component right after the
log level. By default the component output is enabled
for file output but disabled for console output.

Execute in trace mode.
Equivalent to \-\-verbosity\=4 \-\-console\=1 \-\-print\-component\=1
\-\-print\-context\=1 .

Override the datacenter ID which is read from the
datacenterID configuration parameter and written to the
network and station archive attribute.

Set the network description. It supports the following
placeholders: \${code}, \${start}, \${end}, \${class} and
\${archive}.

Folder to store logs and achives of hypo2000_arc files from Earthworm export_genericer

Expected Earthworm Module ID \(ew2sc3 will read the message only if its ModID is correct\).
Set to 0 \(MOD_WILDCARD\) to accept any Earthworm Module ID.

Expected Earthworm Institute ID \(ew2sc3 will read the message only if its InstID is correct\)
Set to 0 \(INST_WILDCARD\) to accept any Earthworm Institute ID.

Institute name to use when storing origin into database.
If blank, the origin will have the system AgencyID. If specified, the origin will have the given AgencyID.

Default event latitude to use if hypo2000_arc location is null \(space filled\)

Default event longitude to use if hypo2000_arc location is null \(space filled\)

Enable\/Disable hypo2000_arc message file archiving \(usefull for troobleshooting\)

Time interval \(in sec\) between two heartbeats messages sent by SeisComP.
This parameter should be lower than Earthworm export_generic RcvAliveInt parameter

Maximum time \(in millisecond\) before the connection to Earthworm export_generic times out.
This parameter has to be set accordingly to Earthworm export_generic parameters

Maximum message size \(in char\) between the Earthworm export_generic and ew2sc3.
This parameter has to be set accordingly to Earthworm export_generic MaxMsgSize parameter

Alive string to send to Earthworm export_generic in order to keep the connection alive.
This string should be identical as Earthworm export_generic RcvAliveText string

Alive string expected from Earthworm export_generic in order to keep the connection alive.
This string should be identical as Earthworm export_generic SendAliveText string

Enable\/Disable uncertainties conversions.
Earthworm doesn't have uncertainties but weight from 0 to 4.
If enabled, ew2sc3 will convert pick weight to uncertainties followind a simple mapping between weight and pickerUncertainties list.

Enable/Disable uncertainties conversions.
Earthworm doesn’t have uncertainties but weight from 0 to 4.

Uncertainty values \(in sec\) to use when enableUncertainties is enabled.
Refer to scolv document for syntax.

Maximum weight value from Earthworm corresponding to maximum uncertainty

fdsnws is a server that provides event and station information by FDSN Web Services
(:cite:t:`fdsn`)
from a SeisComP database and waveforms from a :ref:`global_recordstream` source.
Also it may be configured to serve data
availability information as described in the IRIS DMC FDSNWS availability Web
Service Documentation (:cite:t:`iris-dmc`).

(

 source.
Service Documentation (

If you expose the FDSN Web Service as a public service, make sure that
the database connection is read-only. fdsnws will never attempt to write
into the database.

`FDSN Station XML <http://www.fdsn.org/xml/station/>`_, `StationXML <http://www.data.scec.org/station/xml.html>`_, :term:`SCML`

text, geocsv, json, sync, request (`fdsnws-dataselect <https://service.iris.edu/fdsnws/dataselect/1>`_)

The available services can be reached from the fdsnws start page.  The services
also provide an interactive URL builder constructing the request URL based on
user inputs. The FDSN specifications can be found on :cite:t:`fdsn`.

user inputs. The FDSN specifications can be found on 

If ``fdsnws`` is started, it accepts connections by default on port 8080 which
can be changed in the configuration. Also please read :ref:`sec-port` for
running the services on a privileged port, e.g. port 80 as requested by the
FDSNWS specification.

 is started, it accepts connections by default on port 8080 which
can be changed in the configuration. Also please read 

 for

If you decide to run the service on a different URL than ``localhost:8080``
you have to change the URL string in the ``*.wadl`` documents located under
``$DATADIR/fdsnws``.

Request URL for querying waveform data from the GE station BKNI, all BH channels
on 11 April 2013 between 00:00:00 and 12:00:00:

``http://localhost:8080/fdsnws/dataselect/1/query?net=GE&sta=BKNI&cha=BH?&start=2013-04-11T00:00:00&end=2013-04-11T12:00:00``

To submit HTTP-POST requests the command line tool ``curl`` may be used:

sysop@host:~$ curl -X POST --data-binary @request.txt "http://localhost:8080/fdsnws/dataselect/1/query"

where *request.txt* contains the POST message body. For details read the
FDSN specifications.

 contains the POST message body. For details read the

``quality`` parameter not implemented (information not available in SeisComP)

 parameter not implemented (information not available in SeisComP)

Access to restricted networks and stations is only granted through the
``queryauth`` method

The data channels exposed by this service may be restricted by defining an
inventory filter, see section :ref:`sec-inv-filter`.

inventory filter, see section 

**No** trimming of miniSEED records to requested time window -- This FDSNWS
implementation returns the records as available in its data source, e.g., SDS
archive. It is guaranteed that the requested time range is within the returned
data (if available in the archive) but not that it is exactly the requested
time range. FDSNWS does not trim and therefore re-encode miniSEED records. The
rationale for that is that miniSEED records are probably further distributed
and stored in other archives and we do not see the point in modifying them.
Furthermore we do not want to increase the load on the web server with that
extra processing step.

 trimming of miniSEED records to requested time window – This FDSNWS

Configure the :ref:`global_recordstream` in the module's global configuration.
If the data is stored in a local waveform archive the
:ref:`rs-sdsarchive` provides fast access to the data. For archives on remote hosts
use :ref:`rs-arclink` or :ref:`rs-fdsnws` instead.

 in the module’s global configuration.

 provides fast access to the data. For archives on remote hosts
use 

Requesting future or delayed data may block the :ref:`sec-dataSelect` service.
Therefore, real-time :ref:`global_recordstream` requests such as :ref:`rs-slink`
should be avoided.
If :ref:`rs-slink` is inevitable make use of the ``timeout`` and
``retries`` parameters. E.g. set the :confval:`recordstream` to
``slink://localhost:18000?timeout=1&retries=0`` or in case of the :ref:`rs-combined`
service to
``combined://slink/localhost:18000?timeout=1&retries=0;sdsarchive//home/sysop/seiscomp/var/lib/archive``.

Stations may be filtered e.g. by geographic region and time, also the
information depth level is selectable

Optionally handles time-based conditional HTTP-GET requests as specified by
`RFC 7232 <https://tools.ietf.org/html/rfc7232>`_.

Request URL for querying the information for the GE network on response level:

http://localhost:8080/fdsnws/station/1/query?net=GE&cha=BH%3F&level=response&nodata=404

To enable FDSNXML or StationXML support load the plugin ``fdsnxml``. The
plugin is loaded by default configuration.

``updatedafter`` request parameter not implemented: The last modification time
in |scname| is tracked on the object level. If a child of an object is updated
the update time is not propagated to all parents. In order to check if a
station was updated all children must be evaluated recursively. This operation
would be much too expensive.

 request parameter not implemented: The last modification time
in 

 is tracked on the object level. If a child of an object is updated

Additional values of request parameters:

* format:

  * standard: ``[xml, text]``
  * additional: ``[fdsnxml (=xml), stationxml, sc3ml]``
  * default: ``xml``

format:

* standard: ``[xml, text]``
* additional: ``[fdsnxml (=xml), stationxml, sc3ml]``
* default: ``xml``

The inventory exposed by this service may be restricted, see section
:ref:`sec-inv-filter`.

Request URL for fetching the event parameters within 10 degrees around 50°N/11°E
starting on 18 April 2013:

http://localhost:8080/fdsnws/event/1/query?start=2018-06-01&lat=50&lon=11&maxradius=10&nodata=404

|scname| does not distinguish between catalogs and contributors, but
supports agencyIDs. Hence, if specified, the value of the ``contributor``
parameter is mapped to the agencyID. The file
``@DATADIR@/share/fdsn/contributors.xml`` has to be filled manually with all
available agency ids

 does not distinguish between catalogs and contributors, but
supports agencyIDs. Hence, if specified, the value of the 

Origin and magnitude filter parameters are always applied to preferred origin
resp. preferred magnitude

Additional request parameters:

* ``includepicks``: boolean, default: ``false``, works only in combination
  with ``includearrivals`` set to ``true``
* ``includecomments``: boolean, default: ``true``
* ``formatted``: boolean, default: ``false``

``includepicks``: boolean, default: ``false``, works only in combination
with ``includearrivals`` set to ``true``

* format:

  * additional: ``[qml (=xml), qml-rt, sc3ml, csv]``

format:

* additional: ``[qml (=xml), qml-rt, sc3ml, csv]``

The data availability web service returns detailed time span information of
what time series data is available at the DMC archive. The availability information
can be created by :ref:`scardac` in the |scname| database from where it is
fetched by fdsnws.

can be created by 

The availability service is no official standard yet. This implementation aims
to be compatible with the IRIS DMC availability FDSN Web Service
(:cite:t:`iris-dmc`) implementation.

(

results may be filtered e.g. by channel code, time and quality

http://localhost:8080/ext/availability/1/extent - Produces list of available
time extents (earliest to latest) for selected channels (network, station,
location and quality) and time ranges.

 - Produces list of available

http://localhost:8080/ext/availability/1/builder-extent - URL builder helping
you to form your data extent requests

http://localhost:8080/ext/availability/1/query - Produces list of contiguous
time spans for selected channels (network, station, location, channel and
quality) and time ranges.

 - Produces list of contiguous

http://localhost:8080/ext/availability/1/builder - URL builder helping you to
form your data time span requests

Request URL for data extents of seismic network ``IU``:

http://localhost:8080/fdsnws/ext/availability/1/extent?net=IU

Further limit the extents to those providing data for August 1st 2018:

http://localhost:8080/fdsnws/ext/availability/1/extent?net=IU&start=2018-08-01

Request URL for continues time spans of station ``ANMO`` in July 2018:

http://localhost:8080/fdsnws/ext/availability/1/query?sta=ANMO&start=2018-07-01&end=2018-08-01

The IRISWS availability implementation truncates the time spans of the returned
data extents and segments to the requested start and end times (if any). This
implementation truncates the start and end time only for the formats: ``sync``
and ``request``. The ``text``, ``geocsv`` and ``json`` format will return the
exact time windows extracted from the waveform archive.

The reasons for this derivation are:

* performance: With the ``/extent`` query the ``text``, ``geocsv`` and
  ``json`` offer the display of the number of included time spans
  (``show=timespancount``). The data model offers no efficient way to
  recalculate the number of time spans represented by an extent if the extents
  time window is altered by the requested start and end times. The ``sync``
  and ``request`` formats do not provided this counter and it is convenient to
  use their outputs for subsequent data requests.
* by truncating the time windows information is lost. There would be no
  efficient way for a client to retrieve the exact time windows falling into a
  specific time span.
* network and station epochs returned by the :ref:`sec-station` service are also
  not truncated to the requested start and end times.
* truncation can easily be done on client side. No additional network traffic is
  generated.

implementation truncates the start and end time only for the formats: 

 format will return the

performance: With the ``/extent`` query the ``text``, ``geocsv`` and
``json`` offer the display of the number of included time spans
(``show=timespancount``). The data model offers no efficient way to
recalculate the number of time spans represented by an extent if the extents
time window is altered by the requested start and end times. The ``sync``
and ``request`` formats do not provided this counter and it is convenient to
use their outputs for subsequent data requests.

). The data model offers no efficient way to
time window is altered by the requested start and end times. The 

 formats do not provided this counter and it is convenient to

by truncating the time windows information is lost. There would be no
efficient way for a client to retrieve the exact time windows falling into a
specific time span.

network and station epochs returned by the :ref:`sec-station` service are also
not truncated to the requested start and end times.

 service are also

truncation can easily be done on client side. No additional network traffic is
generated.

The channels served by the :ref:`sec-station` and :ref:`sec-dataSelect` services
may be filtered by specified an INI file in the ``stationFilter`` and
``dataSelectFilter`` configuration parameter. You may use the same file for both
services or define a separate configuration set. **Note:** If distinct file
names are specified and both services are activated, the inventory is loaded
twice which will increase the memory consumption of this module.

 configuration parameter. You may use the same file for both
services or define a separate configuration set. 

 If distinct file

[Chile]
code = CX.*.*.*

[!Exclude station APE]
code = GE.APE.*.*

[German (not restricted)]
code = GE.*.*.*
restricted = false
shared = true
archive = GFZ

The listing above shows a configuration example which includes all Chile
stations. Also all not restricted German stations, with exception of the station
GE.APE, are included.

The configuration is divided into several rules. The rule name is given in
square brackets. A name starting with an exclamation mark defines an exclude
rule, else the rule is an include. The rule name is not evaluated by the
application but is plotted when debugging the rule set, see configuration
parameter ``debugFilter``.

parameter 

Each rule consists of a set of attributes. The first and mandatory attribute is
``code`` which defines a regular expression for the channel code (network,
station, location, channel). In addition the following optional attributes
exist:

 which defines a regular expression for the channel code (network,
exist:

A rule matches if all of its attributes match. The optional attributes are
evaluated bottom-up where ever they are applicable. E.g. if a rule defines
``restricted = false`` but the restricted flag is not present on channel level
then it is searched on station and then on network level. If no ``restricted``
attribute is found in the hierarchy, the rule will not match even if the value
was set to ``false``.

 but the restricted flag is not present on channel level
then it is searched on station and then on network level. If no 

was set to 

The individual rules are evaluated in order of their definition. The processing
stops once a matching rule is found and the channel is included or excluded
immediately. So the order of the rules is important.

One may decided to specify a pure whitelist, a pure blacklist, or to mix include
and exclude rules. If neither a matching include nor exclude rule is found, then
channel is only added if no other include rule exists in the entire rule set.

The FDSN Web service specification defines that the Service SHOULD be available
under port 80. Typically |scname| runs under a user without root permissions
and therefore is not allowed to bind to privileged ports (<1024).
To serve on port 80 you may for instance

under port 80. Typically 

 runs under a user without root permissions

Use a proxy Webserver, e.g. Apache with
`mod-proxy <http://httpd.apache.org/docs/2.2/mod/mod_proxy.html>`_ module

``authbind`` allows a program which does not or should not run as root to bind
to low-numbered ports in a controlled way. Please refer to ``man authbind`` for
program descriptions. The following lines show how to install and setup authbind
for the user ``sysop`` under the Ubuntu OS.

 allows a program which does not or should not run as root to bind
to low-numbered ports in a controlled way. Please refer to 

 for
for the user 

sysop@host:~$ sudo apt-get install authbind
sysop@host:~$ sudo touch /etc/authbind/byport/80
sysop@host:~$ sudo chown sysop /etc/authbind/byport/80
sysop@host:~$ sudo chmod 500 /etc/authbind/byport/80

Once ``authbind`` is configured correctly the FDSN Web services may be started
as follows:

 is configured correctly the FDSN Web services may be started

In order use ``authbind`` when starting ``fdsnws`` as |scname| service the last
line in the ``~/seiscomp/etc/init/fdsnws.py`` have to be commented in.

All major Linux distributions ship with their own firewall implementations which
are front-ends for the ``iptables`` kernel functions. The following line
temporary adds a firewall rule which redirects all incoming traffic on port 8080
to port 80.

are front-ends for the 

 kernel functions. The following line
to port 80.

sysop@host:~$ sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

Please refer to the documentation of your particular firewall solution on how to
set up this rule permanently.

The FDSNWS standard requires HTTP digest authentication as the
authentication mechanism. The "htpasswd" configuration option is used to
define the location of the file storing usernames and passwords of users
who are allowed to get restricted data. Any user with valid credentials
would have access to all restricted data.

authentication mechanism. The “htpasswd” configuration option is used to

An extension to the FDSNWS protocol has been developed in order to use
email-pattern-based access control lists, which is an established
authorization mechanism in SeisComP3 (used by Arclink). It works as follows:

The user contacts an authentication service (based on eduGAIN AAI,
e-mail, etc.) and receives a list of attributes (a token), signed by the
authentication service. The validity of the token is typically 30 days.

The user presents the token to /auth method (HTTPS) of the dataselect
service. This method is the only extension to standard FDSNWS that is
required.

required.

If the digital signature is valid, a temporary account for /queryauth
is created. The /auth method returns username and password of this
account, separated by ':'. The account is typically valid for 24 hours.

account, separated by ‘:’. The account is typically valid for 24 hours.

The username and password are to be used with /queryauth as usual.

Authorization is based on user's e-mail address in the token and
arclink-access bindings.

Authorization is based on user’s e-mail address in the token and

The authentication extension is enabled by setting the "auth.enable"
configuration option to "true" and pointing "auth.gnupgHome" to a directory
where GPG stores its files. Let's use the directory
~/seiscomp/var/lib/gpg, which is the default.

The authentication extension is enabled by setting the “auth.enable”
configuration option to “true” and pointing “auth.gnupgHome” to a directory
where GPG stores its files. Let’s use the directory

First create the direcory and your own signing key:

   sysop@host:~$ mkdir -m 700 ~/seiscomp/var/lib/gpg
   sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --gen-key

sysop@host:~$ mkdir -m 700 ~/seiscomp/var/lib/gpg
sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --gen-key

Now import GPG keys of all authentication services you trust:

   sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --import <keys.asc

sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --import <keys.asc

Finally sign all imported keys with your own key (XXXXXXXX is the ID of
an imported key):

   sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --edit-key XXXXXXXX sign save

sysop@host:~$ gpg --homedir ~/seiscomp/var/lib/gpg --edit-key XXXXXXXX sign save

...and set auth.enable, either using the "scconfig" tool or:

   sysop@host:~$ echo "auth.enable = true" >> ~/seiscomp/etc/fdsnws.cfg

sysop@host:~$ echo "auth.enable = true" >> ~/seiscomp/etc/fdsnws.cfg

A client like :ref:`fdsnws_fetch <sec-fdsnws-related>` is recommended, but also tools like wget and
curl can be used. As an example, let's request data from the restricted
station AAI (assuming that we are authorized to get data of this station).

 is recommended, but also tools like wget and
curl can be used. As an example, let’s request data from the restricted

The first step is to obtain the token from an authentication service.
Assuming that the token is saved in "token.asc", credentials of the
temporary account can be requested using one of the following commands:

   sysop@host:~$ wget --post-file token.asc https://geofon.gfz-potsdam.de/fdsnws/dataselect/1/auth -O cred.txt
   sysop@host:~$ curl --data-binary @token.asc https://geofon.gfz-potsdam.de/fdsnws/dataselect/1/auth -o cred.txt

Assuming that the token is saved in “token.asc”, credentials of the

sysop@host:~$ wget --post-file token.asc https://geofon.gfz-potsdam.de/fdsnws/dataselect/1/auth -O cred.txt
sysop@host:~$ curl --data-binary @token.asc https://geofon.gfz-potsdam.de/fdsnws/dataselect/1/auth -o cred.txt

The resulting file "cred.txt" contains username and password separated by
a colon, so one can conveniently use a shell expansion:

   sysop@host:~$ wget "http://`cat cred.txt`@geofon.gfz-potsdam.de/fdsnws/dataselect/1/queryauth?starttime=2015-12-15T16:00:00Z&endtime=2015-12-15T16:10:00Z&network=IA&station=AAI" -O data.mseed
   sysop@host:~$ curl --digest "http://`cat cred.txt`@geofon.gfz-potsdam.de/fdsnws/dataselect/1/queryauth?starttime=2015-12-15T16:00:00Z&endtime=2015-12-15T16:10:00Z&network=IA&station=AAI" -o data.mseed

The resulting file “cred.txt” contains username and password separated by

sysop@host:~$ wget "http://`cat cred.txt`@geofon.gfz-potsdam.de/fdsnws/dataselect/1/queryauth?starttime=2015-12-15T16:00:00Z&endtime=2015-12-15T16:10:00Z&network=IA&station=AAI" -O data.mseed
sysop@host:~$ curl --digest "http://`cat cred.txt`@geofon.gfz-potsdam.de/fdsnws/dataselect/1/queryauth?starttime=2015-12-15T16:00:00Z&endtime=2015-12-15T16:10:00Z&network=IA&station=AAI" -o data.mseed

Using the :ref:`fdsnws_fetch <sec-fdsnws-related>` utility, the two steps above can be combined into
one:

   sysop@host:~$ fdsnws_fetch -a token.asc -s 2015-12-15T16:00:00Z -e 2015-12-15T16:10:00Z -N IA -S AAI -o data.mseed

one:

sysop@host:~$ fdsnws_fetch -a token.asc -s 2015-12-15T16:00:00Z -e 2015-12-15T16:10:00Z -N IA -S AAI -o data.mseed

In addition to normal |scname| logs, fdsnws can create a simple HTTP access log
and/or a detailed request log. The locations of log files are specified by
"accessLog" and "requestLog" in fdsnws.cfg.

 logs, fdsnws can create a simple HTTP access log
“accessLog” and “requestLog” in fdsnws.cfg.

Both logs are text-based and line-oriented. Each line of *access* log
contains the following fields, separated by '|' (some fields can be empty):

 log
contains the following fields, separated by ‘|’ (some fields can be empty):

Each line of *request* log contains a JSON object, which has the following
attributes:

 log contains a JSON object, which has the following

userEmail
e-mail address of authenticated user if using restricted data

userLocation
JSON object containing rough user location (eg., country) for statistic purposes

trace
request content after wildcard expansion (array of JSON objects)

Both logs are rotated daily. In case of access log, one week of data is
kept. Request logs are compressed using bzip2 and not removed.

If trackdb.enable=true in fdsnws.cfg, then requests are additionally logged
into SeisComP database using the ArcLink request log schema. Be aware that the
number of requests in a production system can be rather large. For example,
the GEOFON datacentre is currently serving between 0.5..1 million FDSNWS
requests per day.

:term:`GEOFON` maintains scripts for FDSNWS :cite:p:`fdsnws_scripts`:

The :program:`fdsnws_fetch` client is a convenient tool for requesting
waveforms from a FDSN web service hosted by :term:`EIDA` nodes.

 client is a convenient tool for requesting
waveforms from a FDSN web service hosted by 

The :program:`fdsnws2sds` client is a tool for requesting waveforms
from a FDSN web service hosted by :term:`EIDA` nodes and to store them into an
:term:`SDS` archive.

 client is a tool for requesting waveforms
from a FDSN web service hosted by 

IRIS maintains a list of data centers (:cite:t:`fdsn-datacenters`)
supporting FDSN Web Services (:cite:t:`fdsn`).

Define the bind address of the server. \"0.0.0.0\" allows
any interface to connect to this server whereas \"127.0.0.0\"
only allows connections from localhost.

Server port to listen for incoming requests. Note: The FDSN Web
service specification defines the service port 80. Please refer
to the documentation on how to serve on privileged ports.

Maximum number of objects per query, used in fdsnws\-station and
fdsnws\-event to limit main memory consumption.

Restrict end time of requests to current time \- realtimeGap
seconds. Negative values allowed. Used in fdsnws\-dataselect.
WARNING: If this value is unset and a realtime recordsource
\(e.g. slink\) is used, requests may block if end time in future
is requested.

Maximum number of samples \(in units of million\) per query, used
in fdsnws\-dataselect to prevent a single user to block one
connection with a large request.

Set the number of bytes to buffer for each chunk of waveform data
served to the client. The lower the buffer the higher the overhead
of Python Twisted. The higher the buffer the higher the memory
usage per request. 100kB seems to be a good trade\-off.

usage per request. 100kB seems to be a good trade-off.

Path to password file used in fdsnws\-dataselect\/queryauth. The
format is 'username:password' separated by lines. Because of the
HTTP digest authentication method required by the FDSN
specification, the passwords have to be stored in plain text.

List of domain names Cross\-Origin Resource Sharing \(CORS\)
request may originate from. A value of '\*' allows any web page
to embed your service. An empty value will switch of CORS
requests entirely. An example of multiple domains might be:
'https:\/\/test.domain.de, https:\/\/production.domain.de'.

Enable\/disable handling of time\-based conditional requests \(RFC
7232\) by the fdsnws\-station resource.

If enabled, then access to restricted waveform data is
controlled by arclink\-access bindings. By default authenticated
users have access to all data.

If enabled, author information is removed from any event
creationInfo element.

If set, the event service will only return events having a
preferred origin with a matching evaluationMode property.

List of enabled event formats. If unspecified, all supported
formats are enabled.

Enable\/disable the Availability service. Note: This is a non
standard FDSNWS extension served under fdsnws\/ext\/availability.

If enabled, a debug line is written for each stream ID explaining
why a stream was added\/removed by a inventory filter.

Number of decimal places used for station and sensor location
coordinates. If specified, the coordinates are obfuscated
when the inventory is read on service startup or reload.

Define the prefix for the default filenames if downloading and
saving data from within a browser.
For data loaded using dataselect, it is thus fdsnws.mseed by default.

**dataAvailability.\***
*Provide access to waveform data availability information stored*
*in the SeisComP database. In case of a SDS archive, this*
*information may be collected by scardac (SeisComP archive*
*data availability collector).*

Enable loading of data availabilty information from
SeisComP database. Availability information is used by
station and ext\/availability service.

Number of seconds data availabilty information is considered
valid. If the duration time is exceeded, the information is
fetched again from the database.

Name of the archive use in sync format of dataavailability
extent service.

Name of the archive use in some format of data availability

The recordstream source URL, format:
[service:\/\/]location[#type].
\"service\" is the name of the recordstream driver
which can be queried with \"\-\-record\-driver\-list\".
If \"service\" is not given, \"file:\/\/\" is
used.

**Convert station inventory between FDSN StationXML format and
SeisComP XML.**

Convert station inventory between FDSN StationXML format and
SeisComP XML.

fdsnws2inv is an inventory converter. It converts station meta data from
FDSN StationXML format to SeisComP XML (:term:`SCML`) and back writing the
output to a file, if given, or the command line (stdout).

FDSN StationXML format to SeisComP XML (

) and back writing the

Convert an inventory file in FDSN StationXML format to SCML with formatted XML.
Redirect the output to a new file:

   fdsnxml2inv -f inventory_fdsn.xml inventory_sc.xml

Convert an inventory file in SCML format to FDSN StationXML with formatted XML.

   fdsnxml2inv --to-staxml -f inventory_sc.xml inventory_fdns.xml

fdsnxml2inv inherits :ref:`global options<global-configuration>`.

Generate formatted SCML. Otherwise, output XML to a single line.

Convert from SCML to StationXML and expects SCML as input.
If not given, input is SCML and output is StationXML.

Enable relaxed XML namespace checks. This will also accept
tags within a different namespace than defined in the
supported schema.

Add more output to stderr for all channel response stages
when converting from StationXML.

The SeisComP configuration uses a unified schema to configure modules.
Modules which use the SeisComP libraries can read this configuration
directly and share global configuration options like messaging connections,
database configurations, logging and much more.
There are still some modules that do not use the libraries and are called
**standalone** modules such as :ref:`seedlink` and
:ref:`slarchive`.
They need wrappers to generate their native configuration when
:command:`seiscomp update-config` is run.

.

Global parameters can be used by many modules. Thus multiple configuration can
be avoided. The parameters are read from file in the following order:

Parameters from :file:`@CONFIGDIR@` override parameters from
:file:`@SYSTEMCONFIGDIR@`.

Most :term:`trunk` modules read the configuration from the global configuration
which can be overridden by the module configuration. Read the
:ref:`concept section on modules <concepts_modules>` and the
:ref:`concept section on the configuration <concepts_configuration>` for more
details.

 modules read the configuration from the global configuration

:ref:`concept section on the configuration <concepts_configuration>`

Though it is easy to create the configuration by directly editing the
configuration files, it is even more convenient to use a graphical configuration
tool. SeisComP ships with :ref:`scconfig`, a graphical configuration and
management tool which makes it easy to maintain module configurations and
station bindings even for large networks. It has built-in functionality to check
the state of all registered modules and to start and stop them.

tool. SeisComP ships with 

, a graphical configuration and

The configuration is divided into three parts: :ref:`stations <global-stations>`,
:ref:`modules <global_modules>` and :ref:`bindings <global_bindings>`.

Station meta-data is a fundamental requirement for a seismic processing system
and for SeisComP. Read the :ref:`inventory section<concepts_inventory>` in
concepts for more details.

and for SeisComP. Read the 

The concepts of :ref:`modules <concepts_modules>` and
:ref:`their configuration <global_modules_config>` is described in the
:ref:`concepts section <concepts>`.

Bindings provide specific configurations per
:ref:`module <global_modules_config>` and station and even stream. Read the
:ref:`bindings section <global_bindings_config>` in concepts for more details on
bindings.

Extensions add new configuration options to :term:`modules<module>`. It does
not matter how those extensions are used. Commonly a module loads a plugin,
which requires additional configuration parameters - these are provided by an
extension.

. It does

There are currently extensions for the following modules, corresponding to the
plugins shown:

:ref:`Hypo71<global_hypo71>` :ref:`Md<global_md>` :ref:`NonLinLoc<global_nonlinloc>` :ref:`MLh<global_mlh>` :ref:`iLoc<global_iloc>` :ref:`MN<global_mn>` :ref:`MLr<global_mlr>` :ref:`GUI<global_gui>` :ref:`StdLoc<global_stdloc>` :ref:`LocExt<global_locext>` :ref:`LocRouter<global_locrouter>` :ref:`RecordStream<global_recordstream>` :ref:`Ms_20<global_ms_20>` :ref:`mb<global_mb>` :ref:`ML_IDC<global_ml_idc>` :ref:`ML<global_ml>` :ref:`MLc<global_mlc>` :ref:`MLv<global_mlv>` :ref:`mB_BB<global_mb_bb>` :ref:`mb_IDC<global_mb_idc>` :ref:`FX-DFX<global_fx-dfx>` :ref:`homogeneous<global_homogeneous>` :ref:`LOCSAT<global_locsat>` :ref:`FixedHypocenter<global_fixedhypocenter>`

:ref:`mseedfifo<seedlink/mseedfifo>` :ref:`q330<seedlink/q330>` :ref:`chain<seedlink/chain>` :ref:`gdrt<seedlink/gdrt>` :ref:`caps<seedlink/caps>`

:ref:`email<scm_email>` :ref:`text<scm_text>` :ref:`ncurses<scm_ncurses>`

See the documentation for each module for further information about its
extensions.

:ref:`Hypo71 <global_hypo71>`

The traditional Hypo71PC locator with SeisComP.

:ref:`NonLinLoc <global_nonlinloc>`

NonLinLoc locator wrapper plugin for SeisComP. NonLinLoc was written by Anthony Lomax (http://alomax.free.fr/nlloc).

NonLinLoc locator wrapper plugin for SeisComP. NonLinLoc was written by Anthony Lomax (

:ref:`MLh <global_mlh>`

The MLh plugin (previously MLsed) is designed to compute amplitudes and magnitudes according to the Swiss Seismological Service (SED) standards.

:ref:`iLoc <global_iloc>`

Locator in SeisComP implemented by the plugin lociloc.

:ref:`MN <global_mn>`

Nuttli magnitude for Canada and other Cratonic regions

:ref:`GUI <global_gui>`

The GUI configuration plugin extends the configuration of graphical user interfaces to various options to adjust the look and feel.

:ref:`StdLoc <global_stdloc>`

Generic locator plugin for SeisComP.

:ref:`LocExt <global_locext>`

Locator which forwards the processing to external scripts

:ref:`LocRouter <global_locrouter>`

Meta locator routing location requests of picks and origins to actual locator implementations.

:ref:`RecordStream <global_recordstream>`

RecordStream interface for SeisComP.

:ref:`Ms_20 <global_ms_20>`

Surface wave magnitude measured at around 20 s

:ref:`mb <global_mb>`

Body wave magnitude at teleseismic distances

:ref:`MLc <global_mlc>`

Custom magnitude for local events measured on horizontal components

:ref:`MLv <global_mlv>`

Local (Richter) magnitude measured on the vertical component

:ref:`mB_BB <global_mb_bb>`

Body wave magnitude  at teleseismic distances similar to mb

:ref:`mb_IDC <global_mb_idc>`

Body wave magnitude computed at CTBTO/IDC (mb) is calculated for seismic events from the time-defining primary body waves recorded at seismic stations at an epicentral distance between 20 and 105 degrees from the event.

:ref:`FX-DFX <global_fx-dfx>`

Implementation of the CTBTO/IDC polarization analysis for three-component stations.

:ref:`homogeneous <global_homogeneous>`

Travel-times for a homogeneous velocity model

:ref:`LOCSAT <global_locsat>`

Locator in SeisComP for computing source time and hypocenter coordinates from phase picks.

:ref:`FixedHypocenter <global_fixedhypocenter>`

Locator for re-computing source time with fixed hypocenter

Agency ID used to set creationInfo.agencyID in
data model objects. Should not contain spaces.

Datacenter ID which is primarily used by Arclink and
its tools. Should not contain spaces.

Author name used to set creationInfo.author in data model
objects. \@appname\@ is replaced by the name of the
respective executable, \@hostname\@ by the name of the computer
on which it runs.

List of plugins loaded at startup. Separate multiple names by
comma. Add \${plugins} to consider all previously read values.

Path to the cities XML file. If undefined, the data is read
from \"\@CONFIGDIR\@\/cities.xml\" or
\"\@DATADIR\@\/cities.xml\".
SeisComP ships with \"\@DATADIR\@\/cities.xml\".

Load cities from file configured by the \"cityXML\"
parameter. GUI and map applications enable loading of cities
by default considering the parameter
\"scheme.map.showCities\".

Load custom FEP \(Flinn\-Engdahl polygon\) regions from
\"\@CONFIGDIR\@\/fep\/\" or \@DATADIR\@\/fep\/\".
GUI and map applications and scevent enable FEP regions by
default. Explicitly uncheck the option to disregard by these
applications.

Define a custom pattern for generation of public object IDs.
The following variables are resolved:
\@classname\@ \(class name of object\),
\@id\@ \(public object count\),
\@globalid\@ \(general object count\),
\@time\@ \(current time, use '\/' to supply custom format e.g.
\@time\/%FT%T.%fZ\@

Define the database connection. If no database is configured
\(which is the default\) and a messaging connection is available,
the application will receive the parameters after the connection
is established. Override these values only if you know what you
are doing.

The format is: service:\/\/user:pwd\@host\/database.
IMPORTANT: This parameter replaces former
\"database.type\" and \"database.parameters\"
which have been removed.

SeisComP applications access waveform data through the RecordStream
interface. Read the SeisComP documentation for a list of
supported services and their configuration.

\"service\": The name of the RecordStream implementation.
If not given, \"file:\/\/\" is implied.

IMPORTANT: This parameter replaces former RecordStream
configurations in \"recordstream.service\" and
\"recordstream.source\" which have been removed.

**logging.\***
*Control the logging of SeisComP applications. The log information*
*are written to log files per modules as*
*"@CONFIGDIR@/log/[module].log".*

Control the logging of SeisComP applications. The log information

Set the logging level between 1 and 4 where 1\=ERROR,
2\=WARNING, 3\=INFO and 4\=DEBUG.

Limit the logging to the specified list of components.
Example: 'Application, Server'.

Example: ‘Application, Server’.

log level. By default, the component output is enabled

The maximum size of a log file in byte. The default
value is 100 megabyte. If a log file exceeds that
size, then it is rotated. To disable the size limit
give 0 or a negative value.

Define the syslog facility to be used according to the
defined facility names in syslog.h. The default is local0.
If the given name is invalid or not available,
initializing logging will fail and the application quits.

Define the URL of the messaging server to connect to.
URL format is [scheme:\/\/]host[:port][\/queue].
Default scheme: scmp, default port: 18180,
default queue: production.
Examples:

Specific host and SSL encryption:
scmps:\/\/10.0.1.4:18180\/production

Define the username to be used. The length is maybe limited
by the messaging system used. By default, the module name
\(name of the executable\) is used but sometimes it exceeds
the 10 character limit and access is denied. To prevent
errors set a different username. An empty username will
let the system to generate one.

Define the OpenSSL client certificate to be used. Path to
OpenSSL certificate in PKCS 12 format or the prefix \"data:\"
followed by the Base64 encoded certificate data.

The connection timeout in seconds. 3 seconds are normally
more than enough. If a client needs to connect to a
remote system with a slow connection, a larger timeout
might be needed.

Define the primary group of a module. This is the name
of the group where a module sends its messages to if the
target group is not explicitly given in the send call.

Define the message encoding for sending. Allowed values
are \"binary\", \"json\" or \"xml\".
XML has more overhead in processing but is more robust when
schema versions between client and server are different.

Define a list of message groups to subscribe to. The
default is usually given by the application and does not
need to be changed.

**database.\***
*Define the database connection. If no database is configured*
*(which is the default) and a messaging connection is available,*
*the application will receive the parameters after the connection*
*is established. Override these values only if you know what you*
*are doing.*

Load the inventory database from a given XML file if set.
This overrides the inventory definitions loaded from the
database backend.

Load the configuration database from a given XML file if set.
This overrides the configuration definitions loaded from the

**processing.\***
*Filter the objects for processing according to parameter values.*

Filter the objects for processing according to parameter values.

Define a whitelist of agency IDs corresponding to
\"agencyID\" that are allowed for
processing. Objects from all other agencies will be
ignored. Separate items by comma.

Define a blacklist of agency IDs corresponding to
\"agencyID\" that are not allowed for
processing. Separate items by comma.

**inventory.\***
*Filter the considered inventory according to parameter values.*

List of network types to include when loading the
inventory. All other types will be ignored. Separate
items by comma.

List of station types to include when loading the

List of network types to exclude when loading the
inventory. Separate items by comma.

List of station types to exclude when loading the

Enable sending of an application start\- and stop message to
the STATUS_GROUP.

Enable automatic application shutdown triggered by a status
message.

Trigger shutdown if the module name of the received messages
match.

Trigger shutdown if the user name of the received messages
match.

A regular expression of all clients that should handle
a command message usually send to the GUI messaging group.
Currently this flag is only used by GUI applications to
set an artificial origin and to tell other clients to
show this origin. To let all connected clients handle the
command, \".\*\$\" can be used.

**ttt.\***
*Configure interfaces to travel-time tables (travel-time*
*interfaces). Built-in interfaces are LOCSAT, libtau and*
*homogeneous. For each loaded interface the supported tables must*
*be provided.*

homogeneous. For each loaded interface the supported tables must

**ttt.$name.\***
$name is a placeholder for the name to be used.

Definition of amplitude aliases for deriving new amplitude
types from an existing amplitude. Separate
multiple entries by comma.

Alias amplitudes can be configured like any other amplitude
and used for any alias magnitude.

Compute ML peak\-to\-trough and mb amplitudes according to
IASPEI recommendations.

For Ms\(BB\) amplitudes check that the dominant period of the
signal is within the valid range \(3, 60\). The period range
may be set in a Ms\(BB\) amplitude profile in global bindings.

**amplitudes.$name.\***

If enabled then also stations with unused \(disabled\)
arrivals are considerd for amplitude and implicitly
magnitude computations, e.g. by scamp, scmag and scolv.

**amplitudes.ttt.\***
*Travel time table specific parameters to be used for the*
*computation of travel times referred to in signal and*
*noise time window specifications,*
*e.g. "signalBegin". This can be overridden per*
*station in its bindings.*

**amplitudes.WoodAnderson.\***
*Parameters of the Wood-Anderson seismometer response used*
*for instrument simulation. The default values are according*
*to Uhrhammer and Collins (1990) and were part of the*
*IASPEI Magnitude Working Group recommendations of 2011*
*September 9.*

**magnitudes.\***
*Parameters for computing magnitudes.*
*Add magnitude regionalization and mapping to Mw by magnitude-type profiles.*
*One profile corresponds to one magnitude type.*

Add magnitude regionalization and mapping to Mw by magnitude-type profiles.

Definition of magnitude aliases for deriving new magnitude
types from existing magnitude and amplitude types. Separate

OriginalAmplitudeType is optional. The default amplitude
type applies if OriginalAmplitudeType is undefined.

Alias magnitudes can be configured like any other magnitude
and used together with any original or alias amplitudes.

**magnitudes.$name.\***
*Regionalization of magnitude configurations overriding global*
*bindings. For parameters which are not set, the values*
*defined in bindings apply.*

Mw magnitude mapping table for estimating Mw from network
magnitude M. Mw values are given at some M.

Between two values of M, Mw values will be linearly
interpolated but not extrapolated.

Path to a geofeature file, e.g. in BNA or GeoJSON format,
with one or more polygons defining geographic regions.
Each region allows further magnitude parametrization.
The order of polygons\/regions matters. The list is
tested from front to back and the first hit wins.
Magnitude\-region profiles refer to the polygons by the
name of the profile. The special name \"world\"
must not be present in the geofeature file.

**magnitudes.$name.region.\***
*Add magnitude region profiles for regions defined by*
*polygons in the geofeature file of regionFile. Profile*
*names must match one polygon name. Otherwise, the*
*profile is not considered. The special name*
*"world" corresponds to the region of the*
*entire planet as a fallback.*

**magnitudes.$name.region.$name.\***

The minimum distance required to compute a
magnitude. This settings has no effect with e.g.
scautopick as there is no information about the
source of the event to compute the distance.
The default value is implementation specific.

The maximum distance allowed to compute a magnitude.
This settings has no effect with e.g. scautopick
as there is no information about the source of
the event to compute the distance. The default
value is implementation specific.

The minimum depth required to compute a magnitude.
the event to retrieve the depth. The default

The maximum depth allowed to compute a magnitude.

Define how the region check is performed to accept
a source receiver pair for further processing.
Allowed values are:

source\-receiver: Both source\/origin and
receiver\/station must be within the region.

raypath: The entire path between source\/origin
and receiver\/station must be withing the region.

Constant part of the default station correction
for this region.

Hypo71 default profile.
If no custom profile is specified, this profile will be used by the plugin when proceeding to a localization.

Bash script executed when calling the Hypo71 locator plugin for locating the earthquake.

Hypo71 profile name.
Multiples names may be set. They must be separated by comma.
Each profile can have different velocity or parameters.

Specifies if the given publicD should be used for generating origin publicID

**hypo71.profile.\***
*Profiles containing the profile-specific velocity model and the Hypo71 parameters.*

Profiles containing the profile-specific velocity model and the Hypo71 parameters.

**hypo71.profile.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`hypo71.profiles` to become active.

   hypo71.profiles = a,b
   hypo71.profile.a.value1 = ...
   hypo71.profile.b.value1 = ...
   # c is not active because it has not been added
   # to the list of hypo71.profiles
   hypo71.profile.c.value1 = ...

$name is a placeholder for the name to be used and needs to be added to 

hypo71.profiles = a,b
hypo71.profile.a.value1 = ...
hypo71.profile.b.value1 = ...
# c is not active because it has not been added
# to the list of hypo71.profiles
hypo71.profile.c.value1 = ...

Profile's method.
It is generally the locator's name \(Hypo71\).

If the depth is requested to be fixed \(e.g. by ticking the option
in scolv\) the plugin performs only one location starting at
specified depth but with free depth evaluation. This option
defines whether it should really fix the depth \(false\) or
use this fixed depth only as starting point \(true\).

NonLinLoc locator wrapper plugin for SeisComP.
NonLinLoc was written by Anthony Lomax (http://alomax.free.fr/nlloc).

NonLinLoc was written by Anthony Lomax (

Defines the output path for all native NonLinLoc input and output files.

Save input files \*.obs in outputPath for later processing.
Setting to false reduces file i\/o and saves disk space.

Save output files in outputPath for later processing or
for viewing by the Seismicity Viewer.

The default pick error in seconds passed to NonLinLoc if a SeisComP pick
object does not provide pick time uncertainties.

Since NLL does not support fixing the depth natively so this
feature is emulated by settings the Z grid very tight around
the depth to be fixed. This value sets the Z grid spacing.

Picks from stations with missing configuration will be
ignored. The origin will be relocated without that pick
if possible.

If set to false, the plug\-in throws
an excepection without locating.

**NonLinLoc.profile.$name.\***
*Defines a regional profile that is used if a prelocation falls*
*inside the configured region.*
$name is a placeholder for the name to be used and needs to be added to :confval:`NonLinLoc.profiles` to become active.

   NonLinLoc.profiles = a,b
   NonLinLoc.profile.a.value1 = ...
   NonLinLoc.profile.b.value1 = ...
   # to the list of NonLinLoc.profiles
   NonLinLoc.profile.c.value1 = ...

NonLinLoc.profiles = a,b
NonLinLoc.profile.a.value1 = ...
NonLinLoc.profile.b.value1 = ...
# to the list of NonLinLoc.profiles
NonLinLoc.profile.c.value1 = ...

Format of the station name used to select the right travel time table \(grid\) file
for a station.
By default only the station code is used \(e.g. tablePath.P.\@STA\@.time.\*\), but
that doesn't allow to distinguish between multiple network codes or location codes
that use the same station code.
To overcome this limitation this parameter could be set in a more general way, for
example \@NET\@_\@STA\@_\@LOC\@. In this way NonLinLoc will look for
travel time table \(grid\) files of the form: tablePath.P.\@NET\@_\@STA\@_\@LOC\@.time.\*
Where \@NET\@ \@STA\@ \@LOC\@ are just placeholder for the actual codes

Control file of the current profile. If not set, the default
control file will be used instead.

Transformation type of the configured region. Supported are
SIMPLE and GLOBAL.

Defines the 4 corner values of the epicentral region for selecting the profile.
The original epicentre must be within the region.

If transform is GLOBAL: min_lat, min_lon, max_lat, max_lon.
The values define the geographic corner coordinates. Unit is degree.

If transform is SIMPLE: xmin, ymin, xmax, ymax.
The values define the region relative to the configured origin.
Unit is km.

Only used for transformation SIMPLE. Expects 2 values: latitude, longitude.
The value define the geographic origin of the area spanned by region.
Unit is degree.

Only used for transformation SIMPLE. Defines the rotation around the
origin of the defined region.

iLoc directory for auxialiary files and directories. Some
of them must be provided from the iLoc website. Read the
documentation for their installation.

Whether to use pick time uncertainties \(true\) or to use the
default timing error \(false\).

The default pick time error forwarded to iLoc if no pick time
uncertainties are set or if using the pick time uncertainties
is disabled.

iLoc profile name.
Multiples names may be set separated by comma.

**iLoc.profile.\***
*Profiles containing the specific locator parameters. For*
*the global models, iasp91 and ak135, profiles are*
*automatically considered with defaults.*
*To adjust the profile parameters the corresponding profile*
*must be created.*

**iLoc.profile.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`iLoc.profiles` to become active.

   iLoc.profiles = a,b
   iLoc.profile.a.value1 = ...
   iLoc.profile.b.value1 = ...
   # to the list of iLoc.profiles
   iLoc.profile.c.value1 = ...

iLoc.profiles = a,b
iLoc.profile.a.value1 = ...
iLoc.profile.b.value1 = ...
# to the list of iLoc.profiles
iLoc.profile.c.value1 = ...

Name of globally applied velocity model
into which RSTT or the local model is integrated. If
unset, the name of the profile is considered instead.

Full path to a file containing the local velocity model.
Requires: UseLocalTT \= true. Empty string or unset or
UseLocalTT \= false disables using a local model in
this profile.

Maximum epicentral distance for applying the local
velocity model.

Neighbourhood Algorithm: Search radius around initial
origin time

Neighbourhood Algorithm: p\-value for norm to compute
misfit [1,2]

Neighbourhood Algorithm: Number of cells to be resampled
at each iteration

Depth resolution: Maximum distance for using S\-P travel\-time differences.

Depth resolution: Minimum number of defining core reflection phases

Linearized inversion: Used to exclude big residuals from solution

Linearized inversion: Do not rename phases. Deactivating
allows to rename the phases automatically for this
profile.

**amplitudes.MN.\***
*Amplitude control parameters for MN (Nuttli magnitude).*

The travel time table set compiled for LocSAT. The tables
are located in \"share\/locsat\/tables\/[vmodel].\*\".

**magnitudes.MN.\***
*Regionalization of MN (Nuttli magnitude).*

The path to the BNA file which defines the valid region
for the MN magnitude. Note that the entire path from
source to receiver must lie entirely within the polygon\(s\).

The offset applied to the MN network magnitude to
estimate Mw\(MN\). If not configured then no Mw estimation
will be applied.

The GUI configuration plugin extends the configuration of
graphical user interfaces to various options to adjust the look
and feel.

**groups.\***
*Configures the target messaging groups for various object types.*
*These parameters should only be touched if you know what you*

Configures the target messaging groups for various object types.

Defines the target messaging group for manual picks, e.g.
made in scolv.

Defines the target messaging group for amplitudes, e.g.
computed in scolv.

Defines the target messaging group for magnitudes. scolv does
not use this group but sends magnitudes together with the
origin to the origin group.

Defines the target messaging group for origins created in
e.g. scolv.

Defines the target messaging group for focal mechanisms created in

Defines the target messaging group for events and event
journal entries.

The location and the structure of the map tiles to be used.
This path is composed of zero or more directives and must
include at least one conversion specification. The
specification starts with the '%' and is followed by a
conversion specifier.  Valid specifiers are

specification starts with the ‘%’ and is followed by a

Example for using the OpenStreetMap file structure:
\/path\/to\/maps\/%l\/%c\/%r.png.

Projection of the map tiles configured in 'map.location'.
Note: Additional projections may be available by plugins.

Projection of the map tiles configured in ‘map.location’.

Cache size of the map tiles. If 0 is specified. a default
cache size of 32 MBytes is used. The higher the cache size
the better the performance in higher resolutions. A
higher cache size causes less image loader calls but
requires more client memory.

The tile store implementation provided by a plugin for
considering maps if a non\-default tile store is configured
in 'map.location'.

Allows to add custom layers that are included via plugins.
This is a list of layer names. A plugin must implement
the layer interface and register itself with the
name used in this list. The order of layers is the
default order. The custom layers are prepended to
the maps defaults layers such as the grid and the cities.

Defines the order of all configured layers. This
includes the standard layers \(grid, cities\) as
well as custom layers. The name of the grid layer
is \"grid\" and the name of the cities
layer is \"cities\".

**map.layers.events.\***
*Configuration options for the events layer that*
*shows all events on the map that are loaded in the*
*event list.*

Show the events layer on maps. Currently only supported
by scolv.

**map.layers.fep.\***
*Configuration for the fep layer showing the polygons*
*of FEP (FLinn-Engdahl-Polygon) files on maps if they*
*exist in @DATADIR@/fep or @CONFIGDIR@/fep.*

Maximum number of cities to be rendered. If
cityPopulationWeight is less or equal than 0 then
all cities are rendered ordered by population count,
highest first.
To show the N most populated places in the visible
map region, set
\"scheme.map.cityPopulationWeight\" to 0
and set this parameter to N.

**scheme.\***
*This group defines various options for color, pen, brush, font, etc. for SeisComP*
*graphical user interfaces. There are various conventions to*
*define colors, fonts and gradients.*
**
*Colors are defined in HTML*
*convention, e.g. as rgb values, hexadecimal numbers or color*
*keyword names defined by W3C. If rgb or rgba is used, it must*
*be quoted because the comma is handled as list separator by*
*the configuration.*
*Examples: "rgb(255,0,0)", FF00FF40, green.*
**
*Gradients are configured as lists of tuples where each tuple*
*is colon separated in the form value:color. Value is either*
*int or double and color is again a color definition.*
*Example: 0:yellow,10:red*

This group defines various options for color, pen, brush, font, etc. for SeisComP

Set position if tab bar. An unset value lets the application
decide where to place the tab bar. This option might not be
supported by all applications. Valid positions are: off, north,
south, east, west

The origin symbol minimum size. The formula to compute the
size of the origin symbol is: 4.9\*\(M\-1.2\).

Apply antialiasing to map layers.
This improves the visual quality but decreases performance.

Apply bilinear filtering to maps.
The bilinear filter improves the visual quality but decreases
performance slightly. It is only used for static map images.
Not while dragging.

Controls at which zoom level a city will be visible. The
following formula is used:
screen_width \(km\) \* weight >\= population

Show map legends initially. Some applications provide
controls to toggle the visibility in addition to this
option.

SeisComP ships with the rectangular projection built\-in.
Other projections may be provided through plugins.

Minimum screen distance to plot a polygon or polyline line segment.

A general application background color. Can be used to give
each application a different background color. An unset value
lets Qt decide.

Sets desired colors for particular agencyIDs. It depends on the
applications if they honor this setting or not. The event list
will render the agencyID string with the defined colors.
This is a list of tuples \(AGENCY:COLOR\),
e.g. \"GEOFON:black, USGS:blue\".

The color gradient of the spectrogram amplitudes.
The node values are not important as they will be
projected onto the desired amplitude range.

The color of lines in the map \(e.g. lines
connecting the origin and a station\).

**scheme.colors.map.directivity.\***
*Defines the pen of the directivity information*
*(backazimuth and slowness) in the map.*

The style of the pen. Supported values are: NoPen, SolidLine, DashLine, DotLine, DashDotLine, DashDotDotLine.

**scheme.colors.map.grid.\***
*Defines the pen of the latitude/longitude grid of the map.*

**scheme.colors.map.annotations.\***
*Appearance of map annotations including a text*
*color (pen), a border color (pen) and a background*
*color (brush).*

**scheme.colors.map.annotations.normalText.\***
*Text pen for non highlighted annotations.*

scheme.colors.map.annotations.normalText.color; configuration value

scheme.colors.map.annotations.normalText.style; configuration value

The style of the pen. Supported values are:
NoPen, SolidLine, DashLine, DotLine, DashDotLine, DashDotDotLine.

scheme.colors.map.annotations.normalText.width; configuration value

**scheme.colors.map.annotations.normalBorder.\***
*Border pen for non highlighted annotations.*

scheme.colors.map.annotations.normalBorder.color; configuration value

scheme.colors.map.annotations.normalBorder.style; configuration value

scheme.colors.map.annotations.normalBorder.width; configuration value

**scheme.colors.map.annotations.normalBackground.\***
*Background brush for non highlighted annotations.*

scheme.colors.map.annotations.normalBackground.color; configuration value

scheme.colors.map.annotations.normalBackground.style; configuration value

The style of the brush. Supported values are, e.g.:
solid, dense1, dense7, horizontal, vertical,
cross, bdiag, fdiag, diagcross.

**scheme.colors.map.annotations.highlightedText.\***
*Text pen for highlighted annotations.*

scheme.colors.map.annotations.highlightedText.color; configuration value

scheme.colors.map.annotations.highlightedText.style; configuration value

scheme.colors.map.annotations.highlightedText.width; configuration value

**scheme.colors.map.annotations.highlightedBorder.\***
*Border pen for highlighted annotations.*

scheme.colors.map.annotations.highlightedBorder.color; configuration value

scheme.colors.map.annotations.highlightedBorder.style; configuration value

scheme.colors.map.annotations.highlightedBorder.width; configuration value

**scheme.colors.map.annotations.highlightedBackground.\***
*Background brush for highlighted annotations.*

scheme.colors.map.annotations.highlightedBackground.color; configuration value

scheme.colors.map.annotations.highlightedBackground.style; configuration value

**scheme.colors.records.borders.\***
*Properties of record borders*

**scheme.colors.records.borders.standard.\***
*Standard properties*

**scheme.colors.records.borders.standard.pen.\***
*Defines the pen of the border line.*

scheme.colors.records.borders.standard.pen.color; configuration value

scheme.colors.records.borders.standard.pen.style; configuration value

scheme.colors.records.borders.standard.pen.width; configuration value

**scheme.colors.records.borders.standard.brush.\***
*Defines the brush of the enlcosed area.*

scheme.colors.records.borders.standard.brush.color; configuration value

scheme.colors.records.borders.standard.brush.style; configuration value

**scheme.colors.records.borders.signatureValid.\***
*Properties for records with valid signatures*

**scheme.colors.records.borders.signatureValid.pen.\***

scheme.colors.records.borders.signatureValid.pen.color; configuration value

scheme.colors.records.borders.signatureValid.pen.style; configuration value

scheme.colors.records.borders.signatureValid.pen.width; configuration value

**scheme.colors.records.borders.signatureValid.brush.\***

scheme.colors.records.borders.signatureValid.brush.color; configuration value

scheme.colors.records.borders.signatureValid.brush.style; configuration value

The style of the pen. Supported values are, e.g.:

**scheme.colors.records.borders.signatureInvalid.\***
*Properties for records with invalid signatures*

**scheme.colors.records.borders.signatureInvalid.pen.\***

scheme.colors.records.borders.signatureInvalid.pen.color; configuration value

scheme.colors.records.borders.signatureInvalid.pen.style; configuration value

scheme.colors.records.borders.signatureInvalid.pen.width; configuration value

**scheme.colors.records.borders.signatureInvalid.brush.\***

scheme.colors.records.borders.signatureInvalid.brush.color; configuration value

scheme.colors.records.borders.signatureInvalid.brush.style; configuration value

**scheme.colors.records.offset.\***
*Defines the pen of the record offset line.*

**scheme.colors.records.gridPen.\***
*Defines the pen of the record grid.*

**scheme.colors.records.subGridPen.\***
*Defines the pen of the secondary record grid.*

**scheme.colors.records.states.\***
*Defines the background color of records depending on their state.*

Defines the background color of records depending on their state.

The color of manual arrivals \(arrivals that bind manual picks,
e.g. residual plot of scolv, manual picker, ...\)

The gradient of arrivals residuals. A gradient is defined as
a list of tuples separated by colon where the first item is
the value and the second is the color. Colors can be given in
rgb notation or hexadecimal. When rgb is used double quotes are needed to
protect the comma inside the rgb definition, e.g.
\-8:\"rgb\(0,0,100\)\", \-4:\"rgb\(0,0,255\)\", \-3:\"rgb\(100,100,255\)\", ...

**scheme.colors.qc.\***
*The color of QC.delay thresholds in scmv.*

**scheme.colors.gm.\***
*The color of ground motion amplitudes in scmv.*

Setting this parameter to true will not interpolate between
the depth steps and the color for a depth <\= input is used.

**scheme.colors.originStatus.\***
*The origin status colors (e.g. in event list).*

**scheme.colors.splash.\***
*Defines colors used in the splash screen shown at application startup.*

Defines colors used in the splash screen shown at application startup.

Configures antialiasing of records \/ traces. Antialiasing
needs more two times to storage space as non antialiasing
but it improves visual quality.

Configures optimization of trace polylines. If activated
then lines on the same pixel line or same pixel row
collapse into single lines.

Mode for drawing record borders as box or line on top or
bottom.

**scheme.fonts.base.\***
*The general base font of an application. This overrides*
*the default Qt application font.*

Sets the family name of the font. The name is case insensitive and may include a foundry name.

**scheme.fonts.small.\***
*The smallest available font. If undefined the point size is 2 points smaller than the base font.*

The smallest available font. If undefined the point size is 2 points smaller than the base font.

**scheme.fonts.normal.\***
*The default text font. If undefined the point size is 2 points larger than the base font.*

The default text font. If undefined the point size is 2 points larger than the base font.

**scheme.fonts.large.\***
*The largest text font. If undefined the point size is 6 points larger than the base font.*

The largest text font. If undefined the point size is 6 points larger than the base font.

**scheme.fonts.highlight.\***
*Font used to highlight text. If undefined it equals the normal font except for a bold font face.*

Font used to highlight text. If undefined it equals the normal font except for a bold font face.

**scheme.fonts.heading1.\***
*The largest heading font. If undefined it uses a bold font face and a font size twice as large as the normal font.*

The largest heading font. If undefined it uses a bold font face and a font size twice as large as the normal font.

**scheme.fonts.heading2.\***
*The second largest heading font. If undefined it uses a bold font face and a font size twice as large as the base font.*

The second largest heading font. If undefined it uses a bold font face and a font size twice as large as the base font.

**scheme.fonts.heading3.\***
*The smallest heading font. If undefined it uses a bold font face and a font size 4 points larger than the base font.*

The smallest heading font. If undefined it uses a bold font face and a font size 4 points larger than the base font.

**scheme.fonts.cityLabels.\***
*Font used for city labels. If undefined it equals the base font.*

Font used for city labels. If undefined it equals the base font.

**scheme.fonts.splashVersion.\***
*Font used for version string in the splash dialog shown at application startup. If undefined it equals the base font with a bold font face and a font size of 12.*

Font used for version string in the splash dialog shown at application startup. If undefined it equals the base font with a bold font face and a font size of 12.

**scheme.fonts.splashMessage.\***
*Font used for the message text in the splash dialog shown at application startup. If undefined it equals the base font with a font size of 12.*

Font used for the message text in the splash dialog shown at application startup. If undefined it equals the base font with a font size of 12.

The precision of distance values. This
parameter only applies if scheme.unit.distanceInKM \= true.

**scheme.splash.\***
*Defines the appearance of the splash screen shown at application startup.*

Defines the appearance of the splash screen shown at application startup.

**scheme.splash.message.pos.\***
*Position in screen coordinates.*

**scheme.splash.version.pos.\***

**events.timeAgo.\***
*Defines maximum age of events to load. The value of all parameters are aggregated.*

Defines maximum age of events to load. The value of all parameters are aggregated.

Defines if the application should be launched in fullscreen
mode hiding title bar, main menu and status bar.

Default: ``"BP 0.1 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,1)",      "BP 0.1 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,2)",      "BP 1 - 3 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,1.0,3)",      "BP 0.4 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.4,1)",      "@BP 0.7 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.7,2)",      "BP 2 - 4 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,2.0,4)",      "BP 3 - 6 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,3.0,6)",      "BP 4 - 8 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,4.0,8)",      "BP 1 - 5 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,1.0,5)",      "HP 3 Hz  3rd order;RMHP(1)>>ITAPER(2)>>BW_HP(3,3)",      "BP 0.7 - 2 Hz + STA/LTA(1,50);RMHP(10)->ITAPER(30)->BW(3,0.7,2)->STALTA(1,50)"``

``"BP 0.1 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,1)",      "BP 0.1 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,2)",      "BP 1 - 3 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,1.0,3)",      "BP 0.4 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.4,1)",      "@BP 0.7 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.7,2)",      "BP 2 - 4 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,2.0,4)",      "BP 3 - 6 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,3.0,6)",      "BP 4 - 8 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,4.0,8)",      "BP 1 - 5 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,1.0,5)",      "HP 3 Hz  3rd order;RMHP(1)>>ITAPER(2)>>BW_HP(3,3)",      "BP 0.7 - 2 Hz + STA/LTA(1,50);RMHP(10)->ITAPER(30)->BW(3,0.7,2)->STALTA(1,50)"``

"BP 0.1 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,1)",      "BP 0.1 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.1,2)",      "BP 1 - 3 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,1.0,3)",      "BP 0.4 - 1 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.4,1)",      "@BP 0.7 - 2 Hz  3rd order;RMHP(10)>>ITAPER(30)>>BW(3,0.7,2)",      "BP 2 - 4 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,2.0,4)",      "BP 3 - 6 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,3.0,6)",      "BP 4 - 8 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,4.0,8)",      "BP 1 - 5 Hz  3rd order;RMHP(5)>>ITAPER(10)>>BW(3,1.0,5)",      "HP 3 Hz  3rd order;RMHP(1)>>ITAPER(2)>>BW_HP(3,3)",      "BP 0.7 - 2 Hz + STA/LTA(1,50);RMHP(10)->ITAPER(30)->BW(3,0.7,2)->STALTA(1,50)"

Configures the default filters selectable in manual picker.
The entry with a leading \"\@\" is selected as default filter.

**eventlist.\***
*Control the Events tab, e.g. in scolv, showing the list of loaded events.*

Control the Events tab, e.g. in scolv, showing the list of loaded events.

Configure the columns of the event list that are visible
initially. The first column containing the origin time is
always visible and cannot be hidden. Possible values are:

Certainty, Type, M, MType, RMS, AzGap, Phases, Lat, Lon, Depth, DType,
Stat, FM, Origins, Agency, Author, Region, ID.

Custom columns can be added by eventlist.customColumn.\* or
eventlist.scripts.\* parameters.

**eventlist.customColumn.\***
*Custom column showing origin or event comments.*

Position of the column. If the configured position is
less than 0 or if it exceeds the total number of columns,
then the column is appended to the right.

Default value to display if the specified origin or
event comment id was not found.

Mapping of comment values to colors used as text color.
E.g. \"foo:#000,bar:red\".

**eventlist.scripts.\***
*Custom columns showing parameters extracted by scripts e.g.*
*from origins or events.*

Name of custom column profiles to be registered. Comma
separated list.

**eventlist.scripts.column.\***
*Definition of custom column profiles for creating custom*
*event list columns whose values are filled by external scripts.*
*The scolv documentation provides an example script.*

**eventlist.scripts.column.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`eventlist.scripts.profiles` to become active.

   eventlist.scripts.profiles = a,b
   eventlist.scripts.column.a.value1 = ...
   eventlist.scripts.column.b.value1 = ...
   # to the list of eventlist.scripts.profiles
   eventlist.scripts.column.c.value1 = ...

eventlist.scripts.profiles = a,b
eventlist.scripts.column.a.value1 = ...
eventlist.scripts.column.b.value1 = ...
# to the list of eventlist.scripts.profiles
eventlist.scripts.column.c.value1 = ...

External script to invoke for each event list entry. The object represented by the
list entry is serialized to XML and passed to the script on stdin. If the return
code of the script is 0 \('success'\) then the script result is read from stdout and
displayed in the corresponding event list cell.

Position of the column. If the configured position is less than 0 or if it
exceeds the total number of columns, then the column is appended to the right.

Object types passed to the script.
Supported values are 'Event' and 'Origin'.
Mandatory parameter.

Supported values are ‘Event’ and ‘Origin’.

**eventlist.filter.agencies.\***
*Filter the loaded event list by agency ID.*

Defines the text of the option \"Show only own events\".
Use double quotes '\"' around the string if it contains spaces.

Sets a list of preferred agencies. Events from preferred
agencies are defined as \"own\" events.

Sets the type of the filter. If type is \"events\" the agency
of the preferred origin of the event is checked.
If type is \"origins\" the agency of all origins of
an event is checked and if at least one origins agency is part
of the whitelist it will pass the filter. Or in other words,
the event is hidden if no origin is from a preferred agency.

**eventlist.filter.regions.\***
*Filter the loaded event list by region within or outside a*
*bounding box. Register the profile name in the regions parameter.*

bounding box. Register the profile name in the regions parameter.

Add the defined region profiles separated by comma.
The order determines the ocurrence in the filter menu.

**eventlist.filter.regions.region.$name.\***
*Define a rectangular region to filter the loaded event list.*
$name is a placeholder for the name to be used and needs to be added to :confval:`eventlist.filter.regions.profiles` to become active.

   eventlist.filter.regions.profiles = a,b
   eventlist.filter.regions.region.a.value1 = ...
   eventlist.filter.regions.region.b.value1 = ...
   # to the list of eventlist.filter.regions.profiles
   eventlist.filter.regions.region.c.value1 = ...

eventlist.filter.regions.profiles = a,b
eventlist.filter.regions.region.a.value1 = ...
eventlist.filter.regions.region.b.value1 = ...
# to the list of eventlist.filter.regions.profiles
eventlist.filter.regions.region.c.value1 = ...

Defines a rectangular region with a list of 4 values:
latmin, lonmin, latmax, lonmax.

Defines the name of the polygon for the region check.
If defined then the rect region has no effect.
The configured polygon name is being search for
in the global FEP regions and the spatial
vector layer. The first polygon found with
the given name will be taken.

**eventlist.filter.types.\***
*Filter the loaded event list by event types.*

Defines the text of the option \"Hide other\/fake events\".

List of event type to be hidden if the \"Hide other\/fake events\"
option is ticked.

Sets the default state of the \"Hide other\/fake events\"
option.

**eventlist.filter.database.\***
*Pre-set options to filter a database request to load events*
*into the event list.*

**eventedit.\***
*Control the Event tab, e.g. in scolv, showing origins and*
*focal mechanisms of a selected event.*

Adds button which request the computation of a FocalMechanism solution by sending a JournalEntry message. This feature depends on a FM module, such as scautomt, to be running in background and doing the actual processing.

Default: ``Phases, Lat, Lon, Depth, DType, RMS, AzGap, Stat, Method, Agency, Author, Region, ID``

``Phases, Lat, Lon, Depth, DType, RMS, AzGap, Stat, Method, Agency, Author, Region, ID``

Phases, Lat, Lon, Depth, DType, RMS, AzGap, Stat, Method, Agency, Author, Region, ID

Configure the columns of the event edit origin table
that are visible initially. Origin creation time and
origin time are always visible.
Possible values are:

**eventedit.origin.customColumn.\***
*Custom column showing origin comments.*

eventedit.origin.customColumn.originCommentID; configuration value

exceeds the total number of columns then the column is appended to the right.

Default value to display if the specified origin or event comment id was not found.

Mapping of comment values to colors used as text color. E.g. \"foo:#000,bar:red\".

Default: ``Depth, M, Count, Misfit, STDR, AzGap, Stat, DC, CLVD, ISO, S1, D1, R1, S2, D2, R2, Agency, Author``

``Depth, M, Count, Misfit, STDR, AzGap, Stat, DC, CLVD, ISO, S1, D1, R1, S2, D2, R2, Agency, Author``

Depth, M, Count, Misfit, STDR, AzGap, Stat, DC, CLVD, ISO, S1, D1, R1, S2, D2, R2, Agency, Author

Configure the columns of the event edit focal mechanism
tab that are visible initially.
Possible values are: Depth, M, Count, Misfit, STDR,
AzGap, Stat, DC, CLVD, ISO, S1,
D1, R1, S2, D2, R2, Agency, Author

**eventsummary.\***
*Parameters controlling the event summary view used e.g. in scolv.*

Parameters controlling the event summary view used e.g. in scolv.

Set an alert for every event comment that ID matches
the specified regular expression, e.g. \"alert_.\*\".

Discrete mapping of time values in seconds to colors used as
text color in case of an active alert. E.g. \"0:00FF00,900:FF0000\".

**StdLoc.\***
*Locator parameters: StdLoc. This locator requires the plugin*
*"stdloc" to be loaded.*

**StdLoc.profile.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`StdLoc.profiles` to become active.

   StdLoc.profiles = a,b
   StdLoc.profile.a.value1 = ...
   StdLoc.profile.b.value1 = ...
   # to the list of StdLoc.profiles
   StdLoc.profile.c.value1 = ...

StdLoc.profiles = a,b
StdLoc.profile.a.value1 = ...
StdLoc.profile.b.value1 = ...
# to the list of StdLoc.profiles
StdLoc.profile.c.value1 = ...

The location method to use: LeastSquares, GridSearch,
OctTree, GridSearch+LeastSquares or OctTree+LeastSquares.

If enabled the arrival travel time information are fetched
using 'P' and 'S' tables only and the user selected
specific phase type is not considered \(e.g. Pg, Sg,
PmP, SmS, P1, S1, etc\).

Use pick time uncertainties rather than a fixed
time error of XXX s. If true, an arrival weight is
associated according to the uncertainty of the pick
and \"pickUncertaintyClasses\".

StdLoc.profile.$name.pickUncertaintyClasses; configuration value

Comma\-separated list of time limits of uncertainty
classes from which, along with pick time uncertainties,
arrival weights are computed. The first value
defines the lower limit of class 0.

The interval into which a pick time uncertainty falls
defines the index of the uncertainty class starting
with 0.

The corresponding arrival weight is computed as:
weight \= 1 \/ 2\^\(index\).

Example: A pick with a time uncertainty of 0.15 s is
within the 4th interval ranging from 0.1 to 0.2 s.
The class index is then 3.

Confidence level, between 0.5 and 1.0, used in
computing the hypocenter confidence ellipsoid.

StdLoc.profile.$name.enableConfidenceEllipsoid; configuration value

Compute the hypocenter confidence ellipsoid. Disable
this optional parameter to save some computation time.

**StdLoc.profile.$name.GridSearch.\***
*Parameters controlling the GridSearch and OctTree methods.*

Grid center defined as: latitude,longitude,depth. The
special value \"auto\" can be used and the corresponding latitude, longitude
and\/or depth will be automatically computed as the average of the arrival
station locations.

Grid size in km defined as: X,Y,Z
direction extents around the \"GridSearch.center\",
where X is the longitudinal extent, Y the
latitudinal extent and Z the vertical extent.

Number of grid points in X, Y, Z
direction. The first and last points are on the
grid boundary unless the number of points is 1
and the point will be in the grid center.

The type of misfit to use, from which
the likelihood function is derived: L1 or L2 norm.
L1 is less sensitive to outliers and so more
suitable with automatic picks, L2 is the preferred
choice for manual picks.

StdLoc.profile.$name.GridSearch.travelTimeError; configuration value

Typical error in seconds for travel times to
stations. The value affects the uncertainty
of the location. In OctTree it also influences
the probability density computation: too
conservative values increase the number of
iterations required by OctTree to converge
to a high resolution solution.

**StdLoc.profile.$name.OctTree.\***
*Parameters controlling the OctTree method. OctTree*
*uses the parameters defined in GridSearch, but*
*applies the OctTree search algorithm on the grid.*
*The starting cells of the OctTree search are created by*
*dividing the initial grid in equally sized cells.*
*The grid points becomes the cell vertices.*
*Resulting number of cells in each direction:*
*"GridSearch.numPoints" - 1.*

Maximum number of iterations after which the
search stops. Zero or negatives values disable
the stopping.

Minimum cell size to be generate by the OctTree
search to stop. A zero or negative value disable
this stopping mechanism.

**StdLoc.profile.$name.LeastSquares.\***
*Parameters controlling the LeastSquares method.*

StdLoc.profile.$name.LeastSquares.depthInit; configuration value

The initial depth estimate when no initial
hypocenter is provided. Used only with
'LeastSquares'.

‘LeastSquares’.

StdLoc.profile.$name.LeastSquares.iterations; configuration value

Number of iterations. Each iteration will
use the location and time from the previous
Least Squares solution.

StdLoc.profile.$name.LeastSquares.dampingFactor; configuration value

StdLoc.profile.$name.LeastSquares.solverType; configuration value

**ExternalLocator.\***
*Locator parameters: External. This locator requires the plugin*
*"locext" to be loaded.*

A list of profiles defined as tuples of name
and path to a script separated by colon.

Meta locator routing location requests of picks and origins to actual
locator implementations.

**RouterLocator.\***
*Locator parameters: Router. This locator requires the plugin*
*"locrouter" to be loaded.*

A GeoJSON or BNA file defining locator profiles by region.
Supported polygon attributes:

**RouterLocator.initial.\***
*Configuration of initial locator used to create an*
*initial solution based on a pick set. If a solution is*
*found, relocate of the actual locator configured in the*
*region file is invoked.*

Locator in SeisComP for computing source time and hypocenter
coordinates from phase picks.

Whether to use pick time untertainties for arrival deltim rather
than a fixed time error. If true then the uncertainties are
retrieved from each individual pick object. If they are not
defined then the default pick time uncertainty will be used
as fallback.

The default pick time uncertainty assigned to LOCSAT's arrival deltim
attribute if pick uncertainties are not going to be used or
if they are absent. A time uncertainty of 0 s may result in
errors of the SVD decomposition in LOCSAT.

The default pick time uncertainty assigned to LOCSAT’s arrival deltim

Whether to forward pick backazimuth to LOCSAT or not. In an
automatic mode backazimuth measurements might be inaccurrate
and disabling their usage in LOCSAT can be controlled with
this parameter.

Whether to forward pick horizontal slowness to LOCSAT or not.
In an automatic mode slowness measurements might be
inaccurrate and disabling their usage in LOCSAT can be
controlled with      this parameter.

Defines a list of available travel time tables. Each item
is a tuple separated by a slash with format \"[interface]\/[model]\".
Built\-in interfaces are \"LOCSAT\" and \"libtau\".
Other interfaces might be added via plugins. Please check their
documentation for the required interface name.

Whether to use pick time uncertainties rather than a fixed
time error. If true, then the uncertainties are retrieved from
each individual pick object. If they are not defined, then the
default pick time uncertainty as defined by defaultTimeError
will be used instead.

The default pick time uncertainty if pick uncertainties are
not going to be used or if they are absent.

Default filter type to use before processing and after deconvolution. It's possible to set :
1 for a Wood\-Anderson seismometer
2 for a 5sec generic Seismometer
3 for a WWSSN LP seismometer
4 for a WSSN SP seismometer
5 for a Generic Seismometer
6 for a Butterworth Low pass filter
7 for a Butterworth High pass filter
8 for a Butterworth Band pass filter
9 for a 1Hz eigen\-frequency L4C seismometer

Default filter type to use before processing and after deconvolution. It’s possible to set :
1 for a Wood-Anderson seismometer
9 for a 1Hz eigen-frequency L4C seismometer

Maximum distance between earthquake and station at which duration magnitude is valid

Maximum expected duration magnitude value
This is used to find how much data should be loaded for a given station by reversing the formula

Define combiner operation for both horizontals \(min, max, avg\).

Defines attenuation parameters for MLh.
Format: \"UpToKilometers A B; UpToNextKilometers A B;\".
Example: \"30 nomag; 60 0.018 2.17; 700 0.0038 3.02\".
The first parameter set \"30 nomag\" means that up to 30km
from the sensor the magnitude should not be calculated.

Maximum depth allowed to compute the magnitude. Make sure to
also update the MLh amplitude bindings accordingly to this
value. maxDepth should not be greater than 80km.

Whether to use RMS ratio of signal and noise window for
SNR computation or the ration of the peak\-trough
amplitudes of either window.

The configurable filter such that the V measurement is
made on a filtered trace. By default, filtering is not
enabled.

See https:\/\/docs.gempa.de\/seiscomp\/current\/base\/filter\-grammar.html
for how to specify the filter.

The minimum phase velocity used to determine the signal
window end.

The maximum phase velocity used to determine the signal
window start.

The offset of the noise window. A positive value will move
the computed noise window to the left on the time axis,
a negative value will move it to the right on the time axis.

The priority list of phase onsets to compute the signal
start window. Except for Vmin and Vmax, associated phases
\(arrivals\) must be present in the origin for this
particular phase. Picked phases are only considered if
the origin is a manual origin or the pick is a
manual pick. The first value in the list which can be
retrieved or computed, is selected.

end window. Except for Vmin and Vmax, associated phases

*Parameters for computing MN magnitudes from AMN amplitudes.*

The minimum SNR required for a magnitude to pass
the QC check. The station magnitude will be computed
anyway but if the SNR is below this threshold it will
be associated with weight zero and will not contribute
to the network magnitude.

The minimum period required for a magnitude to pass
anyway but if the period is below this threshold it will

The maximum period allowed for a magnitude to pass
anyway but if the period is above this threshold it will

The minimum distance required for a magnitude to pass
anyway but if the distance is below this threshold it
will be associated with weight zero and will not contribute

The maximum distance allowed for a magnitude to be
computed. If the distance exceeds this threshold then
the computation will be canceled and no station
magnitude will be available at all.

**magnitudes.MLr.\***
*Parameter for computing MLr magnitudes for GNS/Geonet from MLv amplitudes.*

Parameter for computing MLr magnitudes for GNS/Geonet from MLv amplitudes.

Defines Stations Corrections parameters for MLr \(GNS\/Geonet Local magnitude\).
Format: \"UpToKilometers A ; UpToNextKilometers A ;\".
Example: \"30 nomag; 60 0.018 ; 700 0.0038 \".
A is used as station correction.
\"nomag\" is used to disable station magnitudes.

The sensor location code of the preferred stream used e.g.
by scautopick and scrttv.

The channel code of the preferred stream used by
e.g. scautopick and scrttv. If no component code is given,
the vertical component will be fetched from inventory
considering the channel orientation \(azimuth, dip\).
If that approach fails, 'Z' will be appended and used as
fallback. Do not use regular expressions\!

**amplitudes.\***
*Define general parameters for amplitudes of a certain type.*
*Create amplitude type profiles to define the time windows,*
*minimum signal-to-noise ratio, amplitude thresholds and*
*restitution for measuring amplitudes of a certain type.*

Define the saturation threshold for the optional saturation
check.
By default, the saturation check is disabled but giving a
value above 0 will enable it. Waveforms with raw amplitudes
above the threshold will then be considered saturated and
not used for amplitude calculations.

This value can either be an absolute value of counts such
as \"100000\" counts or a relative value
\(optionally in percent\) with respect to the number of
effective bits, e.g., \"0.8\@23\" or \"80%\@23\".
The first and the second version represent 0.8 \* 2\*\*23 and
80\/100 \* 2\*\*23, respectively, which is the same.

Define if amplitude calculation is enabled. If disabled,
this station will be skipped for amplitudes and magnitudes.

Activate deconvolution for this station. If no responses are
configured, an error is raised and the data is not processed.
This flag will be overridden by the type specific flag
\(see GlobalAmplitudeProfile\).

*An amplitude profile configures global parameters for a*
*particular amplitude type. The available amplitude types*
*are not fixed and can be extended by plugins. The name of*
*the type must match the one defined in the corresponding*
*AmplitudeProcessor.*

Activate deconvolution for this amplitude type. If not
set, the global flag \"amplitudes.enableResponses\"

Define the minimum SNR to be reached to compute the
amplitudes. This value is amplitude type specific and
has no global default value.

Override the default time \(relative to the trigger
time\) of the begin of the noise window used to compute
the noise offset and noise amplitude. Each amplitude
processor sets its own noise time window and this option
should only be changed if you know what you are doing.

time\) of the end of the noise window used to compute

time\) of the begin of the signal window used to compute
the final amplitude. Each amplitude processor sets its
own signal time window and this option should only be
changed if you know what you are doing.

time\) of the end of the signal window used to compute

The minimum distance required to compute an amplitude.
This settings has no effect with e.g. scautopick as there
is no information about the source of the event to compute
the distance. The default value is implementation
specific.

The maximum distance allowed to compute an amplitude.
specific.

The minimum depth required to compute an amplitude.
is no information about the source of the event to
retrieve the depth. The default value is implementation
specific.

The maximum depth allowed to compute an amplitude.
specific.

Control if the amplitude calculation should be
regionalized or not. The regions and their configuration
are taken from the corresponding magnitude profiles. If
regionalization is activate, then e.g. modules without
origin information will not be able to compute an
amplitude as the origin is required to determine the
effective settings.

If amplitudes for this particular type shall be computed
regardless of any defined regions, set this parameter to
false.

**amplitudes.$name.resp.\***
*Several parameters if usage of full responses is enabled.*

Define the length of the taper at either side of the
waveform. The length will be added to the data
request: start \- taper and end + taper.

After data are converted in to the frequency domain
that minimum frequency defines the end of the left\-side
cosine taper for the frequency spectrum. The taper
applies from 0 Hz to {minFreq} Hz.
A value of 0 or lower disables that taper.

that minimum frequency defines the end of the left-side

that maximum frequency defines the start of the right\-side
applies from {maxFreq} Hz to {fNyquist} Hz.

that maximum frequency defines the start of the right-side

**amplitudes.resp.\***
*The parameters of this group will be overridden by type*
*specific settings if given (see GlobalAmplitudeProfile).*

After data is converted into the frequency domain that
minimum frequency defines the end of the left\-side cosine
taper applied to the spectrum. The taper applies from
0 Hz to {minFreq} Hz. A value of 0 or lower disables
that taper.

minimum frequency defines the end of the left-side cosine

After data are converted in to the frequency domain that
maximum frequency defines the start of the right\-side
cosine taper applied to the spectrum. The taper applies from
{maxFreq} Hz to {fNyquist} Hz.

maximum frequency defines the start of the right-side

*e.g. "signalBegin".*

*Define magnitude parameters independent of amplitude-type profiles.*
*For magnitude correction parameters, e.g., network of station*
*corrections, create a magnitude type profile.*

Define magnitude parameters independent of amplitude-type profiles.

*A magnitude profile configures global parameters for a*
*particular magnitude type. The available magnitude types*
*MagnitudeProcessor.*

Part of the magnitude station correction. The final
magnitude value is multiplier\*M+offset. This value
can be regionalized with name\-value pairs.
The name is the name of the region. Without
a name the value is the default without regionalization.
Example: \"1.0, regionA: 0.9, regionB: 1.1\".

Example: \"0.0, regionA: \-0.1, regionB: 0.2\".

**picker.\***
*Parameters controlling the second-stage picker for re-picking P*
*phases after an initial detection.*

**picker.AIC.\***
*AIC picker is an implementation using the simple non-AR*
*algorithm of Maeda (1985),*
*see paper of Zhang et al. (2003) in BSSA. The picker*
*interface name to be used in configuration files, e.g. of*
*scautopick, is "AIC".*

Override the relative data acquisition time \(relative to
the triggering pick\). This adds a margin to the actual
processing and is useful to initialize the filter \(Example:
bandpass\). The data is not used at all until signalBegin
is reached. The data time window start is the minimum of
noiseBegin and signalBegin.

time\) of the begin of the signal window used to pick.

Override the default filter which is \"raw\". The typical
filter grammar can be used.

**picker.BK.\***
*Bkpicker is an implementation of the Baer/Kradolfer picker*
*adapted to SeisComP. It was created by converting Manfred*
*Baers from FORTRAN to C++ and inserting it as a replacement*
*for the picker algorithm. The picker interface name to be*
*used in configuration files, e.g. of scautopick,is*
*"BK".*

**spicker.\***
*Parameters controlling the secondary picker. Example: for picking S*
*phases.*

Parameters controlling the secondary picker. Example: for picking S

**spicker.L2.\***
*L2 is an algorithm to pick S-phases based on existing*
*P-phases. It works by creating the L2 norm of the two filtered*
*horizontal components and then running the `detecFilter` on*
*the L2 trace to find the S pick. Finally AIC is applied*
*around the detected pick time to refine the detection.*
*The picker name to be used in configuration files is*
*"S-L2".*

Override the relative data processing start time
\(relative to the triggering pick\). This adds a margin to
the actual processing and is useful to initialize the
filter \(Example: bandpass\). The data is not used at all
until signalBegin is reached. The data time window start
is the minimum of noiseBegin and signalBegin.

Override the relative start time \(relative to the
triggering pick\) of the begin of the signal processing.

Override the relative end time \(relative to the triggering
pick\) of the end of the signal window used to pick.

Configure the filter used to process the horizontal
components traces before computing the L2\-norm.

The time correction added to the detection
time before AIC time window is computed.

The AIC time window around the detection used to pick.
If 0, AIC is not used.

**spicker.V.\***
*This S-picker works similarly to L2 but it only uses the*
*vertical component to pick S-phases. The picker name to be*
*used in configuration files is "S-V".*

Configure the filter used to process the raw vertical
component data.

The time correction added to the detection time
before AIC time window is computed.

**amplitudes.Ms_20.\***
*Parameters for computing Ms_20 amplitudes.*

**magnitudes.Ms_20.\***
*Parameters for computing Ms_20 magnitudes from Ms_20 amplitudes.*

Parameters for computing Ms_20 magnitudes from Ms_20 amplitudes.

**magnitudes.mb.\***
*Parameters for computing mb magnitudes from mb amplitudes.*

Minimum epicentral distance for computing mb. Note: According
to the IASPEI recommendations in 2013, the minimum distance
should be 20 deg.

Location of the station specific attenuation table. If not
specified then \@DATADIR\@\/magnitudes\/IDC\/global.ml will be
used as fallback. {net}, {sta} and {loc} are placeholders
which will be replaced with the concrete network code,
station code and location code.

**amplitudes.ML.\***
*Parameters for measuring ML amplitudes. Add more parameters*
*by adding an amplitude type profile 'ML',*

The filter applied to raw records before applying
Wood\-Anderson simulation. Default: no pre\-filtering.

This parameter allows to set how the amplitude is measured.
Either by finding the absolute maximum of the demeaned
trace \(AbsMax\), the difference of maximum and minimum of
the signal window \(MinMax\) or the maximum peak\-trough
of one cycle \(PeakTrough\).

Note that if absMax is already explicitly configured, this
parameter has no effect.

Defines the combiner operation for the amplitudes measured
on either both horizontal component. The default is to
use the average. Allowed values are: \"average\",
\"min\", \"max\" and \"geometric_mean\".
\"geometric_mean\" corresponds to averaging single\-trace
magnitudes instead of their amplitudes.

**magnitudes.ML.\***
*Parameters for computing ML magnitudes from ML amplitudes.*

Format: any list of distance\-value pairs separated by
comma. Values within pairs are separated by colon.

Example: \"0:\-1.3,60:\-2.8,100:\-3.0,400:\-4.5,1000:\-5.85\"
specifies 4 distance intervals from
0...60, 60...100, 100...400 and 400...1000 km distance.
Within these intervals log10\(A0\) is interpolated linearly
between \-1.3...\-2.8, \-2.8...\-3.0, \-3.0...\-4.5 and \-4.5...\-5.8,
respectively.

Note: The first and last distance samples limit the
maximum distance range for computing ML.

Maximum epicentral distance for computing ML.
No distance limitation for maxDistanceKm \= \-1.

**amplitudes.MLc.\***
*Parameters for measuring MLc amplitudes. Add more parameters*
*by adding an amplitude type profile 'MLc',*

Wood\-Anderson simulation.

Applying Wood\-Anderson simulation. To achieve displacement
records without WA simulation, an integration filter can
be applied with the pre\-filter.

Scaling value multiplied to the measured amplitudes to
match the amplitude units expected by the magnitude
calibration function.

Expected amplitudes are
in units of mym but actual amplitudes provided from
Wood\-Anderson\-corrected seismograms are in units of mm:
amplitudeScale \= 1000.

If data are not corrected for WA, measured amplitudes
take the unit of gain\-corrected data considering the
preFilter:
amplitudeScale converts between units of measured and
excpected amplitude.

PeakTrough: half difference between maximum and minimum
on a half cycle

Define how to combine the amplitudes measured on both
horizontals components:

**magnitudes.MLc.\***
*Parameters for computing MLc magnitudes from MLc amplitudes.*

Considered distance measure between source and receiver.
Possible values are

The minimum distance for computing magnitudes from amplitudes.
Negative values deactivate the check.

The maximum distance for computing magnitudes from amplitudes.

Type of magnitude calibration formula to be considered.
The calibration parameters are considered accordingly.
Currently supported are

\"parametric\": consider parameters of parametric
configuration in parametric section

\"A0\": consider parameters of non\-parametric
configuration in A0 section.

**magnitudes.MLc.A0.\***
*Parameters for A0, non-parametric magnitude calibration.*
*Considered if magnitude.MLc.calibrationType = "A0".*

maximum distance range for computing MLv.

**magnitudes.MLc.parametric.\***
*Parameters for parametric magnitude calibration:*
*MLc = log10(A) + c3 * log10(r/c5) + c2 * (r + c4) + c1 + c0(station)*
**
*Considered if magnitude.MLc.calibrationType = "parametric".*

MLc = log10(A) + c3 * log10(r/c5) + c2 * (r + c4) + c1 + c0(station)

Station correction. This is the calibration value 'c0'
applied in the
parametric magnitude calibration formula.

Station correction. This is the calibration value ‘c0’

The calibration value 'c1' applied in the

The calibration value ‘c1’ applied in the

The calibration value 'c2' applied in the
magnitude calibration formula

The calibration value ‘c2’ applied in the

The calibration value 'c3' applied in the

The calibration value ‘c3’ applied in the

The calibration value 'c4' applied in the

The calibration value ‘c4’ applied in the

The calibration value 'c5' applied in the

The calibration value ‘c5’ applied in the

**amplitudes.MLv.\***
*Parameters for measuring MLv amplitudes. Add more parameters*
*by adding an amplitude type profile 'MLv',*

**magnitudes.MLv.\***
*Parameters for computing MLv magnitudes from MLv amplitudes.*

Maximum epicentral distance for computing MLv.
No distance limitation for maxDistanceKm\=\-1

**magnitudes.mB.\***
*Parameters for computing mB magnitudes from mB amplitudes.*

Minimum epicentral distance for computing mB. Note: According

Location of the station specific Q table. If not
specified then \@DATADIR\@\/magnitudes\/IDC\/qfvc.ml will be

**fx.DFX.\***
*Three component feature extraction algorithm ported from the*
*automatic processing system implemented at CTBTO/IDC. The*
*documentation of the methods is not publically available.*
*In case of questions and comments, please contact CTBTO by*
*email: support@ctbto.org.*

**fx.DFX.filter.\***
*Butterworth filter options of the bandpass.*

The lower cut\-off frequency. A negative value or zero
will disable a lower cut\-off frequency.

The upper cut\-off frequency. A negative value or zero
will disable a upper cut\-off frequency.

A station\-dependent parameter used to compute a polarization slowness estimate.

A station\-dependent parameter used to compute the back azimuth and slowness errors.

The path to the cities XML file. This overrides the default
paths. Compare with the global parameter \"citiesXML\".

Start the application filling the entire screen.
This only works with GUI applications.

Use non\-interactive presentation mode. This only works with
GUI applications.

Mining-related events are useful as ground truth events (:cite:t:`bondár-2009a`)
because the epicentre and depth can be constrained by physical inspection.
Unless a local seismograph network with accurate timing also locates the event,
and that information is available, the origin time must be estimated in order
for the event to be useful as ground truth. Existing location algorithms in
|scname|, including :ref:`Hypo71 <global_locsat>` and :ref:`LOCSAT <global_locsat>`
do not allow the determination of origin time given a set of arrivals and a
fixed hypocentre. There is a need, then, for a method of fixed hypocentre
origin time determination.

)

Inversion of arrival times of phase picks for source time fixing hypocenter location.

Compatibility of the method of fixed-hypocentre origin time determination with
the practise of the Comprehensive Test Ban Treaty Organization (CTBTO).

Adaptation of a procedure which is compatible with the other locators supported by |scname|.

Adaptation of a procedure which is compatible with the other locators supported by 

Adaptation of a procedure which can reproduce results of legacy locators currently
in use, such as GENLOC :cite:t:`pavlis-2004` and GRL, a
grid-based locator developed at the Canadian Hazards Information Service (CHIS).

in use, such as GENLOC 

 and GRL, a

The implementation of this locator by :term:`gempa GmbH` was initiated and has received
initial funding from :cite:t:`nrcan`.

Given the measured arrival times :math:`t_i^k` of phase :math:`k` at
station :math:`i`, most methods of earthquake hypocentre location involve
minimization of the weighted squared sum of the residuals. That is,
minimization of:

, most methods of earthquake hypocentre location involve

|r_w|^2 = \sum_{i=1}^N {w_i^2 [ t_i^k - \tau - T_{model}^k(r_i,x) ]^2}

The residuals are computed by subtracting the expected arrival times
:math:`\tau - T_{model}^k(r_i,x)` based on a velocity model applied at the
coordinates of each station
:math:`r_i`.

 based on a velocity model applied at the

Typically the weights can be a combination of the inverse of the
estimated pick uncertainty :math:`1/{\sigma}_i`, a distance term
:math:`d^k(\Delta)` and/or a residual weight term :math:`p(r_i)`.
Alternative weighting schemes can be applied but in this
implementation we weight by pick uncertainty alone: :math:`w_i=\frac{1}{{\sigma}_i}`.

estimated pick uncertainty 

.
implementation we weight by pick uncertainty alone: 

In the general case, the model is a nonlinear function of its inputs, and there
is no analytic solution for the origin time  and hypocenter  that minimize the
norm. Typically, the solution is found iteratively, based on an initial guess
for the origin time and hypocenter. This is the normal procedure for an earthquake
without an a priori estimate of the hypocentral location.
When the hypocenter is in fact accurately constrained, the modeled travel time
is a constant, so we can project each phase arrival back to an equivalent origin
time

\tau = \frac{\sum_{i=1}^{N}w_i^2 (\tau_i^k)^2}{\sum_{i=1}^{N}w_i^2}.

Thus, the origin time is simply the weighted mean of the equivalent origin
times, according to the velocity model, associated with the arrivals.

\sigma = \sqrt{\frac{\sum_{i=1}^{N}w_i^2 [\tau_i^k - \tau]^2}{\sum_{i=1}^{N}w_i^2}}.

The methodology for estimating error intervals and ellipses recommended for
standard processing at the CTBTO (:cite:t:`lee-1975`) is that of
:cite:t:`jordan-1981` and is implemented
in LOCSAT (:cite:t:`bratt-1988`).
Uncertainty is represented by a set of points :math:`x_e` around the final estimate
:math:`x_f` satisfying:

standard processing at the CTBTO (

\kappa_p^2 &= (x_e - x_f)^TC_m(x_e-x_f), \\
\kappa_p^2 &= Ms^2F_p(M,K+N-M), \\
s^2 &= \frac{Ks_K^2+|r_w|^2}{K+N-M}

:math:`C_m`: Covariance matrix, corresponding to the final hypocentre estimate :math:`x_f`.

: Covariance matrix, corresponding to the final hypocentre estimate 

:math:`\kappa_p^2`: The “confidence coefficient” at probability :math:`\rho`.

:math:`F_p(m,n)`: Fisher-Snedecor quantile function (inverse cumulative F-distribution)
for and degrees of freedom of numerator and denominator sum of squares,
respectively, and probability.

: Fisher-Snedecor quantile function (inverse cumulative F-distribution)

:math:`p`: Confidence level: the desired probability that the true epicentre should
fall within the uncertainty bounds.

: Confidence level: the desired probability that the true epicentre should

:math:`N`: Sum of all arrival time, azimuth or slowness estimates. Here, only
arrival times are considered for inversion.

: Sum of all arrival time, azimuth or slowness estimates. Here, only

:math:`M`: Number of fitted parameters:

* 3: error ellipsoid
* 2: error ellipse
* 1: depth or time error bounds.

Here, :math:`M = 1` as we only invert for the time.

:math:`s_K^2`: A prior estimate of the ratio of actual to assumed data variances; typically set to 1.

: A prior estimate of the ratio of actual to assumed data variances; typically set to 1.

:math:`K`: Number of degrees of freedom in prior estimate :math:`s_K^2`.
:math:`K` can be configured by :confval:`FixedHypocenter.degreesOfFreedom`.

Although this formulation is complex it is useful it because allows the analyst to
balance a priori and a posteriori estimates of the ratio of actual to assumed
data variances.

The covariance matrix in the general case is computed from the weighted sensitivity
matrix :math:`A_w`, the row-weighted matrix of partial derivatives of arrival
time with respect to the solution coordinates.

matrix 

, the row-weighted matrix of partial derivatives of arrival

However, when origin time is the only coordinate, the partial derivatives with
respect to origin time are unity, the weighted sensitivity matrix is simply a
row vector of weights, and the time-time covariance
:math:`c_{tt}` is simply the sum of the squares of these weights.

It is recommended that fixed-hypocentre origin time confidence intervals be
estimated using the method of :cite:t:`jordan-1981` for error ellipsoids,
that is, that the time error bounds be represented using

estimated using the method of 

 for error ellipsoids,

\Delta t_p &= \sqrt{ \frac{\kappa_p^2}{c_{tt}} } \\
           &= \sqrt{ \frac{F_p(1,K+N-1)}{K+N-1} \frac{Ks_K^2 + \sum_{i=1}^{N}w_i^2 [\tau_i^k-\tau]^2}{\sum_{i=1}^{N}w_i^2}}.

In addition to recording arrival weights and residuals, distances and azimuths,
and other details of origin quality, the details of a ground-truth-level (GT1)
fixed-hypocentre origin time estimate are recorded as:

For the sake of reproducibility, a comment is added to every new :term:`origin`
reporting :math:`K`, :math:`s_K` and :math:`\kappa_p`.

For the sake of reproducibility, a comment is added to every new 

Configure the parameters in the section *FixedHypocenter* of the global configuration.

When using in :ref:`scolv` the FixedHypocenter locator can be chosen right away
from the available locators.

.. figure:: media/scolv-fixedhypocenter.png
   :align: center
   :width: 18cm

   scolv Location tab with FixHypocenter selected for relocating.

 the FixedHypocenter locator can be chosen right away

Configure the module, e.g. :ref:`screloc` or :ref:`scolv`, which is to use FixedHypocenter:

* set the locator type / interface: "FixedHypocenter"
* if requested, set the profile as [interface]/[model], e.g.: LOCSAT/iasp91 or libtau/ak135

if requested, set the profile as [interface]/[model], e.g.: LOCSAT/iasp91 or libtau/ak135

Run the module with FixedHypocenter

Origins created by the FixedHypocenter locator can be identified by the methodID
and the *confidence/description* comment of the origin paramters, e.g.: ::

   <origin publicID="Origin/20200102030459.123456.8222">
     ...
     <timeFixed>false</timeFixed>
     <epicenterFixed>true</epicenterFixed>
     <methodID>FixedHypocenter</methodID>
     <earthModelID>iasp91</earthModelID>
     ...
     <comment>
       <text>Confidence coefficient: K-weighted ($K$=8, $s_K$=1 s), $\kappa_p$ = 1.6, $n_{eff}$ = 5.0</text>
       <id>confidence/description</id>
     </comment>
     ...
   </origin>

and the 

<origin publicID="Origin/20200102030459.123456.8222">
  ...
  <timeFixed>false</timeFixed>
  <epicenterFixed>true</epicenterFixed>
  <methodID>FixedHypocenter</methodID>
  <earthModelID>iasp91</earthModelID>
  ...
  <comment>
    <text>Confidence coefficient: K-weighted ($K$=8, $s_K$=1 s), $\kappa_p$ = 1.6, $n_{eff}$ = 5.0</text>
    <id>confidence/description</id>
  </comment>
  ...
</origin>

Hyperlink target "global-fixedhypocenter-configuration" is not referenced.

Implementation of the CTBTO/IDC polarization analysis for
three-component stations.

The feature extraction as implemented at CTBTO IDC for single three-component
stations determines back azimuth (station to origin) and slowness, including the
uncertainties for both of these. In the IDC source code and database, the back
azimuth is referred to as only azimuth.

The algorithm computes polarization attributes for a three-component station using
a modification to the :cite:t:`jurkevic-1988` algorithm. Some of these attributes are
then used to determine detection azimuth (seazp = P-type azimuth in degrees),
detection slowness and azimuth/slowness uncertainties (inang1 = emergence (incidence)
angle and rect = rectilinearity).

a modification to the 

 algorithm. Some of these attributes are

A fixed noise window of 9.5 seconds ([-30s;-20.5s] with respect to trigger time)
and a signal window of 5.5 seconds ([-4s;1.5s] with respect to trigger time)
is used. The signal window is subdivided into intervals of 1.5s length which
overlap by 50%.

Apply cosine ramp to noise data and filter the entire data window.

Extract eigenvalues and compute parameters including rectilinearity.

In addition to the extracted back azimuth and slowness values the rectilinearity
is added as a comment to the resulting pick. The comment ID is
``DFX:rectilinearity`` and the comment is the value in string representation.

All |scname| graphical user interfaces are based on a common libraries.
This chapter describes what configuration and styling options are available for
all GUI applications. The GUI specific configuration options are additional to
the standard application options. Setup the e.g., messaging connection and database
is equal to the CLI (command line interface) applications.

 graphical user interfaces are based on a common libraries.

To adjust the look-and-feel to the host desktop system and the personal taste
several styling options are available. Since all GUI applications are using the
Qt library, the tool "qtconfig" can used to adjust the widget theme and the
colors. If KDE is used as desktop system, the same style is used since KDE
bases on Qt as well.

Qt library, the tool “qtconfig” can used to adjust the widget theme and the

The style options supported by |scname| (and not covered by the general Qt setup)
have to be given in the applications (or global) configuration file. The
parameters are configured with the *scheme.* parameters.

 (and not covered by the general Qt setup)
parameters are configured with the 

In case of :ref:`map layers defined by geo feature files <sec-gui_layers>` the
parameters may also be defined by :file:`map.cfg` in the directory of the geo
feature file.

Beside the usual integer, float, boolean and string parameters GUI applications
support also :ref:`color <sec-gui_color>`, :ref:`color gradient <sec-gui_colorgradient>`,
:ref:`pen <sec-gui_pen>`, :ref:`brush <sec-gui_brush>`, :ref:`font <sec-gui_font>`
and :ref:`symbol <sec-gui_symbol>` parameters. The syntax is explained below:

support also 

color = red | RRGGBB | RRGGBBAA | "rgb(red,green,blue)" | "rgba(red,green,blue,alpha)"

Colors are specified either by :term:`color keyword names <color keyword name>`,
in a hexadecimal notation or in a rgb(a) notation. When using the rgb(a)
notation it should be quoted. Otherwise the configuration
parser would tokenize the value into 3 or 4 strings due to the comma.

,

This defines a gradient from red through green to blue for the nodes 1, 2 and 3.
Values out of range are clipped to the lower or upper bound.

# The font family
font.family = "Arial"

# Point size
font.size = 12

# Bold?
# Default: false
font.bold = false

# Italic?
font.italic = false

# Underline?
font.underline = false

# Overline?
font.overline = false

Pens are used in the vector layer configuration. Pens have three attributes:
color, style and width. Color follows the described :ref:`color definition <sec-gui_color>`, width
is a double and the styles are:

color, style and width. Color follows the described 

*Images from Qt 4.1 documentation: http://doc.qt.digia.com/4.1/qt.html#PenStyle-enum*

Images from Qt 4.1 documentation: http://doc.qt.digia.com/4.1/qt.html#PenStyle-enum

Brushes are also used in the vector layer configuration. Brushes are used to
fill a polygon. They have two attributes: color and style. Color follows the
described :ref:`color definition <sec-gui_color>` and styles are:

described 

Symbols configured by the :confval:`symbol.*` parameters can be plotted on coordinate
points defined by :ref:`geo feature files <sec-gui_layers>` or by :confval:`symbol.icon.hotspot.x`
and :confval:`symbol.icon.hotspot.y`. The symbols can be shapes (:confval:`symbol.shape`)
or icons from a file (:confval:`symbol.icon`).

Legends are plotted on maps describing :ref:`map vector layers <sec-gui_layers>`.
Styles are:

Additional features may be added to maps using configurable layers:

:ref:`sec-gui_layers-vector`, e.g., points, polylines, polygons from FEP, BNA
or GeoJSON files. Files in BNA and GeoJSON format can be generated from other
formats by many GIS programs or web sites. BNA and GeoJSON are described below.

, e.g., points, polylines, polygons from FEP, BNA

:ref:`sec-gui_layers-others`, e.g., cities, grids, events, custom layers.

:ref:`sec-gui_layers-vector` are loaded and may be visualized together with
:ref:`other layers <sec-gui_layers-others>`. The order of the drawing is defined
by :confval:`map.layers`.

The map layers can be explained on the maps by :ref:`configurable legends <sec-gui_legend>`
and selected interactively by their :ref:`configurable category <sec-gui_layers-config>`.

.. figure:: media/gui/map-layers.png

   Map with layers defined by polygons, cities and legends.

The old directories :file:`@DATADIR@/bna` or :file:`@CONFIGDIR@/bna`
are still supported but superseded by :file:`@DATADIR@/spatial/vector` or
:file:`@CONFIGDIR@/spatial/vector`. The latter directories have higher priority.
If one of the old directories has been found, a warning will be logged.

. The latter directories have higher priority.

|scname| supports arbitrary polygons, polylines or points for drawing as layers
on maps or for using by other :term:`modules <plugin>` and :term:`plugins <plugin>`.
The polygons, polylines and points can be customized by the
:ref:`available attributes <sec-gui_syntax>`. Currently supported data formats
are:

 supports arbitrary polygons, polylines or points for drawing as layers
on maps or for using by other 

Please note that segment lengths below 180 degrees must be used in order to
render polygons or polylines correctly and to avoid representation
ambiguities.

Used for visualization of event regions and for setting the region name of
the event by :ref:`scevent`.

the event by 

Stored in directories: :file:`@DATADIR@/fep` or :file:`@CONFIGDIR@/fep`

File format example with one polygon:

.. code-block:: none

   longitude1 latitude1
   longitude2 latitude2
   longitude3 latitude3
   ...
   99.0 99.0 length
   L name

where the coordinates, *length* and *name* are to be replaced by actual values,

longitude1 latitude1
longitude2 latitude2
longitude3 latitude3
...
99.0 99.0 length
L name

Visibility and style can be controlled by :ref:`configuration <sec-gui_layers-config>`
and :confval:`map.layers.fep.visible`.

Used for visualization, e.g., points, polylines, polygons for faults or
districts, respectively, and even symbols or images on maps. Some objects,
like closed lines, can be evaluated by other modules and plugins, e.g,. the
:ref:`region check <scevent_regioncheck>` plugin for :ref:`scevent`.

Stored in directories or sub-directories of:
:file:`$SEISCOMP_ROOT/share/spatial/vector` or
:file:`~/.seiscomp/spatial/vector`

Properties are controlled as described in the section
:ref:`sec-gui_layers-config`

For closed polygons the list of coordinates does not need to end on start
coordinates.

File format example for one polygon/polyline:

   "name 1","rank 1",type/length
   longitude1,latitude1
   longitude2,latitude2
   longitude3,latitude3
   ...

where the coordinates, *name* and *type/length* are to be replaced by actual
values.  For polylines (open polygons) set type/length to the negative number
of points defining the line, e.g., -10. Positive numbers, e.g., 10, define
closed polygons. Such polygons are automatically closed between their end
points. Thus, the end points do not need to be identical.

The BNA file format also supports multiple vertices per line and the
definition of islands. Please refer to
https://www.softwright.com/faq/support/boundary_file_bna_format.html for more
format specifications.

.. note ::

   * All |scname| map applications support the drawing of polygons and a
     subsequent export to the BNA format.
   * An extension of the header entries is possible. The extra entries can be
     used by other modules or plugins, e.g., the :ref:`region check
     <scevent_regioncheck>` plugin. Example ::

        "coal","rank 1","eventType: mining explosion, minDepth: -5, maxDepth: 10",6
   * The name is extracted from the first part of the header.
   * The rank is extracted from the second part of the header if it has the
     form "rank VALUE", e.g., rank 12.

"name 1","rank 1",type/length
longitude1,latitude1
longitude2,latitude2
longitude3,latitude3
...

 are to be replaced by actual

* All |scname| map applications support the drawing of polygons and a
  subsequent export to the BNA format.
* An extension of the header entries is possible. The extra entries can be
  used by other modules or plugins, e.g., the :ref:`region check
  <scevent_regioncheck>` plugin. Example ::

     "coal","rank 1","eventType: mining explosion, minDepth: -5, maxDepth: 10",6
* The name is extracted from the first part of the header.
* The rank is extracted from the second part of the header if it has the
  form "rank VALUE", e.g., rank 12.

All |scname| map applications support the drawing of polygons and a
subsequent export to the BNA format.

 map applications support the drawing of polygons and a

An extension of the header entries is possible. The extra entries can be
used by other modules or plugins, e.g., the :ref:`region check
<scevent_regioncheck>` plugin. Example ::

   "coal","rank 1","eventType: mining explosion, minDepth: -5, maxDepth: 10",6

used by other modules or plugins, e.g., the 

"coal","rank 1","eventType: mining explosion, minDepth: -5, maxDepth: 10",6

The rank is extracted from the second part of the header if it has the
form "rank VALUE", e.g., rank 12.

form “rank VALUE”, e.g., rank 12.

Visibility and style can be controlled by
:ref:`configuration in map.cfg<sec-gui_layers-config>`.

districts, respectively, and even symbols or images on maps.

File format: https://geojson.org/

.. note ::

   All coordinates must be given in the WGS-84 coordinate reference frame.

All coordinates must be given in the WGS-84 coordinate reference frame.

Rendering properties are controlled as described in the section
:ref:`sec-gui_layers-config`.

Additional properties may be defined in the `properties` member of a `Feature`
object. The name and rank of a GeoFeature are extracted from the `name` and
`rank` property. Other property keys and values are added to the `attributes`
map of a GeoFeature for module-specific processing.

object. The name and rank of a GeoFeature are extracted from the 

Basic file format example containing a single point without any meta
information

.. code-block:: properties

   {
     "type": "Point",
     "coordinates": [ 13.0, 52.0 ]
   }

File format example with a feature collection containing one polygon, one line
string and one point:

   {
     "type": "FeatureCollection",
     "features": [
       {
         "type": "Feature",
         "properties": {
           "name": "polygon 1",
           "rank" : 1
         },
         "geometry": {
           "type": "Polygon",
           "coordinates": [
             [
               [ 10.0, -15.0 ],
               [ 13.0, -15.0 ],
               [ 13.0, -12.0 ],
               [ 10.0, -12.0 ],
               [ 10.0, -15.0 ]
             ]
           ]
         }
       }, {
           "name": "line string 1",
           "rank" : 4
         },
           "type": "LineString",
             [ 0.0, -5.0 ],
             [ 3.0, -5.0 ],
             [ 3.0, -2.0 ],
             [ 0.0, -2.0 ]
           ]
         }
       }, {
           "name": "point 1",
           "rank" : 1
         },
           "type": "Point",
           "coordinates": [ 13.0, 52.0 ]
         }
       }
     ]
   }

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "polygon 1",
        "rank" : 1
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [ 10.0, -15.0 ],
            [ 13.0, -15.0 ],
            [ 13.0, -12.0 ],
            [ 10.0, -12.0 ],
            [ 10.0, -15.0 ]
          ]
        ]
      }
    }, {
        "name": "line string 1",
        "rank" : 4
      },
        "type": "LineString",
          [ 0.0, -5.0 ],
          [ 3.0, -5.0 ],
          [ 3.0, -2.0 ],
          [ 0.0, -2.0 ]
        ]
      }
    }, {
        "name": "point 1",
        "rank" : 1
      },
        "type": "Point",
        "coordinates": [ 13.0, 52.0 ]
      }
    }
  ]
}

Layers may be grouped into categories and form a hierarchy. The categories of the
geo feature data are derived from the feature directory structure, i.e., the names
of the directories below the feature directory, e.g., :file:`@DATADIR@/spatial/vector`.
Feature data directly located within the feature directory have no special category.
The FEP data set is assigned to the fep category.

of the directories below the feature directory, e.g., 

.

The depth of the feature directory tree is arbitrary and subfolders form
sub-categories. E.g., the directory tree
:file:`$SEISCOMP_ROOT/share/spatial/vector/coastline/europe/germany` will generate
the categories *coastline*, *coastline.europe* and *coastline.europe.germany* which
all may be configured individually. Every undefined property is inherited from
the parent category.

 which

The parameters in the global configuration of modules override the configurations
in :file:`map.cfg` allowing a specific configuration per application.

in 

All data set directories and sub-directories in the feature directory are
scanned for an optional :file:`map.cfg` configuration file defining default
drawing options. Parameters found in the lowest sub-directory take priority.
This allows easy distribution of data sets and drawing properties without the
need to change application configuration files.
The available map layer configuration parameters are described further below.

scanned for an optional 

 configuration file defining default

The default drawing options may be overridden in the global or application
configuration file using the format *prefix.category.param*. If global layer
properties are configured, then just use *prefix.param*. The prefix for layer
configuration is *map.layers*. Due to its recursive structure the configuration
options are not available through :ref:`scconfig`.

configuration file using the format 

. Due to its recursive structure the configuration
options are not available through 

The example below shows files and directories for plotting fault lines with
specific configurations. The geo features are defined in :file:`data.bna` or
:file:`data.geojson`, configurations are in :file:`map.cfg`:

specific configurations. The geo features are defined in 

@DATADIR@/spatial/vector/
├── maps.cfg
├── faults/
|   ├── map.cfg
|   ├── reverse/
|   |   ├── map.cfg
|   |   ├── data.bna
|   |   ├── data.geojson
|   ├── normal/
|   ├── strike-slip/
├── others/
|   ├── maps.cfg
|   ├── data.bna
|   ├── data.geojson

Configuration examples for plotting the fault lines based on the example above:

Legend control in :file:`@DATADIR@/spatial/vector/faults/map.cfg`

   # title of legend for all legend entries
   title = "Faults"
   # plot the legend vertically
   orientation = vertical
   # plot the legend in the top-right corner
   legendArea = topright

# title of legend for all legend entries
title = "Faults"
# plot the legend vertically
orientation = vertical
# plot the legend in the top-right corner
legendArea = topright

Polygon property control in :file:`@DATADIR@/spatical/vector/faults/strike-slip/map.cfg`
common to all polygons in this directory. You may generate
different sub-directories with different parameters inheriting the legend and other
properties. Put this file, e.g., in the strike-slip directory.

   # make the layer visible
   visible = true
   # do not draw the name of the polygon
   drawName = false
   # draw a solid line
   pen.style = solidline
   # set the pen with to 1 px
   pen.width = 1
   # set the pen line to blue
   pen.color = blue
   # label to be shown in legend
   label = "strike-slip"

# make the layer visible
visible = true
# do not draw the name of the polygon
drawName = false
# draw a solid line
pen.style = solidline
# set the pen with to 1 px
pen.width = 1
# set the pen line to blue
pen.color = blue
# label to be shown in legend
label = "strike-slip"

Instead of using :file:`map.cfg`, the same properties can also be set per layer
category by global parameters in module configurations, e.g., for the layer *strike-slip*
below *faults* (:file:`global.cfg`):

, the same properties can also be set per layer
category by global parameters in module configurations, e.g., for the layer 

map.layers.faults.title = "Faults"
map.layers.faults.orientation = vertical
map.layers.faults.legendArea = topright
map.layers.faults.strike-slip.visible = true
map.layers.faults.strike-slip.drawName = false
map.layers.faults.strike-slip.pen.style = solidline
map.layers.faults.strike-slip.pen.width = 1
map.layers.faults.strike-slip.pen.color = blue
map.layers.faults.strike-slip.label = "strike-slip"

Available map layer configuration parameters for each category are:

Title of the legend for this directory. If the title is empty
then no legend will be created. A legend will show the label
of its own directory and all its subdirectories.

The index of the label in the legend. All labels will be
sorted by their index in ascending order.

The area in the map where the legend will be displayed.
Valid values are
*topleft*, *topcenter*, *topright*,
*centerleft*, *center*, *centerright*,
*bottomleft*, *bottomcenter* and *bottomright*.

The orientation of the legend, either *vertical* or *horizontal*.

Draws the segment name in the center of the bounding box.
Default is ``false``.

Default is 

Set or override the rank of the segment. The rank defines
the zoom level at which drawing of the segment starts.
Default is ``1``.

Default is 

Sets the roughness of a polyline or polygon in pixels. The higher the value
the less vertices are rendered. A vertex is skipped if its pixel distance to
the previous vertex is less than roughness. In any case the first and last
vertex of a feature or subfeaure is drawn.

The size of a symbol in pixels. Requires either :confval:`symbol.shape` or
:confval:`symbol.icon` to be configured.

Instead of drawing points, lines or polygons, the given shape is rendered
for each vertex of a feature. Supported values are *circle*, *triangle*,
*square*, *diamond* and *none*. The shape is scaled to
:confval:`symbol.size`.

for each vertex of a feature. Supported values are 

Instead of drawing points, lines or polygons, the given icon is rendered for
each vertex of a feature. If the string starts on a ``/`` it is interpreted as
an absolute path else it is resolved relative to the directory containing the
vector data. The image is scaled to :confval:`symbol.size` if ``size`` is
larger than zero otherwise the original image size is used.

each vertex of a feature. If the string starts on a 

 it is interpreted as
vector data. The image is scaled to 

The X coordinate of the symbol image which is rendered at the map
location longitude. This coordinate is in unscaled image space.

The Y coordinate of the symbol image which is rendered at the map
location latitude. This coordinate is in unscaled image space
starting at top.

Alignment of the symbols name used in combination with :confval:`drawName`,
:confval:`symbol.size` and :confval:`symbol.name.margin`. Valid values are

If enabled, the bounding box of the segment is drawn.

Default is 

Line style. Supported values are: dashdotdotline, dashdotline, dashline,
dotline, nopen and solidline.
Default is ``solidline``.

Default is 

Fill style. Supported values are:
nobrush, solid, dense1, dense2, dense3, dense4,
dense5, dense6, dense7, horizontal, vertical,
cross, bdiag, fdiag and diagcross.
Default is ``nobrush``.

Default is 

The image composition mode. Valid values are
*src-in*, *dst-in*, *src-out*, *dst-out*, *src-atop*,
*dst-atop*, *xor*, *plus*, *multiply*, *screen*,
*overlay*, *darken*, *lighten*, *color-dodge*,
*color-burn*, *hard-light*, *soft-light*, *difference*,
*exclusion*, *src-or-dst*, *src-and-dst*, *src-xor-dst*,
*not-src-and-not-dst*, *not-src-or-not-dst*,
*not-src-xor-dst*, *not-src*, *not-src-and-dst* and
*src-and-not-dst*.

An explanation can be found at the Qt
developer documentation, e.g.
https://doc.qt.io/qt-5/qpainter.html#composition-modes.

Other layers may be displayed on maps depending on the application.

Events layer:

Event symbols are shown as an extra layer, e.g., in the Location tab of :ref:`scolv`.
Activate in the global module configuration by :confval:`map.layers.events.visible`.

Event symbols are shown as an extra layer, e.g., in the Location tab of 

Cities layer:

Cities are plotted based on the XML file :file:`@DATADIR@/cities.xml`. Custom
XML files, e.g., for multi-language support are provided by :confval:`cityXML`.
Properties are configured in various global module parameters :confval:`scheme.map.*`
and :confval:`scheme.colors.*`.

. Custom
XML files, e.g., for multi-language support are provided by 

.
Properties are configured in various global module parameters 

Grid layer:

The latitude/longitude grid plotted on top of maps. Properties are configured
in the global module parameters :confval:`scheme.colors.map.grid.*`.

in the global module parameters 

Custom layers:

Additional custom layers may be added which can be loaded and displayed by specific
modules or plugins. They are added by :confval:`map.customLayers`.

modules or plugins. They are added by 

Hyperlink target "sec-gui-layers-vector-format" is not referenced.

Hyperlink target "sec-gui-layers-vector-format-fep" is not referenced.

Hyperlink target "sec-gui-layers-vector-format-bna" is not referenced.

Hyperlink target "sec-gui-layers-vector-format-geojson" is not referenced.

The travel-time interface *homogeneous* allows predicting travel times for
P and S wave and homogeneous velocity models.

 allows predicting travel times for

The travel-time interface *homogeneous* is controlled by global parameters,
e.g., in :file:`$SEISCOMP_ROOT/etc/global.cfg`:

Add a new table profile for homogeneous travel-time tables with some custom
profile name. In :ref:`scconfig` navigate to the section *ttt.homogeneous*
and click on the green button to add a table profile.

profile name. In 

Register the new profile by adding its name to the list of tables in
:confval:`ttt.homogeneous.tables`

# The list of supported model names per interface.
ttt.homogeneous.tables = "5"

# Geographic origin of the region. Expects 2 values: latitude, longitude.
ttt.homogeneous.5.origin = 51, 12

# Radius validity of the region.
ttt.homogeneous.5.radius = 1

# Min Depth validity of the region.
ttt.homogeneous.5.minDepth = 0

# Max Depth validity of the region.
ttt.homogeneous.5.maxDepth = 2

# P wave velocity.
ttt.homogeneous.5.P-velocity = 5

# S wave velocity.
ttt.homogeneous.5.S-velocity = 3

Once the travel-time interface profile is defined and registered, in can be
selected

interactively in the :ref:`scolv phase picker <scolv-sec-waveform-review>`
or the :ref:`scolv amplitude picker <scolv-sec-amplitude-review>`,

or used in other modules which allow the configuration of travel-time
interfaces.

The Hypo71 locator algorithm by Fred Klein locator (:cite:t:`lee-1975`) has
been implemented into |scname| through the plugin mechanism. The plugin *hypo71*
contains the LocatorInterface implementation for Hypo71.
This plugin uses a slightly modified Hypo71 version from Alexandre Nercessian (IPGP)
which allows negative earthquake depth (above sea level) and negative stations
altitude (below sea level - OBS).

The development of this plugin was co-financed by the European Union and
`le Ministère de l'Ecologie, du Développement Durable, des Transports et du Logement
<http://www.developpement-durable.gouv.fr>`_
and developed by :cite:t:`ovsm` / :cite:t:`ipgp`.

le Ministère de l’Ecologie, du Développement Durable, des Transports et du Logement

le Ministère de l'Ecologie, du Développement Durable, des Transports et du Logement

le ministère de l'ecologie, du développement durable, des transports et du logement

When receiving a list of arrivals to locate, the plugin builds a Hypo71 input
file with informations from the station inventory and configured profile.
It then runs Hypo71, reads the output file and sends the results (location,
uncertainties, RMS, pick residuals ...) to |scname|.

uncertainties, RMS, pick residuals …) to 

If several trial depths are configured, the plugin will run as many Hypo71
rushes as configured depths.
Then all the results are read, and a decision is made on the best one, based on
location RMS and uncertainty.
A final run is then made with the best result depth as trial depth.

The plugin allows the user to set up as many profiles as needed.
A profile contains all the information relative to the velocity model and
Hypo71 iteration parameters.

This allows the user to tune the behaviour of Hypo71 to what he needs.
If no profiles are set-up, the plugin will use default Hypo71 profile, according
to example shown in Hypo71 first publication.
Some of this default Hypo71 parameters have been altered to allow more and finer
iteration, since computer power is now far above what was available in the 1970's.

iteration, since computer power is now far above what was available in the 1970’s.

After running Hypo71, the output is converted into a |scname| origin (:term:`SCML`)
object including some error measures. The following table shows how
the Hypo71 error measures are mapped to the |scname| data model:

)
the Hypo71 error measures are mapped to the 

The *hypo71* plugin is installed under :file:`share/plugins/hypo71.so`.
It provides a new implementation of the LocatorInterface with the name Hypo71.

.

To add the plugin to a module add it to the modules configuration, either
:file:`modulename.cfg` or :file:`global.cfg`:

Basically it can be used by two |scname| modules: :ref:`screloc` and :ref:`scolv`.

In addition to the native Hypo71 outp ut a |scname| origin object is created and
returned to the calling instance. Usually this object is then sent via messaging.

 origin object is created and

In addition, the stdout output of the locator is redirected to |scname| output at
INFO level. Each line is identified by leading "Hypo71PC:", e.g.: ::

 output at
INFO level. Each line is identified by leading “Hypo71PC:”, e.g.:

12:02:25 [info] Hypo71PC:  Date   Heure Minute Seconde
12:02:25 [info] Hypo71PC:  90113    22    48     3.78                                Nb Iterations :  3

To view this output on the command line add *--debug* to your application when executing on
the command line. Increasing logging level of the module which executes the plugin
allows to read the output in the log file: ::

 to your application when executing on
allows to read the output in the log file:

To add the plugin to an application such as scolv or screloc, add the plugin
name to the list of plugins that are loaded (e.g. :file:`scolv.cfg`):

name to the list of plugins that are loaded (e.g. 

Futhermore add the plugin configuration (e.g. :file:`scolv.cfg`):

########################################################
############# Hypo71 plugin configuration ##############

# Hypo71 input file to process (generated by plugin)
hypo71.inputFile = @DATADIR@/hypo71/HYPO71.INP

# Hypo71 log file to store ZTR calculation and final results
hypo71.logFile = @LOGDIR@/HYPO71.LOG

# Hypo71 output file to read results from (generated by binary)
hypo71.outputFile = @DATADIR@/hypo71/HYPO71.PRT

# Hypo71 script called by plugin
hypo71.hypo71ScriptFile = @DATADIR@/hypo71/run.sh

# Hypo71 default profile
hypo71.defaultControlFile = @DATADIR@/hypo71/profiles/default.hypo71.conf

# Hypo71 origin patternID
hypo71.publicID = Hypo71.@time/%Y%m%d%H%M%S.%f@.@id@

# Should we use the custom patternID ?
hypo71.useHypo71PatternID = false

# Hypo71 custom profiles examples
hypo71.profiles = ModelA
hypo71.profile.ModelA.earthModelID = "My Velocity Model A"
hypo71.profile.ModelA.methodID = Hypo71PC
hypo71.profile.ModelA.controlFile = @DATADIR@/hypo71/profiles/profile.a.conf

Verify that everything is properly set up in the script :file:`@DATADIR@/hypo71/run.sh`

#!/bin/bash
HYPO71PC_BINARY=Hypo71PC
HYPO71PC_HOME=`dirname $0`

# Jumping into the right directory
cd ${HYPO71PC_HOME}/

# Executing binary with input file as argument
${SEISCOMP_ROOT}/bin/$HYPO71PC_BINARY < input

Verify that everything is properly set up in the file :file:`${SEISCOMP_ROOT}/share/hypo71/input`

There must be 3 blank lines at the end of the :file:`input` file, those are not to be removed.

Finally set-up your Hypo71 profile (e.g. :file:`${SEISCOMP_ROOT}/share/hypo71/profiles/profile.a.conf`)

############################################################
##             HYPO71 SeisComP Plugin                     ##
##                                          @OVSM-IPGP    ##
##                                                        ##

## This profile is based on Dorel velocity model for French Antilles
## It allows several iterations at different starting depth for deep and crustal earthquakes

##############
# Reset List #
TEST(01) = .1    # sec # cutoff RMS value under which Jeffrey's weghting of residuals is not used
TEST(02) = 50.   # km  #
TEST(03) = 0.2    # critical F-value for the stepwise multiple regression
TEST(04) = .01   # km # adjustment value under which Geiger's iteration is terminated
TEST(05) = 5.    # km # focal-depth value above which DZ is rest to DZ / (K+1)
TEST(06) = 4.    # regression TEST(03)/TEST(06) coefficient value if no significant variable is found in the stepwise multiple regression
TEST(10) = 2.  # km # coefficient value J = D/TEST(10) used for resetting DX and DY
TEST(11) = 999.    # maximum number of iterations in the hypocentral adjustment
TEST(12) = .5    # coefficient value DZ = -Z*TEST(12) used for resetting DZ when hypocenter is placed in the air
TEST(13) = 1.    # km # standard error value of hypocentral optionally calculated RMS

## The following values are only available with the Hypo71PC version modified by Alexandre Nercessian (IPGP) which is included with this plugin
TEST(15) = -2.   # km # maximum altitude of earthquake in km (down is positive)
TEST(20) = 1.    # used altitude = read altitude * TEST(20) - for example, -2500 = -250 * 10

######################
# Crustal Model List #
CRUSTAL_VELOCITY_MODEL = 3.50, 6.00, 7.00, 8.00
CRUSTAL_DEPTH_MODEL = 0.00, 3.00, 15.00, 30.00

################
# Control Card #
# MANDATORY
ZTR = 5, 20, 40, 60, 80, 100, 150, 200   # km # trial focus depth, at least two
XNEAR = 200. # km # distance from epicenter up to which the distance weighting is 1
XFAR = 450. # km # distance from epicenter beyond which the distance weighting is 0
POS = 1.76  # ratio of P-velocity to S-velocity

KAZ = 1      # 1 or blank # apply azimuthal weighting of stations ?
KSORT = 1    # 1 or blank # sort stations by distance in the output ?

# Use the position obtained from the best ZTR value ?
USE_TRIAL_POSITION = false

####################
# Instruction Card #
KNST = 1 # use S data ?
INST = 0 # fix depth ?

#####################################
# Optionnal Weighting Look-Up Table #
# Uncomment if you want to disable dynamic weighting and use those uncertainties as
# boundaries for weighting (e.g. a pick with +-0.02 will have a weight of 0)
#WEIGHT_UNCERTAINTY_BOUNDARIES = 0.1, 0.2, 0.5, 1.0

The usage of the new Hypo71 plugin is straight forward. Once loaded successfully
the new locator shows up in the lower left corners combo box.

.. figure:: media/hypo71/locator_selection_small.png

Select the new Hypo71 locator and a profile from the pre-configured list.

.. figure:: media/hypo71/locator_profile_selection_small.png

The Hypo71 implementation doesn't provide a virtual profile automatically but the
plugins ships with some example profiles.

The Hypo71 implementation doesn’t provide a virtual profile automatically but the

If an origin has been relocated the method should be set to "Hypo71" and
the earth model contains the name of the profile used to perform this localization.

If an origin has been relocated the method should be set to “Hypo71” and

.. figure:: media/hypo71/origin_information.png

The Hypo71 locator implementation supports to override configured settings or
control parameters for a session. Those changes are not persistent and lost if
the locator is changed to another one or the profile has been changed.

To open the settings dialog press the button right to the locator selection
combo box.

.. figure:: media/hypo71/locator_settings.png

.. figure:: media/hypo71/hypo71_settings.png

Take a look at Fred Klein HYPOINVERSE Earthquake Location software (:cite:t:`klein-2002`),

Take a look at Fred Klein HYPOINVERSE Earthquake Location software (

Hypo71PC original manual and binary are available on USGS website (:cite:t:`lee-1975`).

Hypo71PC original manual and binary are available on USGS website (

Unexpected possible title overline or transition.
Treating it as ordinary text because it's so short.

Treating it as ordinary text because it’s so short.

Hyperlink target "global-hypo71-configuration" is not referenced.

iLoc is a locator developed by István Bondár which has been integrated into
|scname| by :cite:t:`gempa`. It is invoked by the wrapper plugin *lociloc* - the
interface between |scname| and iLoc.
Read the sections :ref:`iloc-setup` and :ref:`iloc-application` for
configuring and using iLoc in |scname|.

iLoc is a locator tool for locating seismic, hydroacoustic and
infrasound sources
based on :term:`phase picks <pick>`. iLoc is based on the location
algorithm developed by :cite:t:`bondár-2009a` and implemented at the
International Seismological Center, (:cite:t:`isc`, :cite:t:`bondár-2018`)
with numerous new features added (:cite:t:`bondár-2018`).
The stand-alone iLoc code can be downloaded from the :cite:t:`iloc-github`
software repository.

based on 

Use seismic, hydroacoustic and infrasound arrival time, slowness and azimuth
observations in location;

Use travel-time predictions from a global 3D upper mantle velocity model;

Account for the correlated travel-time prediction error structure due to
unmodeled 3D velocity heterogeneities;

Check if the data has sufficient resolution to determine the
hypocenter depth;

Originally developed for U.S. Air Force Research Laboratory, today the standard
at the International Seismological Centre (ISC) replacing previous routines

Linearised inversion using a priori estimate of the full data covariance matrix
Attempts for free-depth solution only if there is depth resolution

Local velocity model and local phase TT predictions for Pg/Sg/Lg, Pb/Sb, Pn/Sn.

This section describes some of the principles. The full description of the applied
algorithms can be found in the iLoc documentation provided along with the package
on the :cite:t:`iloc-github` website.

on the 

Linearized inversion algorithms are quite sensitive to the initial guess. In order
to find an initial hypocenter guess for the linearized inversion the Neigbourhood
Algorithm (:cite:t:`sambridge-1999`; :cite:t:`sambridge-2001`) is performed
around the starting hypocentre if :confval:`iLoc.profile.$name.DoGridSearch` is active.

Algorithm (

During the NA search, we identify the phases with respect to each trial hypocenter
and calculate the misfit of the trial hypocenter. The misfit is defined as the sum
of the :confval:`iLoc.profile.$name.NAlpNorm` residual and a penalty factor that
penalizes against freakish local minima provided by just a few phases. In the first
iteration :confval:`iLoc.profile.$name.NAinitialSample` hypocenter hypotheses are tested,
while the subsequent iterations consider the best :confval:`iLoc.profile.$name.NAcells`
solutions and resample the search space around them with
:confval:`iLoc.profile.$name.NAnextSample` hypocenter hypotheses. The solution with
the lowest misfit after :confval:`iLoc.profile.$name.NAiterMax` iteration is taken
as the initial hypocenter for the linearized least squares inversion.

of the 

 residual and a penalty factor that
iteration 

 hypocenter hypotheses are tested,
while the subsequent iterations consider the best 

 hypocenter hypotheses. The solution with
the lowest misfit after 

 iteration is taken

A grid search can be performed to obtain a better initial hypocenter
guess. The search is performed around the starting hypocenter.
For a very exhaustive search one can increase :confval:`iLoc.profile.$name.NAinitialSample`,
:confval:`iLoc.profile.$name.NAnextSample` and :confval:`iLoc.profile.$name.NAcells`
values. Note that the maximum value for :confval:`iLoc.profile.$name.NAinitialSample`
is around 3500 before hitting memory limits.

For a very exhaustive search one can increase 

An exhaustive search will
considerably slow iLoc down, especially when RSTT predictions are
enabled (:confval:`iLoc.profile.$name.UseRSTT`, :confval:`iLoc.profile.$name.UseRSTTPnSn`,
:confval:`iLoc.profile.$name.UseRSTTPgLg`).

enabled (

Depth resolution can be provided by a local network, depth phases, core reflections
and to a lesser extent near-regional secondary phases. iLoc attempts for a free-depth
solution if the set of :term:arrivals meets at least one of the following conditions:

Number of pairs of defining P and depth phases
:math:`\le` :confval:`iLoc.profile.$name.MinDepthPhases`

Number of pairs of defining P and core phases
:math:`\le` :confval:`iLoc.profile.$name.MinCorePhases`

Number of pairs of defining P and S phases
:math:`\le` :confval:`iLoc.profile.$name.MinSPpairs`
within a regional distance of :confval:`iLoc.profile.$name.MaxLocalDistDeg`
degree

Number of defining P phases
:math:`\le` :confval:`iLoc.profile.$name.MinLocalStations`
within a local distance of :confval:`iLoc.profile.$name.MinLocalStations`
degree.

degree.

If there is insufficient depth resolution provided by the data, or the depth uncertainty
for a free-depth solution exceeds a threshold, the hypocentre depth is set to the depth
from the default depth grid if a grid point for the epicentre location exists; otherwise
it is set to a depth :cite:t:`bolton-2006` assigned to
the corresponding Flinn-Engdahl geographic
region (:cite:t:`young-1996`). The default depth grid (:cite:t:`bondár-2011`)
is defined on a 0.5º x 0.5º grid as the median of all depths in the cell, provided
that there were at least five events in the cell, and the 75–25 percent quartile
range was less than 100 km. The latter constraint is imposed to avoid regions with
both shallow and deep seismicity. Anthropogenic events are fixed to the surface.
Finally, the user can fix the depth to the initial depth.

it is set to a depth 

 assigned to
region (

)

iLoc reports back how the depth was determined in the FixedDepthType parameter:

1 - airquake/deepquake, depth fixed to surface/MaxHypocenterDepth

2 - depth fixed to depth reported by an agency (not used in |scname|)

6 - no default depth grid point exists, fixed to median reported depth

7 - no default depth grid point exists, fixed to GRN-dependent depth

Once the Neighbourhood search get close to the global optimum, iloc switches
to an iterative linearized least-squares inversion of travel-time, azimuth and
slowness observations (:cite:t:`bondár-2009b`; :cite:t:`bondár-2011`) to obtain the final solution
for the hypocenter.

slowness observations (

The convergence test after (:cite:t:`paige-1982`) is
applied after every iteration. Once a convergent solution is obtained, the location
uncertainty is defined by the a posteriori model covariance matrix. The model
covariance matrix yields the four-dimensional error ellipsoid whose projections
provide the two-dimensional error ellipse and one-dimensional errors for depth
and origin time. These uncertainties are scaled to the 90% confidence level
(:cite:t:`jordan-1981`).

) is
(

The final hypocentre is tested against the
ground truth selection criteria (:cite:t:`bondár-2009a`),
and it is reported as
a GT5candidate if the solution meets the GT5 criteria.

ground truth selection criteria (

),

:confval:`iLoc.profile.$name.SigmaThreshold`: Residuals that exceed
:math:`abs(Sigmathreshold * PriorMeasError)` are made non-defining.

:confval:`iLoc.profile.$name.MinNdefPhases`: Minimum number of observations
required to attempt for a solution.

: Minimum number of observations

If the number of defining arrival times exceed
:confval:`iLoc.profile.$name.MinNdefPhases`, then slowness observations will not
be used in the location.

Integration of iLoc into |scname| is provided by an external library of
routines (:cite:t:`iloc-github`).

|scname| modules call iLoc routines by passing the objects via the plugin
*lociloc* installed in :file:`@DATADIR@/plugins/lociloc.so`.

 modules call iLoc routines by passing the objects via the plugin

The iLoc implementation in |scname| retains all original iLoc functionalities.

Read the section :ref:`iloc-setup` for the installation of the iLoc library and
the configuration in |scname|.

 for the installation of the iLoc library and
the configuration in 

iLoc ships with the global models *iasp91* and *ak135* as well as with regional
seismic travel-time tables, RSTT, which, if activated by configuration, replaces
the global models in areas where they are defined.

 as well as with regional

The global models *iasp91* and *ak135* and RSTT are available by default without
further configuration.

 and RSTT are available by default without

RSTT are available in :file:`@DATADIR@/iloc/RSTTmodels/pdu202009Du.geotess`.
Custom RSTT can be integrated into iLoc and provided to |scname|.
For adding custom RSTT to iLoc read the original iLoc documentation from the
:cite:t:`iloc-github` software repository.

.

The usage of RSTT is controlled per iLoc profile by global configuration
parameters

Custom local velocity models can be provided by a file in
:file:`@DATADIR@/iloc/localmodels`. Example file
:file:`@DATADIR@/iloc/localmodels/test.localmodel.dat`:

#
# test
#
# number of layers
4
     0.000    5.8000    3.4600 x
    20.000    6.5000    3.8500 CONRAD
    45.000    8.0400    4.4800 MOHO
    77.500    8.0400    4.4800 x

Once added, the velocity can be configured in |scname| as set out in section
:ref:`iloc-setup`.

iLoc considers station elevation. It calculates the elevation correction,
*elevationCorrection*, for a station as

elevationCorrection = \frac{\sqrt{1 - (surfVel * p)^2} * elev}{surfVel}

*surfVel*: layer P or S velocity of at the surface depending on the last lag
of the phase name.

: layer P or S velocity of at the surface depending on the last lag

iLoc does not allow airquakes or source locations above datum (0 km). If the
depth of an origin becomes negative, iLoc
fixes the depth to 0 km and the depth type of the origin will be "operator
assigned".

fixes the depth to 0 km and the depth type of the origin will be “operator
assigned”.

iLoc has taken advantage of many publications or has been cited therein.
Read the section :ref:`sec-references` for a list.

Read the section 

Add the plugin *lociloc* to the global configuration, e.g. in
:file:`@SYSTEMCONFIGDIR@/global.cfg`:

   plugins = ${plugins}, lociloc

Install the dependencies missing for iLoc. For download, the system variable
*SEISCOMP_ROOT* must be defined which you may wish to test first:

   echo $SEISCOMP_ROOT

In case the variable is undefined, follow the instructions in section
:ref:`getting-started-variables`.

After *$SEISCOMP_ROOT* is defined you may install the software dependencies
for iLoc using the :ref:`install scripts <software_dependencies>` or simply
the :ref:`seiscomp` script:

   seiscomp install-deps iloc

The install scripts will fetch auxiliary files from :cite:t:`iloc-github`
and install them in :file:`@DATADIR@/iloc/iLocAuxDir`. For manual download and
installation read the install scripts located in
:file:`@DATADIR@/deps/[os]/[version]/install-iloc.sh`.

.. note ::

   * Check the :cite:t:`iloc-github` website for updates before downloading
     the file since the version number, hence the name of the download file
     may change.
   * Instead of generating the :file:`SEISCOMP_ROOT/share/iloc/iLocAuxDir`
     directory, you can also manually install the dependencies somewhere else,
     create a symbolic link and maintain always the same iLoc version in
     |scname| and externally.

 is defined you may install the software dependencies
for iLoc using the 

. For manual download and

* Check the :cite:t:`iloc-github` website for updates before downloading
  the file since the version number, hence the name of the download file
  may change.
* Instead of generating the :file:`SEISCOMP_ROOT/share/iloc/iLocAuxDir`
  directory, you can also manually install the dependencies somewhere else,
  create a symbolic link and maintain always the same iLoc version in
  |scname| and externally.

Check the :cite:t:`iloc-github` website for updates before downloading
the file since the version number, hence the name of the download file
may change.

 website for updates before downloading

Instead of generating the :file:`SEISCOMP_ROOT/share/iloc/iLocAuxDir`
directory, you can also manually install the dependencies somewhere else,
create a symbolic link and maintain always the same iLoc version in
|scname| and externally.

Add and configure iLoc profiles for the velocity models. The global models
*iasp91* and *ak135* are considered by default with default configuration
parameters even without setting up *iasp91*/*ak135* profiles. You may,
however, create these profiles for their customization.

Create new profiles or consider existing ones for adjusting their
configuration:

* :confval:`iLoc.profile.$name.globalModel`: The name of the
  :ref:`global model <iloc-velocity_global>`, e.g. *iasp91* or *ak135*.
* Consider the :ref:`RSTT parameters <iloc-velocity_rstt>`.
* :confval:`iLoc.profile.$name.LocalVmodel`, :confval:`iLoc.profile.$name.UseLocalTT`
  and :confval:`iLoc.profile.$name.MaxLocalTTDelta`: The definition of a
  :ref:`local velocity model <iloc-velocity_local>`: model file, default
  usability, distance range.
* :confval:`iLoc.profile.$name.DoNotRenamePhases`: Renaming seismic phases
  automatically
  impacts the usability of the origins with other locators and locator profiles.
  Activate the parameter to avoid phase renaming.
* Consider the remaining parameters.

.. note ::

   Creating the profiles allows using the same global velocity model along
   with different local models or RSTT settings in separate profiles.

 are considered by default with default configuration
parameters even without setting up 

 profiles. You may,

:confval:`iLoc.profile.$name.globalModel`: The name of the
:ref:`global model <iloc-velocity_global>`, e.g. *iasp91* or *ak135*.

:confval:`iLoc.profile.$name.LocalVmodel`, :confval:`iLoc.profile.$name.UseLocalTT`
and :confval:`iLoc.profile.$name.MaxLocalTTDelta`: The definition of a
:ref:`local velocity model <iloc-velocity_local>`: model file, default
usability, distance range.

:confval:`iLoc.profile.$name.DoNotRenamePhases`: Renaming seismic phases
automatically
impacts the usability of the origins with other locators and locator profiles.
Activate the parameter to avoid phase renaming.

: Renaming seismic phases

Creating the profiles allows using the same global velocity model along
with different local models or RSTT settings in separate profiles.

Test the locator using :ref:`scolv` or configure with :ref:`screloc` or other
locator modules.

Once the *lociloc* plugin is configured, the iLoc locator can be applied

For using iLoc in :ref:`scolv` select it in the locator menu of the Location tab

.. figure:: media/scolv-iloc-locator.png

   Select iLoc locator

.. figure:: media/scolv-iloc-profile.png

   Select iLoc profile

The parameters for iLoc can be adjusted by pressing the wrench button next to the
locator selection combo box

.. figure:: media/scolv-iloc-change.png

   Start the settings dialog

.. figure:: media/scolv-iloc-settings.png

   Adjust the settings and click OK to confirm

By default, automatic phase renaming by iLoc is active. The renaming may
change the phase names, e.g. from P to Pn.

Renaming seismic phases automatically will later impact the usability of
the new origins with other locators and locator
profiles. Deactivate *DoNotRenamePhases* to avoid phase renaming.

However,
when deactivating, iLoc may not provide results if the initial phases do not
exist in the phase table for the given source depth and epicentral distance.
Example: For great source depth and small epicentral distance, the first arrival
phase is p or Pn and not P but |scname| provides P.

profiles. Deactivate 

However,

However,
phase is p or Pn and not P but 

After relocating, the iLoc locator and the selected profile are shown in the
:ref:`scolv` Location tab as Method and Earth model, respectively:

.. figure:: media/scolv-iloc-info.png

   Information in scolv Locator tab

The ExternalLocator implements a wrapper for scripts which do the actual location
process. The input and output are represented as XML and communicated via the
input/output channels of the called process: stdin and stdout.

To enable the ExternalLocator the plugin ``locext`` must be loaded.

There are several commandline parameters passed to the script depending on
the locator configuration. The following table summarizes them.

The input document written to stdin of the child process is a valid SeisComP
XML document containing ``EventParameters``. The event parameters hold exactly
one origin to be relocated and all picks references from the origins arrivals.

XML document containing 

. The event parameters hold exactly

<?xml version="1.0" encoding="UTF-8"?>
<seiscomp xmlns="http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.11" version="0.11">
  <EventParameters>
    <pick ...>...</pick>
    ...
    <origin ...>
      ...
      <arrival>
        ...
      </arrival>
      <arrival>
        ...
      ...
    </origin>
  </EventParameters>
</seiscomp>

The output is read from stdout and is expected to be a SeisComP XML document
just containing an origin.

  <Origin publicID="...">
  </Origin>

Define the external locator by global configuration e.g. in :file:`global.cfg`:

.. code::

   plugins = ${plugins}, locext

   ExternalLocator.profiles = locator1:"python /path/to/locator/script1.py",\
                              locator2:"/path/to/other/locator/script1.sh"

with

* *locator1*/*locator2*: The names of the profiles as shown in :ref:`scolv`
  or use in ther modules like :ref:`screloc` for calling the external locator,
* *script1.py*/*script2.sh*: The names of Python/Bash scripts with full path
  called by the profile to execute the locator given within the scripts.

plugins = ${plugins}, locext

ExternalLocator.profiles = locator1:"python /path/to/locator/script1.py",\
                           locator2:"/path/to/other/locator/script1.sh"

*locator1*/*locator2*: The names of the profiles as shown in :ref:`scolv`
or use in ther modules like :ref:`screloc` for calling the external locator,

*script1.py*/*script2.sh*: The names of Python/Bash scripts with full path
called by the profile to execute the locator given within the scripts.

: The names of Python/Bash scripts with full path

Once defined, the external locator can be further configured and called
within :ref:`scolv` or by other modules e.g. :ref:`screloc`.

within 

Hyperlink target "global-locext-configuration" is not referenced.

Router is a meta locator which selects an actual
:ref:`locator <concepts_locators>` based on region profiles configured in
GeoJSON or BNA files.

The locator supports both, the initial location based on a pick set and the
relocation based on an existing origin. In case no origin is available an
initial solution is calculated by a configurable locator followed by a
relocation configured through region profiles.

The Router locator offers configuration by global module parameters.

Add the plugin ``locrouter`` to :confval:`plugins` for activating the Router
locator. Example:

For routing, an initial source location is required. When only picks but no
origins are provided, the initial location is unknown but it can be defined by
an initial locator independent of location. Set
:confval:`RouterLocator.initial.locator` and
:confval:`RouterLocator.initial.profile` for defining the initial locator.

Regions may be considered by configuring their names in
:confval:`RouterLocator.regions`. The regions themselves are defined as polygons
files in either :ref:`GeoJSON <sec-gui_layers-vector-format-geojson>` or
:ref:`BNA <sec-gui_layers-vector-format-bna>` format. Supported polygon
attributes are:

. The regions themselves are defined as polygons
files in either 

name (recommended): Name of polygon. An empty string is assumed if not given.

profile: Name of the locator-specific profile which must be configured
according to the selected locator.

maxDepth: Maximum depth in km the profile should be applied to.

The configured features are sorted by rank and area. Larger ranks and smaller
areas are prioritized.

Example :ref:`GeoJSON file<sec-gui_layers-vector-format-geojson>`:

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "name": "Iceland",
                "minDepth": 0,
                "maxDepth": 30,
                "locator": "LOCSAT",
                "profile": "iceland"
            },
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            -24.5469, 63.3967
                        ],
                        [
                            -13.4958, 63.3967
                        ],
                        [
                            -13.4958, 66.5667
                        ],
                        [
                            -24.5469, 66.5667
                        ],
                        [
                        ]
                    ]
                ]
            }
        },
        {
                "name": "World",
                "profile": "iasp91"
            },
                    [
                        [
                            -33, 90
                        ],
                        [
                            -180, 90
                        ],
                        [
                            -180, -90
                        ],
                        [
                            -33, -90
                        ],
                        [
                            33, -90
                        ],
                        [
                            180, -90
                        ],
                        [
                            180, 90
                        ],
                        [
                            33, 90
                        ],
                        [
                            -33, 90
                        ]
                    ]
                ]
            }
        }
    ]
}

"Iceland", "rank 1", "minDepth: 0, maxDepth: 30, locator: LOCSAT, profile: iceland", 4
-24.5469, 63.3967
-13.4958, 63.3967
-13.4958, 66.5667
-24.5469, 66.5667
"World", "rank 1", "locator: LOCSAT, profile: iasp91", 8
-33, 90
-180, 90
-180, -90
-33, -90
33, -90
180, -90
180, 90
33, 90

Once configured, the Router locator may be used by other |scname| modules such
as :ref:`scolv` or :ref:`screloc`. Refer to the locator as "Router".

Hyperlink target "global-locrouter-configuration" is not referenced.

LOCSAT is a locator with a travel-time interface in |scname| for computing
source time and hypocenter coordinates from phase picks considering:

 for computing

The LOCSAT :ref:`locator interface <locsat_li>` implements a wrapper for the
LocSAT locator by :cite:t:`bratt-1991` (according to the README file shipped
with the LocSAT distribution) referred to as **LOCSAT** in |scname|. The LOCSAT
:ref:`travel-time interface <locsat_tti>` provides travel time for specfic
phases, epicentral distance, soure depth and station elevation.

 (according to the README file shipped
with the LocSAT distribution) referred to as 

 provides travel time for specfic

LOCSAT provides the hypocenter parameters through the locator interface.

LOCSAT provides an interface for computing travel times based on coordinates and
depth. The times are plotted on waveforms, e.g., blue marks in
:ref:`scolv picker window <scolv-sec-waveform-review>`.

Use "LOCSAT" as a value for the travel-time interface when configurable, e.g.,
by :ref:`global_fixedhypocenter`.

Use “LOCSAT” as a value for the travel-time interface when configurable, e.g.,
by 

|scname| ships with two sets of predefined travel-time tables which are
made available as the profiles tab and iasp91.

 ships with two sets of predefined travel-time tables which are

LOCSAT travel time tables are located as plain ascii files under
:file:`@DATADIR@/locsat/tables/`.
The tables provide the travel times for particular seismic phases at
given depth and epicentral distance in one file per Earth model and seismic
phase. E.g. P-wave arrival times in the iasp91 model are found in
:file:`@DATADIR@/locsat/tables/iasp91.P`. You may easily add your own tables
for any available Earth model and seismic phase by adopting existing ones in new
files which are added by :ref:`configuration <locsat_station_application>` to
your |scname| modules.

.

. You may easily add your own tables
files which are added by 

Only phases for which a travel-time table exists can be considered.

LOCSAT currently considers travel-time tables for phases which are hard-coded

* seismic body waves: P, Pg, Pb, Pn, Rg, pP, sP, PKP, PP, PKPab, PKPbc, PKPdf,
  SKPdf, PcP,
  S, Sg, Sb, Sn, Lg, SKS, SS, ScS,

  where P and S are the direct P and S phases, respectively, at all distances
  no matter the take-off angle at the source.
* seismic surface waves: LQ, LR.
* infrasound: Is, It, Iw.

seismic body waves: P, Pg, Pb, Pn, Rg, pP, sP, PKP, PP, PKPab, PKPbc, PKPdf,
SKPdf, PcP,
S, Sg, Sb, Sn, Lg, SKS, SS, ScS,

where P and S are the direct P and S phases, respectively, at all distances
no matter the take-off angle at the source.

The maximum number of distance and depth intervals per table file is
currently 210 and 50, respectively.

.. warning::

   * Travel-time tables with larger numbers of distance or depth samples are
     reported along with command-line error output (stderr). The travel-time
     tables should therefore be tested, e.g., with :ref:`scolv` before
     unsupervised application.
   * Travel times at distance and depth samples exceeding the limits are
     ignored. This may lead to undesired behavior during location.
   * Phase picks observed outside the distance and depth ranges defined by
     travel-time tables may lead to undesired behavior during location.

* Travel-time tables with larger numbers of distance or depth samples are
  reported along with command-line error output (stderr). The travel-time
  tables should therefore be tested, e.g., with :ref:`scolv` before
  unsupervised application.
* Travel times at distance and depth samples exceeding the limits are
  ignored. This may lead to undesired behavior during location.
* Phase picks observed outside the distance and depth ranges defined by
  travel-time tables may lead to undesired behavior during location.

Travel-time tables with larger numbers of distance or depth samples are
reported along with command-line error output (stderr). The travel-time
tables should therefore be tested, e.g., with :ref:`scolv` before
unsupervised application.

tables should therefore be tested, e.g., with 

Travel times at distance and depth samples exceeding the limits are
ignored. This may lead to undesired behavior during location.

Phase picks observed outside the distance and depth ranges defined by
travel-time tables may lead to undesired behavior during location.

The considered minimum depth is 0 km. Elevations and depths above datum are
not natively considered. The effects of station elevation can be
:ref:`corrected for empirically <locsat_station_elevation>`.

LOCSAT does not natively support corrections of travel-time tables for station
elevations. At least checking the code:

However, the |scname| wrapper adds this feature. It allows to define a
:file:`.stacor` file which defines emperic corrections of observed travel times.
The corrections are provided in seconds and **subtracted** (not added) from
the observation time to be compatible with the NonLinLoc :cite:p:`nonlinloc`
station correction definitions.

 file which defines emperic corrections of observed travel times.
The corrections are provided in seconds and 

 (not added) from
the observation time to be compatible with the NonLinLoc 

Each LOCSAT profile (travel time table) can have one associated station
correction file. E.g. for adding station corrections to the iasp91 tables, the
file :file:`$SEISCOMP_ROOT/share/locsat/tables/iasp91.stacor` needs to be created.

file 

# LOCDELAY code phase numReadings delay
LOCDELAY GE.MORC P 1 -0.1

**phase** (*string*) phase type (any of the available travel time tables)

**numReadings** (*integer*) number of residuals used to calculate mean residual/delay
(not used by NLLoc, included for compatibility with the format of a summary,
phase statistics file)

) number of residuals used to calculate mean residual/delay

**delay** (*float*) delay in seconds, subtracted from observed time

The fourth column (numReadings) is ignored and just provided for compatibility
reasons with :ref:`NonLinLoc <global_nonlinloc>`.

reasons with 

LOCSAT is the default and only locator for :ref:`scautoloc` with *iasp91* as the
default profile. However, LOCSAT can be used optionally in other modules such as
:ref:`scolv` or :ref:`screloc`.

 as the

Generate your travel-time tables from a custom Earth model, depth and
distance intervals. Use the same format as the defaults as the *iasp91*
tables. Tools such as :cite:t:`taup` allow the generation.

distance intervals. Use the same format as the defaults as the 

Add your custom travel-time tables along with station corrections to
:file:`@DATADIR@/locsat/tables/`

Add your available custom LOCSAT travel-time tables in global configuration,
e.g., to the list of tables of travel-time interfaces

.. code-block:: params

   ttt.LOCSAT.tables = iasp91, tab, custom

and to the list of locator profiles

   LOCSAT.profiles = iasp91, tab, custom

and optionally to locators which make use of LOCSAT tables, e.g.,
:ref:`global_fixedhypocenter`.

Additional parameters of LOCSAT may be configured in global module configuration
(:confval:`LOCSAT.*`).

(

The profiles for locating may be extended or limited by
:confval:`LOCSAT.profiles`.

When using picks with time uncertainties, consider
:confval:`LOCSAT.usePickUncertainties` and :confval:`LOCSAT.defaultTimeError`.

Measurements of backazimuth and slowness may be deactivated by
:confval:`LOCSAT.useBackazimuth` and :confval:`LOCSAT.useSlownewss`, respectively.
Such measurements may be obtained from array processing or from feature
extraction using :ref:`scautopick`.

, respectively.
extraction using 

You may also configure some |scname| modules with LOCSAT and a profile.

:ref:`screloc`: Configure *LOCSAT* along with a profile for automatically
relocating.

:ref:`scolv`: Configure *LOCSAT* along with a profile  as defaults for
interactive locations.

When using LOCSAT in :ref:`scolv` you may interactively some settings. The
changes only apply during runtime.

 you may interactively some settings. The

.. figure:: media/scolv-locsat-settings.png
   :width: 10cm

   scolv Location tab with LOCSAT selected and the settings menu.

Hyperlink target "locsat-station-application" is not referenced.

Hyperlink target "global-locsat-configuration" is not referenced.

mb is the standard body-wave magnitude.
Compare also with the :ref:`mB magnitude <global_mb_bb>`.

mb is defined on the amplitude of the first few cycles of the P-wave,
typically a time window of 20 s - 30 s. Only the first few cycles are used to
minimize the effects of radiation pattern and depth phases, which result in
complicate waveform signatures.
In |scname| mb amplitudes are measured on vertical-component displacement seismograms
in a 30 s time window after simulation of a :term:`WWSSN_SP` short-period
seismometer. Amplitudes are used from stations with epicentral distances between
5° and 105° (configurable). The methods for measuring amplitudes are configurable
in the global bindings.

In 

 mb amplitudes are measured on vertical-component displacement seismograms
in a 30 s time window after simulation of a 

 short-period

with A as the displacement amplitude in micrometers, T as the dominant period of
the signal in seconds, Q as a correction term for depth and distance. mb is
usually determined at periods around 1s in adaptation to the use
of the World-Wide Standard Seismograph Network (WWSSN) short-period stations.
A scatter in the order of +/- 0.3 for the station magnitudes is usual.
Typically, mb is determined for stations with distances larger than 5° to
have a distinct direct P-wave phase. A correction term for the distance has to
be determined empirically, which is quite complicate for distances smaller than 20°.
This reflects the complexity of the body waves that traverse only in the upper
mantle. mb saturates at about magnitude 5.5 to 6.0 because the maximum amplitudes of larger
earthquakes occur at lower frequencies than the frequency range between 0.7 Hz - 2 Hz
used for the magnitude calculation.

Default distance range: 5 - 105 deg, configurable: :confval:`magnitudes.mb.minDist`,
:confval:`magnitudes.mb.maxDist`

Depth range: no limitation, for depth < 0 km, depth = 0 km is assumed

In 2013 the IASPEI commission (:cite:t:`iaspei-2013`) recommended a minimum distance of
20 deg. However, :ref:`scautoloc` requires mb amplitudes by default for
considering a pick.
For maintaining consistency, 5 deg is therefore kept as the default
for :confval:`magnitudes.mb.minDist`.

 requires mb amplitudes by default for
for 

By default, the trimmed mean is calculated from the station magnitudes to form
the :term:`network magnitude`. Outliers beyond the outer 12.5% percentiles are
removed before forming the mean.

the 

. Outliers beyond the outer 12.5% percentiles are

Adjust the configurable parameters in global bindings in the mB section or use
:file:`global.cfg`
as in :ref:`global_mlv`. Add mb to the list of computed amplitudes and magnitudes
in the configuration of
:ref:`scamp` and :ref:`scmag` and in :ref:`scesv` or :ref:`scolv`/:ref:`scesv`
for visibility.

. Add mb to the list of computed amplitudes and magnitudes

The **mB**/**mB_BB** magnitude has been recommended by the IASPEI commission
(:cite:t:`bormann-2008`, :cite:t:`bormann-2009`, :cite:t:`iaspei-2013`).
It is based on amplitude measurements of body waves like :ref:`global_mb`, but
with the amplitude measured in a broad frequency range and longer time windows.
Instead of amplitude measurements on displacement data together with the
dominant period, the maximum velocity amplitude Vmax is taken directly from
velocity-proportional records with :math:`V = 2 \pi A/T`. The time window for
the measurement can be determined by the duration of the high-frequency (1-3 Hz)
radiation (:cite:t:`bormann-2008`). This time window usually contains the phases
P, pP, sP, PcP, but not PP. According to the long time window and broad
frequency range used for amplitude measurements mB saturates not like mb.

, but
velocity-proportional records with 

. The time window for
radiation (

). This time window usually contains the phases

In |scname| the term **m_B** is a synonym for **mB_BB** which is used
by IASPEI :cite:p:`iaspei-2013`.

mB amplitudes are calculated on vertical-component displacement seismograms
in accordance with :cite:t:`bormann-2008` and similar to :ref:`mb <global_mb>`.
A default time window of 60 s is considered for amplitude measurements
at stations in the distance range of 5° to 105°.
If the epicentral is known, the length of the time window after the P wave onset
is

in accordance with 

.
is

where :math:`\Delta` is the epicentral distance. The methods for measuring
amplitudes are configurable in the global bindings.

 is the epicentral distance. The methods for measuring

The mB station magnitudes are calculated in accordance with :cite:t:`bormann-2008`.

the signal in seconds, Q as a correction term for depth and distance.

Time window: 60 s if set by :ref:`scautopick`, otherwise 0 s - 11.5 * distance
(deg) with 60 s minimum

Default distance range: 5 - 105 deg, configurable: :confval:`magnitudes.mB.minDist`,
:confval:`magnitudes.mB.maxDist`,

In 2013 the IASPEI commission (:cite:t:`iaspei-2013`) recommended a minimum
distance of
20 deg. However, the calibration formula (:cite:t:`bormann-2008`) which is
integrated in
|scname| allows the extension down to 5 deg while maintaining consistent magnitudes
at 20 deg and beyond. Therefore, 5 deg is used as the default in
:confval:`magnitudes.mB.minDist`.

) recommended a minimum
20 deg. However, the calibration formula (

 allows the extension down to 5 deg while maintaining consistent magnitudes

as :ref:`global_mlv`. Add mB to the list of computed amplitudes and magnitudes
:ref:`scamp` and :ref:`scmag` and in :ref:`scesv` or :ref:`scolv` for visibility.

. Add mB to the list of computed amplitudes and magnitudes

Body wave magnitude computed at CTBTO/IDC (mb) is calculated for seismic
events from the time-defining primary body waves recorded at seismic
stations at an epicentral distance between 20 and 105 degrees
from the event.

The A5/2 amplitudes are calculated on the vertical component seismograms filtered
between 0.8 and 4.5 Hz and converted to displacement.

Q: attenuation correction function of event distance and event depth

The attenuation corrections as a function of distance and depth are based on
(Veith, K. F., and Clawson, G. E., 1972). The corrections are tabulated every
degree for distances out to 180 degrees and for depths 0, 15, 40 km, and
100-800 km in steps of 100 km. Bi-cubic splines were used for interpolating the
tables. The tabulated values were adjusted for the fact that the original
(Veith, K. F., and Clawson, G. E., 1972) tables relate to peak-to-peak
amplitudes, whereas the measured amplitudes for mb calculations are half
peak-to-peak. The default corrections are read from a file installed at
:file:`@DATADIR@/magnitudes/IDC/qfvc.mb`.If that file is not present no magnitude
will be calculated.

Station magnitudes can be computed with a station specific correction table
which is configured in the global bindings. The parameter :confval:`magnitudes.mb(IDC).Q`
takes a path and allows to use placeholders for network code (:code:`{net}`),
station code (:code:`{sta}`) and location code (:code:`{loc}`).

which is configured in the global bindings. The parameter 

The duration magnitude is based on coda duration measurement.
It's usually valid for small earthquakes up to magnitude 4 to 5.

It’s usually valid for small earthquakes up to magnitude 4 to 5.

First used in 1972 by Lee et al., Duration magnitude (Md) or Coda duration
magnitude plugin estimates Richter magnitude of local earthquakes by using
signal duration on vertical components of seismographs.

Estimations are quite stable for local earthquakes ranging from magnitude
Md 0.0 to 5.0.

Duration magnitude is usually computed on short period seismometers by searching
the time at which the amplitude of the signal is close to pre-earthquake amplitude.

Since it's mainly used for small earthquake whose signal is at rather high frequency,
it's usefull to highpass filter broadband seismomters (select sismo type 6 and a
Butterworth filter "3,1.5").
Or a better solution is to deconvolve the signals and reconvolve with a widely used
short-period instrument : the 1Hz eigen-frequency L4C (select sismo type 9).
If you have the full responses in your inventory and have activated them
(amplitudes.enableResponses set to true), you will be able to use also accelerometers.

Since it’s mainly used for small earthquake whose signal is at rather high frequency,
it’s usefull to highpass filter broadband seismomters (select sismo type 6 and a
Butterworth filter “3,1.5”).

The plugin then searches for the maximum amplitude of the signal, which should be
the S-wave and then computed mean amplitude of one-second time windows.
As soon as a one-second time window mean amplitude vs pre-earthquake amplitude
reaches the configured SNR ratio, the process is stopped.
The middle of the one-second time window is assumed to be the end of the Coda and
the time difference between Coda time and P arrival time is stored as Coda duration.

Once amplitudes calculated by the AmplitudeProcessor and a Coda has been found,
the generic formula is applied and the duration magnitude is computed
for a given station, if it fits the criteria (max depth, max distance).

mag = FMA + FMB \times \log10(period) + (FMF \times period) + (FMD \times epidistkm) + (FMZ \times depth) + STACOR

The Coda duration magnitude plugin (Md) is installed under :file:`share/plugins/md.so`.
It provides a new implementations of AmplitudeProcessor and MagnitudeProcessor.

.

Basically it can be used by modules: :ref:`scamp`, :ref:`scmag`, :ref:`scolv`.

Description of the formula can be found in Hypo2000 manual from USGS website.
`<http://earthquake.usgs.gov/research/software/#HYPOINVERSE>`_

ML is the standard local (Richter) magnitude originally designed for
Southern California by :cite:t:`richter-1935`.

Southern California by 

Amplitude unit in SeisComP: **millimeter** (mm) by simulation of a :term:`Wood-Anderson seismometer`.

Time window, configurable: 150 s by :ref:`scautopick` or distance dependent, configurable.

Distance range: 0 - 8 deg,  maximum is configurable:
:confval:`magnitudes.ML.maxDistanceKm`,
measurements beyond 8 deg will be strictly ignored.

Depth range: 0 - 80 km, configurable for amplitude measurements.

The ML amplitude calculation is similar to the original ML. Waveforms from both
horizontal components are time-windowed and restituted to the Wood-Anderson
seismograph. Within the time window the amplitudes are measured on both
horizontal components and combined. The methods for measuring and combining

The individual station ML is calculated using the following formula:

*A* is the measured ML Wood-Anderson amplitude in millimeters. The second term
is the empirical calibration function, which in turn is a function
of the epicentral distance (:cite:t:`richter-1935`). This calibration
function and distance range can be configured globally or per station using
global bindings or the global module configuration variable
module.trunk.global.magnitudes.ML.logA0 in :file:`global.cfg`, e.g.

 is the measured ML Wood-Anderson amplitude in millimeters. The second term
of the epicentral distance (

). This calibration
module.trunk.global.magnitudes.ML.logA0 in 

module.trunk.global.magnitudes.ML.logA0 = "0:-1.3,60:-2.8,100:-3.0,400:-4.5,1000:-5.85"
module.trunk.global.magnitudes.ML.maxDistanceKm = "-1"

The *logA0* configuration string consists of an arbitrary number of
distance-value pairs separated by comma. Within the pairs, the values are
separated by colon. The distance is epicentral distance in km
and the second value corresponds to the *log10(A0)* term above.

 configuration string consists of an arbitrary number of
and the second value corresponds to the 

Within each interval the values are computed by linear
interpolation. E.g. for the above default specification, at a
distance of 80 km the *log10(A0)* value would be

distance of 80 km the 

\log10(A0) &= ((-3.0)-(-2.8))*(80-60)/(100-60)-2.8 \\
           &= -2.9

which is according to the original Richter formula :cite:p:`richter-1935` if the
amplitude is measured in millimeters.

Several distance-value pairs can be configured for different ranges of
epicenter distance.

By default, the mean is calculated from the station magnitudes to form the
network magnitude.

Set the configuration and calibration parameters in the global bindings similar
to :ref:`global_mlv`.
Instead configuring lots of global bindings profiles or station bindings one
line per parameter can be added to the global module configuration
(:file:`global.cfg`).

to 

.
(

Add ML to the list of computed amplitudes and magnitudes in the configuration of

The SNSNR amplitudes are calculated on the vertical component seismograms.

The default corrections are read from a file installed at
:file:`@DATADIR@/magnitudes/IDC/global.ml`. If that file is not present no magnitude

which is configured in the global bindings. The parameter :confval:`magnitudes.ML(IDC).A`

MLc is a custom magnitude for local events based on :ref:`ML<global_ml>` but
with greater flexibility.
The original implementation is based on specifications by the Hessian Agency for
Nature Conservation, Environment and Geology, Hessian Earthquake Service.
More options have been added allowing the magnitude to be configured with
great flexibility in order to account for many different conditions. The
general procedures for measuring amplitudes and computing magnitudes are
outlined in the :ref:`"Concepts" section on magnitudes <concepts_magnitudes>`.

 but
outlined in the 

The MLc magnitude is very similar to the original :ref:`ML<global_ml>`,
except that

Wood-Anderson simulation is optionally applied and can be deactivated.

Measured amplitudes can be scaled accounting for expected units.

Measured amplitudes are combined by taking the maximum instead of the average.

A parametric :ref:`magnitude calibration <mlc_station_magnitude>` function
applies but a correction in the form log10(A0) can be configured for converting
measured amplitudes to station magnitudes.

 function

Hypocentral instead of epicentral distance is considered by default.

Expected unit of gain-corrected input data: m/s. Activate response correction
in global bindings in case data are provided in acceleration.

Components used for amplitude measurements: both horizontal components
separately.

The default parameters for measuring MLc amplitudes can be adjusted by global
binding parameters:

Filtering before instrument simulation: :ref:`BW(3,0.5,12) <filter-bw>`,
configurable by :confval:`amplitudes.MLc.preFilter`.

:term:`Wood-Anderson seismometer` simulation: yes, can be deactivated by
:confval:`amplitudes.MLc.applyWoodAnderson`.

Characteristics of :term:`Wood-Anderson seismometer`: according to IASPEI
recommendations. Can be adjusted by :confval:`amplitudes.WoodAnderson.gain`,
:confval:`amplitudes.WoodAnderson.T0`, :confval:`amplitudes.WoodAnderson.h`
in global bindings or global module configuration.

Amplitude scaling: 1, configure by :confval:`amplitudes.MLc.amplitudeScale`
for considering non-default units by magnitude.

Method applied for measuring amplitudes: absolute maximum, configurable in
global bindings by :confval:`amplitudes.MLc.measureType`.

global bindings by 

Method for combining amplitude measurements: *max* (maximum from both
horizontal components), configurable in global bindings by
:confval:`amplitudes.MLc.combiner`.

 (maximum from both

Some additional parameters require you to create an amplitude-type profile for
global binding parameters. Name the profile like the amplitude name, hence MLc:

Time window for measuring signal amplitudes [s]: P pick time + 150 s by
:ref:`scautopick` or distance [km]/3 km/s + 30 s,
the relevant parameters are: :confval:`amplitudes.MLc.signalBegin`,
:confval:`amplitudes.MLc.signalEnd`. :ref:`Time grammar <time-grammar>` may be
applied for begin and end times.

Time window for measuring noise amplitudes [s]: 30 s before the P pick,
the relevant parameters are: :confval:`amplitudes.MLc.noiseBegin`,
:confval:`amplitudes.MLc.noiseEnd`. :ref:`Time grammar <time-grammar>` may be

the relevant parameters are: 

Minimum SNR: 0, configurable by :confval:`amplitudes.MLc.minSNR`.

Distance range: 0 - 8 deg, configurable by :confval:`amplitudes.MLc.minDist`,
:confval:`amplitudes.MLc.maxDist`, stations at distances beyond 8 deg will be strictly
ignored.

Depth range: <= 80 km, can be adjusted and extended by
:confval:`amplitudes.MLc.minDepth` and :confval:`amplitudes.MLc.maxDepth`.

Most parameters controlling the amplitude measurements are configurable in
global bindings or global module configuration.

The Wood-Anderson simulation will convert input velocity data to ground
displacement in mm. The input data may be of a different unit after applying
:confval:`amplitudes.MLc.preFilter`, e.g. when integration is applied, and / or
when Wood-Anderson simulation is disabled. Configure
:confval:`amplitudes.MLc.amplitudeScale` for converting the unit of the
processed data to the unit expected by the
:ref:`station magnitude calibration <mlc_station_magnitude>` for the measured
amplitude.

, e.g. when integration is applied, and / or

 for converting the unit of the

For comparing MLc amplitudes with :ref:`ML amplitudes <global_ml>` set the
global bindings parameters ::

   amplitudes.MLc.preFilter = ""
   amplitudes.MLc.combiner = average

Default properties, most parameters are configurable in global bindings:

Distance type: hypocentral, epicentral can be selected by :confval:`magnitudes.MLc.distMode`.

Distance range: 0 - 8 deg, configurable by :confval:`magnitudes.MLc.minDist`,
:confval:`magnitudes.MLc.maxDist`, measurements beyond 8 deg will be strictly
ignored.

Depth range: <= 80 km, can be extended by :confval:`magnitudes.MLc.maxDepth`.

Expected amplitude unit: millimeter (mm), other units can be assumed by
amplitude scaling with :confval:`amplitudes.MLc.amplitudeScale`.

amplitude scaling with 

Magnitude calibration type: parametric, parametric and non-parametric are
available through :confval:`magnitudes.MLc.calibrationType`.

available through 

Calibration function (see below for the equations), configurable by global bindings
depending on the actual calibration type:

* parametric: :confval:`magnitudes.MLc.parametric.c0`,
  :confval:`magnitudes.MLc.parametric.c1`,
  :confval:`magnitudes.MLc.parametric.c2`,
  :confval:`magnitudes.MLc.parametric.c3`,
  :confval:`magnitudes.MLc.parametric.c4`,
  :confval:`magnitudes.MLc.parametric.c5`

* A0: :confval:`magnitudes.MLc.A0.logA0`

parametric: :confval:`magnitudes.MLc.parametric.c0`,
:confval:`magnitudes.MLc.parametric.c1`,
:confval:`magnitudes.MLc.parametric.c2`,
:confval:`magnitudes.MLc.parametric.c3`,
:confval:`magnitudes.MLc.parametric.c4`,
:confval:`magnitudes.MLc.parametric.c5`

Station correction: none, configurable by a magnitude-type profile in global
bindings with :confval:`magnitudes.MLc.offset` or the equivalent in global
module configuration as :confval:`module.trunk.NET.STA.magnitudes.MLc.offset`.
The latter is not supported by :ref:`scconfig` but it reduces the amount of
required bindings.

bindings with 

parametric when :confval:`magnitudes.MLc.calibrationType` = "parametric"`:

.. math::

   MLc = \log_{10}(A) + c_3 * \log_{10}(r/c_5) + c_2 * (r + c_4) + c_1 + c_0(station)

where

* *A*: displacement amplitude measured in unit of mm or as per configuration
* *r*: hypocentral (default) or epicentral distance
* *c1*, *c2*, *c3*, *c4*, *c5*: general calibration parameters
* *c0*: station-specific correction
* *r*: Hypocentral (default) or epicentral distance as configured by
  :confval:`magnitudes.MLc.distMode`.

The default values are valid for SW-Germany (:cite:t:`stange-2006`), c6 and H
have been added for supporting dependency on depth (:cite:t:`rhoades-2020`).

MLc = \log_{10}(A) + c_3 * \log_{10}(r/c_5) + c_2 * (r + c_4) + c_1 + c_0(station)

*A*: displacement amplitude measured in unit of mm or as per configuration

: displacement amplitude measured in unit of mm or as per configuration

*r*: Hypocentral (default) or epicentral distance as configured by
:confval:`magnitudes.MLc.distMode`.

: Hypocentral (default) or epicentral distance as configured by

), c6 and H
have been added for supporting dependency on depth (

log10(A0)-based non-parametric when :confval:`magnitudes.MLc.calibrationType` = "A0"`:

.. math::

   MLc = \log_{10}(A) - \log_{10}(A_0)

where

* :math:`log_{10}(A_0)`: distance-dependent correction value. Read
  :ref:`global_mlv` for the details.

:math:`log_{10}(A_0)`: distance-dependent correction value. Read
:ref:`global_mlv` for the details.

The magnitude calibration function can be regionalized by adjusting global
module configuration parameters in MLc region profiles of
:confval:`magnitudes.MLc.region.*` and in a *MLc* Magnitude type profile e.g.
in :file:`global.cfg`.

The flexibility of the amplitude and magnitude processing allows for MLc to be
applied in various use cases. Examples are given below.

**Default:** Pre-filtered and gain-corrected amplitudes, Wood-Anderson
corrected and measured in mm for Southwestern Germany, :cite:t:`stange-2006`:

.. math::

   MLc = \log_{10}(A) + 1.11 * \log_{10}(r) + 0.00095 * r + 0.69 + c_0

 Pre-filtered and gain-corrected amplitudes, Wood-Anderson
corrected and measured in mm for Southwestern Germany, 

MLc = \log_{10}(A) + 1.11 * \log_{10}(r) + 0.00095 * r + 0.69 + c_0

Wood-Anderson-corrected displacement amplitudes measured in mm for
Southern California, :cite:t:`hutton-1987`:

.. math::

   MLc = \log_{10}(A) + 1.110 * \log_{10}(r / 100) + 0.00189 * (r - 100) + 3.0

Southern California, 

MLc = \log_{10}(A) + 1.110 * \log_{10}(r / 100) + 0.00189 * (r - 100) + 3.0

Pre-filtered velocity amplitudes in units of mym/s (requiring to set
:confval:`amplitudes.MLc.amplitudeScale`), no Wood-Anderson correction,
for West Bohemia, e.g. :cite:t:`hiemer-2012`:

.. math::

   MLc = \log_{10}(A) - log_{10}(2\Pi) + 2.1 * \log_{10}(r) - 1.7 + c_0

MLc = \log_{10}(A) - log_{10}(2\Pi) + 2.1 * \log_{10}(r) - 1.7 + c_0

.. figure:: media/magnitude-calibrations_MLc_s_MLc_hb.png

   MLc magnitudes for measured amplitude of 1 mm with default magnitude
   calibration (*MLc_s*, :cite:t:`stange-2006`) and calibration values for Southern
   California (*MLc_hb*, :cite:t:`hutton-1987`).

MLc magnitudes for measured amplitude of 1 mm with default magnitude
calibration (*MLc_s*, :cite:t:`stange-2006`) and calibration values for Southern
California (*MLc_hb*, :cite:t:`hutton-1987`).

calibration (

The network magnitude is computed from station magnitudes automatically by
:ref:`scmag` or interactively by :ref:`scolv`.
Originally the median was computed from all station MLc to form the
:term:`network magnitude` MLc. Here, the trimmed mean is applied. Outliers
beyond the outer 12.5% percentiles are removed before forming the mean. The
method can be adjusted in :ref:`scmag` by :confval:`magnitudes.average`.

.

 MLc. Here, the trimmed mean is applied. Outliers
method can be adjusted in 

MLc can be scaled to a moment magnitude, Mw(MLc), by a magnitude-type profile in
global module configuration. Read the
:ref:`Tutorial on moment magnitudes <tutorials_mags_moment>` for the details.

Magnitude aliases can be created by :confval:`magnitudes.aliases` in
global module configuration in order to derive other magnitude types from
original amplitudes and magnitudes. The actual amplitude and magnitude
parameters of the aliases will be configured in global bindings or by
magnitude-type profiles in global module configuration. Read the
:ref:`Tutorial on magnitude aliases <tutorials_magnitude-aliases>` for the
details.

 in

:ref:`Tutorial on magnitude aliases <tutorials_magnitude-aliases>`

Regionalization may be achieved by a magnitude-type profile in global module
configuration. Read the
:ref:`Tutorial on regionalization <tutorials_magnitude-region>` for the details.

**Set the configuration and calibration parameters** in the global bindings
similar
to :ref:`global_ml`. Instead of configuring lots of global bindings profiles
or station bindings one line per parameter can be added to the global module
configuration (:file:`global.cfg`) which takes the form

   module.trunk.NET.STA.amplitudes.MLc.preFilter = value
   module.trunk.NET.STA.magnitudes.MLc.parametric.c0 = value

similar

. Instead of configuring lots of global bindings profiles
configuration (

module.trunk.NET.STA.amplitudes.MLc.preFilter = value
module.trunk.NET.STA.magnitudes.MLc.parametric.c0 = value

Add MLc to the list of default amplitudes and magnitudes if MLc is to be
computed by automatic modules, e.g. of :ref:`scamp`, :ref:`scmag`.

computed by automatic modules, e.g. of 

Configure :ref:`scmag` (:confval:`magnitudes.average` in :file:`scmag.cfg`)
for choosing the method to form the
network magnitude from station magnitudes, e.g.

   magnitudes.average = MLc:median

)

Add MLc to the list of magnitudes preferred by :ref:`scevent`
(:confval:`eventAssociation.magTypes` in :file:`scevent.cfg`) in order to let
MLc become the preferred magnitude.

Set defaults/visibility of MLc in :term:`GUI` modules, e.g. :ref:`scolv`
or :ref:`scesv`.

All default values for bindings configuration parameters are from
:cite:t:`stange-2006`.

Inline interpreted text or phrase reference start-string without end-string.

The MLh plugin (previously MLsed) is designed to compute amplitudes
and magnitudes according to the Swiss Seismological Service (SED)
standards.

The MLh amplitude calculation is very similar to the original :ref:`ML<global_ml>`.
The two differences are:

It uses the maximum of the two horizontal components (average can be configured if necessary)

Zero-to-peak is calculated by just dividing the peak-to-peak amplitude by two.
This is not exact for unsymmetrical signals, but that doesn't matter because the
code actually generates zero-to-peak amplitudes internally and multiplies them
with two. So in the end we get real zero-to-peak values.

This is not exact for unsymmetrical signals, but that doesn’t matter because the

The MLh plugin calculates the individual station magnitude using the following formula:

waampl is the amplitude produced by the MLh plugin. Hypdistkm is the distance
from the sensor to the hypocenter in kilometers. A and B are parameters that
can be configured in a config file. Several pairs of A and B can be configured
for different ranges of hypocenter distance.

To compute the network magnitude from station magnitudes the SED standard is applied
by computing the median value of all contributing station magnitudes without any trimming.

Add the *mlh* plugin to the existing plugins in the global configuration.
Set the calibration parameters in the global bindings to compute MLh.
There exist no default configuration. Add MLh to the list of
amplitudes and magnitudes in the configuration of :ref:`scamp` and :ref:`scmag` for computation
and in :ref:`scesv` for visibility.

 plugin to the existing plugins in the global configuration.
amplitudes and magnitudes in the configuration of 

The MLr magnitude provides a GNS/Geonet local magnitude (:cite:t:`ristau-2016`).
MLr magnitudes are implemented by the *mlr* plugin.
It is a modified version of the gempa ML magnitude developed
at the Liverpool developer meeting (:cite:t:`gempa`) based on the SED
:ref:`MLh<global_mlh>` magnitude.
The *mlr* plugin is designed to use the MLv station amplitudes for computing
MLr magnitudes.
The magnitude uses a station correction term and the hypocentral distance.

 plugin.
at the Liverpool developer meeting (

 plugin is designed to use the MLv station amplitudes for computing

The MLr amplitude calculation is that of :ref:`MLv<global_mlv>`.

The *mLr* plugin calculates individual MLr station local magnitudes from
:ref:`MLv<global_mlv>` amplitudes as:

 plugin calculates individual MLr station local magnitudes from

\log10(waamplRef)= 0.2869 - 1.272 \times 1^{-3} \times hypdistkm - 1.493 \times \log10(hypdistkm) + StationCorrection

*hypdistkm:* the distance from the sensor to the hypocenter in kilometers.

*A(station):* Station correction is given by module.trunk.NZ.WEL.MLR.params, A.
Station Correction is set to be distance dependent.

Format: "UpToKilometers A ; UpToNextKilometers A ".
The option "nomag" disables the station magnitude.

 Station correction is given by module.trunk.NZ.WEL.MLR.params, A.

Format: “UpToKilometers A ; UpToNextKilometers A “.
The option “nomag” disables the station magnitude.

Amplitude unit in SeisComP: **millimeter** (mm) from :ref:`MLv<global_mlv>`

The GNS/Geonet Mlr local magnitude is using the default |scname| behaviour for
the automatic network magnitudes.
Hard-coded ranges are 0-20 degrees maximum distance and 800 km maximum depth.

 behaviour for

Add the mlr plugin to the existing plugins in the global configuration.
Set the calibration parameters in the global bindings. Add MLr to the list of
magnitudes in the configuration of :ref:`scamp` and :ref:`scmag` for computation

magnitudes in the configuration of 

MLv is the local (Richter) magnitude (:cite:t:`richter-1935`) computed from amplitudes measured on the
vertical component.

Time window: 150 s by :ref:`scautopick` or distance dependent, configurable.

Default distance range: 0 - 8 deg,  maximum is configurable
:confval:`magnitudes.MLv.maxDistanceKm`, measurements beyond 8 deg will be
strictly ignored.

The MLv amplitude calculation is very similar to the original :ref:`ML<global_ml>`,
except that the amplitude is measured on the vertical component. The methods
for measuring amplitudes are configurable in the global bindings.

,

The individual station MLv is calculated up to the epicentral distance
:confval:`magnitudes.MLv.maxDistanceKm` using the following formula:

A is the MLv Wood-Anderson amplitude in millimeters. The second term
of the epicentral distance (see :cite:t:`richter-1935`). This calibration
function can be configured globally or per station using global
bindings or the global module configuration variable
module.trunk.global.magnitudes.MLv.logA0 in :file:`global.cfg`, e.g. ::

of the epicentral distance (see 

module.trunk.global.magnitudes.MLv.logA0 in 

module.trunk.global.magnitudes.MLv.logA0 = "0:-1.3,60:-2.8,100:-3.0,400:-4.5,1000:-5.85"
module.trunk.global.magnitudes.MLv.maxDistanceKm = "-1"

The logA0 configuration string consists of an arbitrary number of
distance-value pairs separated by semicolons. The distance is in km
and the value corresponds to the *log10(A0)* term above.

and the value corresponds to the 

epicentral distance.
The calibration function and maximum distance can be configured globally,
per network or per station using the configuration variables. Instead configuring
lots of global bindings profiles or station bindings one line per parameter can be
added to the global module configuration (:file:`global.cfg`), e.g.

added to the global module configuration (

module.trunk.global.magnitudes.MLv.maxDistanceKm = -1

module.trunk.GR.magnitudes.MLv.logA0 = "0:-1.3,60:-2.8,100:-3.0,400:-4.5,1000:-5.85"
module.trunk.GR.magnitudes.MLv.maxDistanceKm = -1

module.trunk.GR.MOX.magnitudes.MLv.logA0 = "0:-1.3,60:-2.8,100:-3.0,400:-4.5,1000:-5.85"
module.trunk.GR.MOX.magnitudes.MLv.maxDistanceKm = -1

Set the configuration and calibration parameters in the global bindings. By
default MLv is computed by :ref:`scautopick` and is visible in GUIs.

default MLv is computed by 

MN is the Nuttli magnitude :cite:p:`nuttli-1973` for Canada and other Cratonic
regions. It is implemented by the *nuttli* plugin according to the
Geological Survey of Canada (NRCan).

 for Canada and other Cratonic
regions. It is implemented by the 

For measuring AMN amplitudes and for computing MN magnitudes |scname| provides
regionalization.

Add the *nuttli* plugin to the list of loaded plugins e.g. in the global module configuration:

 plugin to the list of loaded plugins e.g. in the global module configuration:

Adjust MN-specific global bindings parameters in the amplitude section and set the
region-specific calibration parameters in the global module configuration.

Add the Nuttli amplitude type, **AMN**, to the range of magnitudes for which the amplitudes are
to be calculated by :ref:`scamp`, e.g.:

, to the range of magnitudes for which the amplitudes are
to be calculated by 

region-specific calibration parameters in the global module configuration
(amplitude section).

Add the Nuttli magnitude type, **MN**, to the range of magnitudes to be calculated by
:ref:`scmag`, e.g.:

Adjust MN-specific global bindings parameters in the magnitude section and define
the region polygons in the global module configuration (magnitude section).

Ms_20 is the surface wave magnitude measured on the vertical component at around
20 s period     in accordance with the IASPEI standards.

The Ms_20 amplitudes are calculated on vertical-component displacement seismograms
corrected for the instrument response of a :term:`WWSSN_LP` seismograph.

corrected for the instrument response of a 

Ms_20 is the surface-wave magnitude at 20 s period based on the recommendations
by the IASPEI magnitude working group issued on 27 March, 2013 (:cite:t:`iaspei-2013`).

by the IASPEI magnitude working group issued on 27 March, 2013 (

A: :term:`WWSSN_LP` corrected ground displacement in units of nm measured on the vertical-component
seismogram as the maximum absolute trace amplitude of a surface wave at periods between
18 s and 22 s,

 corrected ground displacement in units of nm measured on the vertical-component

The term *Ms_20* is chosen in accordance with the IASPEI standard as of 2013 (:cite:t:`iaspei-2013`).
Alternatively, the term *Ms(20)* may be used.

Period range: 18 s - 22 s, configurable: :confval:`magnitudes.Ms_20.lowerPeriod`,
:confval:`magnitudes.Ms_20.upperPeriod`

Default distance range: 20 - 160 deg, configurable: :confval:`magnitudes.Ms_20.minDist`,
:confval:`magnitudes.Ms_20.maxDist`

Depth range: <= 100 km, configurable: :confval:`magnitudes.Ms_20.maxDepth`

the :term:`network magnitude`. Outliers below the 12.5% and above the 12.5% percentiles are
removed before the calculation.

. Outliers below the 12.5% and above the 12.5% percentiles are

Adjust the configurable parameters in global bindings in the Ms_20 section. Add
Ms_20 to the list of computed amplitudes and magnitudes in the configuration of

Funded by `SED/ETH Zurich <http://www.seismo.ethz.ch/>`_, developed by `gempa GmbH <http://www.gempa.de>`_.
This plugin is available from SeisComP version Release Potsdam 2010 and later.

.

The `NonLinLoc (NLL) <http://alomax.free.fr/nlloc>`_ locator algorithm has been
implemented into SeisComP through the plugin mechanism. A new plugin locnll
contains the LocatorInterface implementation for NonLinLoc.

 locator algorithm has been

The implementation bundles the NonLinLoc source files required to use the library
function calls. The following source files are included:

GridLib.c
GridLib.h
GridMemLib.c
GridMemLib.h
NLLocLib.h
NLLoc1.c
NLLocLib.c
calc_crust_corr.c
calc_crust_corr.h
crust_corr_model.h
crust_type_key.h
crust_type.h
loclist.c
octtree.h
octtree.c
phaseloclist.h
phaselist.c
geo.c
geo.h
geometry.h
map_project.c
map_project.h
otime_limit.c
otime_limit.h
ran1.c
ran1.h
velmod.c
velmod.h
util.h
util.c
alomax_matrix/alomax_matrix.c
alomax_matrix/alomax_matrix.h
alomax_matrix/alomax_matrix_svd.c
alomax_matrix/alomax_matrix_svd.h

After running NonLinLoc the output is converted into a SeisComP (QuakeML) origin
object including all available error measures. The following table shows how
the NLL error measures are mapped to the SeisComP data model:

The NonLinLoc plugin is installed under :file:`share/plugins/locnll.so`.
It provides a new implementation of the LocatorInterface with the name NonLinLoc.

.

Basically it can be used by two modules: :ref:`screloc` and :ref:`scolv`.

All output is stored in the configured :confval:`NonLinLoc.outputPath`.
The file prefix for a location is the originID (:confval:`NonLinLoc.publicID`).

In addition to the native NLL output a SeisComP origin object is created and

The plugin allows to specify multiple configuration profiles (:confval:`NonLinLoc.profiles`).
The profile to use can selected both in `scolv` and `screloc`, however a
virtual profile automatic is also provided, which selects the best matching
configured profile based on the initial location. For this reason each profile
contains some configuration parameters that defines where the profile is valid
(`transform`, `region`, `origin`, `rotation`). The `transform` profile
configuration parameter supports only `GLOBAL` or `SIMPLE` at the moment: only the
profile has this limitation, not the NonLinLoc control file, which supports
all transformations available in NonLinLoc.

, however a
(

 at the moment: only the

**NOTE**: If a profile `transform` is set as `GLOBAL` and the `region` parameter is
left `empty`, then the plugin adds the line `TRANS GLOBAL` to the control file,
forcing a global transformation.

################ NonLinLoc configuration################
NLLROOT = ${HOME}/nll/data

NonLinLoc.outputPath = ${NLLROOT}/output/

# Define the default control file if no profile specific
# control file is defined.
NonLinLoc.controlFile = ${NLLROOT}/NLL.default.conf

# Set the default pick error in seconds passed to NonLinLoc
# if no SeisComP pick uncertainty is available.
NonLinLoc.defaultPickError = 0.1

# Define the available NonLinLoc location profiles. The order
# implicitly defines the priority for overlapping regions
#NonLinLoc.profiles = swiss_3d, swiss_1d, global
NonLinLoc.profiles = swiss_3d, global

# The earthModelID is copied to earthModelID attribute of the
# resulting origin
NonLinLoc.profile.swiss_1d.earthModelID = "swiss regional 1D"

# Specify the velocity model table path as used by NonLinLoc
NonLinLoc.profile.swiss_1d.tablePath = ${NLLROOT}/time_1d_regio/regio

# Specify the region valid for this profile
# Without this parameter the plugin will add an additional
# TRANS GLOBAL statement in the NLL control file
NonLinLoc.profile.swiss_1d.region = 41.2, 3.8, 50.1, 16.8

# The NonLinLoc  control file to use for this profile
NonLinLoc.profile.swiss_1d.controlFile = ${NLLROOT}/NLL.swiss_1d.conf

# Configure the swiss_3d profile
NonLinLoc.profile.swiss_3d.earthModelID = "swiss regional 3D"
NonLinLoc.profile.swiss_3d.tablePath = ${NLLROOT}/time_3d/ch
NonLinLoc.profile.swiss_3d.region = 45.15, 5.7, 48.3, 11.0
NonLinLoc.profile.swiss_3d.controlFile = ${NLLROOT}/NLL.swiss_3d.conf

# And the global profile
NonLinLoc.profile.global.earthModelID = iaspei91
NonLinLoc.profile.global.tablePath = ${NLLROOT}/iasp91/iasp91
NonLinLoc.profile.global.controlFile = ${NLLROOT}/NLL.global.conf

An example of a NonLinLoc control file configuration that contains all the
required statements, but it must be adapted to the specific use case. The
missing statements are generated by the plugin (LOCFILES, LOCHYPOUT, LOCSRCE):

# -1 = no logs, useful for playback with screloc --ep option
CONTROL -1 123456
# This must be the same TRANS used for generating the grid files
TRANS SDC 46.51036987 8.47575546 0.0
LOCSIG Swiss Seismological Service, ETHZ
LOCCOM location using my local velocity model
LOCSEARCH OCT 20 20 20 0.001 10000 1000
# This grid origin is relative to the TRANS statement. The grid
# must be wholly contained in the grid files
LOCGRID 101 101 101 -0.5 -0.5 -1.8  0.01 0.01 0.01 PROB_DENSITY SAVE
LOCMETH EDT_OT_WT 9999.0 4 -1 -1 -1 0 -1 1
LOCGAU 0.001 0.0
LOCPHASEID  P   P p G Pn Pg P1
LOCPHASEID  S   S s G Sn Sg S1
LOCQUAL2ERR 0.025 0.050 0.100 0.200 0.400 99999.9
LOCANGLES ANGLES_YES 5

**NOTE**: The LOCHYPOUT parameter statement is always generated by the plugin.
By default it outputs `LOCHYPOUT NONE`.  If `enableSEDParameters` is enabled
or if the original control file contains `CALC_SED_ORIGIN`, it will append
`CALC_SED_ORIGIN`.  If the original control file contains `SAVE_NLLOC_EXPECTATION`,
that flag will also be preserved. Currently, only `CALC_SED_ORIGIN` and
`SAVE_NLLOC_EXPECTATION` are supported by the plugin. Any other options are
omitted and will not be forwarded to NonLinLoc.

: The LOCHYPOUT parameter statement is always generated by the plugin.
By default it outputs 

 are supported by the plugin. Any other options are

When generating the grid files the station names used in the GTSRCE statement
must match the rule set in the plugin configuration. E.g.

# Format of the station name used to select the right travel time table (grid)
# file for a station. By default only the station code is used (e.g.
# tablePath.P.@STA@.time.*), but that doesn't allow to distinguish between
# multiple network codes or location codes that use the same station code. To
# overcome this limitation this parameter could be set in a more general way,
# for example @NET@_@STA@_@LOC@. In this way NonLinLoc will look for travel
# time table (grid) files of the form: tablePath.P.@NET@_@STA@_@LOC@.time.*
# Where @NET@ @STA@ @LOC@ are just placeholder for the actual codes
NonLinLoc.profile.MYPROFILE.stationNameFormat = @NET@_@STA@_@LOC@

Given the above plugin configuration, the GTSRCE statement should be something
like this:

GTSRCE CH_STA01_   LATLON  46.519  8.474  0.0  1.295
GTSRCE CH_STA02_01 LATLON  46.456  8.474  0.0  1.323
GTSRCE CH_STA03_AA LATLON  46.784  8.474  0.0  1.292

GTSRCE STA01 LATLON  46.519  8.474  0.0  1.295
GTSRCE STA02 LATLON  46.456  8.474  0.0  1.323
GTSRCE STA03 LATLON  46.784  8.474  0.0  1.292

The usage of the new NLL plugin is straight forward. Once loaded successfully the
new locator shows up in the lower left corners combo box.

Select the new NonLinLoc locator and the configured profiles will be loaded into
the combo box right of it.

.. figure:: media/nonlinloc/locator_profile_selection_small.png

The NonLinLoc implementation provides a virtual profile automatic. This emulates
the complete automatic case and selects the best matching configured profiles
based on the initial location.

If an origin has been relocated the method should be set to "NonLinLoc" and
the earth model contains the string NonLinLoc.profile.[name].earthModelID
configured for the selected profile.

If an origin has been relocated the method should be set to “NonLinLoc” and

The NLL locator implementation supports to override configured settings or
the locator is changed to another one or the profile has been changed.  However
this feature is particularly useful when trying differnt settings on a particular
origin or for enabling the NonLinLoc logs (`CONTROL` statement) that becomes
visible on the console.

origin or for enabling the NonLinLoc logs (

scolv provides two additional configurable buttons. To bind
`Seismicity Viewer <http://alomax.free.fr/seismicity>`_ to the first one the
following configuration can be used:

button0 = "Seismicity Viewer"
scripts.script0 = @CONFIGDIR@/scripts/sv

A small wrapper script sv has been created that calls Seismicity Viewer based
on the origin ID passed to the script.

#!/bin/sh
FILE=$HOME/nll/data/output/$1.loc.hyp
java -classpath $HOME/nll/bin/SeismicityViewer50.jar \
     net.alomax.seismicity.Seismicity $FILE

This examples assumes that Seismicity Viewer has been installed in $HOME/nll/bin.

Hyperlink target "global-nonlinloc-configuration" is not referenced.

|scname| applications access waveform data through the RecordStream interface.
The following tables lists available implementations:

 applications access waveform data through the RecordStream interface.

Distributes requests to multiple proxy streams according to user defined rules

Connects to a `gempa CAPS server <https://www.gempa.de/products/caps/>`_

The RecordStream parameters considered by an application are provided as a *URL*
in 2 alternative ways:

The RecordStream parameters considered by an application are provided as a 

Specification of the *URL* on the command line. Use the option ``-I URL``

Configuration of the *URL* using the global parameter :confval:`recordstream`.

The URL scheme defines the specific RecordStream implementation. If the scheme
is omitted, the :ref:`rs-file` implementation is used as default.

is omitted, the 

Older SeisComP versions used to split the URL into the parameters
:confval:`recordstream.service` and :confval:`recordstream.source`.
These parameters are not being used anymore.

The default host is set to `localhost`, the default port to `18000`. Optional
URL encoded parameters are:

`no-batch` - disables BATCH mode to request data, does not take a value

The default host is set to `localhost`, the default port to `18001`. Optional

The host is a mandatory parameter. The default port depends on the URL scheme
used:

The default path is set to `/fdsnws/dataselect/1/query`. If a path is specified,
it needs to be complete up until the `query` resource.

Authentication via the `queryauth` resource is currently not supported.

The path may be a absolute or relative path to a file. Environment variables
are **not** resolved. If path is set to ``-`` the data is read from `stdin`.

are 

By default the record type is set to `mseed`. SAC data can be read using the *#sac*
descriptor. If a file name extension is available, then the record type is set as
follows:

follows:

When defining the File RecordStream on the command line using the option `-I`,
the file name can also be passed without the URL scheme, e.g. ::

   -I -
   -I /tmp/input.mseed

When defining the File RecordStream on the command line using the option 

This RecordStream reads data from one or more |scname| (:term:`SDS`) archives using the
:ref:`rs-file` RecordStream.

In contrast to a formal URL definition, the URL path is interpreted as a directory path list
separated by commas.

When defining multiple directories separated by comma in a configuration
file, please enclose the entire definition (including ``sdsarchive://`` with
double quotes. Otherwise the configuration parser will interpret it as a list
and will only return the first part up to the first comma.

file, please enclose the entire definition (including 

 with

Different SDS archives are not merged, but are read sequentially depending on
data existence. If a requested file is missing in the current SDS archive, it is
searched for in the archive next in the list. On success it will deliver all
the rest of files for the current channel from this SDS archive. On failure the
next SDS archive is searched.

This process is repeated for each requested channel individually. It always
starts to search data from the first given SDS to the last one, for each data
channel.

This RecordStream reads data from a
`gempa CAPS server <https://www.gempa.de/products/caps/>`_.

The default host is set to `localhost`. The default port depends on the URL scheme
used:

`arch` - No parameter. Retrieve only archived data. In this mode the connection
 finished when all available data has been sent. It won't wait for additional
 real-time data.

finished when all available data has been sent. It won't wait for additional
real-time data.

 - No parameter. Retrieve only archived data. In this mode the connection

finished when all available data has been sent. It won’t wait for additional

`user` - **Deprecated:** The user name of an authenticated request. Please use
 the standard URL userinfo in front of the host instead.

the standard URL userinfo in front of the host instead.

`pwd` - **Deprecated:** The password of an authenticated request. Please use

This RecordStream reads data from memory and is only useful for developing
applications. For instance a record sequence stored in an internal buffer could
be passed to an instance of this RecordStream for reading.

This RecordStream combines one archive and one real-time RecordStream, e.g.
:ref:`rs-arclink` and :ref:`rs-slink`. First the archive stream is read up to
the size of the real-time buffer. Then the acquisition is switched to the
real-time stream. The syntax for the source is similar to an URL:

. First the archive stream is read up to

By default the real-time stream is set to :ref:`rs-slink` and the
archive-stream is set to :ref:`rs-arclink`. Any other streams may be configured.

The definition of the proxy streams has slightly changed: Scheme and source are
only separated by a slash, e.g. `slink://localhost` needs to be defined as
`slink/localhost`.

only separated by a slash, e.g. 

The URL parameters of the combined stream are separated by 2 question marks
(`??`) in order to distinguish them from the parameters used in the proxy
streams:

(

) in order to distinguish them from the parameters used in the proxy
streams:

`slinkMax|rtMax|1stMax` - Buffer size in seconds of the first stream
(typically the real-time stream), default: 3600

Time spans can be configured with an additional and optional suffix:

======  =============
Suffix  Multiplicator
s       1
m       60
h       3600
d       86400
w       86400*7

 - Buffer size in seconds of the first stream

`splitTime` - The absolute time of the separation of both sources. The argument
is an ISO time string, e.g. 2018-05-10T12:00:00Z or a year, e.g. 2018, which is
the same as 2018-01-01T00:00:00.000Z.
`splitTime` can be used if the waveform archives are spread over several
directories or hard disks. See also the :ref:`examples<rs_splitTime>`.

 - The absolute time of the separation of both sources. The argument

 can be used if the waveform archives are spread over several
directories or hard disks. See also the 

The combined record stream may be nested allowing the configuration of a
(theoretically) infinite number of archive streams. The URL syntax for a nested
configuration uses parenthesis:

Seedlink on localhost:18000 combined with Arclink on localhost 18001

Seedlink on localhost:18042 combined with Arclink on localhost 18001, real-time (SeedLink) buffer size set to 30min

Seedlink combined with a combined record stream using two Arclink sources

Seedlink combined with a combined recordStream providing access to 3 different SDS archives separated by time. The first SDS archive contains the most recent archived data. The other two contain the data from 2016 and 2017.

Seedlink combined with a combined recordStream providing access to 3 different SDS archives separated by time. The first SDS archive contains the most recent archived data. The other two are separated in mid of 2016.

This RecordStream distributes requests quasi-equally (but deterministically) to
multiple proxy streams. It can be used for load balancing and to improve failure
tolerance. The algorithm to choose a proxy stream (counting from 0) is based on
station code and can be expressed in Python as follows:

stationCode = "WLF"
nproxies = 2

x = 0
for c in stationCode:
    x += ord(c)

print("choosing proxy stream", x % nproxies)

The definition of the proxy streams has slightly changed: Scheme and source
are only separated by a slash, e.g. `slink://localhost` needs to be defined as

are only separated by a slash, e.g. 

This RecordStream distributes requests to multiple proxy streams according to
user supplied routing rules, which allow to route specific network, station,
location or channel codes to fixed proxy streams.

The URL parameters of the routing stream are separated by 2 question marks
streams.

(

streams.

`pattern` defines the rule used to route the request to the proxy stream and it is
in `NET.STA.LOC.CHA` format. The special characters `?` `*` `|` `(` `)` are allowed.

 defines the rule used to route the request to the proxy stream and it is
in 

Requests for network `NET1` and `NET2` go to server1, all the rest to server2

Requests for network `TMPX` go to server1, for network `NET` go to server 2, all the rest are not fulfilled

Requests for channels `HH` and `EH` go to server1, all the rest to server2

Split requests to 2 :ref:`rs-combined` RecordStreams according to the network code `STA1` or `STA2`. Other network codes are not fullfilled

Requests for special network `SP` are fullfilled by seedlink `special-server` and sdsarchive `/home/sysop/seiscomp/var/lib/special-archive`, all the rest are fullfilled by seedlink `default-server` and archive `/home/sysop/seiscomp/var/lib/default-archive`

This RecordStream decimates (downsamples) a proxy stream, e.g. :ref:`rs-slink`.

`slink/localhost`. Also optional decimation parameters directly follow the proxy
stream scheme.

. Also optional decimation parameters directly follow the proxy

This RecordStream resamples (up or down) a proxy stream, e.g. :ref:`rs-slink`,
to a given sampling rate.

StdLoc is a SeisComP locator plugin that combines standard location methods
and was developed with the focus on local seismicity, although the methods
are generic enough to work at larger scales as well.

The locator can apply a multitude of location methods and it is particularly useful to
combine them to achieve better solutions:

LeastSquares: this is the classic algorithm that solves the linearized problem of
travel time residual minimization via iterative least squares. However an initial
location estimate is required. This is the intended method to select when StdLoc
is used in combination with a pick associator: it provides the initial location
estimate and StdLoc will improve it. When used in :ref:`scolv` or :ref:`screloc`,
the location of the origin to be relocated is used as starting estimate.
The configuration doesn't require any mandatory parameters:

 .. code-block:: params

    method = LeastSquares

estimate and StdLoc will improve it. When used in 

,
The configuration doesn’t require any mandatory parameters:

GridSearch: finds the source parameters by evaluating the hypocenter probability
of each point in a grid and returning the maximum likelihood hypocenter.
Because the search space is fully evaluated there is no need for an initial
location estimate and the location uncertainty is completely known. However the
method is very slow. It can be used to relocate events in :ref:`scolv` that seem
difficult to locate via other methods or to verify the uncertainty of a solution.
The following example configuration computes a grid search around the average
location of the picked stations. The grid points are spaced apart 0.5km
horizontally and 2km vertically.

    method = GridSearch
    GridSearch.center = auto,auto,15
    GridSearch.size = 40,40,30
    GridSearch.numPoints = 81,81,16

method is very slow. It can be used to relocate events in 

 that seem

   method = GridSearch
   GridSearch.center = auto,auto,15
   GridSearch.size = 40,40,30
   GridSearch.numPoints = 81,81,16

method = GridSearch
GridSearch.center = auto,auto,15
GridSearch.size = 40,40,30
GridSearch.numPoints = 81,81,16

GridSearch+LeastSquares: this method can be used in very complex networks where
a bad initial location estimates can get LeastSquares stuck in a local minimum.
The method finds a LeastSquares solution for each cell in a (coarse) grid, using
the cell centroid as initial location estimate. If finally returns the maximum
likelihood solution. This method is intended to be used in :ref:`screloc` or
:ref:`scolv`  to relocate existing events.
The following example configuration returns the best among the 75 (5x5x3)
LeastSquares solutions, computed for every point in the grid.

    method = GridSearch+LeastSquares
    GridSearch.size = 100,100,30
    GridSearch.numPoints = 5,5,3

likelihood solution. This method is intended to be used in 

  to relocate existing events.

   method = GridSearch+LeastSquares
   GridSearch.size = 100,100,30
   GridSearch.numPoints = 5,5,3

method = GridSearch+LeastSquares
GridSearch.size = 100,100,30
GridSearch.numPoints = 5,5,3

OctTree: this method produces similar results to GridSearch but it is extremely
faster and it follows the NonLinLoc approach. The OctTree search starts by
evaluating the hypocenter probability of each cell in a grid, computed as the
probability density at the cell center coordinates times the cell volume. The
search then continues by repeatedly fetching the  cell with highest probability
and splitting it in 8 sub-cells. These 8 cells are then inserted in the pool of
cells to fetch from at next iteration.
The search terminates after either a maximum number of iterations or after
reaching a minimum cell size. At that point the maximum likelihood hypocenter
is selected. Because the algorithms splits only the cells with higher
probability, the search space is sampled in a very efficient way and it makes
the method way faster than GridSearch.
This method is intended to be used in :ref:`screloc` or :ref:`scolv` to
relocate existing events.
The following example is a plausible configuration for the entire Swiss
network:

    method = OctTree
    GridSearch.center = 47.0,8.5,50
    GridSearch.size = 700,700,100
    GridSearch.numPoints = 21,21,11
    OctTree.maxIterations = 100000
    OctTree.minCellSize = 0.001

However in this example we are at the size limit for a flat earth study
geometry and for bigger regions `GridSearch.center` should be set to
`auto` and `GridSearch.size` to a smaller size.

network:

This method is intended to be used in 

 to
network:

   method = OctTree
   GridSearch.center = 47.0,8.5,50
   GridSearch.size = 700,700,100
   GridSearch.numPoints = 21,21,11
   OctTree.maxIterations = 100000
   OctTree.minCellSize = 0.001

method = OctTree
GridSearch.center = 47.0,8.5,50
GridSearch.size = 700,700,100
GridSearch.numPoints = 21,21,11
OctTree.maxIterations = 100000
OctTree.minCellSize = 0.001

geometry and for bigger regions 

OctTree+LeastSquares: this method allows the OctTree search to find the
maximum probability cell in the network and uses that as the initial
location estimate for LeastSquares.
network:

    method = OctTree+LeastSquares
    OctTree.maxIterations = 10000
    OctTree.minCellSize = 1.0

network:

   method = OctTree+LeastSquares
   OctTree.maxIterations = 10000
   OctTree.minCellSize = 1.0

method = OctTree+LeastSquares
OctTree.maxIterations = 10000
OctTree.minCellSize = 1.0

The algorithms implemented in StdLoc are standard methods described in "Routine Data
Processing in Earthquake Seismology" by Jens Havskov and Lars Ottemoller. The OctTree
search algorithm is based on NonLibLoc by Antony Lomax.

The algorithms implemented in StdLoc are standard methods described in “Routine Data
Processing in Earthquake Seismology” by Jens Havskov and Lars Ottemoller. The OctTree

When dealing with very local seismicity (few kilometers or hundreds of meters)
simplifications that are common for regional seismicity have to be removed.
In particular the locator should take into consideration:

station elevation and even negative elevation (e.g. borehole sensors)

earthquake location can be above a seismic sensor (e.g. borehole sensors)

More importantly the travel time tables used by the locator must be able to take
into consideration all the above too.

StdLoc can be configured with any Travel Time Table type available in SeisComP,
however only the `homogeneous` type is able to take into consideration station
elevation, negative source depth and sources happening above stations. For this
reason `homogeneous` should be the preferred choice when working on very local
seismicity and especially with borehole sensors.

however only the 

 type is able to take into consideration station
reason 

 should be the preferred choice when working on very local

Hyperlink target "global-stdloc-configuration" is not referenced.

import_inv is a wrapper for inventory converters. Inventory converters convert
an input format such as

:ref:`SeisComP inventory XML <concepts_inventory>`, schema: :file:`$SEISCOMP_ROOT/share/xml/`

to SeisComP inventory XML which is read by the trunk config module to
synchronize the local inventory file pool with the central inventory database.

When :program:`import_inv help formats` is called it globs for
:file:`$SEISCOMP_ROOT/bin/*2inv`.
If another format needs to be converted, it is very easy to provide a new
converter.

.

For making a new converter work with import_inv it must implement an interface
on shell level. Furthermore the converter program must be named
:file:`{format}2inv` and must live in :file:`SEISCOMP_ROOT/bin`.

The converter program must take the input location (file, directory, URL, ...)
as first parameter and the output file (SeisComP XML) as second parameter. The
output file must be optional and default to stdout.

The converter program must take the input location (file, directory, URL, …)

To add a new converter for a new format, e.g. Excel, place the new converter
program at :file:`$SEISCOMP_ROOT/bin/excel2inv`.

program at 

Convert inventory file in FDSN StationXML format (fdsnxml) and copy the content to
:file:`$SEISCOMP_ROOT/etc/inventoy/inventory.xml`. The call will invoke
:ref:`fdsnxml2inv` for actually making the conversion:

   $ import_inv fdsnxml inventory_fdsn.xml $SEISCOMP_ROOT/etc/inventoy/inventory.xml

$ import_inv fdsnxml inventory_fdsn.xml $SEISCOMP_ROOT/etc/inventoy/inventory.xml

import_inv inherits :ref:`global options<global-configuration>`.

The first form takes the format as first parameter and the input
and output location. The input location is either a file or directory
depending on the format and its converter. If the output is not
given it defaults to seiscomp\/etc\/inventory\/{input}.xml. To write
the output to stdout, \"\-\" must be used.

The second form provides help on a particular topic. The only topic
currently supported is \"formats\" which prints all available input
formats.

inv2dlsv is a simple filter that converts inventory in |scname| XML (:term:`SCML`)
format from stdin (or a file) to dataless SEED on stdout (or a file). It does
not support processing of input XML such as extraction of networks or channels.
To accomplish this task, combine :program:`inv2dlsv` with :ref:`invextr`.

)
To accomplish this task, combine 

Conversion of dataless SEED to |scname| XML is provided by :ref:`dlsv2inv`.

"-" can always be used as filename to refer to the standard input/output channel.

“-” can always be used as filename to refer to the standard input/output channel.

Convert an inventory XML file to a dataless SEED file

   inv2dlsv inv.xml inv.seed

Convert an inventory XML file to a compressed dataless SEED file

   inv2dlsv inv.xml | gzip > inv.seed.gz

Convert a subset of an inventory XML using :ref:`invextr`.

   invextr --chans "*MORC*" inv.xml | inv2dlsv - inv.seed

If in_xml is not given, stdin is used. If out_dataless is not given,
stdout is used.

invextr reads and modifies inventory XML provided as file or on stdin:

Extract or remove networks, stations and channels based on

* channel IDs
* geographic region
* time

Clean inventories from unused objects such as data loggers, sensors or
instrument responses.

whereas the output file defaults to stdout and the input file to
stdin if not given.

The optional region box will be used to filter the read inventory based on the
coordinates of sensor locations. Only stations with sensor locations within the
region will be considered. All others will be ignored.

A channel ID is a simple string that is matched against the final channel ID
in the inventory. This final channel ID is constructed by joining the codes of
all stages with a dot where the stages are network, station, location and
channel.

The content of the resulting inventory may be listed using :ref:`scinv`.

Suppose an inventory with network GE, a station MORC and several channels:

network GE
  station MORC
    location __
      channel BHZ    ID: GE.MORC..BHZ
      channel BHN    ID: GE.MORC..BHN
      channel BHE    ID: GE.MORC..BHE
      channel LHZ    ID: GE.MORC..LHZ
      channel LHN    ID: GE.MORC..LHN
      channel LHE    ID: GE.MORC..LHE

The IDs are matched against streams passed with --chans.

   invextr --chans "GE*" inv.xml

All streams are passed and nothing is filtered because GE* matches all
available IDs and region filter is not used. Since :file:`inv.xml` only
contains stations from the GE network the option :option:`--chans` is not
useful here at all.

   invextr -r 0,-180,90,180 inv.xml

 All streams located in the northern hemisphere are passed as commanded by the
 region bounding box.

available IDs and region filter is not used. Since 

  invextr -r 0,-180,90,180 inv.xml

All streams located in the northern hemisphere are passed as commanded by the
region bounding box.

Nothing is filtered again because *MORC* matches all available IDs.

   invextr --chans "*MORC*" inv.xml

Everything is filtered because GE.MORC does not match with any ID. To make it
work, an asterisk needs to be appended: GE.MORC* or GE.MORC.*.

   invextr --chans "GE.MORC" inv.xml

To extract all vertical components, use:

   invextr --chans "*Z" inv.xml

To remove all HH and SH channels, use:

   invextr --rm --chans "*HH?,*SH?" inv.xml

Begin time to consider streams. Streams ending at or
before that time will be ignored.

End time to consider streams. Streams starting after
that time will be ignored.

A comma separated list of channel IDs to extract
which can contain wildcards. Default: \*.\*.\*.\* meaning
all streams.

Example: invextr \-\-chans \"GE.\*.\*.BHZ,GE.MORC.\*.\*\" inv.xml

Stream list file to be used for extracting inventory.
Wildcards can be used. \-\-chans is ignored.

Filter streams by geographic region given as
\"South, East, North, West\". Region is unused by default.

Removes all channels given with '\-\-chans' instead of
extracting them.

The kernel is the basic configuration for the :command:`seiscomp` tool.
It contains configuration parameters for all init scripts in :file:`etc/init`. Each init script can, but does not
need to, read the kernel parameters and configure itself accordingly. Kernel parameters are not mandatory but
should be taken as (serious) hints. If for example syslog is enabled in the kernel then all init scripts should
configure syslog as logging backend for the programs they start. But if a program does not support syslog it can
also be started without logging to syslog.

 tool.
It contains configuration parameters for all init scripts in 

. Each init script can, but does not

kernel is a :term:`standalone module` and does not inherit :ref:`global options <global-configuration>`.

Sends all logging output to the syslog backend which logs
usually to \/var\/log\/messages.

SeisComP messaging component that enables communication of modules over the network.

Enables\/disables local messaging \(scmaster\).
The messaging component is an integral component
of all modules \(except e.g. acquisition modules\).
If you are not sure what to do, enable it.

Defines the messaging unencrypted bind address. If
left empty then the configuration file \(see scmaster\)
will be used instead. Use this to override the
unencrypted bind address. The format is
\"[ip:]port\".

msrtsimul simulates a real-time data acquisition by injecting miniSEED data from a
file into the seedlink buffer via the mseedfifo plugin for seedlink. It can be
used for simulating real-time conditions in playbacks for whole-system
demonstrations, user training, etc.

The data is played back as if they were recorded at current time. Therefore,
creation times and the actual data times including pick times, event times etc.
will be **obscured**. :ref:`Historic playbacks <sec-msrtsimul-historic>` allow
keeping the actual data times.

will be 

* Playbacks on production systems are normally not recommended.
* For real-time playbacks, the data must be sorted by end time. This
  requirement may be violated. Use :ref:`scmssort` for sorting the data by
  (end) time.
* Stop :ref:`slarchive` before running msrtsimul for avoiding that data with
  wrong times are archived.
* Normally, :ref:`seedlink` assumes that the data is provided in records of
  512 bytes. msrtsimul issues a warning when detecting a record of other size.
* Data available in other record sizes can be repacked to 512 bytes by
  external software such as :program:`msrepack` available with
  :cite:t:`libmseed-github`.
* Applications other than standard :ref:`seedlink` in |scname| or
  :ref:`seedlink` compiled specifically may accept other record sizes. For
  accepting these records use msrtsimul with :option:`--unlimited`.

For real-time playbacks, the data must be sorted by end time. This
requirement may be violated. Use :ref:`scmssort` for sorting the data by
(end) time.

requirement may be violated. Use 

Stop :ref:`slarchive` before running msrtsimul for avoiding that data with
wrong times are archived.

 before running msrtsimul for avoiding that data with

Normally, :ref:`seedlink` assumes that the data is provided in records of
512 bytes. msrtsimul issues a warning when detecting a record of other size.

 assumes that the data is provided in records of

Data available in other record sizes can be repacked to 512 bytes by
external software such as :program:`msrepack` available with
:cite:t:`libmseed-github`.

external software such as 

Applications other than standard :ref:`seedlink` in |scname| or
:ref:`seedlink` compiled specifically may accept other record sizes. For
accepting these records use msrtsimul with :option:`--unlimited`.

 compiled specifically may accept other record sizes. For
accepting these records use msrtsimul with 

By default, msrtsimul writes the data into the mseedfifo pipe
*$SEISCOMP_ROOT/var/run/seedlink/mseedfifo*.
If the data is to be written into the pipe of a :program:`seedlink` alias or
into any other pipe, the pipe name must be adjusted. Use the option

 alias or

:option:`--seedlink` to replace *seedlink* by another name, e.g. a seedlink instance
created as an alias, **seedlink-test**. This would write into
*$SEISCOMP_ROOT/var/run/seedlink-test/mseedfifo*.

 by another name, e.g. a seedlink instance
created as an alias, 

:option:`--stdout` to write to standard output and then redirect to any other location.

 to write to standard output and then redirect to any other location.

You may use msrtsimul with the :option:`-m` *historic* option to maintain the
time of the records,
thus the times of picks, amplitudes, origins, etc. but not the creation times.
Applying :option:`-m` *historic* will feed the data into the seedlink buffer at the time
of the records. The time of the system is untouched. GUI, processing modules, logging,
etc. will run with current system time. The historic mode allows to process waveforms
with the stream inventory valid at the time when the data were recorded including
streams closed at current time.

 option to maintain the
Applying 

 will feed the data into the seedlink buffer at the time

When repeating historic playbacks, the waveforms are fed multiple times to the
seedlink buffer and the resulting picks are also repeated with the same pick
times. This may confuse the real-time system. Therefore, seedlink and other modules
creating or processing picks should be
stopped, the seedlink buffer should be cleared and the processing
modules should be restarted to clear the buffers before starting the
historic playbacks. Make sure :ref:`scautopick` is configured or started with
the :option:`--playback` option. Example:

   seiscomp stop
   rm -rf $SEISCOMP_ROOT/var/lib/seedlink/buffer
   seiscomp start
   msrtsimul ...

historic playbacks. Make sure 

seiscomp stop
rm -rf $SEISCOMP_ROOT/var/lib/seedlink/buffer
seiscomp start
msrtsimul ...

For supporting msrtsimul activate the :confval:`msrtsimul` parameter in the
seedlink module configuration (:file:`seedlink.cfg`), update the configuration
and restart seedlink before running msrtsimul:

), update the configuration

seiscomp update-config seedlink
seiscomp restart seedlink

Playback miniSEED waveforms in real time with verbose output:

   $ msrtsimul -v miniSEED-file

Playback miniSEED waveforms in historic mode. This may require :ref:`scautopick`
to be started with the option *playback*:

   msrtsimul -v -m historic miniSEED-file

Feed the data into the buffer of a specific seedlink instance, e.g. *seedlink-test*:

   msrtsimul -v --seedlink seedlink-test miniSEED-file

Feed the data into the buffer of a specific seedlink instance, e.g. 

Write on standard output. The output my be redirected to a
specific mseedfifo path.

The seedlink module name. Useful if a seedlink alias or
non\-standard names are used. Replaces 'seedlink'
in the standard mseedfifo path.

**QuakeLink (gempa GmbH) to SeisComP event parameter exchange.**

ql2sc manages the import of SeisComP objects from one or several QuakeLink servers
into a SeisComP system in real time. Like :ref:`scimex` but contrary to
:ref:`scimport` the exchange of the SeisComP objects is event based. This means no
messages will be exchanged until the exporting system has produced an event.

into a SeisComP system in real time. Like 

 the exchange of the SeisComP objects is event based. This means no

The user may control at various levels which information to import. Whenever
possible server-side filters should be preferred to reduce both the network
bandwidth consumption as well as the CPU and memory utilization on the local
machine.

ql2sc does not delete events at the import system although quakelink
allows the deletion of events. Deleted events are ignored by ql2sc and kept
in the SeisComP database.

QuakeLink provides a filter syntax similar to SQL-WHERE clauses which may be
used to filter interesting events on the server side:

clause    := condition[ AND|OR [(]clause[)]]
condition := MAG|DEPTH|LAT|LON|PHASES|DIST(lat,lon) op {float} |
             DIST(lat,lon) IN [{float}, {float}] |
             UPDATED|OTIME op time |
             AGENCY|AUTHOR|STATUS|ESTATUS|EMODE|TYPE|REGION|MAG_T op 'string' |
             MAG|DEPTH|LAT|LON|PHASES|OTIME|UPDATED IS [NOT] NULL
op        := =|!=|>|>=|<|<=|eq|gt|ge|lt|ge
time      := %Y,%m,%d[,%H,%M,%S,%f]

E.g., the following filter string would select only those events with a minimum
magnitude of 6, detected by at least 10 stations and which are shallower than
100km:

The supported filter commands depend on the specific QuakeLink version. To
list all available options you may connect to the server, e.g., using
`telnet localhost 18010`, and request the help page of the `SELECT` command
using `help select`.

QuakeLink provides a coarse object filter for the most relevant SeisComP objects:

Subsequent to the server-side filters a routing table defines which objects to
import and to which message group to send them. Depending on the |scname| modules
listening to the specified message groups an object may be further processed.
Typically no modules (other than :ref:`scmaster`) is connected to the
``IMPORT_GROUP`` so that objects sent to this group are just stored to the
database. If an object should be discarded, the special group identifier ``NULL``
may be used.

import and to which message group to send them. Depending on the 

 modules
Typically no modules (other than 

 so that objects sent to this group are just stored to the
database. If an object should be discarded, the special group identifier 

The routing table is defined as a comma-separated list of
``object name:group name`` pairs. Also the routing rules are inherited
recursively within the SeisComP object tree. If no explicit rule exists for an
object, the routing of its parent is evaluated up to the ``EventParameters``
root node.

 pairs. Also the routing rules are inherited
object, the routing of its parent is evaluated up to the 

Sends origins and it's children arrival, origin uncertainty to the ``LOCATION``
group but the magnitude children to the ``MAGNITUDE`` group. Skips picks,
amplitudes, focal mechanisms and events.

Sends origins and it’s children arrival, origin uncertainty to the 

The default use case of ql2sc is to import earthquake solutions from other data
centers or in-house redundant SeisComP systems. The intention is not to
reprocess the solution but to add them to the local catalog.

Picks and Amplitudes to the ``IMPORT_GROUP`` group to prevent processing by
the local locator and amplitude processor

 group to prevent processing by

Origins (including its StationMagnitude and Magnitude children) to the
``LOCATION`` to allow event association.

FocalMechanisms to the ``FOCMECH`` group to trigger processing by specialized
applications, e.g., graphical user interfaces for strong motion analysis or
tsunami risk assessment.

 group to trigger processing by specialized

We don't route events at all. With the help of :ref:`scevent` locations are
either associated to existing events or will create new events with local
settings.

 locations are
settings.

We don't route StationMagnitudes and Magnitude to the ``MAGNITDUE`` group
because :ref:`scmag` subscribes to ``LOCATION`` and ``MAGNITUDE``. Separated
groups might lead to duplicated magnitude types in case a manual magnitude
solution is imported. In this case the foreign Origin with its Magnitudes would
be split into at least two messages, the first one containing the Origin, the
second one the Magnitude. The Origin message immediately triggers magnitude
calculation, potentially for a magnitude type which is received with the second
message.

. Separated
message.

The default routing table is set as given in :confval:`host.$name.routingTable`.

In addition to the local object filter the user may choose to accept only those
objects originating from a set of trusted agencies. If at least one agency is
defined in the ``processing.whitelist.agencies`` or
``processing.blacklist.agencies`` configuration option, then the
``creationInfo.agencyID`` of amplitudes, arrivals, comments, events, focal
mechanisms, magnitudes, moment tensors, origins, picks and station magnitudes is
evaluated. Objects with unmatched or unset agency information are filtered out.
If objects with unset agency ID should match, then empty string ``""`` has to be
added to the white list.

defined in the 

 of amplitudes, arrivals, comments, events, focal
If objects with unset agency ID should match, then empty string 

The agency filter is applied on remote as well as local objects. In this way
remote objects may be excluded from import and local objects my be protected
from overriding or removing. Also the filter is applied recursively. If parent
object (e.g., an origin) is filtered out, all of its children (e.g., magnitudes)
are also skipped even if they carry a different agency ID.

The agency white list filter might be essential to avoid circular event
updates between cross-connected SeisComP systems.

In addition to the :ref:`agency filter<agency_filter>` incoming or local objects
can be skipped by checking their publicID prefix. It behaves similar to the
:ref:`agency filter<agency_filter>` but checks the ``publicID`` attribute rather
than the ``creationInfo.agencyID`` attribute.
Prefixes can be configure as white- or blacklist with
``processing.whitelist.publicIDs = ...`` and
``processing.blacklist.publicIDs = ...``.

 incoming or local objects

 attribute.

Each event update received from a QuakeLink host is parsed and analyzed for
differences to the local database. The comparison starts at the level of the
top-level elements in the following order: picks, amplitudes, origins, focal
mechanisms, events.

For each top-level element the object tree is traversed in a depth-first search
order. Objects on the same level are processed in the order of their appearance.
The differences are collected as a list of notifier objects with the following
operation types:

The ``ADD`` and ``REMOVE`` operation always generates notifies of the same type
for all children of the current object. ``ADD`` notifiers are collected top-down,
``REMOVE`` notifiers are collected bottom-up.

 operation always generates notifies of the same type
for all children of the current object. 

Because the order of child objects is arbitrary, e.g., the arrivals of an origin,
each object on the remote side has to be found in the set of local objects. For
public objects (e.g., origins, magnitudes, magnitudes..), the ``publicID``
property is used for comparison. All other objects are compared by looking at
their index properties. For e.g., arrivals this is the ``pickID`` property, for
comments the ``id`` property.

public objects (e.g., origins, magnitudes, magnitudes..), the 

their index properties. For e.g., arrivals this is the 

Ones all notifiers are collected they are send to the local messaging system.
For performance reasons and because of the processing logic of listening |scname|
modules ql2sc tries to batch as many notifiers as possible into one notifier
message. A separate notifier message is created if the target message group
changes between successive notifiers or if the configurable :confval:`batchSize`
limit is reached.

For performance reasons and because of the processing logic of listening 

changes between successive notifiers or if the configurable 

Care must be taken when configuring the ``batchSize`` limit. If the value
is to big the overall message size limit (default: 1MB) may be exceeded
resulting in an undeliverable message. On the other hand a much to small
value will create unwanted results in the |scname| processing chain. If for
instance picks are routed to the ``PICK`` group and the pick set is split
into several notifier messages the local :ref:`scautoloc` might create
locations based on an incomplete dataset.

 limit. If the value
value will create unwanted results in the 

 group and the pick set is split
into several notifier messages the local 

It might be desirable to synchronize event attributes set at the source with
the local system. In particular the event type, the type uncertainty, event
descriptions and comments might be of interest. Because it is not advisable
to route events and let :ref:`scevent` associate imported origins it can
happen that the imported event ID is different from the event ID of the local
system. The input host configuration parameter :confval:`syncEventAttributes`
controls that behaviour. It is set to true by default which means that imported
event attributes are going to be imported as well. ql2sc does not update
directly the attributes but commandates scevent in as many cases as possible
to do so. To find the matching local event it takes the first occurrence which
has associated the currently imported preferred origin.

to route events and let 

 associate imported origins it can
system. The input host configuration parameter 

There are limitations to this process to avoid infinite loops when cross
connecting two systems. Prior to sending the commands to scevent to change a
particular attribute ql2sc checks if that attribute has been set already by
another module (via JournalEntry database table). If not, then ql2sc is allowed
to request an attribute change otherwise not. To illustrate the issue take the
following example:

scolv connected to system ``A`` changes the event type to 'earthquake'. ql2sc
of system ``B`` checks if the event type of the local event has been changed
already which is not the case and it requests that change. System ``A``
changes the event type again to 'unset'. ql2sc of system ``B`` notices that
someone has already changed the event type and it was ql2sc itself. It requests
again a change.

 checks if the event type of the local event has been changed
already which is not the case and it requests that change. System 

 notices that

scolv connected to system ``B`` changes the event type to 'earthquake' again.
ql2sc of system ``A`` notices that ``scolv@A`` has already changed the
event type and ignores the request.

That simple case would not create an infinite loop even if ``ql2sc@A`` would
accept the last change. The situation changes immediately if two subsequent
attribute changes are being received by ``ql2sc@B`` while both of them are
already applied on system ``A``. ``ql2sc@B`` would "restore" the old state due
to the first received update and then apply the "final" state due to the
second update. Each update triggers again an update at system ``A`` and the
states start flapping. Without the described check there wouldn't be a well
defined exit condition.

 would
attribute changes are being received by 

 would “restore” the old state due
to the first received update and then apply the “final” state due to the
second update. Each update triggers again an update at system 

 and the
states start flapping. Without the described check there wouldn’t be a well

Specific combinations of remote and local object filters may result in the loss
of data. If for instance origins are imported from system ``A`` to ``B`` and
additional magnitudes for the received origins are calculated on ``B``, care must
be taken. Without protection a new event update containing the same origin will
``REMOVE`` all newly calculated magnitudes on ``B`` since they are not included
in the magnitude set sent by ``A``.

of data. If for instance origins are imported from system 

 and
additional magnitudes for the received origins are calculated on 

, care must

To avoid losing these local magnitudes one may decide to block magnitudes from
import by routing them to ``NULL``. If magnitudes from ``A`` and from ``B``
should be available, an :ref:`agency filter<agency_filter>` or
:ref:`publicID filter<publicID_filter>` may be defined.

import by routing them to 

Make sure ``A`` and ``B`` use either distinct agency IDs or distinct publicID
patterns and add the agency ID of ``B`` to ``processing.blacklist.agencies`` or
the publicID prefix of ``B`` to ``processing.blacklist.publicIDs``.

 use either distinct agency IDs or distinct publicID
patterns and add the agency ID of 

Maximum number of notifiers to batch in one message. If set
to 0 no size limit is enforced. Make sure to not hit the
overall message size limited of 16MiB which is enforced by
the messaging system.

If event synchronisation is enabled and an incoming origin
is not yet associated with an event on the target machine,
then this timeout defines the maximum number of seconds to
wait for an association.

Registration of the host profiles defining the connection
parameters to the QuakeLink hosts.

**host.\***
*Definition of host profiles. For each host profile a connection*
*to one QuakeLink server can established. The profiles must be registered*
*in 'hosts' to apply them.*

to one QuakeLink server can established. The profiles must be registered

**host.$name.\***
*Provide the connection parameters to one QuakeLink server.*
$name is a placeholder for the name to be used and needs to be added to :confval:`hosts` to become active.

   hosts = a,b
   host.a.value1 = ...
   host.b.value1 = ...
   # to the list of hosts
   host.c.value1 = ...

hosts = a,b
host.a.value1 = ...
host.b.value1 = ...
# to the list of hosts
host.c.value1 = ...

If set to an empty string the application will run without any QuakeLink connection attempt.

Request native data instead of XML format.
Native data export may be disabled on some hosts.

Try to update the event attributes of the target event
with the attributes of the source event which includes
event type and event certainty. It will not import
events but tries to find the associated event of the
input preferred origin at the target system and will
update the event attributes via journaling.

Synchronize the preferred origin and preferred
magnitude selection if different from the imported
selection. ql2sc will wait for the event association
of an imported origin and check if the preferred origin
or preferred magnitude is different from the imported
Quakelink event. If so it will send a journal to
force selection of the preferred origin and selection
of the preferred magnitude type. These are the same
operations as within scolv to fix an origin and
a particular magnitude type.

Delays the synchronization of event attributes in seconds
if set to a value greater than zero.

Request server to send keep alive message every 30s to
prevent connection reset by firewalls on long idle
periods. If activated the client will reset the
connection if no alive message is received within 60s.

clause    :\= condition[ AND\|OR [\(]clause[\)]] __
condition :\= MAG\|DEPTH\|LAT\|LON\|PHASES\|OTIME\|UPDATED [op float\|time]\|[IS [NOT] NULL] __
op        :\= \=\|>\|>\=\|<\|<\=\|eq\|gt\|ge\|lt\|ge __
time      :\= %Y,%m,%d[,%H,%M,%S,%f]

Map datamodel class names to messaging groups. For unmapped objects
the mapping of their parent objects is evaluated recursively. Objects
may be excluded by mapping them to 'NULL'.

may be excluded by mapping them to ‘NULL’.

**host.$name.data.\***
*Specify the XML components to fetch.*
*Note: These options are not used if 'native' data is requested.*

Defines a blacklist of publicID prefixes that are
not allowed for processing. Separate items by comma.

Defines a whitelist of publicID prefixes that are
allowed for processing. Separate items by comma.

This module executes custom scripts upon arrival of objects or updates.
It provides as template for custom modification and is not a replacement for :ref:`scvoice`.

It provides as template for custom modification and is not a replacement for 

People started modifying :ref:`scvoice` to send emails or
other alert messages. Then, the name *scvoice* is then just wrong.
If you want to customize :ref:`scvoice`, use scalert instead.

List of agency IDs to consider picks and origins. The agency ID
is extracted from the pick or the preferred origin of the event
and compared with the configured IDs.

List of authors to consider picks and origins. The author
and compared with the configured authors.
empty list \(\=\"\"\): all authors are allowed

The default message string for the event\-script is
\"earthquake, [HOURS] hours [MINS] minutes ago, [DESC],
magnitude [MAG], depth [DEP] kilometers\" whereas [DESC]
is the string given in the event.description attribute. This
string can be overwritten using one of the following options.
There are three placeholders that can be used: \@region\@,
\@dist\@ and \@poi\@.
Example: \"\@region\@, \@dist\@ kilometers from \@poi\@
away\".

When using the nearest point of interest \(city\) as part of
the message string, specify the maximum distance in degrees
from the event. Any point of interest farther away will be
ignored.

The script to be called when a pick
arrives. Network\-, station code, pick publicID are passed
as parameters \$1, \$2, \$3.

The script to be called when an amplitude
arrives. Network\-, station code, amplitude and amplitude
public ID are passed as parameters \$1, \$2, \$3, \$4.

The script to be called when a preliminary
origin arrives. Latitude and longitude are passed as
parameters \$1 and \$2.

The script to be called when an event has been
declared. The message string, a flag \(1\=new event,
0\=update event\), the EventID, the arrival count and the
magnitude \(optional when set\) are passed as parameters
\$1, \$2, \$3, \$4 and \$5.

Start the pick script only when the phaseHint of the
received pick has one of the value\(s\).

Start the pick script only when the stream \(NET.STA.LOC.CHA\)
of the received pick belongs to the list of stream IDs. If empty,
all picks are accepted, otherwise only the ones whose stream ID
matches one of the entry of this comma separated list. Each entry
must follow the NET.STA.LOC.CHA format, but the special
characters ? \* \| \( \) are also accepeted.
E.g. \"CH.\*,GR.STA??.\*,\*.\*.\*.HH?,\*.\*.\*.??\(Z\|1\)\"

Start the pick script only when a minimum number of phases
'phaseNumber' is received within 'phaseInterval'.

‘phaseNumber’ is received within ‘phaseInterval’.

Specify event ID that is used for testing. After running the
alert scripts scvoice will exit.

**Calculates amplitudes on basis of incoming origins and the associated picks.**

Calculates amplitudes on basis of incoming origins and the associated picks.

scamp measures several different kinds of amplitudes from waveform data.
It listens for origins and measures amplitudes in time windows determined
from the origin. Thus, in contrast to amplitudes measured by :ref:`scautopick`
the considered time windows can depend on epicentral distance.
The resulting amplitude objects are sent to the "AMPLITUDE"
messaging group. scamp is the counterpart of :ref:`scmag`. Usually, all
amplitudes are computed at once by scamp and then published.
Only very rarely an amplitude needs to be recomputed if the location of an
origin changes significantly. The amplitude can be reused by :ref:`scmag`, making
magnitude computation and update efficient. Currently, the automatic picker
in SeisComP, scautopick, also measures a small set of amplitudes
(namely "snr" and "mb", the signal-to-noise ratio and the amplitude used in
mb magnitude computation, respectively) for each automatic pick in fixed
time windows. If there already exists an amplitude, e.g. a previously determined
one by scautopick, scamp will not measure it again for the respective stream.

from the origin. Thus, in contrast to amplitudes measured by 

The resulting amplitude objects are sent to the “AMPLITUDE”
messaging group. scamp is the counterpart of 

. Usually, all
origin changes significantly. The amplitude can be reused by 

, making
(namely “snr” and “mb”, the signal-to-noise ratio and the amplitude used in

Amplitudes are also needed, however, for manual picks. scamp does this as well.
Arrivals with weight smaller than 0.5 (default) in the corresponding Origin are
discarded. This minimum weight can be configured with
:confval:`amptool.minimumPickWeight`.

Amplitudes of many types are currently computed for their corresponding
magnitudes.

In order to be used by scmag, the input amplitude names for the
various magnitude types must typically match exactly. Exceptions:

* :term:`MN <magnitude, Nuttli (MN)>` requires *AMN* amplitudes,
* :term:`MLr <magnitude, local GNS/GEONET (MLr)>` requires *MLv* amplitudes.

:term:`MLr <magnitude, local GNS/GEONET (MLr)>` requires *MLv* amplitudes.

:term:`Md <magnitude, duration (Md)>`
Duration magnitude as described in HYPOINVERSE (:cite:t:`klein-2002`).

:term:`Mjma <magnitude, JMA (M_JMA)>`
Mjma is computed on displacement data using body waves of period < 30s.

:term:`ML <magnitude, local (ML)>`
Local (Richter) magnitude calculated on the horizontal components using a
correction term to fit with the standard ML (:cite:t:`richter-1935`).

correction term to fit with the standard ML (

:term:`MLc <magnitude, local custom (MLc)>`
Local custom magnitude calculated on the horizontal components according to
Hessian Earthquake Service and :cite:t:`stange-2006`

Hessian Earthquake Service and 

:term:`MLh <magnitude, local horizontal (MLh)>`
Local magnitude calculated on the horizontal components according to SED
specifications.

:term:`MLv <magnitude, local vertical (MLv)>`
Local magnitude calculated on the vertical component using a correction term
to fit with the standard ML.

AMN for :term:`MN <magnitude, Nuttli (MN)>`
Nuttli magnitude for Canada and other Cratonic regions (:cite:t:`nuttli-1973`).

:term:`mb <magnitude, body-wave (mb)>`
Narrow band body wave magnitude measured on a WWSSN-SP filtered trace

:term:`mBc <magnitude, cumulative body-wave (mBc)>`
Cumulative body wave magnitude

:term:`mB <magnitude, broadband body-wave (mB)>`
Broad band body wave magnitude after :cite:t:`bormann-2008`

:term:`Mwp <magnitude, broadband P-wave moment (Mwp)>`
The body wave magnitude of :cite:t:`tsuboi-1995`

:term:`Ms_20 <magnitude, surface wave (Ms_20)>`
Surface-wave magnitude at 20 s period

:term:`Ms(BB) <magnitude, broadband surface wave (Ms(BB))>`
Broad band surface-wave magnitude

For amplitudes to be computed, the input waveforms are usually given in velocity.
Acceleration data, e.g. from strong-motion instruments must therefore be transformed
to velocity. The transformation is enabled by activating the response correction.
Activate the correction in the global bindings for all
types or in a new Amplitude type profile for specific types.

Example global binding parameters for computing MLv amplitudes from accleration
data. Here, the frequency range is limited to 0.5 - 20 Hz: ::

data. Here, the frequency range is limited to 0.5 - 20 Hz:

amplitudes.MLv.enableResponses = true
amplitudes.MLv.resp.taper = 5
amplitudes.MLv.resp.minFreq = 0.5
amplitudes.MLv.resp.maxFreq = 20

*scamp* can be used to reprocess and to update amplitudes, e.g. when inventory paramters
had to be changed retrospectively. Updating ampitudes requires waveform access.
The update can be performed

 can be used to reprocess and to update amplitudes, e.g. when inventory paramters

In **offline processing** based on XML files (:confval:`--ep`). :confval:`--reprocess<reprocess>`
will replace exisiting amplitudes. Updated values can be dispatched to the messing by
:ref:`scdispatch` making them available for further processing, e.g. by :ref:`scmag`.

**Example:**

   $ scamp --ep evtID.xml -d [type]://[host]/[database] --reprocess > evtID_update.xml
   $ scdispatch -O merge -H [host] -i evtID_update.xml

$ scamp --ep evtID.xml -d [type]://[host]/[database] --reprocess > evtID_update.xml
$ scdispatch -O merge -H [host] -i evtID_update.xml

**With messaging** by setting :confval:`start-time` or :confval:`end-time`.
All parameters are read from the database. :confval:`--commit<commit>` will
send the updated parameters to the messing system making them available for
further processing, e.g. by :ref:`scmag`. Otherwise, XML output is generated.

   $ scamp -u testuser -H [host] --commit \
           --start-time '2016-10-15 00:00:00' --end-time '2016-10-16 19:20:00'

 will
further processing, e.g. by 

$ scamp -u testuser -H [host] --commit \
        --start-time '2016-10-15 00:00:00' --end-time '2016-10-16 19:20:00'

Definition of magnitude types for which amplitudes are to be calculated.

The minimum arrival weight within an origin to compute amplitudes for the associated pick.

If enabled then global bindings will be used to replace
location code and channel code of a pick with the configured
values of detecLocid and detecStream for amplitude computation.

Timeout in seconds of the first data packet of waveform data acquisition.

Timeout in seconds of any subsequent data packet of waveform data acquisition.

Defines an event parameters XML file to be read and processed. This
implies offline mode and only processes all origins contained
in that file. It computes amplitudes for all picks associated
with an origin and outputs an XML file that additionally
contains the amplitudes.

Force measuring amplitudes for picks only. Origins are
ignored and time windows are independent of distance. Works
only in combination with \-\-ep.

Reprocess and update existing amplitudes. Manual amplitudes
will be skipped. Works only in combination with \-\-ep.
This option can be used, e.g., for reprocessing amplitudes
with new inventory information. Waveform access is required.

Send amplitude updates to the messaging otherwise an XML
document will be output.

scardac scans an :term:`SDS waveform archive <SDS>`, e.g.,
created by :ref:`slarchive` or :ref:`scart` for available
:term:`miniSEED <miniSeed>` data. It will collect information about

``DataExtents`` -- the earliest and latest times data is available
for a particular channel,

 – the earliest and latest times data is available

``DataAttributeExtents`` -- the earliest and latest times data is available
for a particular channel, quality and sampling rate combination,

``DataSegments`` -- continuous data segments sharing the same quality and
sampling rate attributes.

 – continuous data segments sharing the same quality and

scardac is intended to be executed periodically, e.g., as a cronjob.

The availability data information is stored in the SeisComP database under the
root element :ref:`DataAvailability <api-datamodel-python>`. Access to the
availability data is provided by the :ref:`fdsnws` module via the services:

root element 

:ref:`/fdsnws/station <sec-station>` (extent information only, see
``matchtimeseries`` and ``includeavailability`` request parameters).

:ref:`/fdsnws/ext/availability <sec-avail>` (extent and segment information
provided in different formats)

scardac can be extended by plugins to scan non-SDS archives. For example the
``daccaps`` plugin provided by :cite:t:`caps` allows scanning archives generated
by a CAPS server. Plugins are added to the global module configuration, e.g.:

 allows scanning archives generated

``Record`` -- continuous waveform data of same sampling rate and quality bound
by a start and end time. scardac will only read the record's meta data and not
the actual samples.

 – continuous waveform data of same sampling rate and quality bound
by a start and end time. scardac will only read the record’s meta data and not

``Chunk`` -- container for records, e.g., a :term:`miniSEED <miniSeed>` file,
with the following properties:

- overall, theoretical time range of records it may contain
- contains at least one record, otherwise it must be absent
- each record of a chunk must fulfill the following conditions:

  - `chunk start <= record start < chunk end`
  - `chunk start < record end < next chunk end`
- chunks do not overlap, end time of current chunk equals start time of
  successive chunk, otherwise a ``chunk gap`` is declared
- records may occur unordered within a chunk or across chunk boundaries,
  resulting in `DataSegments` marked as ``outOfOrder``

each record of a chunk must fulfill the following conditions:

- `chunk start <= record start < chunk end`
- `chunk start < record end < next chunk end`

chunks do not overlap, end time of current chunk equals start time of
successive chunk, otherwise a ``chunk gap`` is declared

successive chunk, otherwise a 

records may occur unordered within a chunk or across chunk boundaries,
resulting in `DataSegments` marked as ``outOfOrder``

resulting in 

``Jitter`` -- maximum allowed deviation between the end time of the current
record and the start time of the next record in multiples of the current's
record sampling rate. E.g., assuming a sampling rate of 100Hz and a jitter
of 0.5 will allow for a maximum end to start time difference of 50ms. If
exceeded a new `DataSegment` is created.

 – maximum allowed deviation between the end time of the current
record and the start time of the next record in multiples of the current’s
exceeded a new 

``Mtime`` -- time the content of a chunk was last modified. It is used to

- decided whether a chunk needs to be read in a secondary application run
- calculate the ``updated`` time stamp of a `DataSegment`,
  `DataAttributeExtent` and `DataExtent`

decided whether a chunk needs to be read in a secondary application run

calculate the ``updated`` time stamp of a `DataSegment`,
`DataAttributeExtent` and `DataExtent`

``Scan window`` -- time window limiting the synchronization of the archive
with the database configured via :confval:`filter.time.start` and
:confval:`filter.time.end` respectively :option:`--start` and :option:`--end`.
The scan window is useful to

- reduce the scan time of larger archives. Depending on the size and storage
  type of the archive it may take some time to just list available chunks and
  their mtime.
- prevent deletion of availability information even though parts of the
  archive have been deleted or moved to a different location

 – time window limiting the synchronization of the archive
with the database configured via 

reduce the scan time of larger archives. Depending on the size and storage
type of the archive it may take some time to just list available chunks and
their mtime.

prevent deletion of availability information even though parts of the
archive have been deleted or moved to a different location

``Modification window`` -- the mtime of a chunk is compared with this time
window to decide whether it needs to be read or not. It is configured via
:confval:`mtime.start` and :confval:`mtime.end` repectively
:option:`--modified-since` and :option:`--modified-until`. If no lower bound
is defined then the ``lastScan`` time stored in the `DataExtent` is used
instead.  The mtime check may be disabled using :confval:`mtime.ignore` or
:option:`--deep-scan`.
**Note:** Chunks in front or right after a chunk gap are read in any case
regardless of the mtime settings.

 – the mtime of a chunk is compared with this time

 Chunks in front or right after a chunk gap are read in any case

Collect a list of available stream IDs either by

* scanning the archive for available IDs or
* reading an ID file defined by :confval:`nslcFile`.

Identify extents to add, update or remove respecting `scan window`,
:confval:`filter.nslc.include` and :confval:`filter.nslc.exclude`.

Subsequently process the `DataExtents` using :confval:`threads` number of
parallel threads. For each `DataExtent`:

#. Collect all available chunks within `scan window`.
#. If the `DataExtent` is new (no database entry yet), store a new and
   empty `DataExtent` to database, else query existing `DataSegments` from
   the database:

   * count segments outside `scan window`
   * create a database iterator for extents within `scan window`
#. Create two in-memory segment lists which collect segments to remove and
   segments to add/update
#. For each chunk

   * determine the `chunk window` and `mtime`
   * decide whether the chunk needs to be read depending on the `mtime`
     and a possible `chunk gap`. If necessary, read the chunk and

     - create chunk segments by analyzing the chunk records for
       gaps/overlaps defined by :confval:`jitter`, sampling rate or quality
       changes
     - merge chunk segments with database segments and update the in-memory
       segment lists.

     If not necessary, advance the database segment iterator to the end
     of the chunk window.

#. Remove and then add/update the collected segments.
#. Merge segment information into `DataAttributeExtents`
#. Merge `DataAttributeExtents` into overall `DataExtent`

If the `DataExtent` is new (no database entry yet), store a new and
empty `DataExtent` to database, else query existing `DataSegments` from
the database:

* count segments outside `scan window`
* create a database iterator for extents within `scan window`

Create two in-memory segment lists which collect segments to remove and
segments to add/update

For each chunk

* determine the `chunk window` and `mtime`
* decide whether the chunk needs to be read depending on the `mtime`
  and a possible `chunk gap`. If necessary, read the chunk and

  - create chunk segments by analyzing the chunk records for
    gaps/overlaps defined by :confval:`jitter`, sampling rate or quality
    changes
  - merge chunk segments with database segments and update the in-memory
    segment lists.

  If not necessary, advance the database segment iterator to the end
  of the chunk window.

decide whether the chunk needs to be read depending on the `mtime`
and a possible `chunk gap`. If necessary, read the chunk and

- create chunk segments by analyzing the chunk records for
  gaps/overlaps defined by :confval:`jitter`, sampling rate or quality
  changes
- merge chunk segments with database segments and update the in-memory
  segment lists.

If not necessary, advance the database segment iterator to the end
of the chunk window.

create chunk segments by analyzing the chunk records for
gaps/overlaps defined by :confval:`jitter`, sampling rate or quality
changes

gaps/overlaps defined by 

merge chunk segments with database segments and update the in-memory
segment lists.

Get command line help or execute scardac with default parameters and informative
debug output:

   scardac -h
   scardac --debug

Synchronize the availability of waveform data files existing in the standard
:term:`SDS` archive with the seiscomp database and create an XML file using
:ref:`scxmldump`:

   scardac -d mysql://sysop:sysop@localhost/seiscomp -a $SEISCOMP_ROOT/var/lib/archive --debug
   scxmldump -Yf -d mysql://sysop:sysop@localhost/seiscomp -o availability.xml

 archive with the seiscomp database and create an XML file using

scardac -d mysql://sysop:sysop@localhost/seiscomp -a $SEISCOMP_ROOT/var/lib/archive --debug
scxmldump -Yf -d mysql://sysop:sysop@localhost/seiscomp -o availability.xml

:term:`SDS` archive with the seiscomp database. Use :ref:`fdsnws` to fetch a flat file containing a list
of periods of available data from stations of the CX network sharing the same
quality and sampling rate attributes:

   scardac -d mysql://sysop:sysop@localhost/seiscomp -a $SEISCOMP_ROOT/var/lib/archive
   wget -O availability.txt 'http://localhost:8080/fdsnws/ext/availability/1/query?network=CX'

.. note::

   The |scname| module :ref:`fdsnws` must be running for executing this
   example.

 to fetch a flat file containing a list

scardac -d mysql://sysop:sysop@localhost/seiscomp -a $SEISCOMP_ROOT/var/lib/archive
wget -O availability.txt 'http://localhost:8080/fdsnws/ext/availability/1/query?network=CX'

The |scname| module :ref:`fdsnws` must be running for executing this
example.

\"service\": The type of the archive. If not given,
\"sds:\/\/\" is implied assuming an SDS archive. The SDS
archive structure is defined as
YEAR\/NET\/STA\/CHA\/NET.STA.LOC.CHA.YEAR.DAYFYEAR, e.g.
2018\/GE\/APE\/BHZ.D\/GE.APE..BHZ.D.2018.125

Acceptable derivation of end time and start time of successive
records in multiples of sample time.

Maximum number of segments per stream. If the limit is reached
no more segments are added to the database and the corresponding
extent is flagged as too fragmented. Set this parameter to 0 to
disable any limits.

Line\-based text file of form NET.STA.LOC.CHA defining available
stream IDs. Depending on the archive type, size and storage
media used this file may offer a significant performance
improvement compared to collecting the available streams on each
startup. Filters defined under `filter.nslc` still apply.

Line-based text file of form NET.STA.LOC.CHA defining available
startup. Filters defined under 

**filter.\***
*Parameters of this section limit the data processing to either*
**
*reduce the scan time of larger archives or to*
**
*prevent deletion of availability information even though parts*
*of the archive have been deleted or moved to a different*
*location.*

Start of data availability check given as date string or
as number of days before now.

End of data availability check given as date string or

Comma\-separated list of stream IDs to process. If
empty all streams are accepted unless an exclude filter
is defined. The following wildcards are supported: '\*'
and '?'.

Comma\-separated list of stream IDs to exclude from
processing. Excludes take precedence over includes. The
following wildcards are supported: '\*' and '?'.

**mtime.\***
*Parameters of this section control the rescan of data chunks.*
*By default the last update time of the extent is compared with*
*the record file modification time to read only files modified*
*since the list run.*

If set to true all data chunks are read independent of their
mtime.

Only read chunks modified after specific date given as date
string or as number of days before now.

Only read chunks modified before specific date given as date

Overrides configuration parameter :confval:`filter.nslc.include`.

Overrides configuration parameter :confval:`filter.nslc.exclude`.

Do not scan the archive but generate test data for each
stream in the inventory. Format:
days,gaps,gapslen,overlaps,overlaplen. E.g., the following
parameter list would generate test data for 100 days
\(starting from now\(\)\-100\) which includes 150 gaps with a
length of 2.5s followed by 50 overlaps with an overlap of
5s: \-\-generate\-test\-data\=100,150,2.5,50,5

The archive tool scart reads and writes :term:`SDS` archives and files
in miniSEED format and checks miniSEED archives or prints stream information.

 archives and files

**Dump mode:** Create miniSEED files (multiplexed), e.g. for playbacks, from
:term:`SDS` structured data (e.g. created by slarchive).

**Dump mode:** Play back records directly out of an SDS structure.

**Import mode:** Import multiplexed miniSEED files into a local SDS waveform
archive.

 Import multiplexed miniSEED files into a local SDS waveform
archive.

**Import mode:** Import data using the :ref:`global_recordstream` interface
into a local SDS waveform archive.

**Import mode:** Read data from any :ref:`global_recordstream` interface
and dump it to file.

**Check mode:** Check an archive of miniSEED files for out-of-order records in
files.

files.

 Check an archive of miniSEED files for out-of-order records in
files.

* When creating :term:`SDS` archives, scart simply appends the new records to
  existing ones. Multiple imports of the same data result in duplication.
* Out-of-order imports of waveforms into a SDS archive result in out-of-order
  records which may not be processed. Clean your archive using :ref:`scmssort`.
* **Before importing miniSEED data** into an SDS archive they must be sorted
  by time and duplicate records must be removed. Otherwise, the SDS archive
  may not be correctly readable by other modules. Therefore, combine scart
  with :ref:`scmssort` for multiplexing and removal of duplicates.

When creating :term:`SDS` archives, scart simply appends the new records to
existing ones. Multiple imports of the same data result in duplication.

 archives, scart simply appends the new records to

Out-of-order imports of waveforms into a SDS archive result in out-of-order
records which may not be processed. Clean your archive using :ref:`scmssort`.

records which may not be processed. Clean your archive using 

**Before importing miniSEED data** into an SDS archive they must be sorted
by time and duplicate records must be removed. Otherwise, the SDS archive
may not be correctly readable by other modules. Therefore, combine scart
with :ref:`scmssort` for multiplexing and removal of duplicates.

 into an SDS archive they must be sorted
with 

In dump and import mode output streams may be filtered by

* Time windows (:option:`-t`),
* Network-station-location-channel (NSLC) lists (:option:`--nslc`) created,
  e.g., with

  * :ref:`scinv` from inventories,
  * :ref:`scdumpcfg` from bindings configuration,
  * scart itself from other miniSEED files or achives.

In dump mode output streams may also be filtered by

* Time window - stream lists (:option:`--list`, dump mode) generated by
  :ref:`scevtstreams` for particular events.

Time strings may be given in
* ISO time format, e.g., 2023-03-28T15:48:00
* or the 'old' SeisComP time format with empty character between date and time, e.g.,
'2023-03-28 15:48:00'.

When omitting seconds, minutes or hours values of zero are implied.

Network-station-location-channel (NSLC) lists (:option:`--nslc`) created,
e.g., with

* :ref:`scinv` from inventories,
* :ref:`scdumpcfg` from bindings configuration,
* scart itself from other miniSEED files or achives.

e.g., with

Time window - stream lists (:option:`--list`, dump mode) generated by
:ref:`scevtstreams` for particular events.

* or the ‘old’ SeisComP time format with empty character between date and time, e.g.,
‘2023-03-28 15:48:00’.

scart can make use of :ref:`global_recordstream` implementations which are
provided by additional plugins. For loading additional plugins, e.g. the *xyz*
plugin create and configure :file:`scart.cfg`:

 implementations which are
provided by additional plugins. For loading additional plugins, e.g. the 

The usage of wildcards in place of network, station, location or channel code
is allowed in many options (:option:`-n`, :option:`-c`, :option:`-l`,
:option:`--list`, :option:`--nslc`) and follows these rules:

* Import mode: the wildcards are passed to the :ref:`global_recordstream` interface,
  that interprets them. Normally both "*" and "?" are supported by RecordStreams.
* Dump mode: the wildcards are interpreted by scart command that supports "*" for
  network, station, location codes and "*", "?", "(", ")", "|" for channel code.

is allowed in many options (

Import mode: the wildcards are passed to the :ref:`global_recordstream` interface,
that interprets them. Normally both "*" and "?" are supported by RecordStreams.

 interface,
that interprets them. Normally both “*” and “?” are supported by RecordStreams.

Dump mode: the wildcards are interpreted by scart command that supports "*" for
network, station, location codes and "*", "?", "(", ")", "|" for channel code.

Dump mode: the wildcards are interpreted by scart command that supports “*” for
network, station, location codes and “*”, “?”, “(”, “)”, “|” for channel code.

Extract data from the default :term:`SDS` archive in :file:`$SEISCOMP_ROOT/var/lib/archive`
or from a local :term:`SDS` archive [SDS archive] into a miniSEED file :file:`file.mseed`
and sort by end time of the records:

   scart -dsvE -t '[start-time]~[end-time]' [SDS archive] > [file.mseed]
   scart -dsvE -t '[start-time]~[end-time]' > file.mseed
   scart -dsvE -t '[start-time]~[end-time]' -n '[NET1],[NET2]' > file.mseed
   scart -dsvE -t '[start-time]~[end-time]' -n '[NET]' -c '(E,H)H(1,2,3)' > file.mseed
   scart -dsvE -t '[start-time]~[end-time]' -n '[N1.S1.L1.C1],[N2.S2.L2.C2]' > file.mseed
   scart -dsvE -t '[start-time]~[end-time]' --nslc list.file > file.mseed
   scart -dsvE -t --list list.file > file.mseed

It is possible to achieve the same result of the dump mode using a
combination of the input mode and the :ref:`scmssort` command, which allows
to read the input data from any supported :ref:`global_recordstream`,
not only an SDS archive:

   scart -I [record-stream] --list list.file --stdout | scmssort -u -E -v > file.mseed

.. note::

   Sorting data is computational expensive but required for waveform playbacks.

scart -dsvE -t '[start-time]~[end-time]' [SDS archive] > [file.mseed]
scart -dsvE -t '[start-time]~[end-time]' > file.mseed
scart -dsvE -t '[start-time]~[end-time]' -n '[NET1],[NET2]' > file.mseed
scart -dsvE -t '[start-time]~[end-time]' -n '[NET]' -c '(E,H)H(1,2,3)' > file.mseed
scart -dsvE -t '[start-time]~[end-time]' -n '[N1.S1.L1.C1],[N2.S2.L2.C2]' > file.mseed
scart -dsvE -t '[start-time]~[end-time]' --nslc list.file > file.mseed
scart -dsvE -t --list list.file > file.mseed

combination of the input mode and the 

 command, which allows
to read the input data from any supported 

scart -I [record-stream] --list list.file --stdout | scmssort -u -E -v > file.mseed

Sorting data is computational expensive but required for waveform playbacks.

Push miniSEED data from file :file:`file.mseed` or standard input
(stdin) into a local :term:`SDS` archive or a file. Additionally, you may
check if the records of archived files are correctly ordered, filter by time
and/or with NSLC list and print the output streams:

   scmssort -u -E [file.mseed] > sorted.mseed
   scart -I sorted.mseed --with-filecheck [SDS archive]

   scart -I [file.mseed] -t '[start-time]~[end-time]' --print-streams --nslc list.file -o [out.mseed]

   cat sorted.mseed | scart -I - [SDS archive]
   cat sorted.mseed | scart [SDS archive]

 archive or a file. Additionally, you may

scmssort -u -E [file.mseed] > sorted.mseed
scart -I sorted.mseed --with-filecheck [SDS archive]

scart -I [file.mseed] -t '[start-time]~[end-time]' --print-streams --nslc list.file -o [out.mseed]

cat sorted.mseed | scart -I - [SDS archive]
cat sorted.mseed | scart [SDS archive]

Collect data using the :ref:`global_recordstream` interface (e.g. FDSNWS server)
and write to a miniSEED file or import it into a local :term:`SDS` archive. The
data streams and the time spans can be defined in several ways. The data streams
(:option:`--list`) can be automatically generated, e.g., by :ref:`scevtstreams`.

   scart -I fdsnws://[server]:80 --list list.file [SDS archive]
   scart -I fdsnws://[server]:80 --list list.file -o file.mseed
   scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' --nslc list.file [SDS archive]
   scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[NET1],[NET2]' [SDS archive]
   scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[NET]' -c 'EH?' [SDS archive]
   scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[N1.S1.L1.C1],[N2.S2.L2.C2]' [SDS archive]

 interface (e.g. FDSNWS server)
and write to a miniSEED file or import it into a local 

 archive. The
(

scart -I fdsnws://[server]:80 --list list.file [SDS archive]
scart -I fdsnws://[server]:80 --list list.file -o file.mseed
scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' --nslc list.file [SDS archive]
scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[NET1],[NET2]' [SDS archive]
scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[NET]' -c 'EH?' [SDS archive]
scart -I fdsnws://[server]:80 -t '[start-time]~[end-time]' -n '[N1.S1.L1.C1],[N2.S2.L2.C2]' [SDS archive]

Check all files of an SDS archive or other directory structure for
miniSEED files with out-of-order records:

   scart --check [archive]

Print stream information from miniSEED files in archives or from
:term:`RecordStream` without actually writing miniSEED data. In dump and
import mode use the :option:`--test` if miniSEED data shall be read but not
written.

   scart --print-streams -I [miniSEED file] --test
   scart --print-streams -d -t [time span] --test [SDS archive]
   scart --print-streams --check [archive]

The output looks like this:

   # streamID       start                       end                         records samples samplingRate
   GE.RGN..BHZ      2022-12-08T15:34:41.895Z    2022-12-08T15:52:19.145Z    58 21145 20.0

where the header and the text body are printed to stderr.

written.

 without actually writing miniSEED data. In dump and
import mode use the 

scart --print-streams -I [miniSEED file] --test
scart --print-streams -d -t [time span] --test [SDS archive]
scart --print-streams --check [archive]

# streamID       start                       end                         records samples samplingRate
GE.RGN..BHZ      2022-12-08T15:34:41.895Z    2022-12-08T15:52:19.145Z    58 21145 20.0

The last option has to be the archive directory when dump mode is enabled.
When no archive directory is explicitly given,
\$SEISCOMP_ROOT\/var\/lib\/archive or the current directory
is used depending on whether \$SEISCOMP_ROOT has been set or not.
The default operation mode is import. That means that a multiplexed
MiniSEED file or another record source such as ArcLink is used to import
records into a SDS structure.

Check mode. Check all files
in the given directory for erroneous miniSEED records.
All sub\-directories are included. If no directory is given,
the default SDS archive is scanned. Checks are only complete
for files containing exactly one stream. More complete checks
are made with scmssort.

All sub-directories are included. If no directory is given,

Set export \(dump\) mode. Records are retrieved from an archive and
written to standard output.

Import mode \(default\): Specify the recordstream URL to read
the data from for archiving. When using any other
recordstream than file, a stream list file is needed.
Specifying \- implies file:\/\/\- \(stdin\). If no mode is
explicitly specified, \-I file:\/\/\- is assumed.

Channel filter to be applied to the data streams.
Default for Dump: \"\(B\|E\|H\|M\|S\)\(D\|H\|L\|N\)\(E\|F\|N\|Z\|1\|2\|3\)\"
Default for Import: \"\*\"

Dump mode: sort records according to their end time.
Default: start time.

Dump mode: Specify the number of file handles to cache.
Default: 100.

Import, dump mode: Use a stream list file with time windows instead
of defined networks and channels \(\-n, \-c and \-t are ignored\).
The list can be generated from events by scevtstreams. One
line per stream. Line format: starttime;endtime;streamID
The time format is the same as described in option '\-t'.

Dump mode: Modify the record time for real time playback.
The first record time is NOW. The relative time of
successive records to the first one are kept.

Import, dump mode: Data stream selection as a comma separated list
\"stream1,stream2,streamX\" where each stream can be NET or NET.STA
or NET.STA.LOC or NET.STA.LOC.CHA.
If CHA is omitted, it defaults to the value of \-c option.
Default: \"\*\"

Import, dump mode: Stream list file to be used instead of
defined networks and channels \(\-n and \-c are ignored\)
for filtering the data by the given streams. Dump mode:
Use in combination with \-t\! One line per stream, line
format: NET.STA.LOC.CHA

Import, dump mode: Rename stream data according to the provided
rule\(s\). A rule is \"[match\-stream:]rename\-stream\" and match\-stream
is optional. match\-stream and rename\-stream are in the
\"NET.STA.LOC.CHA\" format. match\-stream supports special
charactes \"?\" \"\*\" \"\|\" \"\(\" \"\)\". rename\-stream supports the
special character \"\-\" that can be used in place of NET, STA,
LOC, CHA codes with the meaning of not renaming those.
\"\-\" can also be used as the last character in CHA code.
Multiple rules can be provided as a comma separated list
or by providing multiple \-\-rename options.

Dump mode: Sort records by [start\-]time. To sort records by their
end time use \-E.

Dump mode: Specify the speed to dump the records. A value of 0 means
no delay otherwise speed is a multiplier of the real time difference
between the records. When feeding the records directly into the replay
pipe a value of 1 \(real time\) is recommended.

Import, dump mode: Specify the time window \(as one properly
quoted string\) to dump records for. Times are UTC and
separated by a tilde \"\~\". To dump one hour of
waveform data between 2008\/01\/01 00:00:00 and 2008\/01\/01
01:00:00 use
<\-t 2008\-01\-01T00:00:00\~2008\-01\-01T01:00:00>.

Dump, Import mode: Write data to given file instead of creating
a SDS archive. Deactivates \-\-stdout. Deactivated by \-\-test.

Print stream information only and exit. Works in import, dump
and check mode. Output: NET.STA.LOC.CHA StartTime EndTime.

Import mode: Write to stdout instead of creating a SDS archive.
Deactivated by \-\-test and \-\-output.

Test input only, deactivate all miniSEED output. This switch is
useful for debugging and printing stream information with
\-\-print\-streams.

Import mode: Check all accessed files. Unsorted or unreadable
files are reported to stderr. Checks are only complete
for files containing exactly one stream. More complete
checks are made with scmssort.

scautoloc is the |scname| program responsible for automatically locating
seismic events in near-real time from :term:`phase picks <pick>` considering
:term:`associated amplitudes <amplitude>`. It tries to identify combinations of
picks that correspond to a common seismic or non-seismic :term:`event`. The
picks are sent to :ref:`global_locsat` for locating. If the
produced location meets configurable consistency criteria, it is reported as an
:term:`origin` object , i.e. passed on to other programs that take the origins
as input. Phase picks and amplitudes are usually created by :ref:`scautopick`
but can also be provided by other means.

 program responsible for automatically locating
seismic events in near-real time from 

. It tries to identify combinations of
picks that correspond to a common seismic or non-seismic 

 for locating. If the

 object , i.e. passed on to other programs that take the origins
as input. Phase picks and amplitudes are usually created by 

scautoloc normally runs as a :ref:`daemon <sec-scautoloc-daemon-mode>`
continuously reading picks and amplitudes and processing them in real time. An
:ref:`offline mode <sec-scautoloc-offline-mode>` is available as well, e.g., for
playbacks on demand.

The procedure of scautoloc to identify and locate seismic events basically
consists of the following steps:

:program:`scautoloc` receives and filters :term:`phase picks <picks>` to
generate :term:`origins <origin>`. These phase picks are used by default if

**And** the evaluation mode is "automatic". The use of manual picks is
controlled by :confval:`autoloc.useManualPicks`.

 the evaluation mode is “automatic”. The use of manual picks is
controlled by 

**And** the evaluation status is not "rejected", can be overridden by
:option:`--allow-rejected-picks`,

**And** :confval:`autoloc.authors` is empty or the author of the pick is
listed in :confval:`autoloc.authors`

**And** the picks are :ref:`accompanied by amplitudes <sec-scautoloc-amplitudes>`
configured in :confval:`autoloc.amplTypeAbs`, :confval:`autoloc.amplTypeSNR`.

* The evaluation status of a picks can be set to 'rejected', e.g., by
  :ref:`scautopick` along with the configuration of :confval:`sendDetections`,
* The order of the author IDs in  :confval:`autoloc.authors` may determine
  the pick priority. This feature may be implemented in the future.

The evaluation status of a picks can be set to 'rejected', e.g., by
:ref:`scautopick` along with the configuration of :confval:`sendDetections`,

The evaluation status of a picks can be set to ‘rejected’, e.g., by

The order of the author IDs in  :confval:`autoloc.authors` may determine
the pick priority. This feature may be implemented in the future.

 may determine

Each incoming pick is checked if it is outdated and if the complete set of
:ref:`associated amplitudes <sec-scautoloc-amplitudes>` is present already. If
a station produces picks extremely often, these are considered to be more
likely glitches resulting in an increased :term:`SNR` threshold.

 is present already. If
likely glitches resulting in an increased 

The filtered picks are passed on to :ref:`association <sec-scautoloc-association>`
and :ref:`nucleation <sec-scautoloc-nucleation>`.

It is first attempted to associate an incoming pick with a known origin.
The association is limited to epicentral distances given by
:ref:`autoloc.maxStationDistance`.
Especially for large events with stable locations based on many picks already
associated, this is the preferred way to handle the pick. If the association
succeeds, the nucleation process can be bypassed. Under certain circumstances
picks are both associated and fed into the nucleator.

.

If direct association fails, scautoloc tries to make a new origin out of this
and other unassociated, previously received picks. This process is called
"nucleation". scautoloc performs a grid search over space and time, which is
a rather expensive procedure as it requires lots of resources both in terms
of CPU and RAM. Additional nucleation algorithms may become available in
future. The :ref:`spatial grid <sec-scautoloc-grid>` is a discrete set of
generally arbitrary points that sample the area of interest sufficiently densely.
The usability of a pick from a station for a grid point is controlled by the
:ref:`grid itself <sec-scautoloc-grid>` and the
:ref:`station configuration <sec-scautoloc-stations>`.

“nucleation”. scautoloc performs a grid search over space and time, which is
future. The 

 is a discrete set of

In the grid search, each of the grid points is taken as a hypothetical
hypocenter for all incoming
picks. Each incoming pick is back projected in time for each of the grid
points, on the assumption that it is a first-arrival "P" onset. If the pick
indeed corresponds to a "P" arrival of a seismic event, and if this event was
recorded at a sufficient number of stations, the back projected new pick will
cluster with previous picks from the same event. The cluster will be densest
around the origin time at the grid point closest to the hypocenter. In
principle, the grid could be so dense that the location obtained from the
grid search can be used directly. However, as RAM memory as well as CPU speed
is limited, this is not possible. Therefore, if a cluster is identified as a
potential origin, it does not necessarily mean that all contributing picks
actually correspond to "P" arrivals. It may as well be a coincidental match
caused by the coarseness of the grid or possible contamination by picked noise.
Therefore, the location program :ref:`LOCSAT<global_locsat>` is run in order to
try a location and test if the set of picks indeed forms a consistent hypocenter.
If the pick residual :term:`RMS` is too large, an improvement is attempted by
excluding each of
the contributing picks once to test if a reduction in RMS can be achieved.
If the new origin meets all requirements, it is accepted as new seismic event
location.

points, on the assumption that it is a first-arrival “P” onset. If the pick
indeed corresponds to a “P” arrival of a seismic event, and if this event was
actually correspond to “P” arrivals. It may as well be a coincidental match
Therefore, the location program 

 is run in order to
If the pick residual 

 is too large, an improvement is attempted by
location.

The grid points are specified in a text file configured in :confval:`autoloc.grid`.
The default file shipped with scautoloc defines a grid with global evenly
distributed points at the surface, and depth points confined to regions of
known deep seismicity. It may be modified, but should not comprise too many
grid points (>3000, depending on CPU speed and RAM).
:ref:`See below <sec-scautoloc-grid>` for more details about the grid file.

.

An origin produced or updated through association and/or nucleation may still
be contaminated by phases wrongly interpreted as "P" arrivals. scautoloc
tries to improve these origins based on e.g. pick SNR and amplitude. In this
processing step, it is also attempted to associate phases which slipped through
during the first association attempt, e.g. because the initial location was
incorrect. If the origin contains a sufficient number of arrivals to assume
a reasonably well location result, scautoloc additionally tries to associate
picks as secondary phases such as :term:`pP <pP phase>`. Such secondary phases
are only "weakly
associated", i.e. these phases are not used for the location. For the analyst,
however, it is useful to have possible “pP” phases predefined.

be contaminated by phases wrongly interpreted as “P” arrivals. scautoloc
picks as secondary phases such as 

. Such secondary phases
are only “weakly
associated”, i.e. these phases are not used for the location. For the analyst,

This process involves final consistency checks of new/updated origins etc.
During this procedure, the origins are not modified any more.

In the course of nucleation and association, as well as in the origin
refinement and filtering, certain heuristic criteria are applied to compare
the "qualities" of concurring origins. These criteria are combined in an
internal origin score, which is based on properties of the picks themselves
in the context of the respective origin. The configurable criteria which origins
must meet to be reported are:

the “qualities” of concurring origins. These criteria are combined in an

Minimum number of phases per origins: :confval:`autoloc.minPhaseCount`,

In addition, the amplitudes provide valuable means of comparing origin
qualities. Obviously, a pick with a high :term:`SNR` will less likely be a transient
burst of noise than a pick merely exceeding the SNR threshold. A high-SNR
pick thus increases the origin score. Similarly, a pick associated to a large
absolute amplitude is more likely to correspond to a real seismic onset,
especially in case of simultaneous, large-amplitude observations at neighboring
stations. A special case arises, when several nearby stations report amplitudes
above a certain “XXL threshold”. For details see the section
:ref:`Preliminary origins <sec-scautoloc-prelim-origins>`.
The amplitudes used by scautoloc are of type "snr" and "mb", corresponding
to the (relative, unit-less) SNR amplitude and the (absolute) "mb" amplitude,
respectively. These two amplitudes are provided by :ref:`scautopick`.
In case of a setup in which scautopick is replaced by a different automatic
picker, these two amplitudes must nevertheless be provided to scautoloc.
Otherwise, the picks are not used. At the moment this is a strict requirement,
in the future it may be changed.

qualities. Obviously, a pick with a high 

 will less likely be a transient

.
The amplitudes used by scautoloc are of type “snr” and “mb”, corresponding
to the (relative, unit-less) SNR amplitude and the (absolute) “mb” amplitude,
respectively. These two amplitudes are provided by 

.

The grid configuration file consists of one line per grid point, each grid
point specified by 6 columns::

point specified by 6 columns:

The columns are grid point coordinates (latitude, longitude, depth), radius,
maximum station distance and minimum pick count, respectively. The above line
sets a grid point centered at 10° S / 105° E at the depth of 20 km. It is
sensitive to events within 5° of the center. Stations in a distance of up
to 180° may be used to nucleate an event. At least 8 picks have to contribute
to an origin at this location. The radius should be chosen large enough to
allow grid cells to overlap, but not too large. The size also determines the
time windows for grouping the picks in the grid search. If the time windows
are too long the risk of contamination with wrong picks increases. The maximum
station distance allows to restrict to certain stations for the according grid
points. E.g. stations from Australia are normally not required to create an
event in Europe. If there is doubt, set the value to 180. The minimum pick
count specifies how many picks are required for a given grid point to allow
the creation of a new origin. The default grid file contains a global grid
with even spacing of ~5° with additional points at greater depths where
deep-focus events are known to occur.

The station configuration file contains lines consisting of network code,
station code, usage flag (0 or 1) and maximum nucleation distance. Using a
flag of 1 indicates the station shall be used by scautoloc. If it shall not
be used, 0 must be specified here. The maximum nucleation distance is the
distance (in degrees) from the station up to which this station may contribute
to a new origin. If this distance is 180°, this station may contribute to new
origins world-wide. However, if the distance is only 10°, the range of this
station is limited. This is a helpful setting in case of mediocre stations
in a region where there are numerous good and reliable stations nearby. The
station will then not pose a risk for locations generated outside the maximum
nucleation distance. Network and station code may be wildcards (\*) for
convenience ::

nucleation distance. Network and station code may be wildcards (*) for
convenience

The example above means that all stations from all networks by default can
create new events within 90°. The GE stations can create events at any distance,
except for the rather noisy station HLG in the network GE, which is restricted
to 10°. By setting the 3rd column to 0, TE RGN is ignored.

Usually, scautoloc will not report origins with less than a certain
number of defining phases (specified by :confval:`autoloc.minPhaseCount`),
typically 6-8 phases, with 6 being the absolute minimum.  However,
in case of potentially dangerous events, it may be desirable to
receive "heads up" alert prior to reaching the minimum phase count,
especially in a tsunami warning context. If very large amplitudes
are registered at a sufficient number of stations, it is possible to
produce preliminary origins (hereafter called :term:`XXL events<XXL event>`)
based on less than 6 picks.

number of defining phases (specified by 

),
receive “heads up” alert prior to reaching the minimum phase count,
produce preliminary origins (hereafter called 

Prerequisite is that all these picks have extraordinary large amplitudes of type
:confval:`autoloc.amplTypeAbs` and :term:`SNR` and lie within a
relatively small region. Such picks are hereafter called :term:`XXL picks<XXL pick>`.
A pick is internally tagged as “XXL pick” if its
amplitude exceeds a certain threshold (specified by
:confval:`autoloc.xxl.minAmplitude`) and has a SNR > :confval:`autoloc.xxl.minSNR`.
For larger SNR picks with
smaller amplitude can reach the XXL tag, because it is justified to
treat a large-SNR pick as XXL pick even if its amplitude is somewhat
below the XXL amplitude threshold. The XXL criterion should be
judged as workaround to identify picks which justify the nucleation
of preliminary origins.

 and lie within a
relatively small region. Such picks are hereafter called 

.

.

A normal application log file containing the processing and location history.

The pick log contains all received picks with associated amplitudes in a
simple text file, one entry per line. This pick log should always be active
as it allows pick playback for trouble shooting and optimization of scautoloc.
If something did not work as expected, playing back the pick log will provide
a useful way to find the source of the problem without the need of processing
the raw waveforms again. The application log file contains miscellaneous
information in variable format. The format of the entries may change anytime,
so no downstream application should ever depend on it. There are some special
lines, however. These contain certain keywords that allow convenient filtering
of the most important information using grep. These keywords are NEW, UPD and
OUT, for a new, updated and output origin, respectively. They can be used like::

OUT, for a new, updated and output origin, respectively. They can be used like:

This will extract all lines containing the above keywords, providing a very
simple (and primitive) origin history.

In principle, scautoloc produces a new solution (origin) after each processed
pick. This is desirable at an early stage of an event, when every additional
information may lead to significant improvements. A consolidated solution,
consisting of many (dozens) of picks, on the other hand may not always benefit
greatly from additional picks that usually originate from large distances.
Updates after each pick are therefore unnecessary. It is possible to control
the time interval between subsequent origins reported by scautoloc. The time
interval is a linear function of the number of picks::

interval is a linear function of the number of picks:

Setting a = b = 0, then Δt is always zero, meaning there is never a delay in
sending new solutions. This is not desirable. Setting a = 0.5, each pick will
increase the time interval until the next solution will be sent by 0.5s. This
means that scautoloc will wait 10 seconds after an origin with 20 picks is sent.
The values for a and b can be configured by :confval:`autoloc.publicationIntervalTimeSlope`
and :confval:`autoloc.publicationIntervalTimeIntercept`, respectively.

The values for a and b can be configured by 

scautoloc keeps pick objects in memory only for a certain amount of time. This time
span is with respect to pick time and specified in seconds in :confval:`buffer.pickKeep`.
The default value is 21600
seconds (6 hours). After this time, unassociated picks expire. Newly arriving
picks older than that (e.g. in the case of high data latencies) are ignored.
Origins will live slightly longer, including the picks associated to them. The time
to buffer origins is configured by :confval:`buffer.originKeep`.

span is with respect to pick time and specified in seconds in 

.
to buffer origins is configured by 

In a setup where many stations have considerable latencies, e.g. dialup
stations, the expiration times should be chosen long enough to accommodate
late picks. On the other hand, the memory usage for large networks may be a
concern as well. scautoloc periodically cleans up its memory from expired
objects. The time interval between subsequent housekeepings is specified in
:confval:`buffer.cleanupInterval` in seconds.

In the test mode, scautoloc connects to a messaging server as usual and
receives picks and amplitudes from there, but no results are sent back to
the server. Log files are written as usual. This mode can be used to test
new parameter settings before implementation in the real-time system. It also
provides a simple way to log picks from a real-time system to the pick log.

For running scautoloc continuously in the background as a daemon it must be
enabled and started:

scautoloc normally runs as a daemon in the background, continuously reading
picks and amplitudes and processing them in real time. However, scautoloc
may also be operated in offline mode. This is useful for debugging. Offline
mode is activated by adding the command-line parameter  :option:`--ep` or
:option:`--offline`. When operated in offline mode,
scautoloc will not connect to the messaging. Instead, it reads picks from a
:term:`SCML` file provided with :option:`--ep` or from standard input in the pick file
format. The station coordinates are read from the inventory in the database or
from the file either defined in :confval:`autoloc.stationLocations` or
-\\-station-locations .

mode is activated by adding the command-line parameter  

. When operated in offline mode,

 or from standard input in the pick file
from the file either defined in 

2008-09-25 00:20:16.6 SK LIKS EH __ 4.6 196.953 1.1 A [id]
2008-09-25 00:20:33.5 SJ BEO BH __ 3.0 479.042 0.9 A [id]
2008-09-25 00:21:00.1 CX MNMCX BH __ 21.0 407.358 0.7 A [id]
2008-09-25 00:21:02.7 CX HMBCX BH __ 14.7 495.533 0.5 A [id]
2008-09-24 20:53:59.9 IA KLI BH __ 3.2 143.752 0.6 A [id]
2008-09-25 00:21:04.5 CX PSGCX BH __ 7.1 258.407 0.6 A [id]
2008-09-25 00:21:09.5 CX PB01 BH __ 10.1 139.058 0.6 A [id]
2008-09-25 00:21:24.0 NU ACON SH __ 4.9 152.910 0.6 A [id]
2008-09-25 00:22:09.0 CX PB04 BH __ 9.0 305.960 0.6 A [id]
2008-09-25 00:19:13.1 GE BKNI BH __ 3.3 100.523 0.5 A [id]
2008-09-25 00:23:47.6 RO IAS BH __ 3.1 206.656 0.3 A [id]
2008-09-25 00:09:12.8 GE JAGI BH __ 31.9 1015.304 0.8 A [id]
2008-09-25 00:25:10.7 SJ BEO BH __ 3.4 546.364 1.1 A [id]

where [id] is a placeholder for the real pick id which has been omitted in this
example.

In the above example some of the picks are not in right order of
time because of data latencies. In offline mode scautoloc will not connect to
the database, in consequence the station coordinates cannot be read from the
database and thus have to be supplied via a file. The station coordinates file
has a simple format with one line per entry, consisting of 5 columns: network
code, station code, latitude, longitude, elevation (in meters). Example:

    GE APE 37.0689 25.5306 620.0
    GE BANI -4.5330 129.9000 0.0
    GE BKB -1.2558 116.9155 0.0
    GE BKNI 0.3500 101.0333 0.0
    GE BOAB 12.4493 -85.6659 381.0
    GE CART 37.5868 -1.0012 65.0
    GE CEU 35.8987 -5.3731 320.0
    GE CISI -7.5557 107.8153 0.0

GE APE 37.0689 25.5306 620.0
GE BANI -4.5330 129.9000 0.0
GE BKB -1.2558 116.9155 0.0
GE BKNI 0.3500 101.0333 0.0
GE BOAB 12.4493 -85.6659 381.0
GE CART 37.5868 -1.0012 65.0
GE CEU 35.8987 -5.3731 320.0
GE CISI -7.5557 107.8153 0.0

The location of this file is specified in :confval:`autoloc.stationLocations` or on the
command line using -\\-station-locations

The two main programs in the automatic event detection and location processing
chain, :ref:`scautopick` and :program:`scautoloc`, only work together if the
information needed by scautoloc can be supplied by :ref:`scautopick` and received
by :program:`scautoloc` through the message group defined by
:confval:`connection.subscription` or through :term:`SCML` (:option:`--ep`,
:option:`-i`). This document explains current
implicit dependencies between these two utilities and is meant as a guide
especially for those who plan to modify or replace one or both of these
utilities by own developments.

chain, 

, only work together if the
information needed by scautoloc can be supplied by 

). This document explains current

Both scautopick and scautoloc are subject to ongoing developments.
The explanation given below can therefore only be considered a hint, but not
a standard.

:program:`scautoloc` works with
:ref:`seismic phase picks <sec-scautoloc-pick-filtering>`.
In addition, certain amplitudes are used as a kind of quality criterion for the
pick, allowing picks with a higher absolute amplitude or signal-to-noise ratio
to be given priority in the processing over weak low-quality picks. Due to the
filtering of picks by phaseHint it is highly recommended to always set the
phaseHint attribute with the appropriate phase name in :ref:`scautopick`. There
is no restriction regarding the choice of the publicID of the pick.

.
phaseHint attribute with the appropriate phase name in 

. There

By configuration, the performance of :program:`scautoloc` is also controlled by
considering certain amplitudes accompanying the picks. Two kinds of amplitudes
may be used together

 is also controlled by

An absolute amplitude like the one used for calculation of the magnitude "mb".

An absolute amplitude like the one used for calculation of the magnitude “mb”.

Relative amplitude like the dimension-less signal-to-noise ratio amplitude "snr".

Relative amplitude like the dimension-less signal-to-noise ratio amplitude “snr”.

Neither amplitude is used for magnitude computation by scautoloc. The default
amplitude types used by scautoloc are of type "mb" and "snr". These defaults
can be overridden in :file:`scautoloc.cfg`:

amplitude types used by scautoloc are of type “mb” and “snr”. These defaults
can be overridden in 

If for instance an alternate picker implementation doesn't produce "mb"-type
absolute amplitude but e.g. "xy", then :confval:`autoloc.amplTypeAbs` needs to be set to
"xy" to have them recognized by scautoloc.

If for instance an alternate picker implementation doesn’t produce “mb”-type
absolute amplitude but e.g. “xy”, then 

Currently there **must** be an absolute and a relative amplitude for every pick
as configured by :confval:`autoloc.amplTypeAbs` and :confval:`autoloc.amplTypeSNR`.
These amplitudes must be computed by :ref:`scautopick`.
:program:`scautoloc` will always wait until both amplitudes have arrived, which
results in an overall processing delay, corresponding to the usually delayed availability
of amplitudes with respect to the corresponding pick. The default absolute
amplitude "mb", for instance, takes a hard-coded 30-seconds time interval to
be computed. This length of data thus has to be waited for, plus a little
extra because of the size of the miniSEED records.

 be an absolute and a relative amplitude for every pick
as configured by 

 will always wait until both amplitudes have arrived, which
amplitude “mb”, for instance, takes a hard-coded 30-seconds time interval to

Consider :ref:`scautopick` with :confval:`amplitudes.enableUpdate` in order
to provide mb amplitudes with shorter delays.

An alternate picker
implementation could produce a different absolute-amplitude type than "mb".
That amplitude might be based on a different filter pass band and much shorter
time window than the default "mb" amplitude, thus allowing a significantly
improved processing speed. The choice of amplitude type and time window greatly
depends on the network. For a regional or even global network the 30-seconds
processing delay won't play a role, and we need the mb amplitude anyway. Here
the delay of solutions produced by scautoloc is mostly controlled by the seismic
traveltimes. Not so in case of a local or small-regional network, where the
mb-type amplitude is of limited value and where a meaningful absolute amplitude
might well be produced with just a second of data and at higher frequencies.
Currently this isn't possible with scautopick but this issue will be addressed
in a future version.

implementation could produce a different absolute-amplitude type than “mb”.
time window than the default “mb” amplitude, thus allowing a significantly
processing delay won’t play a role, and we need the mb amplitude anyway. Here
Currently this isn’t possible with scautopick but this issue will be addressed

Manual origins created, e.g., in :ref:`scolv` may be considered for additional
association of picks as controlled by :confval:`autoloc.useManualOrigins`.

 may be considered for additional
association of picks as controlled by 

**locator.\***
*Define parameters of the locator. Only LOCSAT is supported.*

For each location, scautoloc performs checks to test if the
depth estimate is reliable. If the same location quality
\(e.g. pick RMS\) can be achieved while fixing the depth to
the default depth, the latter is used. This is most often
the case for shallow events with essentially no depth
resolution.

The locator might converge at a depth of 0 or even negative
depths. This is usually not desired, as 0 km might be
interpreted as indicative of e.g. a quarry blast or another
explosive source. In the case of \"too shallow\" locations the
minimum depth will be used.

Note that the minimum depth can also be configured in scolv,
possibly to a different value.

Time to keep picks in the buffer with respect to pick time, not creation time.

**autoloc.\***
*Define parameters for creating and reporting origins.*

Maximum travel\-time residual \(unweighted\) for a pick at a station to be used.

Maximum secondary azimuthal gap for an origin to be reported by.
The secondary gap is the maximum of the sum of 2 station gaps.

Default: 360 degrees, i.e. no restriction based on this parameter.

If the station count for stations at < 105 degrees distance
exceeds this number, no picks at > 105 degrees will be
used in location. They will be loosely associated, though.

If this string is non\-empty, an amplitude obtained from an amplitude
object is used by ... . If this string is \"mb\", a period
obtained from the amplitude object is also used; if it has some other
value, then 1 [units?] is used. If this string is empty, then the amplitude
is set to 0.5 \* thresholdXXL, and 1 [units?] is used for the period.

If this string is non\-empty, it is used to obtain a pick SNR from an
amplitude object. If it is empty, the pick SNR is 10.

Location of the station configuration file for nucleating origins.

The station file to be used when in offline mode.
If no file is given the database is used. An example is given
in \"\@DATADIR\@\/scautoloc\/station\-locations.conf\".

Receive and process manual origins. Manual picks and arrival
weights will be adopted from the manual origin and the processing continues with these.
Origins produced this way by adding incoming automatic picks are nevertheless marked as
automatic origins. But they may contain manual picks \(even pP and S picks\).

Add the LOCATION group to connection.subscriptions for receiving manual origins\!

This is an experimental feature relevant only for large regional and global networks,
where results by analysts can be expected before the end
of automatic event processing.

Adopt the depth from manual origins. Otherwise the default depth
in locator.defaultDepth is considered.

Restrict pick processing to the given author name\(s\). Apply
comma separation for a list of names. If any author name is
given, picks from other authors are ignored.

Compare located origin with the origin at the depth given by
locator.defaultDepth. The origin with lower RMS is reported.

Parameter \"a\"  in the equation t \= aN + b.
t is the time interval between sending updates of an origin.
N is the arrival count of the origin.

Parameter \"b\" in the equation t \= aN + b.

Location of pick log file containing information about received
picks. Activate \"pickLogEnable\" for writing the files.

**autoloc.xxl.\***
*Create origins from XXL picks. These origins will receive the status "preliminary".*
*Use with care! Enabling XXL picks may result in frequent fake solutions.*

Create origins from XXL picks. These origins will receive the status “preliminary”.

Use with care! Enabling XXL picks may result in frequent fake solutions.

Picks with exceptionally large amplitudes may be flagged as XXL,
allowing \(in future\) faster, preliminary \"heads\-up\" alerts.

Minimum amplitude for a pick to be flagged as XXL. The
value corresponds to the amplitude type configured in
autoloc.amplTypeAbs. NOTE that
BOTH minAmplitude and minSNR need to be exceeded\!

Minimum SNR for a pick to be flagged as XXL. NOTE that

Minimum number of XXL picks for forming an origin.
Must be >\= 4.

Do not connect to a messaging server. Instead a
station\-locations.conf file can be provided. This implies
\-\-test and \-\-playback

Name of input XML file \(SCML\) with all picks and origins for
offline processing. The database connection is not received
from messaging and must be provided. Results are sent in XML
to stdout.

Allow picks with evaluation status 'rejected' for nucleation
and association.

Allow picks with evaluation status ‘rejected’ for nucleation

The station\-locations.conf file to use when in
offline mode \(started with \-\-offline\).
If no file is given the database is used.

The station configuration file. Examples are in \@DATADIR\@\/scautoloc\/

The grid configuration file. Examples are in \@DATADIR\@\/scautoloc\/

The pick log file. Providing a file name enables logging picks
even when disabled by configuration.

Maximum secondary azimuthal gap for an origin to be reported.

Maximum travel\-time residual \(unweighted\) for a pick at a
station to be used.

scautoloc command line option; --max-nucleation-distance-default

Default maximum distance of stations to be used for nucleating new origins.

An amplitude exceeding this threshold will flag the pick as XXL.

During cleanup all pick objects older than maxAge \(in seconds\)
are removed \(maxAge \=\= 0 disables cleanup\).

scautoloc command line option; --dynamic-pick-threshold-interval

The interval in seconds in which to check for extraordinarily
high pick activity, resulting in a dynamically increased
pick threshold.

Hyperlink target "sec-scautoloc-pick-filtering" is not referenced.

Hyperlink target "sec-scautoloc-prelim-origins" is not referenced.

Hyperlink target "sec-scautoloc-offline-mode" is not referenced.

scautopick applies threshold monitoring by searching for waveform anomalies in
form of changes in amplitudes. It is applied for detecting phase arrivals
creating :term:`phase picks <pick>` and for measuring related features and
:term:`amplitudes <amplitude>`. The picks and associated amplitudes and
features are typically provided to modules like :ref:`scautoloc` for locating
the source.

creating 

. The picks and associated amplitudes and
features are typically provided to modules like 

Instead of detecting phase arrivals for source location, scautopick
can also be applied for detecting simple amplitude exceedence applying filters
like the :py:func:`MAX` filter. Exceedences are reported as picks and can be
processed further, e.g. by :ref:`scalert`.

like the 

 filter. Exceedences are reported as picks and can be
processed further, e.g. by 

scautopick detects phase onsets for generating :term:`picks <pick>`. Initally,
it searches for detections on the waveform streams defined by global bindings.

. Initally,

A primary detector is applied first. When a detection is found, 'P' is by default
assigned to the guess of the phase type (phaseHint). The actual guess can be configured by
:confval:`phaseHint`. By default the primary detector applies a robust STA/LTA
detector (:py:func:`STALTA` filter) to waveforms for making detections. Other
detection filters and filter chains can be choosen from the
:ref:`list of SeisComP filters <filter-grammar>`. A guess of the pick type may
be defined by :confval:`phaseHint`.

A primary detector is applied first. When a detection is found, ‘P’ is by default

. By default the primary detector applies a robust STA/LTA
detector (

 filter) to waveforms for making detections. Other

Waveforms are typically :ref:`pre-filtered <filter-grammar>` before the actual
:py:func:`STALTA` filter. Without further configuration a
running-mean highpass, a cosine taper and a Butterworth bandpass filter of
third order with corner frequencies of 0.7 and 2 Hz are applied before the
:py:func:`STALTA` filter. The entire filter sequence is configurable by
:confval:`filter`, module configuration, or :confval:`detecFilter`, binding
configuration.

 filter. Without further configuration a

Once the STA/LTA ratio has reached a configurable threshold (by default 3) for a
particular stream, a :term:`pick` is set to the time when this
threshold is exceeded (pick time) and the picker is set inactive. The picker is
reactivated for this stream once the STA/LTA ratio falls to the value of 1.5 (default).

particular stream, a 

 is set to the time when this

Trigger on: :confval:`thresholds.triggerOn` in module configuration or
:confval:`trigOn` in binding configuration,

Trigger off: :confval:`thresholds.triggerOff`, module configuration or :confval:`trigOff`,
binding configuration.

Initial detections can be further adjusted by a second-stage phase re-picker
(post picker) as defined by :confval:`picker`. The re-picker should be tuned
carefully and global bindings parameters :confval:`picker.*` should be
configured accordingly.

(post picker) as defined by 

. The re-picker should be tuned
carefully and global bindings parameters 

After having detected a phase, the re-picker will be inactive and accept no further
detection until

The amplitudes measured after filtering (:confval:`filter` in module configuration
or :confval:`detecFilter` in binding configuration) fall below the
:confval:`thresholds.triggerOff` (module configuration) or :confval:`trigOff`
(binding configuration) and

Amplitudes, :math:`A_{trigger}`, measured after filtering reach or
exceed a threshold determined by :math:`T_{minOffset}` (:confval:`thresholds.minAmplOffset`),
:math:`T_{dead}` (:confval:`thresholds.deadTime`) and the amplitude of the
previous pick, :math:`A_{prev}`:

.. math ::

   A_{trigger} \ge T_{minOffset} + A_{prev} * exp\left(-(dt/T_{dead})^2\right)

if :math:`T_{dead} > 0`. Otherwise:

.. math ::

   A_{trigger} \ge T_{minOffset}

Here, :math:`dt` is the time passed since the last pick.
:math:`T_{minOffset}` (:confval:`thresholds.minAmplOffset`) is typically similar to
the trigger threshold, :confval:`thresholds.triggerOn` (module configuration) or
:confval:`trigOn` (binding configuration).

, measured after filtering reach or
exceed a threshold determined by 

A_{trigger} \ge T_{minOffset} + A_{prev} * exp\left(-(dt/T_{dead})^2\right)

Based on the inital detection or pick a secondary picker may applied be applied,
e.g., for picking S phases as defined by :confval:`spicker`. The secondary picker
is halted as soon as new detections are made unless :confval:`killPendingSPickers`
is inactive.

e.g., for picking S phases as defined by 

. The secondary picker
is halted as soon as new detections are made unless 

As for the re-picker also the spicker should be tuned carefully and global
bindings parameters :confval:`spicker.*` should be set.

bindings parameters 

Second-stage pickers available by configuration of :confval:`picker` or :confval:`spicker`

For extracting features related to picks such as polarization parameters
configure :confval:`fx` and the related global bindings parameters :confval:`fx.*`.

configure 

The second task of scautopick is to calculate amplitudes of a given type for the
corresponding magnitude type (see :ref:`scamp` for a list of amplitude types and
:ref:`scmag` for the magnitude types). Such amplitudes are required by:

corresponding magnitude type (see 

:ref:`scautoloc` for associating phase picks and generating a source location

EEW (earthquake early warning) systems in order to provide rapid amplitudes for
magnitudes as soon as source locations are available.

The time window for measuring amplitudes starts at the pick time. The window
length is constant and specific to the amplitude type. It can be adjusted in
global bindings. For example mb is calculated
for a fixed time window of 30 s after the pick, mB for time window of 60s, for
MLv a time window of 150 s is estimated to make sure that S-arrivals are inside
this time window. The pre-calculated amplitudes are sent out and received by
the magnitude tool, :ref:`scmag`.
The fixed time window poses a limitation to EEW system. Howver, a speed-up is
available with :confval:`amplitudes.enableUpdate`.
Read the :ref:`scamp` documentation for more details on amplitude measurements.

the magnitude tool, 

.
available with 

scautopick usually runs in the background connected to a real-time data source
such as :ref:`Seedlink <seedlink>`. This is referred to as online mode. Another
option to run scautopick is on offline mode with files.

such as 

. This is referred to as online mode. Another

scautopick reads all of its binding parameters and subscribes to stations
defined by global binding parameters where :confval:`detecEnable` is set to ``true``.

defined by global binding parameters where 

The data time window requested from the data source is [system-:confval:`leadTime`, NULL]
meaning an open end time that causes :ref:`SeedLink <seedlink>` to stream
real-time data if no more data are in the buffers.

Each incoming record is filtered according to :confval:`detecFilter`.

The samples are checked for exceedance of :confval:`trigOn` and in the positive
case either a post picker (:confval:`picker`) is launched or a :term:`Pick <pick>`
object will be sent.

If :confval:`sendDetections` is set to ``true``, a trigger will be sent in any
case for e.g. debugging.

After the primary stage has finished (detector only or picker) secondary
pickers will be launched if configured with :confval:`spicker`.

pickers will be launched if configured with 

To run scautopick in the background as a daemon module enable and start it ::

To run scautopick in the background as a daemon module enable and start it

For executing on the command line simply call it with appropriate options, e.g. ::

For executing on the command line simply call it with appropriate options, e.g.

Due to code changes in the file data source, the command line option
:option:`--playback` is essential for non-real-time operation. Otherwise a
real-time time window is set and all records are most likely filtered out.

 is essential for non-real-time operation. Otherwise a

To tune scautopick or to do playbacks it is helpful to run scautopick not with
a real-time data source but on a defined data set, e.g. a multiplexed sorted miniSEED
volume. scautopick will apply the same workflow as in online mode but the
acquisition of data records has to change. If the input data (file) has been
read, scautopick will exit and furthermore it must not ask for a particular
time window, especially not for a real-time time window. To accomplish that
the command-line parameter :option:`--playback` has to be used. Example:

the command-line parameter 

This call will process all records in :file:`data.mseed` for which bindings
exist and **send the results to the messaging**. If all data records are processed,
scautopick will exit. The processing steps are similar to the online mode.

. If all data records are processed,

Use the :option:`--ep` for offline processing **without messaging**. The results are
printed in :term:`SCML` format. Example:

$ scautopick --playback -I data.mseed --ep -d [type]://[host]/[database] > picks.xml

scautopick inherits :ref:`global options<global-configuration>`.

The leadTime defines the time in seconds to start picking on
waveforms before current time.

If enabled, picks can be made on waveforms which are older than
current time \- \"leadTime\". Current time is the time
when the module was started. This allows to pick
historic data in real\-time playbacks which are preserving the
record times. See e.g. the \"msrtsimul\" module.
This option deactivates \"leadTime\". Activate only for playbacks.

The initTime defines a time span in seconds for that the picker
is blind after initialization. This time is needed to initialize
the filter and depends on it.

Interpolate gaps linearly? This is valid for gaps shorter
than thresholds.maxGapLength.

If enabled, all streams that are received by the picker are
used for picking. This option has only effect if a
file is used as input which contains more data than the
picker requests. If connected to a waveform server such as
SeedLink, the picker will only receive the data it is
subscribed to.

The default filter used for making detections. Station\-specific
configurations \(bindings\) override this value.

The time correction applied for a pick. Station\-specific
values \(bindings\) override this value.

The re\-picker to use. By default only simple detections
are emitted as picks. To enable re\-picking on a time window around
the detection, an algorithm \(plugin\) can be defined with this parameter.

More options may be available by plugins. Configure related
parameters in global bindings.

Phase hint to be assigned to the pick made by the primary picker.

If enabled and \"picker\" is configured, then
initial detections are sent as well. To distinguish between
detections and picks the evaluation status of the pick is
set to \"rejected\". This is meant to be a debug
option which can be used to compare detections and picks by
their evaluation status.

The secondary picker to use, e.g., for picking S\-phases.
Currently available is: \"S\-L2\". More options may
be available by plugins. Configure related parameters
in global bindings.

If enabled, all secondary pickers that were triggered by
a previous pick will be terminated when a new detection or
pick has been found. This aims to avoid the case where an
S phase is wrongly picked as P but would also be picked as
S by the secondary picker. But suppressing the S pick can
lead to undesired results. It might be better in some
situations to have two picks \(P and S\) instead only a wrong P.

situations to have two picks (P and S) instead only a wrong P.

If enabled and \"picker\" or \"spicker\" is
configured, extra comments will be added to the resulting pick.

duration: added if the duration has been computed at the time
of the pick creation, which actually requires
\"thresholds.maxDuration\" to be configured
with a non\-negative value.

Configures the feature extraction type to use. Currently
available: \"DFX\". Configure related parameters

When configured, the usability of the features for locating
events depends on the used locator, e.g. LOCSAT. Read the
locator's documentation and configuration parameters.

locator’s documentation and configuration parameters.

The amplitude types to be computed by the picker based on
picks.

**thresholds.\***
*Threshold parameters for the primary picker.*

For which value on the filtered waveforms is a pick
detected. Station specific values override this value.

The value the filtered waveforms must reach to enable
detection again. Between triggerOn and triggerOff the
picker is blind and does not produce picks. Station
specific values override this value.

The maximum gap length in seconds to handle.
Gaps larger than this will cause the picker to be reset.

The time window used to compute a maximum \(snr\) amplitude
on the filtered waveforms.

The time used together with measured amplitude and
`thresholds.minAmplOffset` for scaling the amplitude below which
the picker is inactive after a P pick. Read the documentation\!

The amplitude used together with measured amplitude and
`thresholds.deadTime` for scaling the amplitude below which
the picker is inactive after a P pick. The value is typically
similar to the trigger threshold. Read the documentation\!

The minimum duration to reach. The duration is measured as
the time between trigger on and trigger off. If this value
is configured the detection \(pick\) will be delayed in order
to compute and check the duration.

The maximum duration allowed. The duration is measured as

Configure a list of magnitude types.
Update and send amplitudes for these magnitudes as soon as data are
available. Do not wait for complete time windows.
Only magnitudes computed by scautopick as given by the amplitudes parameter are considered.
This option is for rapid magnitude estimation and EEW.

**comment.\***
*Properties of a custom comment added to a pick. It requires both*
*ID and text to be configured.*

Properties of a custom comment added to a pick. It requires both

The value the filtered waveform must reach to
enable a detection again.

Defines whether the detector applies sensitivity correction
\(applying the gain\) or not in advance to filter the data.

Do not connect to a messaging server and do not use the database.

Switches to playback mode which does not request a particular time window from
the input data source. This implies that all records are forwarded to scautopick
if files are being used. Without this option scautopick sets the requested
start time to NOW\-leadTime and therefore would not work anymore with
older datasets in offline mode or when running playbacks.

start time to NOW-leadTime and therefore would not work anymore with

Outputs an XML event parameters file containing all picks and amplitudes.
This option implies offline.

Runs the picker as usual but does not send any messages. This can be useful to
test the picker within a running system.

Dumps the current configuration and exits. Station configuration is only read if
the picker connects to the messaging and the database. In offline mode it will
only dump the application specific setting unless a station.conf file is provided.

This option only works in combination with :option:`\-\-offline`. It will dump
the data of an amplitude processor if it completed processing successfully
and a new amplitude is available. The output format is a simple ASCII format.

. It will dump

Overrides configuration parameter :confval:`thresholds.triggerOn`.

Overrides configuration parameter :confval:`thresholds.triggerOff`.

Overrides configuration parameter :confval:`thresholds.deadTime`.

Overrides configuration parameter :confval:`thresholds.amplMaxTimeWindow`.

Overrides configuration parameter :confval:`thresholds.minAmplOffset`.

Overrides configuration parameter :confval:`thresholds.maxGapLength`.

scbulletin transforms the parameters of events or origins either to various formats.
Currently supported output formats are:

Dump mode: Fetch all necessary information from database directly. Either
choose one or more event or origin IDs. The database connection must be given
with :option:`-o`.

with 

Input mode: Provide all event and origin information in XML (:term:`SCML`)
format from file or stdin. You may filter further by event or origin ID.

)

If event IDs are given, the preferred origin will be derived and used for printing
information.

Events and origins are referred to by their public IDs.  They can be provided
by :ref:`scevtls` and :ref:`scorgls`, respectively, from graphical tools like
:ref:`scolv` or by database queries supported by :ref:`scquery`. XML files
can be generated by :ref:`scxmldump` or from other formats by :ref:`sccnv`.

by 

The generated content is written to stdout or, with option :option:`-o` to a
file. Different output formats are available by command-line options:

 to a

``-4`` or ``--fdsnws`` for FDSNWS event text: Print one line per event. Useful
for generating event catalogs. This option offers an alternative to generating
event catalogs by :ref:`fdsnws-event <sec-event>`.

 for FDSNWS event text: Print one line per event. Useful
event catalogs by 

``-5`` or ``--kml`` for KML/GIS file format. The output can be viewed, e.g.,
in *Google Earth*.

By default, the output precision of times or coordinates is optimized for events
at teleseismic or regional distances. Use the option :option:`-e` for
**enhanced** output at higher precision: All times  and distances are in units
of milliseconds and meters, respectively.

at teleseismic or regional distances. Use the option 

 output at higher precision: All times  and distances are in units

Create a bulletin from one or multiple event(s) in database

   scbulletin -d mysql://sysop:sysop@localhost/seiscomp -E gfz2012abcd
   scbulletin -d mysql://sysop:sysop@localhost/seiscomp -E gfz2012abcd,gfz2022abcd

scbulletin -d mysql://sysop:sysop@localhost/seiscomp -E gfz2012abcd
scbulletin -d mysql://sysop:sysop@localhost/seiscomp -E gfz2012abcd,gfz2022abcd

Convert XML file to bulletin

   scbulletin -i gfz2012abcd.xml

   cat gfz2012abcd.xml | scbulletin

   scbulletin < gfz2012abcd.xml

Convert XML file to bulletin but filter by event ID(s)

   scbulletin -i gfz2012abcd.xml -E gempa2022abcd
   scbulletin -i gfz2012abcd.xml -E gempa2022abcd,gfz2022abcd

scbulletin -i gfz2012abcd.xml -E gempa2022abcd
scbulletin -i gfz2012abcd.xml -E gempa2022abcd,gfz2022abcd

When considering a single event XML file containing many events, the
bulletins of all events will be generated unless ``--first-only`` is used.

bulletins of all events will be generated unless 

scbulletin inherits :ref:`global options<global-configuration>`.

Input format to use \(xml [default], zxml \(zipped xml\), binary\).

ID of event\(s\) that is read from database and transformed into
a bulletin. Separate multiple IDs by comma.\"

ID of origin\(s\) that is read from database and transformed into
a bulletin. Separate multiple IDs by comma.

Convert only the first event\/origin to bulletin. Otherwise
all events or origins will be converted to single bulletins
which will be concatenated.

Use a specially detailed autoloc3 format. This options works only
in combination with the autoloc3\-flag.

Enhanced output with higher precision. Times: milliseconds,
distances: meter. Use for bulletins of local earthquakes.

Name of output file. If not given, all event parameters are
printed to stdout.

Use a specially detailed autoloc3 format. This options works
only in combination with the autoloc3\-flag.

scchkcfg checks for case-sensitivity issues of parameter names of the module
configuration file for a module. It reads all defined configuration stages
(see :ref:`global_modules`) and checks for each parameter read if it exists
again with a different spelling.

(see 

) and checks for each parameter read if it exists

If *standalone* is not given, it checks all 6 configurations
files (including :file:`global.cfg`), 3 otherwise.

$ scchkcfg scautopick
Read configuration files OK
No possible conflict detected

scchkcfg checks only for possible conflicts since it does not know what parameters
a module will read eventually.

Conflict #1
 connection.server    /home/sysop/seiscomp/etc/global.cfg:8
 connection.Server    /home/sysop/.seiscomp/scautopick.cfg:1
1 conflict detected

In this case everything is ok and the conflict needs to be fixed.
:confval:`connection.Server` is not a valid parameter name
(but :confval:`connection.server` is) in
:file:`/home/sysop/.seiscomp/scautopick.cfg` and thus will not be used.

 module.trunk.global.amplitudes.mb.signalEnd    \
      /home/sysop/.seiscomp/scautopick.cfg:1
 module.trunk.global.amplitudes.mB.signalEnd    \
      /home/sysop/.seiscomp/scautopick.cfg:2

In this case the configuration is OK and this is an example why the case-sensitivity
has changed from previous versions: mb != mB. scchkcfg detects a possible
conflicts but does not know that this case is well defined. But it helps the user to
decide whether it needs a fix or not.

sccnv reads input given in a supported format, converts the content to another
format and writes the output. Use the command-line option :confval:`format-list`
for a list of supported formats.

format and writes the output. Use the command-line option 

SeisComP XML (:term:`SCML`) - :ref:`SCML API <api-datamodel-python>`

**\***: The conversion from files in QuakeML format is not supported by sccnv
but can be realized by system tools. Read section :ref:`sec-sccnv-quakeml` for
details and instructions.

: The conversion from files in QuakeML format is not supported by sccnv
but can be realized by system tools. Read section 

:term:`QuakeML` is used in a variety of flavors involving, e.g.,

The ability to convert from QuakeML to :term:`SCML` is thus limited and it
depends on the parameters provided with the input QuakeML file.

 is thus limited and it

However, XSLT stylesheets are provided for mapping the parameters. The files
are located in :file:`@DATADIR@/xml/[version]/` for different |scname| data schema
versions. The stylesheet files provide information on the mapping and on
limitations as well as examples on their application.

are located in 

 data schema

You may find out about the |scname| data schema version using modules along
with the command-line option `-V`, e.g.,

   $ sccnv -V

 data schema version using modules along
with the command-line option 

The style sheets can be used along with other stylesheet converter tools provided
by your system, e.g., :program:`xalan` or :program:`xsltproc`. Examples are given
in section :ref:`sec-sccnv-examples`.

by your system, e.g., 

Print the list of supported formats:

   $ sccnv --format-list

Convert an  event parameter file in :term:`SCML` format to :term:`QuakeML` and
store the content in a file:

   $ sccnv -i seiscomp.xml -o qml1.2:quakeml.xml

Convert an inventory file in Arclink XML format to :term:`SCML` and store the
content in a file:

   $ sccnv -i arclink:Package_inventory.xml -o inventory.sc.xml

Convert an event parameter file in :term:`SCML` format to ims1.0 and store the

   $ sccnv -i trunk:event.xml -o ims10:event.ims

Convert QuakeML in version 1.2 to SCML in data schema version 0.12:

   $ xsltproc $SEISCOMP_ROOT/share/xml/0.12/quakeml_1.2__sc3ml_0.12.xsl file.quakeml > file_sc.xml

$ xsltproc $SEISCOMP_ROOT/share/xml/0.12/quakeml_1.2__sc3ml_0.12.xsl file.quakeml > file_sc.xml

sccnv reads the input given in a supported format, converts the content
and writes the output in another format. Use the option `format\-list`

and writes the output in another format. Use the option 

Retrieve :ref:`information <scconfig-information>` about the installed |scname|
system,

:ref:`Control modules <scconfig-system>` (start/stop/check/enable/disable) and
access logging file,

:ref:`Import, check, synchronize and remove <scconfig-inventory>` station meta
data/inventory,

:ref:`Import, check, synchronize and remove <scconfig-inventory>`

Configure the :ref:`module configuration <scconfig-modules>` and
:ref:`bindings <scconfig-bindings>` all SeisComP modules for which descriptions
are provided,

Access the :ref:`documentation and the changelog <scconfig-documentation>`.

The modules are usually programs part of the SeisComP system and have two
distinct types of configuration:

:ref:`Modules configuration <scconfig-modules>`, or just program
configuration stored in file like :file:`scautopick.cfg`.

:ref:`Bindings <scconfig-modules>`, that are set of parameters to configure
how the module will treat a certain station. I.e. station-specific
configurations per module. Bindings can be configured using profiles, or
directly per station. A profile is a named set of parameters for a certain
module that can be attributed for more than one station. Using profiles makes
it easiear to maintain large number of station configuration. When two stations
are configured by the same profile, both will have the same parameter set for
a certain module.

, that are set of parameters to configure

scconfig does not know anything about the SeisComP database, the only thing it
can do is to actually read and write the content of files from :file:`etc/` and
:file:`~/.seiscomp` folder. It allows you to manage this information in an
organized and friendly manner. Also, it relies on other applications like the
proper :ref:`seiscomp` tool to complete the system configuration.

can do is to actually read and write the content of files from 

 folder. It allows you to manage this information in an
proper 

If scconfig is started for the first time it will ask the user to setup
its new installation.

If done already with the :ref:`command line interface <getting-started>`,
this step can be skipped. If the setup has been run already, is indicated by
the presence of the file :file:`var/run/seiscomp.init`.

,
the presence of the file 

If pressing yes, the setup wizard will be started and will configure exactly
the same parameters as described in :ref:`getting-started`.

the same parameters as described in 

The layout of the main window is always the same regardless of what panel
is selected.

.. figure:: media/scconfig/mainwindow.*

   Main window of scconfig: mode switch (red), panel selection (yellow),
   panel title and description (green),
   panel content (blue)

Main window of scconfig: mode switch (red), panel selection (yellow),
panel title and description (green),
panel content (blue)

The Main menu contains two entries: :guilabel:`File` and :guilabel:`Edit`.

The file menu allows to run the setup wizard (:guilabel:`Wizard`), to reload
the configuration (:guilabel:`Reload`), to save the
configuration (:guilabel:`Save`) and to close the configuration (:guilabel:`Quit`).

The Edit menu allows to switch the current configuration mode. Pressing the
switch button in the upper left corner (red box) is a shortcut for this operation.

This panel shows information about the |scname| environment
(see figure :ref:`main window <fig-scconfig-mainwindow>`). All variables
(except PATH) can be used as placeholders in most of the configuration
parameters which define directories or files, e.g.:

). All variables

The system panel is a graphical frontend for the :ref:`seiscomp <system-management>` script.

.. figure:: media/scconfig/system-overview.*

It is divided into 3 parts: the toolbar on the top (red), the module list (green)
and the log window (blue).
The log window shows the output of all external programs called such as :program:`seiscomp`.
The standard output is colored black and standard error is colored brown.

The log window shows the output of all external programs called such as 

.

Due to the buffering of the GUI it can happen that standard output and
standard error logs are not in perfect order.

The toolbar gives access to the available operations. All operations
will affect the currently selected modules (rows). If no row is selected, all
modules are affected and the corresponding call to :program:`seiscomp <arg>` is done
without any module.

modules are affected and the corresponding call to 

*Update*
Updates the current module state by calling :program:`seiscomp --csv status`.

*Enable module(s)*
Enables all selected modules for autostart.
At least one module must be selected.

*Disable module(s)*
Disables all selected modules for autostart.

*Update configuration*
Calls :program:`seiscomp update-config`. This is important after the
module configuration or bindings have changed and before restarting the
affected modules.

. This is important after the

For applying an action to all modules deselect any modules selection pressing
:kbd:`ESC` and press the corresponding action button. When one ore multiple
modules are selected, the action is only applied to those.

 and press the corresponding action button. When one ore multiple

To open the most recent log files of modules right click on the module name and
select the available log.

.. figure:: media/scconfig/system-start.png

The inventory panel allows to import, check and synchronize inventory files as
well as to inspect the content or to rename or remove the files. The panel shows
a list of inventory XML files located in folder :file:`etc/inventory`. Only
:term:`SCML` files can be used as source for inventory data but various importers
exist to integrate inventory data from other formats. After the first start
the list is empty and contains only a README file.

a list of inventory XML files located in folder 

 files can be used as source for inventory data but various importers

.. figure:: media/scconfig/inventory-empty.*

Importing station meta data is outlined in the
:ref:`tutorial on adding a station <tutorials_addstation>`.

One source of importing inventory information is ArcLink as run at
http://www.webdc.eu. After downloading the inventory XML file from ArcLink it
can be imported into SeisComP by pressing the 'Import' button in the toolbar
on the top.

. After downloading the inventory XML file from ArcLink it
can be imported into SeisComP by pressing the ‘Import’ button in the toolbar
on the top.

.. figure:: media/scconfig/inventory-import-format.*

If ArcLink is selected, the source location should then point to the ArcLink
XML file downloaded before.

.. figure:: media/scconfig/inventory-import-source.*

If successfully imported a window will popup with the execution result and
the import output.

.. figure:: media/scconfig/inventory-import-finished.*

After closing the popup the imported inventory file will show up in the list of
files. Selecting a files by right-clicking allows:

.. figure:: media/scconfig/inventory-arclink.*

*Check inventory*
The inventory is checked for issues including inconsistencies wich are reported.
The tests are based on :ref:`scinv` and listed in the documentation of this
module. Adjust sensitivity by configuring :ref:`scinv`.

The tests are based on 

 and listed in the documentation of this
module. Adjust sensitivity by configuring 

*Sync keys*
This action is part of sync but can be called also standalone. It merges all
inventory XML files and creates key files in :file:`etc/key/station_*` if a
key file does not yet exist. Existing key files are not touched unless the
station is not part of the inventory anymore.

As a result, all stations in inventory will have a corresponding key file and
each key file will have a corresponding station in inventory.

inventory XML files and creates key files in 

 if a

*Test sync*
The inventory XML files are not used directly with SeisComP. They need to
be synchronized with the database first (see :ref:`global-stations`).
Synchronization needs to merge all existing XML files and create differences
against the existing database tables. While merging conflicts can occur such
as duplicate stations with different content (e.g. different description).
This action is a dry-run of the actual synchronisation. It performs merging
and creates differences but does not send any update. This actions is useful
to test all your existing inventory files before actually modifying the
database.

.. figure:: media/scconfig/inventory-sync-test-passed.*

database.

be synchronized with the database first (see 

).
database.

*Sync*
Almost identical to *Test sync* but it does send updates to the database and
additionally synchronizes key files and resource files.

 but it does send updates to the database and

*Sync* and *Sync keys* will cause a reload of the configuration to refresh the
current binding tree (see :ref:`scconfig-bindings`).

 will cause a reload of the configuration to refresh the
current binding tree (see 

The modules panel allows configuration of all registered modules.

.. figure:: media/scconfig/modules-overview.*

The left/green part shows the list of available modules grouped by defined
categories and the right/blue part shows the current active module configuration.
The active configuration corresponds to the selected item in the list. See
section :ref:`scconfig-editing` for further information about the content panel.

section 

The binding panel configures a station for a module providing station-specific
configuration such as data acquisition or processing. You may configure station
bindings or binding profiles. The profiles are typically applied to a set of
station. Any change in the profile parameters apply to all stations bound to it.

Working with :ref:`bindings profiles <scconfig-bindings-profile>` allows to
maintain a single set of binding parameters for one or multiple stations.
:ref:`Station bindings <scconfig-bindings-station>` are useful if a set of
binding parameters are applied only to a single station. Otherwise configure
:ref:`binding profiles <scconfig-bindings-profile>`.
:ref:`Profiles <scconfig-bindings-profile>` are therefore preferred over
:ref:`station bindings <scconfig-bindings-station>` unless only one single
station shall be configured.

 allows to

 are useful if a set of

.. figure:: media/scconfig/modules-binding.*

The station tree (red) shows a tree of all available networks and their
stations. Each stations contains nodes of its configured bindings. The lower
view (orange) represents the content of the currently selected item in the
station tree.

The binding content shows the content of a binding and is similar to the
module configuration content. See section :ref:`scconfig-editing` for further
information about this panel.

module configuration content. See section 

The module tree contains all modules which can be used along with bindings.
The upper/blue window contains the modules and all available binding profiles
for each module and the lower/magenta part shows all binding profiles of the
currently selected module. This view is used to add new profiles and delete
existing profiles.

For creating a binding profile select a module in the module tree (blue area)
and right-click on the module or select the "add" button in the lower (magenta)
panel. Provide a descriptive name. Clicking on the name of the profile opens the
profile allowing to adjust the parameters.

and right-click on the module or select the “add” button in the lower (magenta)

.. figure:: media/scconfig/modules-profiles.png

Assigning a binding profile to one or more stations creates one or more bindings.
To assign a binding profile to a single station, a single network including all
stations or all networks drag a profile from the right part (blue or magenta)
to the target in the left part (red or orange).

For assigning to a set of stations/networks, select the target first by mouse
click and then drag to profile onto the selection.

It is also possible to drag and drop multiple profiles with one action.

To create an exclusive station binding for a module, it must be opened in the
binding view (orange box) by either selecting a station in the station tree
(red) or opening/clicking that station in the binding view (orange). The
binding view will then contain all currently configured bindings.

.. figure:: media/scconfig/modules-bindings-station.*

Clicking with the right mouse button into the free area will open a menu which
allows to add a binding for a module which has not yet been added. Adding
a binding will activate it and bring its content into the content panel.

To convert an existing profile into a station binding, right click on the
binding icon and select :menuselection:`Change profile --> None`. The existing
profile will be converted into a station binding and activated for editing.

binding icon and select 

. The existing

.. figure:: media/scconfig/modules-bindings-convert.*

The bindings parameters must be additionally written to the database or as for a
:term:`standalone module` converted to the specific module configuration by
updating the configuration. You may update configuration for all modules or just
the specific one. To this end, change to the
:ref:`System panel <scconfig-system>` select the specific module or none and
press the button "*Update configuration*".

 converted to the specific module configuration by

Alternatively, execute the :ref:`seiscomp` script on the command line or all or
the specific module:

The content panel of a configuration is organized as a tree. Each module/binding
name is a toplevel item and all namespace are titles of collapsible sections.
Namespaces are separated by dot in the configuration file, e.g.
:file:`scautopick.cfg which also reads :file:`global.cfg would end up in a tree
like this:

:file:

+ global
|  |
|  +-- connection
|  |    |
|  |    +-- server (global.cfg: connection.server)
|  |    |
|  |    +-- username (global.cfg: connection.username)
|  |
|  +-- database (global.cfg: database)
|
+ scautopick
   |
   +-- connection
   |    |
   |    +-- server (scautopick.cfg: connection.server)
   |    |
   |    +-- username (scautopick.cfg: connection.username)
   |
   +-- database (scautopick.cfg: database)

Figure :ref:`fig-scconfig-modules-global` describes each item in the content
panel.

.. figure:: media/scconfig/modules-global.*

   Content panel layout

The content of the input widget (except for boolean types which are mapped
to a simple checkbox) is the raw content of the configuration file without parsing.
While typing a box pops up which contains the parsed and interpreted content as
read by an application. It shows the number of parsed list items, possible
errors and the content of each list item.

Each parameter has a lock icon. If the parameter is locked it is not written
to the configuration file. If it is unlocked, it is written to the configuration
file and editable. Locking is similar to remove the line with a text
editor.

The configuration content that is displayed depends on the current mode. In system
mode :file:`etc/<module>.cfg` is configured while in user mode it is
:file:`~/.seiscomp/<module>.cfg`.

mode 

It may happen that a configuration parameter is editable but will not have any
affect on the module configuration. This is caused by the different configuration
stages. If the system configuration is active but a parameter has set in the
user configuration it cannot be overriden in the system configuration. The user
configuration is always of higher priority. scconfig will detect such problems
and will color the input widget red in such situations.

.. figure:: media/scconfig/config-warning.*

The value in the edit widget will show the currently configured value in the
active configuration file but the tooltip will show the evaluated value, the
location of the definition and a warning.

Access the documentation and the changelog of any installad package from the
Docs panel.

.. figure:: media/scconfig/documentation.png

Hyperlink target "fig-scconfig-modules-global" is not referenced.

A major component of the SeisComP system is the database. Almost all
applications have only read access to the database, but all the processing
results and objects have to be written into the database. This was the task of
scdb. In very first versions of SeisComP scdb was the only component that had
write access to the database. Its task is to connect to :ref:`scmaster` and populate
the database with all received notifier messages. Although it worked it
introduced race conditions caused by the latency of the database backend since
all other clients received the message at the same time. Accessing the database
immediately at this point in time did not guarantee that the object was
written already.

write access to the database. Its task is to connect to 

 and populate

In consequence, the scmaster itself gained write access to the database and
forwards messages to all clients after they are written to database.

:ref:`scdb` by definition does not check existing objects in the database. It only
generates INSERT/UPDATE/DELETE statements based on the data used and sends
these statements to the database. E.g. if :ref:`scdb` receives a message to
insert a new object into the database and this object exists already, the
database will raise an error because :ref:`scdb` hasn't checked it.

 by definition does not check existing objects in the database. It only
these statements to the database. E.g. if 

 receives a message to
database will raise an error because 

Now scdb can be used to maintain a backup or archive the database that is not
part of the real time processing. When running scdb as database write daemon it
can inform a client about the database connection to use. A client sends a
DatabaseRequest message and scdb sends back a DatabaseResponse message containing
the database connection parameters.

For that it connects to a messaging server and writes all received messages to a
configured database, e.g. a backup database.

The database connection received from the messaging server during the
handshake is reported to clients requesting a database address. To overwrite
the read-only database, just override the application's database address
(with the '-d' option)

the read-only database, just override the application’s database address
(with the ‘-d’ option)

Another important task of :ref:`scdb` is to populate the database with any SeisComP
data model content. In combination with :ref:`scxmldump` it can be used to copy events
from one database to another.

 is to populate the database with any SeisComP
data model content. In combination with 

For that it does not connect to a messaging server but reads data from XML
files and writes it to the database. Offline mode will be used if the
'--input/-i' option is provided. Multiple input files can be specified by
providing this option multiple times with separate filenames.

‘–input/-i’ option is provided. Multiple input files can be specified by

When reading XML files the output database address is not passed
with -o but -d. The application's database address is used.

with -o but -d. The application’s database address is used.

Connect to a messaging server and write all messages to the output database
`seiscomp` running on the host `db-server`:

   scdb -H [server] -o mysql://sysop:sysop@db-server/seiscomp

As above, but with the read-only database connection using the user `sysop`
and the output database connection using the user `writer`:

   scdb -H [server] -d mysql://sysop:sysop@db-server/seiscomp \
                    -o mysql://writer:12345@db-server/seiscomp

As above, but with the read-only database connection using the user 

scdb -H [server] -d mysql://sysop:sysop@db-server/seiscomp \
                 -o mysql://writer:12345@db-server/seiscomp

Import data from the file :file:`data.xml` and write it to the database
`seiscomp` on the host `db-server`:

   scdb -i data.xml -d mysql://sysop:sysop@db-server/seiscomp

Import data from three files at once:

   scdb -i data1.xml -i data2.xml -i data3.xml \
        -d mysql://sysop:sysop@db-server/seiscomp

scdb -i data1.xml -i data2.xml -i data3.xml \
     -d mysql://sysop:sysop@db-server/seiscomp

Define the group on scmaster to subscribe for database
requests.

Define the group on scmaster to send database response
messages to.

scdb can either process a XML file and write it to the
database or collect messages from scmaster.
If connected to scmaster, the mode defines what objects
are handled: none \(no objects at all\), notifier \(notifier
only\) or all \(all objects whereas non\-notifier objects
are INSERTED into the database\).

If connected to scmaster, this flag defines the database
connection to use for writing. The configured application
database connection \(as received from scmaster\) is reported
to clients as part of a database response messages.

Define the import XML file to be written to database.
Can be provided multiple times to import multiple files.

**Clean up a database from event and waveform quality parameters.**

|scname|'s :ref:`scmaster` is continuously writing to the database. This causes
the database to grow and to occupy much space on the harddisc. scdbstrip taggles
this problem and removes processed objects from the database older than a
configurable time span. The time comparison considers the object time, not the
time of their creation.

 is continuously writing to the database. This causes

Event parameters including events, origins, magnitudes, amplitudes, arrivals, picks,
focal mechanisms, moment tensors

scdbstrip will remove all events with an origin time and QC parameters older or
younger than specified. Default is 'older'. It will also remove all associated
objects such as picks, origins, arrivals, amplitudes and so on.

younger than specified. Default is ‘older’. It will also remove all associated

scdbstrip does not run as a daemon. To remove old objects continuously scdbstrip
should be added to the list of cronjobs running every e.g. 30 minutes. The more
often it runs the less objects it has to remove and the faster it will unlock
the database again. The timing and the parameters to be removed is controlled
by module configuration or command-line options.

* For removing specific parameters and not all in a time range, use
  :ref:`scdispatch` along with XML files created by :ref:`scxmldump` and
  :ref:`scqueryqc` for event parameters and waveform QC parameters,
  respectively.
* For removing data availability parameters use :ref:`scardac`.

For removing specific parameters and not all in a time range, use
:ref:`scdispatch` along with XML files created by :ref:`scxmldump` and
:ref:`scqueryqc` for event parameters and waveform QC parameters,

When running scdbstrip for the first time on a large database it can happen
that it aborts in case of MYSQL with the following error message:

[  3%] Delete origin references of old events...08:48:22 [error]
execute("delete Object from Object, OriginReference, old_events where
Object._oid=OriginReference._oid and
OriginReference._parent_oid=old_events._oid") = 1206 (The total number
of locks exceeds the lock table size)

Exception: ERROR: command 'delete Object from Object, OriginReference,
old_events where Object._oid=OriginReference._oid and
OriginReference._parent_oid=old_events._oid' failed

That means your MYSQL server cannot hold enough data required for deletion.
There are two solutions to this:

Increase the memory pool used by MYSQL by changing the configuration. The
minimum is 64 MBytes but modern system typically have a larger default:

   innodb_buffer_pool_size = 64M

The size of the new buffer depends on the size of the database that should
be cleaned up. Read also the section :ref:`database_configuration`. It
provides more options for optimizing your database server.

be cleaned up. Read also the section 

Run scdbstrip on smaller batches for the first time:

   $ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 1000
   $ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 900
   ...
   $ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 100

$ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 1000
$ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 900
...
$ scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 100

In the examples, database connection parameters correspond to default values.
You may thus replace ``-d mysql://sysop:sysop@localhost/seiscomp`` by
``-d localhost`` or ``-d mysql://``.

You may thus replace 

Remove event and waveform quality parameters older than 30 days

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 30

Remove event and waveform quality parameters newer than 30 days

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 30 -i

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 30 -i

Only remove waveform QC parameters older than 30 days but no others

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 30 --qc-only

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --days 30 --qc-only

Remove event and waveform quality parameters before 2000-01-01 12:00:00

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --datetime 2000-01-01T12:00:00

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --datetime 2000-01-01T12:00:00

Remove event and waveform quality parameters after 2000-01-01 12:00:00

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --datetime 2000-01-01T12:00:00 -i

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --datetime 2000-01-01T12:00:00 -i

Remove event and waveform quality parameters between 2000-01-01 12:00:00 ~ 2000-01-01 14:00:00

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --time-window 2000-01-01T12:00:00~2000-01-01T14:00:00

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --time-window 2000-01-01T12:00:00~2000-01-01T14:00:00

Remove event and waveform quality parameters before 2000-01-01 12:00:00 and after 2000-01-01 14:00:00

   scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --time-window 2000-01-01T12:00:00~2000-01-01T14:00:00 -i

scdbstrip -d mysql://sysop:sysop@localhost/seiscomp --time-window 2000-01-01T12:00:00~2000-01-01T14:00:00 -i

Invert the selection of the specified time period, that is
delete all parameters after the specified time period,
not before. When a date range is specified, then delete all
parameters before and after the time range, not in between.

Strip all event parameters including events, origins,
magnitudes, amplitudes, arrivals, picks, focal mechanisms.

**database.cleanup.keep.\***
*Parameters controlling the time to keep objects in the database.*
*The time comparison considers the object time, not the time of*
*their creation.*

Parameters controlling the time to keep objects in the database.

The number of days to preserve in the database. This
value is added to the whole timespan. Hours
and minutes are configured separately.

The number of hours to preserve in the database. This
value is added to the whole timespan. Days

The number of minutes to preserve in the database. This
and hours are configured separately.

Strip only event parameters. Other parameters, like QC, are
are ignored.

Strip only waveform quality control \(QC\) parameters. Other
parameters, like event parameters, are are ignored.
Overrides 'eq\-only'.

Overrides configuration parameter :confval:`database.cleanup.keep.days`.

Overrides configuration parameter :confval:`database.cleanup.keep.hours`.

Overrides configuration parameter :confval:`database.cleanup.keep.minutes`.

Replaces the days:hours:minutes timespan definition by an
arbitrary absolute timestamp in UTC. Format:
%Y\-%m\-%dT%H:%M:%S.

Delete objects in the specified time window.
arbitrary absolute time range in UTC. Format:
startTime\~endTime that is %Y\-%m\-%dT%H:%M:%S\~%Y\-%m\-%dT%H:%M:%S

Overrides configuration parameter :confval:`database.cleanup.invertMode`.

**Read objects (event, origin, etc) from a SCML file and sends the objects
to the messaging system.**

Read objects (event, origin, etc) from a SCML file and sends the objects
to the messaging system.

scdispatch reads an :term:`SCML` file and creates notifier objects for them that
are sent to the :ref:`messaging <concepts_messaging>` and the corresponding
messaging groups (see :option:`--routingtable`). In contrast to :ref:`scdb`
which writes SCML files directly into the :ref:`database <concepts_database>`
scdispatch uses the messaging bus. If :ref:`scmaster` is configured with the
database plugin, messages will end up in the database as well.

 file and creates notifier objects for them that
are sent to the 

 is configured with the

scdispatch can work in two modes applying different
:ref:`operations <scdispatch-operations>`:

*Without database check:* One of the :ref:`operations <scdispatch-operations>`
*add*, *update* or *remove* is selected along with the option :option:`-O`. In
that case all objects in the :term:`SCML` are encapsulated in a notifier with
that specific operation and sent to the messaging. No check is performed if
the object is already in the database or not.

 are encapsulated in a notifier with

*With database check:* The option :option:`-O` is not given or the
option is used along with one of the :ref:`operations <scdispatch-operations>`
*merge* or *merge-without-remove*. scdispatch first tries to load the corresponding
objects from the database and calculates differences. It will then create the
corresponding notifiers with operations *add*, *update* or *remove* and sends
them to the messaging. That mode is quite close to a sync operation with the
exception that top level objects (such as origin or event) that are not part
of the input SCML are left untouched in the database. It can be used to
synchronize event information from one system with another.

. scdispatch first tries to load the corresponding
corresponding notifiers with operations 

 and sends

Different operations can be chosen along with the option :option:`-O`.
If :option:`-O` is not given, *merge* is assumed by default.

*Add*: All objects are sent trying to be added to the database. If they
already exist in the database, they will be rejected and not spread through
the messaging. Modules connected to the messaging will not receive rejected
objects.

: All objects are sent trying to be added to the database. If they
objects.

*Remove*: All sent objects with all their attributes and child objects are
removed from the database. Modules connected to the messaging will not receive
any sent object.

: All sent objects with all their attributes and child objects are

*Update*: All objects are sent trying to be updated to the database along with
all of their child objects and attributes. Sent objects not existing in the
database will be ignored and not received by any module connected to the
messaging. Child objects and attributes existing in the database but not
included in the sent object will be removed as well.

: All objects are sent trying to be updated to the database along with

*Merge* (default): Applies *Add* and *Update* and requires a database
connection.

*Merge-without-remove*: Applies *Add* and *Update* and requires a database
connection. However, no objects are removed from the database.

 and requires a database

All |scname| objects along are listed and described along with their child
objects and attributes in the :ref:`API documentation <api-datamodel-python>`.

 objects along are listed and described along with their child
objects and attributes in the 

Send different objects from a :term:`SCML` file for merging (adding or
updating). The option :option:`-O` can be ommitted because the default
behavior is to merge:

   scdispatch -i test.xml -O merge
   scdispatch -i test.xml

Send all objects by ignoring events. When :ref:`scevent` receives origins it
will create new events or associate the origins to existing ones. The ignored
events may be already existing with different IDs. Hence, event duplication
is avoided by ignoring them.

   scdispatch -i test.xml -e

 receives origins it

Send new objects to be added:

   scdispatch -i test.xml -O add

Send an update of objects:

   scdispatch -i test.xml -O update

Send objects to be removed:

   scdispatch -i test.xml -O remove

Compare new objects with the database content and send the difference (optionally without removing objects):

   scdispatch -i test.xml -O merge-without-remove

scdispatch -i test.xml -O merge
scdispatch -i test.xml -O merge-without-remove

Offline mode: all operations can be performed without the messaging system using xml files:

   scdispatch -i test.xml -O operation --create-notifier > notifier.xml

then:

   scdb -i notifier.xml

scdispatch -i test.xml -O operation --create-notifier > notifier.xml

Subsets of SCML Objects

It can be useful to import a subset of QuakeML objects, e.g. Origins from other
agencies and then allow :ref:`scevent` to associate them to existing
events (and possibly prefer them based on the rules in scevent) or create new
events for the origins. If the event objects from a SCML file are not required
to be sent to the messaging then either they should be removed (e.g. using XSLT)
and all the remaining objects in the file added:

or the **event objects** can be left out of the routing table, e.g.

   scdispatch -i test.xml -O add \
              --routingtable Pick:PICK, \
                             Amplitude:AMPLITUDE, \
                             Origin:LOCATION,StationMagnitude:MAGNITUDE, \
                             Magnitude:MAGNITUDE

.. hint::

   The option :option:`--no-event` is a wrapper for removing Event:EVENT from
   the routing table. With this option no event objects will be sent which may
   be useful if just the origins with magnitudes, amplitudes, arrivals, picks, etc.
   shall be integrated, e.g. after XML-based playbacks.

agencies and then allow 

 to associate them to existing

scdispatch -i test.xml -O add \
           --routingtable Pick:PICK, \
                          Amplitude:AMPLITUDE, \
                          Origin:LOCATION,StationMagnitude:MAGNITUDE, \
                          Magnitude:MAGNITUDE

The option :option:`--no-event` is a wrapper for removing Event:EVENT from
the routing table. With this option no event objects will be sent which may
be useful if just the origins with magnitudes, amplitudes, arrivals, picks, etc.
shall be integrated, e.g. after XML-based playbacks.

 is a wrapper for removing Event:EVENT from

Testing

For testing it is useful to watch the results of dispatch with :ref:`scolv` or
:ref:`scxmldump`. It is also useful to clean the database and logs to remove
objects from persistent storage to allow repeated reloading of a file.

.. note::

   The following will clear all events from the database and any other
   other object persistence. Modify the mysql command to suit your db setup.

   .. code-block:: sh

      mysql -u root --password='my$q1' -e "DROP DATABASE IF EXISTS seiscomp; \
        CREATE DATABASE seiscomp CHARACTER SET utf8 COLLATE utf8_bin; \
        GRANT ALL ON seiscomp.* TO 'sysop'@'localhost' IDENTIFIED BY 'sysop'; \
        USE seiscomp;source seiscomp/trunk/share/db/mysql.sql;"

      seiscomp start

. It is also useful to clean the database and logs to remove

The following will clear all events from the database and any other
other object persistence. Modify the mysql command to suit your db setup.

   mysql -u root --password='my$q1' -e "DROP DATABASE IF EXISTS seiscomp; \
     CREATE DATABASE seiscomp CHARACTER SET utf8 COLLATE utf8_bin; \
     GRANT ALL ON seiscomp.* TO 'sysop'@'localhost' IDENTIFIED BY 'sysop'; \
     USE seiscomp;source seiscomp/trunk/share/db/mysql.sql;"

mysql -u root --password='my$q1' -e "DROP DATABASE IF EXISTS seiscomp; \
  CREATE DATABASE seiscomp CHARACTER SET utf8 COLLATE utf8_bin; \
  GRANT ALL ON seiscomp.* TO 'sysop'@'localhost' IDENTIFIED BY 'sysop'; \
  USE seiscomp;source seiscomp/trunk/share/db/mysql.sql;"

scdispatch inherits :ref:`global options<global-configuration>`.

Do not send any event object which are ignored when reading
event parameters.

Merge and merge\-without\-remove require a database
connection. Both will read the object corresponding to the
sent object from the database and calculate the differences.
Merge\-without\-remove behaves like merge with the exception
that remove operations will be filtered out and no objects
in the database will be removed.

If add, update or remove is specified, then all objects in
XML are sent with the given operation regardless of their
existence in the database.

Specify routing table as comma separated list of object:group
pairs, e.g. \"Origin:LOCATION,Event:EVENT\". When an
object should be routed to a group and no table entry for
that particular class type is available, all parent objects
are checked for valid routing entries and the first found is
used. E.g. if only \"Origin:LOCATION\" is specified
but the input file contains also Arrivals which are child
objects of Origin then the routing entry of Origin is used
because of the parent\-child relationship between Origin and
Arrival.

Do not send any object. All notifiers will be written to
standard output in XML format.

**Dump bindings or module configurations used by a specific module or global
for particular stations.**

Dump bindings or module configurations used by a specific module or global
for particular stations.

scdumpcfg reads and prints the
:ref:`module or bindings configuration <concepts_configuration>`
for a specific module or for global. It even prints the global bindings for modules
which do not have module bindings, such as :ref:`scmv`.

which do not have module bindings, such as 

This command-line utility is therefore useful for debugging configuration parameters.

Instead of printing parameters and values for stations, the option :option:`--nlsc`
allows printing a list of the channel considering bindings. The output may be
used, e.g., for

Instead of printing parameters and values for stations, the option 

Related to :program:`scdumpcfg` is :ref:`bindings2cfg` which dumps the bindings
configuration to :term:`SCML`.

Dump the global bindings configuration for all stations which have global bindings:

   scdumpcfg global -d mysql://sysop:sysop@localhost/seiscomp -B

Dump the bindings configuration for all stations which have bindings to a
:ref:`scautopick` profile. Additionally use *-G* as :ref:`scautopick` inherits global
bindings:

   scdumpcfg scautopick -d localhost -GB

bindings:

Dump the module global module configuration specifcally searching for the map
zoom sensitivity and output the result in the format of the |scname| module

   scdumpcfg global -d localhost --cfg -P map.zoom.sensitivity

zoom sensitivity and output the result in the format of the 

Dump the module configuration of scautopick and output in the format of the
|scname| module configuration:

   scdumpcfg scautopick -d localhost --cfg

Dump global bindings configuration considerd by scmv:

   scdumpcfg scmv -d localhost -BG

Dump the channel codes defined by scautopick binding as a list of NET.STA.LOC.CHA:

   scdumpcfg scautopick -d localhost -B --nslc

Specify the parameter name\(s\) to filter for. Use comma
separation of multiple parameters.

Print the list of channels which have bindings of the given
module. Requires to set \-B. Can be used by other modules,
e.g., invextr, scart, scmssort, scevtstreams.

scesv is the summary display of the event parameters. It shows the primary information
about the current event including location, time, strength, type and processing status.
Additional to the current event older events can also be chosen from the eventlist in the
events tab.

Events tab showing the list of loaded events, compare Fig. :ref:`fig-events`

Summary tab with the details of the selected event, see Fig. :ref:`fig-summary`.

The Events tab shows the eventlist of the time span defined on the bottom side of
the window. A the Events tab is also available for other GUIs, such as :ref:`scolv`
it can be configured in the global module configuration.
The :ref:`description of the Events tab in scolv <scolv-events-tab>` provides more
details.

the window. A the Events tab is also available for other GUIs, such as 

:ref:`description of the Events tab in scolv <scolv-events-tab>`

.. figure:: media/scesv/scesv-events.png
   :width: 16cm

   Eventlist tab

   Tab1-2: Summary/Events tab, EventList: list of the last events with summarized information,
   List options: Show fake events, Reading 1: spinbox to limit timespan of displayed events (in days),
   Reading 2: spinboxes to limit timespan of displayed events (specified dates), Status: connection status

Tab1-2: Summary/Events tab, EventList: list of the last events with summarized information,
List options: Show fake events, Reading 1: spinbox to limit timespan of displayed events (in days),
Reading 2: spinboxes to limit timespan of displayed events (specified dates), Status: connection status

As for :ref:`scolv` filtering of the event list and custom information can be
added to the event list by configuration. Read the scolv documentation on
:ref:`event filtering <scolv-events-filtering>` and :ref:`custom action <scolv-custom-actions>`
for the details.

 filtering of the event list and custom information can be

The most recent (default) or the event selected from the event list is shown in
the Summary tab, see Fig. :ref:`fig-summary`.
Here the information are highlighted in four sections:

the Summary tab, see Fig. 

.. figure:: media/scesv/scesv-summary.png

   Summary tab

   Tab1-2: Summary/Events tab, Origin Time: origin time in UTC and relative to now, Map: map with region
   and location and stations, Magnitude: different magnitude types with values and counts,
   Origin Info: hypocenter information with position, phase count and azimuthal gap,
   Event: earthquake location, Station: station with ray-path, Details: "Show Details" button to open
   detailed information in :ref:`scolv`, Event Type: event type combo box to set event type, Status: connection status

Tab1-2: Summary/Events tab, Origin Time: origin time in UTC and relative to now, Map: map with region
and location and stations, Magnitude: different magnitude types with values and counts,
Origin Info: hypocenter information with position, phase count and azimuthal gap,
Event: earthquake location, Station: station with ray-path, Details: "Show Details" button to open
detailed information in :ref:`scolv`, Event Type: event type combo box to set event type, Status: connection status

Event: earthquake location, Station: station with ray-path, Details: “Show Details” button to open
detailed information in 

, Event Type: event type combo box to set event type, Status: connection status

If enabled, the last automatic solution is displayed next to the
current solution in the summary panel. If the last automatic
solution differs from the current solution it is displayed
in red. If both solutions match it is displayed in gray.

If enabled, only the most recent event is shown even if an update of
an older event is being received.

If enabled, the map is centered around the most recent event event.

If enabled, an additional button is displayed which allows to
switch back the latest automatic solution. This button triggers
an command for scevent to prioritize automatic solutions until
the next manual solution is available.

If the event type is either \"other\" or
\"not existing\" and this flag is true then the
event will not be shown.

If enabled, the current map is exported to file.
The filename is appened to the parameter list of script0.
The script has to take ownership of the file.

If enabled, the parameter list of script0 is event ID,
arrival count, magnitude, description.

If disabled, the parameter list of script0 is event ID,
preferredOriginID, preferredMagnitudeID,
preferredFocalMechanismID.

The filename is appened to the parameter list of script1.

If enabled, the parameter list of script1 is event ID,
arrivalCount, magnitude, description.

If disabled, the parameter list of script1 is event ID,

**display.\***
*Adjust content or display custom information in the Summary tab.*

Adjust content or display custom information in the Summary tab.

**poi.\***
*Display information related to a point of interest (POI)*
*read from the cities XML file.*

Message conversion string that converts a POI into the text
displayed under the region label. There are different
placeholders that can be used: \@dist\@, \@dir\@, \@poi\@ and \@region\@.

Path to the script called when configurable
button0 is pressed; EventID, arrival count, magnitude and
the additional location information string are passed as
parameters \$1, \$2, \$3 and \$4, respectively.

button1 is pressed; EventID, arrival count, magnitude and

**Associates an Origin to an Event or forms a new Event if no match is found.
Selects the preferred origin, magnitude and focal mechanism.**

Associates an Origin to an Event or forms a new Event if no match is found.
Selects the preferred origin, magnitude and focal mechanism.

As a consequence of a real-time system the |scname| modules creates several
:term:`origins <origin>` (results of localization processes) for one earthquake
or other seismic events because as time
goes by more seismic phases are available. scevent receives these origins and
associates the origins to :term:`events <event>`. It is also possible to import
and associate origins from other agencies.

 (results of localization processes) for one earthquake
associates the origins to 

. It is also possible to import

Set the :ref:`preferred origin <scevent-preforg>` from all available origins.

Set the :ref:`preferred magnitude <scevent-prefmag>` from all available magnitudes.

Set the :ref:`preferred focal mechanism <scevent-preffm>` from all available focal mechanisms.

*Optional:* Set the event type of automatic origins based by the plugin
:ref:`evrc <scevent_regioncheck>` based on the hypocenter location of the
preferred origin. This requires the configuration of the
:ref:`evrc <scevent_regioncheck>` plugin and of geographic regions by
:ref:`polygons in BNA or GeoJSON format <sec-gui_layers>`.

 based on the hypocenter location of the

scevent associates origins to events by searching for the best match of the new
(incoming) origin to other origins for existing events:

Associate origins belonging to belonging to **the same seismic event**
to the same event object in |scname|.

Associate origins belonging to **different seismic events**
to different event objects in |scname|.

ID of agency which has created the origin:
:confval:`processing.blacklist.agencies`,
:confval:`processing.whitelist.agencies` (global parameters),

Hypocenter parameters: :confval:`eventAssociation.region.rect`,
:confval:`eventAssociation.region.minDepth`,
:confval:`eventAssociation.region.maxDepth`.

The new origin is matched to existing origins by comparing differences in epicenter,
origin time, and :term:`arrivals <arrival>` (associated picks).
The new origin is matched to an existing origin which has the highest rank in
the following three groups (1, 2, 3):

origin time, and 

 (associated picks).

Location and Time (lowest)

The difference in horizontal location is less than
:confval:`eventAssociation.maximumDistance` (degrees)
and the difference in origin times is less than
:confval:`eventAssociation.maximumTimeSpan`.

Picks

The two origins have more than :confval:`eventAssociation.minimumMatchingArrivals`
matching picks. Picks are matched either by ID or by time depending
on :confval:`eventAssociation.maximumMatchingArrivalTimeDiff`.

on 

Picks and Location and Time (highest)

This is the best match, for which both the location-and-time and picks
criteria above are satisfied.

If more than one origin is found in the highest ranking class, then the first
one of them is chosen.

For efficiency events in the cache are scanned first and if no matches are found,
the database is scanned for the time window :confval:`eventAssociation.eventTimeBefore` -
:confval:`eventAssociation.eventTimeAfter`
around the incoming Origin time. The cached events are ordered by eventID and
thus in time.

the database is scanned for the time window 

If no event with an origin that matches the incoming origin is found, then a
new event is formed and the origin is associated to that event. The following
criteria are applied to allow the creation of the new event:

The agency for the origin is not black listed (:confval:`processing.blacklist.agencies`).

The origin is automatic and it has more than :confval:`eventAssociation.minimumDefiningPhases`
:term:`arrivals <arrival>` (associated picks).

.. figure:: media/scevent/Association_of_an_origin_by_matching_picks.jpg
    :scale: 50 %
    :alt: alternate association of an origin by matching picks.
    :align: center

    Association of an origin to an event by matching picks.

The preferred origin is set by ranking of all associated origins. The ranking
is controlled by :confval:`eventAssociation.priorities` and related configuration
parameters.

is controlled by 

The preferred magnitude is set by ranking of the
:ref:`summary magnitude <scmag-summaryM>` and all :ref:`network magnitudes <scmag-networkM>`
of the preferred origin. The ranking is mainly controlled by
:confval:`eventAssociation.magTypes` and :confval:`eventAssociation.minimumMagnitudes`
and related configuration parameters.

The most recent manual focal mechanism or, if no manual ones are unavailable, the
most recent automatic focal mechnisms becomes preferred.

The ID of an event or eventID uniquely identifies an event. The ID is derived from
the time of occurrence of the event within a year. As configured by :confval:`eventIDPattern`
it typically consists of a prefix configured by :confval:`eventIDPrefix` and a
string containing the year and a set of characters or numbers defining the time.

the time of occurrence of the event within a year. As configured by 

 and a

scevent can be commanded by journals to do a certain action. Journal entries are being
received via the messaging bus to any of the subscribed groups. A journal entry
contains an action, a subject (a publicID of an object) and optional parameters.
Journals can be interactively sent to the messaging by :ref:`scsendjournal`.

Journals can be interactively sent to the messaging by 

If scevent has handled an action, it will send a reply journal entry with
an action formed from the origin action name plus **OK** or **Failed**. The
parameters of the journal entry contain a possible reason.

an action formed from the origin action name plus 

. The

Grabs an origin and associates it to the given event. If the origin is
already associated with another event then its reference to this event
will be removed.

Merges an event (source) into another event (target). After successful
completion the source event will be deleted.

Adds or updates the event description with type "earthquake name".

Adds or updates the event description with type “earthquake name”.

Creates a new event based on a given origin. The origin must not yet be
associated with another event.

objectID -- The origin publicID of the origin which will be used to
create the new event.

The origin publicID of the origin which will be used to

Sets the preferred focal mechanism ID of an event. If a focal mechanism ID
is passed then it will be fixed as preferred solution for this event and
any subsequent focal mechanism associations will not cause a change of the
preferred focal mechanism.

If an empty focal mechanism ID is passed then this is considered as "unfix"
and scevent will switch back to automatic preferred selection mode.

If an empty focal mechanism ID is passed then this is considered as “unfix”

parameters -- The focal mechanism ID which will become preferred or empty.

Set the preferred magnitude of the event matching the requested magnitude
type.

Sets the moment magnitude (Mw) of the preferred focal mechanism as
preferred magnitude of the event.

Releases the fixed origin constraint. This call is equal to :code:`EvPrefOrgID(eventID, '')`.

Sets the preferred origin based on an evaluation mode. The configured
priorities are still valid. If an empty evaluation mode is passed then
scevent releases this constraint.

parameters -- The evaluation mode ("automatic", "manual") or empty

Sets the preferred origin ID of an event. If an origin ID is passed then
it will be fixed as preferred solution for this event and any subsequent
origin associations will not cause a change of the preferred origin.

If an empty origin ID is passed then this is considered as "unfix" and
scevent will switch back to automatic preferred selection mode.

If an empty origin ID is passed then this is considered as “unfix” and

parameters -- The origin ID which will become preferred or empty.

Refreshes the event information. This operation can be useful if the
configured fep region files have changed on disc and scevent should
update the region information. Changed plugin parameters can be another
reason to refresh the event status.

Remove an origin reference from an event and create a new event for
this origin.

objectID -- The ID of an existing event holding a reference to the
given origin ID.

The ID of an existing event holding a reference to the

:ref:`RegionCheck <scevent_regioncheck>`

evrc plugin for scevent

Configures the number of event ID slots to look back and
forth when an event ID is already taken. The default in
previous versions was 5. Now \-1 means that the margin is
determined automatically based on \"eventAssociation.eventTimeBefore\"
and \"eventAssociation.eventTimeAfter\". According to the
configured \"eventIDPattern\" a fixed time range per slot
can be computed and with that width the number of look
ahead slots and look back slots can be computed based on
the given time ranges for event association.

If enabled, then the EventDescription with type
'Flinn\-Engdahl region' will be populated with the
Flinn\-Engdahl region name.

Defines the bind adress of the REST API endpoint. This API
allows to query for possible event associations of origin
candidates.

Defines a list of event ID patterns to be blocked. The
items of this list are only matched against %c, %C, %d,
%x and %X of the eventIDPattern description. Year \(%Y\)
and prefix \(%p\) are not matched. The match is
case\-sensitive, so 'abcd' would only by blocked in
combination with %c. If %C is used, 'ABCD' is matched.

**eventAssociation.\***
*Criteria defining if Origins are associated to an event*
*and which Origins and magnitudes become preferred.*

Minimum number of Picks for an Origin that is automatic and cannot be
associated with an Event to be allowed to form an new Event.

Minimum score of an automatic Origin to be allowed to
form an new Event. This requires an activated score
plugin and a score processor. Configure \"score\"
for defining the score processor and the score processor
parameters. If minimumScore is defined, \"minimumDefiningPhases\"
has no effect on association as this phase check will be
superseded by the score check. It is the task of the score
processor to evaluate a proper score for all input Origins.

Ignore and do not associate Origins derived
from CMT\/MT inversions.

Time range before the Origin time of an incoming Origin to search for
matching events.

Time range after the Origin time of an incoming Origin to search for

Minimum number of matching picks between two Origins to be associated
to the same event.

eventAssociation.maximumMatchingArrivalTimeDiff; configuration value

Negative time window: compare only pickIDs to find
matching arrivals. A non negative
value \(including 0\) compares pick times regardless
of the pickID. Pass: \|pick1.time \- pick2.time\| <\= threshold

This parameter is only used in conjunction with
eventAssociation.maximumMatchingArrivalTimeDiff.
If a station has multiple associated arrivals for a
particular event, this flag defines if the time distance
of a new pick to all arrivals must be within
eventAssociation.maximumMatchingArrivalTimeDiff
or if one matching arrival is enough.

eventAssociation.allowLooseAssociatedArrivals; configuration value

Associates an Origin with an existing event  if the Origin
time differs not more than 60 seconds unless the
minimumMatchingArrivals criteria matches.

Allowed location difference between an incoming Origin compared with
preferred Origins to get associated.

Magnitude type priority list for becoming a preferred magnitude for an
event.

If true, one magnitude will be preferred even if magnitude criteria are
not fullfilled.

Minimum number of station magnitudes referenced to a network magnitude
to become a preferred magnitude.

Minimum number of station magnitudes required for Mw\(mB\) to be considered as
preferred magnitude.

Minimum number of station magnitudes which ensures that Mw\(mB\) will be
preferred and not mb.

Average between mb and Mw\(mB\) which must be exceeded to become Mw\(mB\)
preferred.

eventAssociation.magPriorityOverStationCount; configuration value

If false then the station count rules out the magnitude priority
which is only taken into account if two magnitudes have the
same station count.

If true then the priority rules out the station count
same priority.

The general priority list to decide if an Origin becomes preferred.
The priority decreases in the order of the parameters.
This list is not used unless this parameter is activated.

Empty priority list: scevent replicates the default hard wired behaviour:
AGENCY, STATUS, PHASES_AUTOMATIC, TIME_AUTOMATIC

Each item in the list corresponds to a check that is performed.
Each check computes a score of the incoming Origin \(s1\) and the
current preferred Origin \(s2\). If the s1 is lower than s2,
the incoming Origin is rejected and does not become preferred.
All subsequent checks are ignored.
If s1 is equal to s2, the next check in the list is performed.
If s1 is larger than s2, the Origin becomes preferred and
all subsequent checks are ignored.

MODE: evaluation mode priority: 0 \= unset, 1 \= automatic, 2 \= manual, manual over\-rules automatic

STATUS: priority combined from evaluation status and evaluation mode:
\-100 \= status is rejected, \-1 \= status is reported,
0 \= status is preliminary or status is unset and mode is automatic,
1 \= status is confirmed or status is unset and mode is manual,
2 \= status is reviewed, 3 \= status is final,

PHASES_AUTOMATIC: only checks phase priorities for incoming automatic Origins

TIME: more recent Origins \(creationTime\) have higher priorities

TIME_AUTOMATIC: only check creationTime priority on incoming automatic Origins

SCORE: evaluates the score according to a configured ScoreProcessor and
prefers the Origin\/Focalmechanism with the highest score.

The agencyID priority list. When the eventtool comes to the point to
select a preferred Origin based on AGENCY it orders all Origins by its agency priority and
selects then the best one among the highest priority agency. It also defines the
agency priority for custom priority checks
\(eventAssociation.priorities\).

The parameter is only considered when defined in \"priorities\".

The author priority list. When the eventtool comes to the point to
select a preferred Origin based on AUTHOR it orders all Origins by its author priority and
selects then the best one among the highest priority author. It also defines the
author priority for custom priority checks \(eventAssociation.priorities\).

The method priority list. When the eventtool comes to the point to
select a preferred Origin based on METHOD it orders all Origins by its methodID priority and
selects then the best one among the highest priority method. It also defines the
method priority for custom priority checks \(eventAssociation.priorities\).
A defined method string must match exactly the string in Origin.methodID.

Defines the ScoreProcessor interface to be used along
with priority \"SCORE\".

eventAssociation.declareFakeEventForRejectedOrigin; configuration value

If the preferred Origin has evaluation status 'rejected', the
Event type will be set to 'not existing' unless the Event
type has been fixed by an operator or the preferred Origin
has been fixed.

If the preferred Origin has evaluation status ‘rejected’, the
Event type will be set to ‘not existing’ unless the Event

Configures a timespan to delay Event creation. If a new Origin arrives
which cannot be associated to an existing Event, delay the Event creation for a certain
timespan.

**eventAssociation.region.\***
*Region filter for creating events. Use with care! Origins*
*outside may be ignored even if they would*
*become preferred otherwise.*

**eventAssociation.delayFilter.\***
*The delayFilter group configures an Origin filter to activate the delay feature for*
*this Origin. If more than one filter is given they are combined with AND.*

The delayFilter group configures an Origin filter to activate the delay feature for

this Origin. If more than one filter is given they are combined with AND.

eventAssociation.delayFilter.evaluationMode; configuration value

The evaluation mode of the Origin to be delayed. Can be either \"manual\"
or \"automatic\".

**eventType.\***
*Set the event type based on type comments of picks. Add the*
*plugin "evtype" to the list of plugins in the order*
*of priority to make this feature available.*

Allow setting the event type.
The type of events which have manual origins will
not be changed unless configured explicitely by
\"overwriteManual\".

Allow setting the event type if the mode of the preferred
origin is manual or if the event type was set manually.

Consider comments of picks which have one of the
given values. An empty list disables setting the type.

**rc.\***
*Test if events lie within or outside geographic regions defined*
*by polygons.*
*Events within a region are flagged as positive, outside as negative.*
*The event type is set accordingly. Add the*
*plugin "evrc" to the plugins parameter in the*
*order of priority to make this feature available. Read the*
*documentation of the RegionCheck for more details.*

Events within a region are flagged as positive, outside as negative.

Allow overwriting existing event types. Disabling does not
allow accounting for changes in source region.

The list of closed polygon names defining regions for
flagging event as positive or negative.
A polygon name defines a positive region but names with
prefix \!  \(exclamation mark\) define negative regions.
Evaluation is done in the order of the polygons. The last
matching criteria applies and the event type is set
accordingly.

Default: If events are not positive or are negative regions
the event type is set to \"outside of network
interest\". Default:
\"\!reject\", use \"accecpt\" to overwrite
the default.

All events are flagged positive but events within the
polygon \"quarries\" are negative:

Events within the polygon \"germany\" are flagged
positive but all other events and events within the polygon
\"quarries\" are negaitve:

polygon \"germany\" are negative and all events
within the polygon \"saxony\" are positive:

Consider the event type, minDepth and maxDepth values from
the polygons defined by GeoJSON or BNA files. Read the
documentation of the RegionCheck plugin for the details.

When eventType is defined in the polygons, the value
supersedes values of 'eventTypePositive' and
'eventTypeNegative'.
If not set, 'eventTypePositive' and 'eventTypeNegative' are
considered.

supersedes values of ‘eventTypePositive’ and
‘eventTypeNegative’.
If not set, ‘eventTypePositive’ and ‘eventTypeNegative’ are

New type of an event which is flagged positive. Ignored
if 'readEventTypeFromBNA' is active and the polygons
define eventType.

if ‘readEventTypeFromBNA’ is active and the polygons

New type of an event which is flagged negative. Ignored

OriginID to be associated. When given no messages are sent.
Only the status of the association is written to stdout.

The *evtype* pluging sets the type of an event based on comments of picks which
are associated to the preferred origin of this event. The IDs of the comments
from which the comment values are considered must be configured by
:confval:`eventType.pickCommentIDs` and the name of the plugin, *evtype*, must
be added to the :confval:`plugins` parameter. The text of the considered
comments must contain a supported event type.

 pluging sets the type of an event based on comments of picks which

 parameter. The text of the considered

Other criteria for setting the event type may be added later to this plugin.

<pick publicID="20160914.075944.29-deepc-AB.XYZ..HHZ">
  ...
  <comment>
    <text>earthquake</text>
    <id>deepc:eventTypeHint</id>
  ...
</pick>

plugins = evtype

eventType.setEventType = true
eventType.pickCommentIDs = scrttv:eventTypeHint, deepc:eventTypeHint

Hyperlink target "scevent-eventtype-configuration" is not referenced.

*evrc* (event region check) is a :term:`plugin` for :ref:`scevent` setting the
event type by comparing the location of the preferred origin with
:ref:`defined regions <sec-evrc-regions>`.

 setting the

Events for which the mode of the preferred origin is "manual" are by default
not considered.

Events for which the mode of the preferred origin is “manual” are by default

The regions are defined by closed polygons provided in
:ref:`GeoJSON or BNA files <sec-gui_layers>`. Configure :confval:`rc.regions` to
consider a region defined by its region name. The name is given either

 to

**Positive region:** All events within the area enclosed by the polygon are
flagged positive, all events not enclosed by the polygon are flagged negative.

 All events within the area enclosed by the polygon are

**Negative region:** All events within the area enclosed by the polygon are
flagged negative, all events not enclosed by the polygon are flagged positive.

Regions are negative if the :confval:`name <rc.regions>` of the enclosing polygon
starts with **!** (exclamation mark. Otherwise the region is positive.

If a list of region names is defined, the last matching region in the list takes
priority when treating events.

* When regions are defined or configured multiple times by polygons or
  :confval:`rc.regions`, respectively, the region is not unique and the
  region check is entirely inactive.
* When a region is not defined but configured in :confval:`rc.regions`, the
  region check remains active but the region is ignored.

In both cases, error log message are printed.

When regions are defined or configured multiple times by polygons or
:confval:`rc.regions`, respectively, the region is not unique and the
region check is entirely inactive.

, respectively, the region is not unique and the

When a region is not defined but configured in :confval:`rc.regions`, the
region check remains active but the region is ignored.

When the *evrc* plugin is loaded and configured, the location of the preferred
origin of an events is compared with the defined regions.
Events within a positive and a negative region are flagged positive and
negative, respectively. By default it sets the event type to "outside of network
interest" if the event is flagged negative.

 plugin is loaded and configured, the location of the preferred
negative, respectively. By default it sets the event type to “outside of network
interest” if the event is flagged negative.

When activating :confval:`rc.readEventTypeFromBNA` the type of positive
events is set according to the eventType defined in
:ref:`polygon <sec-evrc-polygon>`.
The type of negative events is set according to :confval:`rc.eventTypeNegative`.
Prepend 'accept' to the list of polygons to unset the type of negative events.

 the type of positive

.
Prepend ‘accept’ to the list of polygons to unset the type of negative events.

When :confval:`rc.readEventTypeFromBNA` is inactive, the event type is set
based on :confval:`rc.eventTypePositive` and :confval:`rc.eventTypeNegative`:

#. by default the type of all negative events (events within negative regions)
   is set to "outside of network interest".
   Prepend **accept** to :confval:`rc.regions` to unset the event type for
   negative events.

#. **positive:** The event type of positive events is set to
   :confval:`rc.eventTypePositive`. For empty :confval:`rc.eventTypePositive`
   the type is unset.

#. **negative:** The event type of negative events is set to
   :confval:`rc.eventTypeNegative`. The default type for negative events is
   "outside of network interest".

by default the type of all negative events (events within negative regions)
is set to "outside of network interest".
Prepend **accept** to :confval:`rc.regions` to unset the event type for
negative events.

is set to “outside of network interest”.
Prepend 

**positive:** The event type of positive events is set to
:confval:`rc.eventTypePositive`. For empty :confval:`rc.eventTypePositive`
the type is unset.

**negative:** The event type of negative events is set to
:confval:`rc.eventTypeNegative`. The default type for negative events is
"outside of network interest".

. The default type for negative events is
“outside of network interest”.

Evaluation is made based on the order of the regions names defined in
:confval:`rc.regions`. The last matching criteria applies.
In this way disjunct and overlapping regions with different behavior can be
defined. If events ARE NOT within positive regions their type is set to

. The last matching criteria applies.

.. figure:: media/regions.png
  :align: center
  :width: 10cm

  Disjunct and overlapping regions in front of a default.

The event types are either set based the types configured in
:confval:`rc.eventTypePositive` and :confval:`rc.eventTypeNegative`
or based on the type provided in the polygon files if
:confval:`rc.readEventTypeFromBNA` is active.

For defining the event type, any value defined in :cite:t:`uml`.
The list of valid values can also be found in the Event tab of :ref:`scolv`: Type.

.
The list of valid values can also be found in the Event tab of 

Invalid values result in errors or debug messages which are reported depending
on the verbosity level of :ref:`scevent` as given :confval:`logging.level` or
:option:`--verbosity`/:option:`-v`.

on the verbosity level of 

If :confval:`rc.readEventTypeFromBNA` is active, the event type is read from the
polygon defining a region. Use a key-value pair in double quotes to specify the
type where the key is "eventType" and the value is the event type. The
formatting depends on the file format.

 is active, the event type is read from the
type where the key is “eventType” and the value is the event type. The

The depth of the event can be tested, as well. For events within a region but
with depth outside a depth range the type is not set. The limits of the depth
range can be added to the polygons using the key words *minDepth* and
*maxDepth*. For considering a polygon, the depth *d* of the preferred
:term:`origin` of an :term:`event` must be within the range

range can be added to the polygons using the key words 

The origin depth is only tested if minDepth or maxDepth or both are set and if

* The names of polygons, e.g. coal, are case sensitive and must not contain
  commas.
* A hierarchy applies to the reading of GeoJSON/BNA files. Read the section
  :ref:`sec-gui_layers-vector` for the details.

The names of polygons, e.g. coal, are case sensitive and must not contain
commas.

A hierarchy applies to the reading of GeoJSON/BNA files. Read the section
:ref:`sec-gui_layers-vector` for the details.

13.392,50.3002
13.2244,50.4106
13.4744,50.5347
13.6886,50.4945
13.6089,50.358

where the name of the polygon / region is "coal" and the considered event type
is "mining explosion". The name and the rank are mandatory fields. All key-value
pairs for eventType, minDepth and maxDepth are written within one single field
enclosed by double quotes.

where the name of the polygon / region is “coal” and the considered event type
is “mining explosion”. The name and the rank are mandatory fields. All key-value

Single Feature

For a single Feature and Poylgon, eventType, minDepth are maxDepth are added as
key-value pair to the properities of the feature:

   {
       "type": "Feature",
       "geometry": {
               [
                   [-77.075, -37.7108], [-76.2196, -21.2587], [-69.0919, -7.10994]
               ]
           ]
       },
       "properties": {
           "name": "mines",
           "rank": 1,
           "eventType": "mining explosion",
           "minDepth": -5,
           "maxDepth": 10
       }
   }

{
    "type": "Feature",
    "geometry": {
            [
                [-77.075, -37.7108], [-76.2196, -21.2587], [-69.0919, -7.10994]
            ]
        ]
    },
    "properties": {
        "name": "mines",
        "rank": 1,
        "eventType": "mining explosion",
        "minDepth": -5,
        "maxDepth": 10
    }
}

Single Feature and MultiPoylgon

For a single Feature and a MultiPoylgon, eventType, minDepth are maxDepth are
added as key-value pair to the properities of the MultiPoylgon:

   {
     "type": "Feature"
     "properties": {
         "name": "mines",
         "rank" : 1,
         "eventType": "mining explosion",
         "minDepth": -5,
         "maxDepth": 10
     },
     "geometry": {
         "type": "MultiPolygon",
         "coordinates": [
              [
                   [
                     [ 10.0, -25.0 ],
                     [ 13.0, -25.0 ],
                     [ 13.0, -22.0 ],
                     [ 10.0, -25.0 ]
                   ]
              ], [
                   [
                     [ 20.0, -25.0 ],
                     [ 23.0, -25.0 ],
                     [ 23.0, -22.0 ],
                     [ 20.0, -25.0 ]
                   ]
              ]
         ]
     }
   }

{
  "type": "Feature"
  "properties": {
      "name": "mines",
      "rank" : 1,
      "eventType": "mining explosion",
      "minDepth": -5,
      "maxDepth": 10
  },
  "geometry": {
      "type": "MultiPolygon",
      "coordinates": [
           [
                [
                  [ 10.0, -25.0 ],
                  [ 13.0, -25.0 ],
                  [ 13.0, -22.0 ],
                  [ 10.0, -25.0 ]
                ]
           ], [
                [
                  [ 20.0, -25.0 ],
                  [ 23.0, -25.0 ],
                  [ 23.0, -22.0 ],
                  [ 20.0, -25.0 ]
                ]
           ]
      ]
  }
}

FeatureCollection

For a FeatureCollection, the key-value pairs may be added to the properties of
each individual feature:

   {
       "type": "FeatureCollection",
       "features": [
           { "type": "Feature",
             "properties": {
                 "name": "Krakatau",
                 "rank": 1,
                 "eventType": "mining explosion",
                 "minDepth": -5,
                 "maxDepth": 10
             },
             "geometry": {
                 "type": "Polygon",
                 "coordinates": [ ... ]
               }
           },
                 "name": "Batu Tara",
                 "rank": 1,
             },
               }
           },
       }
   }

{
        { "type": "Feature",
          "properties": {
              "name": "Krakatau",
              "rank": 1,
              "eventType": "mining explosion",
              "minDepth": -5,
              "maxDepth": 10
          },
          "geometry": {
              "type": "Polygon",
              "coordinates": [ ... ]
            }
        },
              "name": "Batu Tara",
              "rank": 1,
          },
            }
        },
    }
}

Load the *evrc* plugin: Add to the global configuration or to the
global configuration of :ref:`scevent`  in the order of priority:

 plugin: Add to the global configuration or to the
global configuration of 

Add BNA polygons by defining :confval:`rc.regions`.
Use the region name to define positive and negative regions. Names with
leading *!* define negative regions.

.
leading 

:ref:`scevent` stops
if the *evrc* plugin is loaded but :confval:`rc.regions` is not defined.

Activate :confval:`rc.readEventTypeFromBNA` and add the eventType key-value pair
to the :ref:`polygons <sec-evrc-polygon>` if the event type
shall be read from GeoJSON or BNA polygon.

Set type of events within the positive polygon **germany** but do not change the
type outside:

Accept all events without setting the type but set the type for all events within
the positive polygon **germany** but consider negative within the polygon
**quarries**:

the positive polygon 

Accept all events without setting the type but consider events within the
negative polygon **germany** and events within the positive polygon **saxony**:

negative polygon 

Hyperlink target "scevent-regioncheck-configuration" is not referenced.

Running SeisComP causes many database accesses for writing. Anytime a new
event has been created a new row will be inserted in the database table.
When the same event is updated the row in the database table is going to be
changed as well. The information about the history of the event is lost because
the database contains only the current event attributes. scevtlog saves the
event history into files. While scevtlog is running it keeps the track of all
event updates and stores this information in a directory that can be analyzed
at anytime. The stored information is written as plain text in an easily
readable format. Additionally scevtlog maintains an event summary file for an
overview of the event history.

Specify the output directory. Within this directory the logging
directory structure and the event files are stored.

Specify output event format \(default is autoloc3\). For completeness
it is recommended to switch to xml as storage format. The autoloc3
format can be easily reconstructed with scbulletin but not the other
way around.

If format is xml then all XML files will be compressed with gzip
and stored with file extension \".xml.gz\". They are also
valid gzip files and can be used as input to e.g. zgrep.

*scevtls* lists the event IDs of all events available in a database or
:term:`SCML` file within a given time span. The list may be filtered by
event type. The IDs are printed to stdout.

 file within a given time span. The list may be filtered by

Similarly, use :ref:`scorgls` for listing all origin IDs. In extension to
*scevtls* and :ref:`scorgls`, :ref:`scquery` can search for parameters based on
complex custom queries.

Print all event IDs for the complete year 2012:

   scevtls -d mysql://sysop:sysop@localhost/seiscomp \
           --begin "2012-01-01 00:00:00" \
           --end "2013-01-01 00:00:00"

scevtls -d mysql://sysop:sysop@localhost/seiscomp \
        --begin "2012-01-01 00:00:00" \
        --end "2013-01-01 00:00:00"

Print all event IDs with event type *quarry blast*:

           --event-type "quarry blast"

        --event-type "quarry blast"

Print the IDs of all events provided with the XML file:

   scevtls -i events.xml

Print all event IDs along with the ID of the preferred origin:

   scevtls -d localhost -p

Name of input XML file. Read from stdin if '\-' is given.
Deactivates reading events from database.

Specify the lower bound of the time interval. Format:
2012\-01\-01T00:00:00.

Specify the upper bound of the time interval. Format:

Start searching given hours before now. If set, \-\-begin and
\-\-end are ignored.

The event type for filtering events.
Use quotes for types with more than one word.
Example: \"mining explosion\".

**Extract stream information with time windows from picks of an event.**

Extract stream information with time windows from picks of an event.

scevtstreams reads all picks of an event and determines the time window between
the first pick and the last pick. In addition a symmetric or an asymmetric time
margin is added to this
time window. It writes the streams that are picked including the determined
time window for the event to stdout. This tool gives appropriate input
information for :ref:`scart`, :ref:`fdsnws` and :cite:t:`capstool` for
:cite:t:`caps` server (Common Acquisition Protocol Server by gempa GmbH) to dump
waveforms from archives based on event data.

information for 

 server (Common Acquisition Protocol Server by gempa GmbH) to dump

The generated list contains start and end time as well as stream information.

Get the time windows for an event in the database:

   scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp

scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp

Get the asymmetric time windows for an event in an XML file. The time window
starts 120 s before the first pick and ends 500 s after the last pick:

   scevtstreams -E gfz2012abcd -i event.xml -m 120,500

Create a playback of an event with a time window of 5 minutes data and
sort the records by end time:

   scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp -m 300 |\
   scart -dsvE --list - ~/seiscomp/acquisition/archive > gfz2012abcd-sorted.mseed

scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp -m 300 |\
scart -dsvE --list - ~/seiscomp/acquisition/archive > gfz2012abcd-sorted.mseed

Download waveforms from Arclink and import into local archive. Include
all stations from the contributing networks:

   scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp -m 300 -R --all-stations |\
   scart --list - ./my-archive

scevtstreams -E gfz2012abcd -d mysql://sysop:sysop@localhost/seiscomp -m 300 -R --all-stations |\
scart --list - ./my-archive

Create lists compatible with :ref:`fdsnws` or `caps <https://docs.gempa.de/caps/current/apps/capstool.html>`_: ::

   scevtstreams -E gfz2012abcd -i event.xml -m 120,500 --fdsnws
   scevtstreams -E gfz2012abcd -i event.xml -m 120,500 --caps

scevtstreams -E gfz2012abcd -i event.xml -m 120,500 --fdsnws
scevtstreams -E gfz2012abcd -i event.xml -m 120,500 --caps

scevtstreams inherits :ref:`global options<global-configuration>`.

Input XML file name. Reads event from the XML file instead of
database. Use '\-' to read from stdin.

Input format to use \(xml [default], zxml \(zipped xml\),
binary\). Only relevant with \-i.

Filter read picks by network code or network and station
code. Format: NET or NET.STA

Stream list file to be used for filtering read picks by
stream code. '\-\-net\-sta' will be ignored. One line per
stream. Line format: NET.STA.LOC.CHA.

Time margin around the picked time window, default is 300.
Added before the first and after the last pick,
respectively. Use 2 comma\-separted values \(before,after\)
for asymmetric margins. Example: 120,300.

Comma separated list of streams per station to add.
Example: BH,SH,HH.

Specify whether to use all components \(1\) or just the
picked ones \(0\). Default: 1.

Specify whether to use all location codes \(1\) or just
the picked ones \(0\). Default: 1.

Dump all stations from the same network. If unused, just
stations with picks are dumped.

Dump all networks. If unused, just networks with picks are
dumped. This option implies \-\-all\-stations, \-\-all\-locations,
\-\-all\-streams, \-\-all\-components and will only provide the
time window.

If all components are used, use inventory to resolve stream
components instead of using '?' \(important when Arclink
should be used\).

Dump in capstool format \(Common Acquisition Protocol Server
by gempa GmbH\).

Hyperlink target "scevtstreams-configuration" is not referenced.

:program:`scheli` visualizes waveforms from a single stream or multiple stations
mimicking a drum-recorder plot (see :ref:`fig-scheli`):

 visualizes waveforms from a single stream or multiple stations
mimicking a drum-recorder plot (see 

:program:`scheli` plots one configurable trace in helicorder style in the
:term:`GUI` (:ref:`GUI mode <scheli-show>`).

Configurable GUI: trace colors, visualized time spans, number of rows, data filtering,
amplitude ranges and much more.

Automatic image capturing: Capture helicorder images at configurable time intervals
of one trace in :ref:`GUI mode<scheli-show>` or a set of multiple channels in
:ref:`capture mode<scheli-capture>`.
The images can be used, e.g. for showing data images on web sites.

of one trace in 

.

.. figure:: media/scheli.png

   scheli in GUI mode

**GUI mode - Simple helicorder window:**

* Learn about the plenty command-line options for :program:`scheli`: ::

     scheli -h

* Start :program:`scheli` with the configured values and informative debug output: ::

     scheli --debug

* Let :program:`scheli` show data from the CX station PB01 for the previous 5 hours
  overriding configuration by command-line paramaters:

  .. code-block:: sh

     scheli --stream CX.PB01..HHZ --rows 10

* Define the data request window by end time and duration; scale traces to the
  maximum amplitude per row: ::

     scheli --stream IU.TSUM.00.BHZ --end-time "2021-04-22 14:00:00" --time-span 600 --amp-scaling row

Learn about the plenty command-line options for :program:`scheli`: ::

   scheli -h

Start :program:`scheli` with the configured values and informative debug output: ::

   scheli --debug

Let :program:`scheli` show data from the CX station PB01 for the previous 5 hours
overriding configuration by command-line paramaters:

   scheli --stream CX.PB01..HHZ --rows 10

 show data from the CX station PB01 for the previous 5 hours

Define the data request window by end time and duration; scale traces to the
maximum amplitude per row: ::

   scheli --stream IU.TSUM.00.BHZ --end-time "2021-04-22 14:00:00" --time-span 600 --amp-scaling row

maximum amplitude per row:

scheli --stream IU.TSUM.00.BHZ --end-time "2021-04-22 14:00:00" --time-span 600 --amp-scaling row

**Capture mode - Image capturing:**

Capture the helicorder plot for 3 stations in intervals of 10 seconds.
The data is retrieved using seedlink and the plots are stored as PNG images.
The image files are named according to network, station, stream and location codes
of the requested stations. Command-line parameters override the module configuration.

   scheli capture --stream CX.PB01..HHZ --stream CX.PB02..HHZ --stream CX.PB04..HHZ --interval 10 -o "/tmp/heli_%N_%S_%L_%C.png" -H localhost -I slink://localhost

The output file names will be generated based on network code (%N), station code (%S),
location code (%L) and stream code (%C): ::

   /tmp/CX.PB01..HHZ.png
   /tmp/CX.PB02..HHZ.png
   /tmp/CX.PB04..HHZ.png

scheli capture --stream CX.PB01..HHZ --stream CX.PB02..HHZ --stream CX.PB04..HHZ --interval 10 -o "/tmp/heli_%N_%S_%L_%C.png" -H localhost -I slink://localhost

location code (%L) and stream code (%C):

/tmp/CX.PB01..HHZ.png
/tmp/CX.PB02..HHZ.png
/tmp/CX.PB04..HHZ.png

Specifc :program:`scheli` parameters are adjusted in the :ref:`module configuration <scheli_configuration>`.
Colors of traces etc. can be adjusted by setting the *scheme* parameters in
the global configuration of scheli. For alternating colors between the traces
set the parameters scheme.colors.records.foreground and
scheme.colors.records.alternateForeground in :file:`scheli.cfg`:

 parameters in
scheme.colors.records.alternateForeground in 

# The general color of records/traces.
scheme.colors.records.foreground = 4286F4

# A general trace color of the alternate trace (eg scheli).
scheme.colors.records.alternateForeground = B72D0E

List of stream codes to be plotted \(net.sta.loc.cha\).
If not in capture mode only the first stream is shown.
When using a list, the first entry is considered.
Use commas for separating streams.

The time format used to print the start and end time of the
whole plot \(upper right corner\). The format specification is
the one used in the strftime function \(man strftime\).

A list of alternating row colors cycled through for painting
traces.

Use anti aliasing to plot the traces. The default uses the
settings from scheme.records.antiAliasing

**heli.amplitudeRange.\***
*Gain-corrected amplitudes given in units of the sensor.*
*For example: m/s.*

Define the method to scale traces within rows. Possible
values are:

minmax: Scale all rows to configured minimum and maximum
amplitudes configured by amplitudeRange.min and
amplitudeRange.max

Minimum amplitude to show in trace. Requires
amplitudeRange.scale \= \"minmax\".

**heli.dump.\***
*Control dumping of PNG images.*
*Execute "scheli capture" for image generation in*
*the background without the graphics.*

Image creation interval. Negative values disable image
dumping.
If enabled, images are generated at the configured
interval.

Name of output file.
The filename can contain placeholders
that are replaced by the corresponding streamID parts:

Placeholders are important if more than one stream
is given and capture mode is active.

Define the path to a script that is called whenever an image
has been captured and written to disc. The only parameter is
the path to the generated image.

Do not connect to a messaging server and do not use the
database.

Set the acquisition end time, e.g. '2017\-09\-08 13:30:00',
default: 'gmt'

The record stream that should be displayed. Can be used
multiple times for multiple streams.

amplitudes.

Output filename. Placeholders are %N,%S,%L,%C for network
code, station code, location code, channel code.

Snapshot interval \(less than 0 disables timed snapshots\).
Unit: seconds.

scimex manages the |scname| object exchange between two or more different SeisComP systems in
real time. scimex may import or export the data to one or several systems. In
contrary to :ref:`scimport` the exchange of the |scname| objects is event based.
This means no messages will be exchanged until the exporting system has produced
an event.

 object exchange between two or more different SeisComP systems in
contrary to 

 objects is event based.
an event.

By default all objects (picks, amplitudes, origins, arrivals, station
magnitudes, magnitudes, magnitude references) are transferred to the other
system. The user can define filters at both the sender and the receiver, to
limit the events for which objects are transferred. Possible filter parameters
are the event location, magnitude, arrival count and agency. scimex supports
two modi: *import* and *export*. In export mode scimex collects all objects
relevant for an event (e.g. picks, amplitudes, origins, magnitudes) from
scmaster's message groups at the source and checks if the filter criteria
match. Once the criteria are fulfilled, the whole package of objects is send
to the scmaster IMPORT group of the receiving system.

two modi: 

. In export mode scimex collects all objects
scmaster’s message groups at the source and checks if the filter criteria

At the receiving |scname| system an instance of scimex runs in import mode. It
fetches the whole event information from its own IMPORT group, checks the local
filter criteria of the system and sends the collected objects to the different
message groups, e.g. Pick, Amplitude, Magnitude, Location. In export mode
several recipients can be defined and for each recipient individual filters
can be set. To run several instances of scimex on one system, aliases have to
be defined, e.g. for import:

 system an instance of scimex runs in import mode. It

Then the configuration can be split into scimex_import.cfg and
scimex_export.cfg.

For a push-type configuration, in which the exporting server must be able to
connect to the messaging server on the receiving host. On the receiving host:

connection.username = scimexIm
connection.server = localhost

mode = IMPORT

cleanupinterval = 86400

importHosts = import1

criteria.world.longitude = -180:180
criteria.world.latitude = -90:90
criteria.world.magnitude = 1:9
criteria.world.agencyID = ""
criteria.world.arrivalcount = 15

hosts.import1.address = localhost
# The criterion "world" has been defined above
hosts.import1.criteria = world
# optional and true per default
hosts.import1.filter = false
hosts.import1.useDefinedRoutingTable = true
hosts.import1.routingtable = Pick:IMPORT,StationAmplitude:IMPORT,
                               Origin:LOCATION,Arrival:LOCATION,
                               StationMagnitude:MAGNITUDE,
                               Magnitude:MAGNITUDE,
                               StationMagnitudeContribution:MAGNITUDE,
                               OriginReference:EVENT,Event:EVENT

In this example, Pick and StationAmplitude objects are sent to the
receiving system's IMPORT group to avoid interfering with the receiving system's
picking.

receiving system’s IMPORT group to avoid interfering with the receiving system’s
picking.

On the sending system, only those events with a high enough magnitude
and enough arrivals, and with the AgencyID "GFZ" are exported:
scimex_export.cfg

and enough arrivals, and with the AgencyID “GFZ” are exported:

connection.username="scimexEx"

mode = EXPORT

cleanupinterval = 7200
exportHosts = exp1, exp2

# Match everything with magnitude above or equal 5
# and with more than 25 phases which comes from
# agency GFZ.
criteria.globalM5.latitude     = -90:90
criteria.globalM5.longitude    = -180:180
criteria.globalM5.magnitude    = 5:10
criteria.globalM5.arrivalcount = 25
criteria.globalM5.agencyID     = GFZ

# Export to a system which still runs a very old version. The
# messages need to be converted.
hosts.exp1.address = 192.168.0.3
hosts.exp1.criteria = globalM5
hosts.exp1.conversion = imexscdm0.51

hosts.exp2.address = 192.168.0.4
hosts.exp2.criteria = globalM5

Only used in export mode. A list of message groups to subscribe.

Used only in import mode. It defines the source format of the
messages that need to be converted. Currently the import of
SeisComP datamodel version 0.51 \(imexscdm0.51\)
is supported which was used in release Barcelona \(2008\).

A list of hosts profiles to be considered for exporting.
These are used in hosts.\$name directives
\(see below\) to define addresses, filter criteria, etc.
applicable to each recipient.

A list of hosts profiles to be considered for importing.
These are used with hosts.\$name directives similarly to
exportHosts.

**criteria.$name.\***
*A definition of an event filter.*

Pair of doubles that defines the latitude range.
Example: \-90:90.

Pair of doubles that defines the longitude range.
Example: \-180:180.

Pair of doubles that defines the magnitude range.
Example: 3:10.

White list of AgencyIDs \(the agency identifier which
appears in the objects sent over the export\-import link\).

**hosts.$name.\***
*A sink definition used for either import or export.*

Address of a sink, as a host name with an optional port
number e.g. 'address \= 192.168.1.1' or
'address \= somewhere.com:4803'

Defining filter criteria name for sink, e.g. criteria \=
world\-xxl. The criteria must be defined in the criteria.
\* configuration lines.

Enable\/disable filtering based on defined criteria.
If set to false, all events will pass, even if one
or more criteria are defined.

Defining routing tables in the meaning of mapping
objects to message groups. Example: Pick:NULL,
StationAmplitude:NULL, Origin:LOCATION,
StationMagnitude: MAGNITUDE, NetworkMagnitude:MAGNITUDE,
MagnitudeReference:MAGNITUDE, OriginReference:EVENT,
Event:EVENT. Specifying NULL for the message group causes
messages to be thrown away\/dropped\/discarded.

scimport is responsible to forward messages from one system to another. The
difference to :ref:`scimex` is that scimport does not handle the messages
event based. scimport supports two different modes. The relay mode does a
simple mapping from GROUP:SYSTEM_A to GROUP:SYSTEM_B. This mode is default.

difference to 

 is that scimport does not handle the messages

In case GROUP is not defined in the second system the message is forwarded to
IMPORT_GROUP. The import mode supports custom mapping and filter functionality.
It is possible to forward GROUP1:SYSTEM_A to GROUP2:SYSTEM_B. In addition the
forwarded objects can be filtered by:

# The address of the importing system
sink = sinkAddress

# This option has to be set if the application runs in import mode.
# The routing table has to be defined in the form of source_group:sink_group
routingtable = PICK:PICK

# List of sink groups to subscribe to. If this option is not set the message
# groups will be determined automatically. If this option is set but not
# needed for a setup it can be ignored with the option --ignore-groups
msggroups = GROUP_ONE, GROUP_TWO

# Available filter options
filter.pick.mode     = manual
filter.pick.status   = confirmed
filter.pick.phase    = P
filter.pick.agencyID = GFZ

# Values: eq (==), lt (<=) ,gt (>=), *
filter.amplitude.operator = gt
filter.amplitude.amplitude = 100

# Values: lat0:lat1 (range)
filter.origin.latitude = -90:90

# Values: lon0:lon1 (range)
filter.origin.longitude = -180:180
filter.origin.depth     = 0:100
filter.origin.agencyID  = GFZ

# Values: automatic, manual
filter.origin.mode      = manual
filter.origin.status    = confirmed

# Values: earthquake, explosion, quarry blast, chemical explosion,
# nuclear explosion, landslide, debris avalanche, rockslide,
# mine collapse, volcanic eruption, meteor impact, plane crash,
# building collapse, sonic boom, other
filter.event.type = earthquake

# Values: Whatever your magnitudes are named
filter.stationMagnitude.type = MLv

filter.magnitude.type = MLv

# Values: latency, delay, timing quality, gaps interval, gaps length,
# spikes interval, spikes amplitude, offset, rms
filter.qc.type = latency

URI of receiving host which runs scmaster. The URI contains
the host name with an optional protocol and port.

This option has to be set if the application runs in import mode.
The routing table has to be defined in the form of
source_group:sink_group

Define a list of message groups of the source system
\(connection.server\). If not specified, the source system is
queried for a list of message groups which are then used to check
each subscription extracted from the routing table.
This parameter allows to override to source query result.

The mode of picks to filter for. Allowed values:
\"automatic\" and \"manual\".

The status of picks to filter for. Allowed values:
\"preliminary\", \"confirmed\",
\"reviewed\", \"final\",
\"rejected\" and \"reported\".

The pick phase hint to filter for. Allowed values:
all possible phase codes.

The pick agencyIDs to filter for. Allowed values:
all possible agency ids;

The pick network code of the processed waveforms.
Allowed values: all possible network codes.

The amplitude comparison operator. Allowed values:
\"eq\", \"lt\", \"gt\" and \"\*\".

The amplitude threshold to filter for. The operator
configured with \"operator\" is used to compare this threshold with
the incoming value. If \"operator\" is \"\*\" then
values will pass.

The amplitude agencyIDs to filter for. Allowed values:
all possible agency ids.

The origin agencyIDs to filter for. Allowed values:

The origin evaluation mode to filter for. Allowed values:

The origin status to filter for. Allowed values:

The event type to filter for, e.g. \"earthquake\",
\"explosion\" ...

**filter.stationMagnitude.\***
*Criteria for filtering station magnitudes*

The station magnitude type. Allowed values: all possible
magnitude types such as \"MLv\".

**filter.magnitude.\***
*Criteria for filtering network magnitudes*

The magnitude type. Allowed values: all possible

The QC parameter type. Allowed values: all possible
types such as \"latency\", \"delay\" ...

Switch to import mode \(default is relay\). Im import mode the
routing table has to be specified whereas in relay the
routing table will be calculated  automatically.

scinv merges and tests inventory XML files to a single inventory, synchronises
an inventory with another (most common use is with database), creates initial
key files and much more ...

key files and much more …

scinv is used by :file:`$SEISCOMP_ROOT/etc/init/scinv.py` to synchronise the
inventory from :file:`$SEISCOMP_ROOT/etc/inventory` with the database.

Inventory files in :term:`SCML` format may be generated or modified by
:cite:t:`smp` or :ref:`invextr`. For conversion from FDSN station XML and
dataless SEED volume to :term:`SCML` use :ref:`fdsnxml2inv` and
:ref:`dlsv2inv`, respectively.

. For conversion from FDSN station XML and
dataless SEED volume to 

:ref:`scinv_check`: Merge and test inventories, check the completeness and
consistency of parameters, report any issue,

: Merge and test inventories, check the completeness and

:ref:`scinv_keys`: Merge and test inventories, generate key files or
remove key files without coorresponding inventory,

: Merge and test inventories, generate key files or

:ref:`scinv_sync`: Merge and test inventory files, generate or remove key
files, synchronise the inventory with the database and send updates by
notifiers to the messaging for saving to the database,

: Merge and test inventory files, generate or remove key

The command **must** be given as **1st**
parameter to the application. All others parameters must follow.

Synchronises an applications inventory with a given source given as file(s).
It checks the consistency of the inventory using :ref:`scinv_check` before
synchronization.
The applications inventory is either read from the database or given with
:option:`--inventory-db`. As a result all information in the source is written
to target and target does not contain any additional information. The source
must hold all information. This works different to merge. If an output file is
specified with :option:`-o` no notifiers are generated and sent via messaging.

It checks the consistency of the inventory using 

 before

. As a result all information in the source is written
specified with 

scinv sync --console=1 -H localhost:$p --filebase "$fb" \
           --rc-dir "$rc" --key-dir "$kd"

$p = configured messaging port
$fb = $SEISCOMP_ROOT/etc/inventory
$rc = $SEISCOMP_ROOT/var/lib/rc
$kd = $SEISCOMP_ROOT/etc/key

Merges two or more inventories into one inventory checking the consistency
of the inventory by using :ref:`scinv_check`. This command is useful to merge
existing subtrees into a final inventory before synchronization.

of the inventory by using 

. This command is useful to merge

Merging inventory XML files is also supported by :ref:`scxmlmerge` but
without the full :ref:`consistency checks <scinv_check>`.

Applies stored notifiers created with **sync** and option ``--create-notifier``
which is saved in a file (``-o``). Source is the applications inventory read
from the database or given with ``--inventory-db``.
If ``-o`` is passed, no messages are sent but the result is stored in a file.
Useful to test/debug or prepare an inventory for offline processing.

). Source is the applications inventory read
from the database or given with 

 is passed, no messages are sent but the result is stored in a file.

# Synchronise inventory and save the notifiers locally. No messages are sent.
scinv sync -d mysql://sysop:sysop@localhost/seiscomp \
      --create-notifier -o sync_patch.xml

# Sent the notifiers to the target system
scinv apply -H localhost sync_patch.xml

This operation can be useful to save differences in synchronization for
validation or debugging problems.

Synchronise station key files with current inventory pool. This command merges
all XML files in the inventory pool (or the given files) and checks if a
corresponding station key file in :file:`$SEISCOMP_ROOT/etc/key` exists. If not,
an empty station key file is created. If a station key file without a
corresponding station in the merged inventory is found, it is deleted.

corresponding station key file in 

 exists. If not,

List contained items up to response level. This command is useful to inspect
an XML file or the complete inventory pool.

$ scinv ls SK.KOLS.xml

  network SK       Slovak National Network of Seismic Stations
    epoch 1980-01-01
    station KOLS   Kolonicke sedlo, Slovakia
      epoch 2004-09-01
      location __
        epoch 2004-09-01
        channel BHE
          epoch 2006-04-25 12:00:00 - 2010-03-24
        channel BHN
        channel BHZ
        channel EHE
          epoch 2004-09-01 - 2006-04-25 10:00:00
        channel EHN
        channel EHZ
        channel HHE
          epoch 2010-03-25
        channel HHN
        channel HHZ

The default level of information printed is *chan*. Available levels are *net*,
*sta*, *chan* and *resp*. The output level is controlled by :option:`--level`.

For checking the available networks and stations in the inventory pool, calling

Stream lists in NSLC format (NET.STA.LOC.CHA) may be generated when combining
with :option:`--nslc`. Such lists can be used as input for filtering
waveforms, e.g., to :ref:`scmssort` or :ref:`scart`.

   $ scinv ls --nslc inventory.xml

     IU.WVT.00.BHZ 2017-11-16
     IU.XMAS.00.BH1 2018-07-06 20:00:00

with 

. Such lists can be used as input for filtering
waveforms, e.g., to 

$ scinv ls --nslc inventory.xml

  IU.WVT.00.BHZ 2017-11-16
  IU.XMAS.00.BH1 2018-07-06 20:00:00

Checks consistency of passed inventory files or a complete filebase. In the
first step the inventory is merged from all files. In the second step several
consistency checks are applied such as:

When inconsistencies or other relevant information are found, alerts are printed:

**R**: Unresolvable, user should check if an action is required,

* Default test tolerances are adopted from typical values for global
  networks. Consider adjusting :confval:`check.maxDistance`,
  :confval:`check.maxElevationDifference` and :confval:`check.maxSensorDepth`
  by configuration or command-line options.
* Errors must but conflicts and warnings should be resolved for maintaining a
  correct inventory.
* :ref:`Merging <scinv_merge>` and :ref:`sychronization <scinv_sync>` stop
  when finding errors.

Default test tolerances are adopted from typical values for global
networks. Consider adjusting :confval:`check.maxDistance`,
:confval:`check.maxElevationDifference` and :confval:`check.maxSensorDepth`
by configuration or command-line options.

networks. Consider adjusting 

Errors must but conflicts and warnings should be resolved for maintaining a
correct inventory.

:ref:`Merging <scinv_merge>` and :ref:`sychronization <scinv_sync>` stop
when finding errors.

The following table lists checks of objects for deficiencies and the test
results.

This test matrix may be incomplete. Consider adding more tests and results.

Please report inventory issues not caught by tests to the SeisComP
development team, e.g. on :cite:t:`seiscomp-github`.

development team, e.g. on 

:option:`--distance` and :confval:`check.maxDistance` override default threshold (10 km)

:option:`--max-elevation-difference` and :confval:`check.maxElevationDifference` override default threshold (500 m)

may result in unexpected behavior, consider positive gain and negative dip

:option:`--max-sensor-depth` and :confval:`check.maxSensorDepth` override default threshold (500 m)

differences <= 5 degree are tolerated, applies to seismic sensors with codes G, H, L, N

Maximum allowed distance between station and sensor location

Maximum allowed differences between elevation of station and
sensor location.

Maximum allowed depth of channel \(sensor\). This is the depth
of the sensor below the surface.

Directory to check for inventory XML files. If not given,
all XML files passed are checked.

If given, rc \(resource\) files will be created in this
directory for each station. The station descriptions will be
from the last available epoch.

The directory to synchronise key files to. If not given,
\@SYSTEMCONFIGDIR\@\/key is assumed.

\(default\) Delete key files if a station does not exist in
inventory.

Do not delete key files if a station does not exist in

Maximum allowed distance between station and location
coordinates when using the check command.

Maximum allowed difference in elevation
between station and sensorlocation in m. Larger differences
will be reported.

of the sensor below the surface in m. Larger depths will be
reported.

Information level reported by ls. One of \"net\", \"sta\",
\"cha\" or \"resp\". Default is \"cha\".

Enable NSLC output for ls as  NET.STA.LOC.CHA. The option
implies level \= cha.

If an output file is given, then all notifiers will be saved
and not the result set itself.

Do not send any notifiers and just output resulting
operations and conflicts.

scm monitors client activity. scm connects to a certain master and periodically
processes the status messages sent by the clients.

Each client status if forwarded to the plugins loaded by scm. By default
the :ref:`mncursesplugin <scm_ncurses>` is loaded which presents an interface
similar to the gnu program top.

the 

 is loaded which presents an interface

Plugins might support filtering client status information. To configure filters
each plugin supports a configuration value :confval:`$name.filter`. This filter
is a string which can be constructed from available status info tags and logical
and numerical operators.

each plugin supports a configuration value 

. This filter

time
privategroup
hostname
clientname
ips
programname
pid
cpuusage
totalmemory
clientmemoryusage
memoryusage
sentmessages
receivedmessages
messagequeuesize
summedmessagequeuesize
averagemessagequeuesize
summedmessagesize
averagemessagesize
objectcount
uptime
responsetime

memailplugin.filter = "(cpuusage>100 || totalmemory>1000) && hostname==proc-machine"

Numerical operators are applied to a tag name and a constant value.

Logical operators are applied to a group (might be enclosed in brackets) or
numerical expressions.

To monitor different clients sets with different criteria and different plugins
it is common practice to create aliases of scm and to configure each instance
separately

seiscomp alias create scm_level1 scm
seiscomp alias create scm_level2 scm

where :program:`scm_level1` could monitor all mandatory clients whereas
:program:`scm_level2` monitors all clients which are not crucial for operation.

:ref:`email <scm_email>`

Email plugin for scm which sends emails based on client status.

:ref:`ncurses <scm_ncurses>`

Ncurses output plugin for scm which presents an interactive table of processes.

Defines a comma separated list of email addresses to send
notifications to.

Configures a custom message text that is appended to each message
when clients passed the filter.

Defines the filter for each client status. A filter is an expression
that can be constructed with all available status tags \(scm \-\-print\-tags\)
and logical and numerical operators. See scm for more information.

Output directory where [client].txt is written to. Additionally
an file description.txt will be created to show the order of
tags used in the client status file.

Print available keys for accessing client info data and to
build filter configurations.

The email plugin sends emails to configured receipients if a client status
messages passes the configured :confval:`filter <memailplugin.filter>`.

messages passes the configured 

The email plugin is installed under :file:`share/plugins/monitor/memailplugin.so`.

# Send notification is a clients CPU usage exceeds 100 percent
memailplugin.filter = "cpuusage>100"

# Send emails, yes
memailplugin.sendEmail = true

# Send emails to this address(es)
memailplugin.recipients = operator@my-agency.org, operator2@my-agency.org

memailplugin.reportSilentClients = false

# Minutes before report missing clients
memailplugin.reportRequiredClients = 1

# Interval to calculate mean of the message values for (in minutes)
memailplugin.filterMeanInterval = 1

# List of clients we definitely require to be operative
memailplugin.requiredClients = scautopick, scautoloc, scevent, scamp,\
                               scmag, scqc, scevtlog

Ncurses output plugin for scm which presents an interactive table of
processes.

The output is a table where each row contains the information of a
certain connected client. The rows are sorted in descending order based on the
contents of the name column. Other columns can be interactively selected with
the left and right arrow key. The r key changes the sorting to ascending order.
The displayed parameter are the name of the binary (prog), the name of the
client (name), the name of the host name from which the client is connected
(host), the available memory on the clients host in kb (hmem), the clients
memory usage in kb (cmem), the percentage of the clients memory usage (mem),
the CPU usage (cpu), the amount of queued messages to be processed by the
client (q), the average number of messages in the queue (mq), the connection
time of the client to the master (uptime), the elapsed time since the last
client update (resp).

.. figure:: media/scm_curses.png

   top like perspective of ncurses plugin

The Ncurses plugin is installed under :file:`share/plugins/monitor/mncursesplugin.so`.

The text plugin writes for each client a status text file to a
:confval:`configurable <mtextplugin.outputDir>` directory. Each text file
is named after the client with the extension ".txt".

 directory. Each text file
is named after the client with the extension “.txt”.

The text plugin is installed under :file:`share/plugins/monitor/mtextplugin.so`.

The purpose of scmag is to compute magnitudes from pre-computed amplitudes.
Instead it takes amplitudes and origins as input and produces StationMagnitudes
and (network) Magnitudes as output. It does not access waveforms.
The resulting magnitudes are sent to the "MAGNITUDE" group. scmag doesn’t access
any waveforms. It only uses amplitudes previously calculated.

The resulting magnitudes are sent to the “MAGNITUDE” group. scmag doesn’t access

The purpose of scmag is the decoupling of magnitude computation from amplitude
measurements. This allows several modules to generate amplitudes concurrently,
like :ref:`scautopick` or :ref:`scamp`. As soon as an origin comes in, the amplitudes related
to the picks are taken either from the memory buffer or the database to compute
the magnitudes.

like 

. As soon as an origin comes in, the amplitudes related

scmag makes use of the fact that origins sent by :ref:`scautoloc`, :ref:`scolv`
or other modules include
the complete set of arrivals, which reference picks used for origin computation.
The picks in turn are referenced by a number of amplitudes, some of which are
relevant for magnitude computation.

Primary magnitudes are computed from amplitudes and station-event distances.
Currently the following primary magnitude types are implemented.

:term:`MLr <magnitude, local GNS/GEONET (MLr)>`
Local magnitude calculated from MLv amplitudes based on GNS/GEONET specifications
for New Zealand (:cite:t:`ristau-2016`).

for New Zealand (

:term:`MN <magnitude, Nuttli (MN)>`

Additionally, scmag derives the following magnitudes from primary magnitudes:

:term:`Mw(mB) <magnitude, derived mB (Mw(mB))>`
Estimation of the moment magnitude Mw based on mB using the Mw vs. mB
regression of :cite:t:`bormann-2008`

regression of 

:term:`Mw(Mwp) <magnitude, derived Mwp (Mw(Mwp))>`
Estimation of the moment magnitude Mw based on Mwp using the Mw vs. Mwp
regression of :cite:t:`whitmore-2002`

:term:`M <magnitude, summary (M)>`
Summary magnitude, which consists of a weighted average of the individual
magnitudes and attempts to be a best possible compromise between all magnitudes.
See below for configuration and also scevent for how to add the summary magnitude
to the list of possible preferred magnitudes or how to make it always preferred.

More details are given in the :ref:`section Summary magnitude<scmag-summaryM>`.

Mw(avg)
Estimation of the moment magnitude Mw based on a weighted average of other
magnitudes, currently MLv, mb and Mw(mB), in future possibly other magnitudes as
well, especially those suitable for very large events. The purpose of Mw(avg) is
to have, at any stage during the processing, a “best possible” estimation of the
magnitude by combining all available magnitudes into a single, weighted average.
Initially the average will consist of only MLv and/or mb measurements, but as soon
as Mw(mB) measurements become available, these (and in future other large-event
magnitudes) become progressively more weight in the average.

If an amplitude is updated, the corresponding magnitude is updated as well.
This allows the computation of preliminary, real-time magnitudes even before
the full length of the P coda is available.

Station magnitudes of a :ref:`particular magnitude type <scmag-primaryM>` are
calculated based on measured amplitudes considered by this magnitude type and
the distance between the :term:`origin` and the station at which the amplitude
was measured. Typically, epicentral distance is used for distance. Magnitudes
may support configurable distance measures, e.g.,
:term:`MLc <magnitude, local custom (MLc)>`. The relation between measured
amplitudes, distance and station magnitude is given by a calibration function
which is specific to a magnitude type and configurable for some magnitudes.

 are
the distance between the 

 and the station at which the amplitude

. The relation between measured

Usually station magnitudes use amplitudes of the same type. However, some magnitude
consider amplitudes of another type. E.g. :term:`MLr <magnitude, local GNS/GEONET (MLr)>`
uses amplitudes computed for :term:`MLv <magnitude, local vertical (MLv)>`.

consider amplitudes of another type. E.g. 

Depending on the geographic region in which events, stations or entire ray paths
are located, different calibration functions and constraints may apply. This is
called "magnitude regionalization". The region is defined by a polygon stored in
a region file. For a particular magnitude, regionalization can be configured by
global parameters, e.g., in :file:`$SEISCOMP_ROOT/etc/global.cfg`.

called “magnitude regionalization”. The region is defined by a polygon stored in
global parameters, e.g., in 

Add magnitude type profile to the magnitudes parameters. The name of the
profile must be the name of the magnitude type.

Example for MLc in :file:`$SEISCOMP_ROOT/etc/global.cfg` the polygon with name
*test* defined in a :ref:`BNA file <sec-gui_layers-vector>`:

magnitudes.MLc.regionFile = @DATADIR@/spatial/vector/magnitudes/regions.bna
magnitudes.MLc.region.test.enable = true
magnitudes.MLc.region.test.A0.logA0 = 0:-1.3, 60:-2.8, 100:-3.0, 400:-4.5, 1000:-5.85

The network magnitude is a magnitude value summarizing several
:ref:`station magnitudes <scmag-stationM>` values of one :term:`origin`.
Different methods are available for forming network magnitudes from station
magnitudes:

.

To stabilize the network magnitudes the smallest and the largest 12.5% of the :term:`station magnitude` values are removed before computing the mean.

To stabilize the network magnitudes the smallest and the largest 12.5% of the 

Removing all station magnitudes with a distance greater than 0.5 (default) from the median of all station magnitudes and computing the mean of all remaining station magnitudes.

Configure the method per magnitude type by :confval:`magnitudes.average`.
Default values apply for each magnitude type which are defined by the magnitude
itself.
In the :ref:`scolv Magnitudes tab <scolv-sec-magnitude-tab>` the methods, the
stations magnitudes and other parameters can be selected interactively.

.
itself.
In the 

 the methods, the

scmag can compute a summary magnitude as a weighted sum from all available
:ref:`network magnitudes <scmag-networkM>`.
This magnitude is typically called **M** as configured in
:confval:`summaryMagnitude.type`.

It is computed as a weighted average over the available magnitudes:

M &= \frac{\sum w_{i} * M_{i}}{\sum w_i} \\
w_{i} &= a_i * stationCount(M_{i}) + b_i

The coefficients a and b can be configured per magnitude type by
:confval:`summaryMagnitude.coefficients.a`
and :confval:`summaryMagnitude.coefficients.b`, respectively.
Furthermore each magnitude type can be specifically added to or excluded from the
summary magnitude calculation
as defined in :confval:`summaryMagnitude.whitelist` or
:confval:`summaryMagnitude.blacklist`, respectively.

as defined in 

While the magnitudes are computed by scmag the decision about the preferred
magnitude of an :term:`event` is made by :ref:`scevent`.

magnitude of an 

The preferred magnitude of an :term:`event` is set automatically by :ref:`scevent`
or interactively in :ref:`scolv`. It can be any network magnitude or the summary
magnitude.

The magnitude types to be calculated. Station magnitudes are
computed from their amplitudes, network magnitudes from their
station magnitudes.

The minimum weight of an arrival for an associated amplitude
to be used for calculating a magnitude.

*General parameters for computing magnitudes. Others are configured*
*by global binding parameters for specific magnitude types.*

General parameters for computing magnitudes. Others are configured

The methods for computing the network magnitude
from station magnitudes. Exactly one method per
magnitude can be configured.
To define the averaging method per magnitude type append
the type after colon, e.g.:
\"magnitudes.average \= default, MLv:median\"

default: Compute the mean if less than 4 contributed
station magnitudes exist. Otherwise apply trimmedMean\(25\),
trimmed mean with 25%.

Interval between 2 sending processes. The interval controls
how often information is updated.

**summaryMagnitude.\***
*The summary magnitude is the weighted average from all*
*defined network magnitude types: Single network magnitude values*
*are multiplied with their magnitude-type specific weight and*
*summed up. The resulting sum is divided by the sum of all weights.*

defined network magnitude types: Single network magnitude values

summed up. The resulting sum is divided by the sum of all weights.

This is the minimum station magnitude required for any
magnitude to contribute to the summary magnitude at all. If
this is set to 4, then no magnitude with less than 4 station
magnitudes is taken into consideration even if this results
in no summary magnitude at all. For this reason, the default
here is 1 but in a purely automatic  system it should be
higher, at least 4 is recommended.

Allow computing the summary magnitude even if only one single
network magnitude meeting the other criteria is available.
Unselecting this parameter will suppress computing summary
magnitudes if only one network magnitude is available.

Define the magnitude types to be excluded from the summary
magnitude calculation.

Define the magnitude types to be included in the summary

**summaryMagnitude.coefficients.\***
*The coefficients defining the weight of network magnitudes*
*for calculating the summary magnitude.*
*Weight = a * magnitudeStationCount + b.*

Define the coefficients a. To define the value per magnitude
type append the type after colon. A value without a
type defines the default value.

Define the coefficients b. To define the value per magnitude

in that file. It computes station magnitudes for all picks associated
with an origin where amplitudes are available and the corresponding
network magnitudes. Station and network magnitudes having the
evaluation status set are ignored. Use \-\-reprocess to include those
magnitudes. It outputs an XML text adding the station\-
and network magnitudes to the input XML file.

Reprocess also station and network magnitudes with an evaluation
status set but do not change original weights. New
contributions are added with weight 0.

With that flag all existing station magnitudes are recomputed
based on their associated amplitudes. If an amplitude cannot
be accessed, no station magnitude is updated.
Network magnitudes are recomputed based on their station
magnitude contributions. No new objects will
be created in this mode, it only updates values and weights.
The method to accumulate the station magnitudes to form the network
magnitude will be read from the existing object and replicated.
If it cannot be interpreted, then the configured default for this
magnitude type will be used instead. Weights of station magnitudes
will be changed according to the accumulation method of the

*scmapcut* is a commandline tool to create image files containing maps of specific
regions and for selected events. When plotting events given by their eventID, the
event parameters must be provided in a SeisComP event XML file. The XML file can
be retrieved from the database using :ref:`scxmldump`.

 is a commandline tool to create image files containing maps of specific
be retrieved from the database using 

Draw a map for the event with event ID <eventID>. Plot a region of at least
3 degrees around the epicentre. The created image has 800x400 px.

   scmapcut -E <eventID> --ep <eventID>.xml -m 3 -d 800x400 -o <eventID>.png

.. _fig-workflow:

.. figure:: media/gempa2017xxxx.png

   Image example.

scmapcut -E <eventID> --ep <eventID>.xml -m 3 -d 800x400 -o <eventID>.png

Draw a map for a generic event with magnitude 4. The size of the event shown
on the map scales with magnitude. Plot a region of at least 3 degrees around
the epicentre. The created image has 800x400 px.

   scmapcut --lat 44 --lon 12 --depth 10 --mag 4 -m 0.5 -d 800x400 -o generic.png

.. _fig-workflow_mag4:

.. figure:: media/generic.png

   Generic example.

scmapcut --lat 44 --lon 12 --depth 10 --mag 4 -m 0.5 -d 800x400 -o generic.png

Path to the cities.xml file. If undefined, the data is
read from CONFIGDIR\@\/cities.xml or \@DATADIR\@\/cities.xml.

Cut region \([lat_dim]x[lon_dim]+lat0+lon0 or +lat0+lon+lat1+lon1\).

Margin in degrees around origin \(margin\|margin_latxmargin_lon\).

scmaster is the implementation of the :ref:`messaging <concepts_messaging>`
mediator.

scmaster provides the :ref:`message groups <messaging-groups>`. Configure

:confval:`defaultGroups`: Add the groups which can be used by all queues.

:confval:`queues.$name.groups`: Set all groups which are used by the given
queue. You may inherit :confval:`defaultGroups`, e.g.: ::

   queues.production.groups = ${defaultGroups},L1PICK

.. warning ::

   Setting any value without inheriting :confval:`defaultGroups` ignores all
   values of :confval:`defaultGroups`.

: Set all groups which are used by the given
queue. You may inherit 

Setting any value without inheriting :confval:`defaultGroups` ignores all
values of :confval:`defaultGroups`.

scmaster provides *queues* for separating the processing.
Typically, the default queue *production* is used. To add new queues

scmaster provides unsecured and secured connection which is addressed by the
scheme values *scmp* and *scmps*, respectively, in :confval:`connection.server`
when connecting to the messaging.
Read the :ref:`concepts section <messaging-scheme>` for more details. *scmps*
is in use when configuring :confval:`interface.ssl.bind`.

scheme values 

scmaster reads from and writes to the database and reports the database connection
to the clients of the messaging system (compare with the :ref:`concepts section <messaging-db>`).

to the clients of the messaging system (compare with the 

When running all |scname| modules on a single machine, the read and write
parameters are typically configured with *localhost* as a *host name*.

 modules on a single machine, the read and write
parameters are typically configured with 

queues.production.processors.messages.dbstore.read = sysop:sysop@localhost/seiscomp
queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp

If the clients are located on machines different from the messaging, the
*host name* of the read parameter
must be available on the client machine and the client machine must be able to
connect to the host with its name. If the database is on the same machine as the
messaging, the *host name* of the write connection typically remains *localhost*.

 of the read parameter
messaging, the 

Example for connecting clients on computerB to the messaging on computerA (compare
with the :ref:`concepts section <messaging-distribution>`).

with the 

Configuration of scmaster on computerA: ::

   queues.production.processors.messages.dbstore.read = sysop:sysop@computerA/seiscomp
   queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp

queues.production.processors.messages.dbstore.read = sysop:sysop@computerA/seiscomp

Global configuration of client on computerB: ::

   connection.server = computerA/production

scmaster can accept database requests and forward results to clients without
exposing the underlying database. That allows clients to connect to the database
of a particular queue via the Websocket HTTP protocol. No specific database
plugin is required at the client which reduces the complexity of configuration.

Be aware that due to the nature of a proxy which is another layer on top of the
actual database connection the performance is not as high as direct database
access.

To let scmaster return the proxy address of the database connection, set

scmaster does not provide any built-in access control to connecting clients.
The only exception is the possibility to verify client certificates against
the server certificate if SSL is enabled.

It is required that the client certificate is signed by the server certificate
otherwise the client connection will be rejected.

Default: ``AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, CONFIG, LOGGING, SERVICE_REQUEST, SERVICE_PROVIDE, STATUS_GROUP``

``AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, CONFIG, LOGGING, SERVICE_REQUEST, SERVICE_PROVIDE, STATUS_GROUP``

AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, CONFIG, LOGGING, SERVICE_REQUEST, SERVICE_PROVIDE, STATUS_GROUP

The default set of message groups for each queue. Only used
if a queues group list is unset \(note: empty is not unset\).

Enable messaging queues defined as profile in queues. The profile
names are the final queue names.

**interface.\***
*Control the messaging interface. The default protocol is*
*"scmp" but "scmps" (secure protocol) is*
*used when valid SSL certificate and key are configured.*

Local bind address and port of the messaging system.
0.0.0.0:18180 accepts connections from all clients,
127.0.0.1:18180 only from localhost.

The IP access control list for clients which are allowed
to connect to the interface. Separate each IP with a space
and put the entire list in double quotes, e.g.
\"127.0.0.1 192.168.1.2 192.168.0.0\/16\".

**interface.ssl.\***
*SSL encryption is used if key and certificate are configured.*

Additional local bind address and port of the messaging
system in case SSL encryption is active.

to connect to the interface. See interface.acl for
further details.

If enabled then the certificate of a connecting client
is verified against the servers certificate. It is
required that the client certificate is signed by the
server certificate otherwise the connection is refused.

**queues.\***
*Set the parameters for each messaging queue. The queues are used*
*when listed in the "queues" parameter. Several queues*
*can be used in parallel. For queues with without databases leave*
*the processor parameters empty.*

Set the parameters for each messaging queue. The queues are used

can be used in parallel. For queues with without databases leave

**queues.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`queues` to become active.

   queues = a,b
   queues.a.value1 = ...
   queues.b.value1 = ...
   # to the list of queues
   queues.c.value1 = ...

queues = a,b
queues.a.value1 = ...
queues.b.value1 = ...
# to the list of queues
queues.c.value1 = ...

Define the list of message groups added to the queue.
If unset, then the defaultGroups will be used.
A queue will always add the default group \"STATUS_GROUP\".
This parameter overrides defaultGroups.

to join the queue. See interface.acl for further details.

The maximum size in bytes of a message to be accepted.
Clients which send larger messages will be disconnected.
The default is 1MB.

List of plugins required by this queue. This is just a
convenience parameter to improve configurations
readability. The plugins can also be added to the
global list of module plugins.

**queues.$name.processors.messages.dbstore.\***
*Define the database connection parameters.*

queues.$name.processors.messages.dbstore.driver; configuration value

Selected the database driver to use.
Database drivers are available through plugins.
The default plugin is dbmysql which supports
the MYSQL database server. It is activated
with the core.plugins parameter.

queues.$name.processors.messages.dbstore.read; configuration value

Set the database read connection which is
reported to clients that connect to this server.
If a remote setup should be implemented,
ensure that the hostname is reachable from
the remote computer.

queues.$name.processors.messages.dbstore.write; configuration value

Set the database write connection which is
private to scmaster.
A separate write connection enables different
permissions on the database level for scmaster
and clients.

queues.$name.processors.messages.dbstore.proxy; configuration value

If enabled then the database connection as configured
in 'read' is not being returned to the client
but the URL \"proxy:\/\/\". This URL
tells the client to open the database via the
websocket proxy at the messaging address,
e.g. http:\/\/localhost\/production\/db. The same
hostname and queue must be used as for the
initial messaging connection.

queues.$name.processors.messages.dbstore.strictVersionMatch; configuration value

If enabled, the plugin will check the database
schema version and refuse to start if the
version doesn't match the latest version.
If disabled and the an object needs to be
stored, which is incompatible with the
database schema, this object is lost.
Leave this option enabled unless you know
exactly what are you doing and what the
consequences are.

version doesn’t match the latest version.

The URL path at which html files and assets are available.
All files under filebase will be served at this URL path.

**scmm** is the messaging monitor, the graphical interface to :ref:`scm`. It allows to
view the messages from all modules sent around by the SeisComP messaging system.
Therefore, **scmm** can be used to debug configured message groups and module
connections, e.g. in a system with several processing pipelines and specific
message groups.

. It allows to
Therefore, 

 can be used to debug configured message groups and module

In addition, **scmm** allows to view the content of single messges
as well as the memory consumption and other statistics of all modules connected
to the SeisComP messaging system.

 allows to view the content of single messges

.. figure:: media/scmm_messages.png
   :width: 8cm

   View message notifications.

.. figure:: media/scmm_message.png

   View the message content by clicking on individual messages.

.. figure:: media/scmm_clients.png

   View module memory consumptions.

.. figure:: media/scmm_statistics.png

   View module statistics.

scmssort reads unsorted (and possibly multiplexed) MiniSEED files and sorts
the individual records by time. This is useful e.g. for simulating data
acquisition and playbacks. Removing of duplicate data and trimming of time
window is available.

scmssort reads single files and output to the command line. Cat many files
to read them at the same time. In this way huge amount of data can be processed
efficiently.

Remove duplicate records from files and clean waveform archives.

Filter data records, i.e. keep or remove them, based on

* time windows,
* stream lists where each line has the format NET.STA.LOC.CHA including regular
  expressions. Such stream lists can be generated, e.g., using :ref:`scinv`.

stream lists where each line has the format NET.STA.LOC.CHA including regular
expressions. Such stream lists can be generated, e.g., using :ref:`scinv`.

expressions. Such stream lists can be generated, e.g., using 

* Combine with :ref:`scart` or :ref:`msrtsimul` to archive data or to make
  playbacks with real-time simulations.
* Filter data by stream IDs using NSLC lists which can be generated using
  :ref:`scinv`.

Combine with :ref:`scart` or :ref:`msrtsimul` to archive data or to make
playbacks with real-time simulations.

 to archive data or to make

Filter data by stream IDs using NSLC lists which can be generated using
:ref:`scinv`.

Read a single miniSEED data file. The records are sorted by endtime and
duplicates are removed.

   scmssort -vuE unsorted.mseed > sorted.mseed

Read all files ending with ".mseed" at the same time. The data are trimmed
to a time window and duplicated or empty records are ignored.

   cat *.mseed | scmssort -vuiE -t 2020-03-28T15:48~2020-03-28T16:18 > sorted.mseed

Read all files ending with “.mseed” at the same time. The data are trimmed

cat *.mseed | scmssort -vuiE -t 2020-03-28T15:48~2020-03-28T16:18 > sorted.mseed

Remove streams listed by stream code and sort records by end time. Also ignore
duplicated or empty records. Stream lists can be generated, e.g., by :ref:`scinv`.

   scmssort -vuiE --rm -l stream-list.txt test.mseed > sorted.mseed

duplicated or empty records. Stream lists can be generated, e.g., by 

scmssort -vuiE --rm -l stream-list.txt test.mseed > sorted.mseed

Extract streams by time and stream code and sort records by end time. Also ignore
duplicated or empty records.

   echo CX.PB01..BH? | scmssort -vuE -t 2007-03-28T15:48~2007-03-28T16:18 -l - test.mseed > sorted.mseed
   scmssort -vuiE -t 2007-03-28T15:48~2007-03-28T16:18 -l stream-list.txt test.mseed > sorted.mseed

echo CX.PB01..BH? | scmssort -vuE -t 2007-03-28T15:48~2007-03-28T16:18 -l - test.mseed > sorted.mseed
scmssort -vuiE -t 2007-03-28T15:48~2007-03-28T16:18 -l stream-list.txt test.mseed > sorted.mseed

File with streams to filter the records. One stream per
line. Instead of a file read the from stdin \(\-\). Line
format: NET.STA.LOC.CHA \- wildcards and regular expressions
are considered. Example: CX.\*..BH? .

Remove all traces in stream list given by \-\-list
instead of keeping them.

Specify time window \(as one \-properly quoted\- string\).
Times are of course UTC and separated by a tilde \~

scmv visualizes the actual information regarding earthquakes, trigger status,
ground motion and station quality. This information is visualized in a map
showing also the topography of the region including bathymetry, state borders
and geologic faults. scmv provides two different tabs with maps showing the
ground motion and the network status.

The ground motion tab (fig. :ref:`fig-scmv-gm`) shows the actual groundmotion
in nm/s at each station color-coded. Furthermore the trigger status (new picks)
of the stations are announced by blinking triangles (the same in all
other tabs). In case a new pick is associated to an event, the blinking color
changes from red to green (default). Events are represented by open circles
and the depth is color-coded. By right mouse click on the symbol of a station
more detailed information are shown in an information widget (fig. :ref:`fig-scmv-infowidget`).

) shows the actual groundmotion
more detailed information are shown in an information widget (fig. 

.. figure:: media/scmv/ground-motion.png

   Ground motion tab

   Tab 1-2 = Ground Motion, Network Status tab; Station A = station with ground
   motion between 0 and 200 nm/s; Station B = triggering (red blinking) station;
   Station C = station of undefined status; Station D = triggering and associated
   station (green blinking); EQ = location of the earthquake/event; P = spreading
   of the P-wave; S = spreading of the S-wave; Legend = ground motion scale.

Tab 1-2 = Ground Motion, Network Status tab; Station A = station with ground
motion between 0 and 200 nm/s; Station B = triggering (red blinking) station;
Station C = station of undefined status; Station D = triggering and associated
station (green blinking); EQ = location of the earthquake/event; P = spreading
of the P-wave; S = spreading of the S-wave; Legend = ground motion scale.

The network status tab (fig. :ref:`fig-scmv-netstat`) visualizes the quality control
parameters of all shown stations. The colors of the triangles represent the data
the selected parameters of a station, e.g. latency or delay. More detailed information about station quality
can be derived by opening an information widget (fig. :ref:`fig-scmv-infowidget` left)
with a right mouse click on the symbol.

) visualizes the quality control
can be derived by opening an information widget (fig. 

.. figure:: media/scmv/netstat.png

   Network status tab

   Station A = station with up to 20 sec data latency/delay;
   Station B = station with up to 10 min data latency/delay and a warning;
   Station C = disabled station;
   EQ = location of a recent or historic earthquake/event;
   Legend = scale of the delay;
   Status = connection status.

Station A = station with up to 20 sec data latency/delay;
Station B = station with up to 10 min data latency/delay and a warning;
Station C = disabled station;
EQ = location of a recent or historic earthquake/event;
Legend = scale of the delay;
Status = connection status.

The visualized QC parameters can be selected in the QC parameters widget of scmv.

.. figure:: media/scmv/qc-selection.png

   QC parameters selection widget

The station information widget opens by right mouse click on a station symbol
in one of the scmv maps. The widget gives a more detailed list of parameters.
For a station general information (coordinates, network code etc.), quality
parameter (latency, gaps etc.), amplitude information and the actual waveform
data are provided. For an event information like the location, the number of
stations and the azimuthal gap are shown.

.. figure:: media/scmv/infowidget-station.png

   Station information widget

The info widget of a station shows station information like network code
and location. The quality of the station can be checked here. The lower
part shows the last 15 minutes of waveforms including picks (if available).

In addition to the current event scmv also shows all events it has currently
saved in its session as circles. This depends on the configured time span it remembers
events. Showing the events can give a convenient overview of the network activity.
If available focal mechanisms are displayed with dashed lines connecting to their location.
The circles and focal mechanisms are again colored by their depth and sized by

.. figure:: media/scmv/historic-origins.png

   Show historic origins

   All historic origins currently saved in scmv are shown as circles.

All historic origins currently saved in scmv are shown as circles.

The events shown an the map can be confined by selecting the mode and the status
of preferred origins in the event selection widget.

.. figure:: media/scmv/event-selection.png

   Event selection widget

The event information widget opens by right mouse click on an event symbol.
It shows event details.
Clicking on the "Show Details" button allows to open the preferred origin of
the event in other GUIs such as in scolv.

Clicking on the “Show Details” button allows to open the preferred origin of

.. figure:: media/scmv/event-info.png

   Event information widget

Click the right mouse button for opening the station info widget.

Choose one station in case several stations are in the selection range.

Position the mouse above a circle representing a location of an event.

Choose one event in case several events are in the selection range.

Press "Create" to open the origin in another GUI, e.g. scolv.

.. image:: media/scmv/artificial-origin.png
   :width: 4cm

Double click in a station in the list to center the map at this location

Set the maximum latency in seconds of the ground motion records
to be valid.

Set the time span in seconds to read events initially from
database.

If a new origin\/event is set\/selected this option defines if the
map is centered or not at the origin location.

Time span of which an event is active after origin time to
show blinking associated stations.

A positive value \(greater than zero\) defines the interval to check
for expired events. A negative or zero value disables the interval
check and expired events are only removed when a new event is declared
or an existing event is updated.

Enable\/disable drawing of station annotations with
location\/channel codes.

Set the location of the map symbol legend \(QC, ground motion\).
Use either: topleft, topright, bottomright or bottomleft.

Set the location of the event symbol legend. Use either:
topleft, topright, bottomright or bottomleft.

The columns that are visible in the table. If nothing
is specified then all columns are visible. Valid column names are:
\"Event\", \"Origin Time\", \"Magnitude\",
\"Magnitude Type\", \"Region\", \"Latitude\",
\"Longitude\", \"Depth\".

*Allow to define an initial rectangular region for the map.*

.. figure:: ../../../../doc/base/media/apps/scolv-location.png
   :alt: scolv

   scolv: OriginLocatorView :ref:`Location tab <scolv-sec-location-tab>`
   with event and phase information

scolv: OriginLocatorView :ref:`Location tab <scolv-sec-location-tab>`
with event and phase information

.. figure:: ../../../../doc/base/media/apps/scolv-picker.png
   :alt: scolv picker

   scolv: OriginLocatorView :ref:`phase picker <scolv-sec-waveform-review>`
   with waveforms and phase information

scolv: OriginLocatorView :ref:`phase picker <scolv-sec-waveform-review>`
with waveforms and phase information

.. figure:: ../../../../doc/base/media/apps/scolv-event.png

   scolv: OriginLocatorView :ref:`Event tab <fig-scolv-event>` with all origins

scolv: OriginLocatorView :ref:`Event tab <fig-scolv-event>` with all origins

.. figure:: ../../../../doc/base/media/apps/scolv-magnitude-picker.png

   scolv: OriginLocatorView :ref:`amplitude waveform review <scolv-sec-amplitude-review>`
   with station magnitudes

scolv: OriginLocatorView :ref:`amplitude waveform review <scolv-sec-amplitude-review>`
with station magnitudes

scolv is the main interactive tool to revise or review origin and event information.
It thus provides the entire functionality to analyze earthquake parameters:

The main scolv window is divided into 4 perspectives (tabs) from which external windows
can be opened:

:ref:`Location tab<scolv-sec-location-tab>`: Details of the selected :term:`origin` with

* :ref:`Phase picker <scolv-sec-waveform-review>` (external window): Review
  waveforms for phase picking including polarities, uncertainties, spectra and
  spectrograms,
* :ref:`Extended commit <scolv-sec-commit>` (external window): Commit solution
  with additional options.

:ref:`Phase picker <scolv-sec-waveform-review>` (external window): Review
waveforms for phase picking including polarities, uncertainties, spectra and
spectrograms,

 (external window): Review

:ref:`Extended commit <scolv-sec-commit>` (external window): Commit solution
with additional options.

:ref:`Magnitudes tab <scolv-sec-magnitude-tab>`: Magnitude details of the
selected origin with

* :ref:`Amplitude waveform review <scolv-sec-amplitude-review>` (external window):
  Waveform review for measuring amplitudes and for computing magnitudes.

:ref:`Amplitude waveform review <scolv-sec-amplitude-review>` (external window):
Waveform review for measuring amplitudes and for computing magnitudes.

 (external window):

:ref:`Event tab <fig-scolv-event>`: Origins and focal mechanisms referenced
by the selected :term:`event`.

:ref:`Events tab<fig-scolv-events>`: Table of event parameters of the loaded
events with interactive filtering of database requests and loaded events.

: Table of event parameters of the loaded

**Connected to the messaging** where all event and station inventory parameters
are received from the :ref:`messaging <concepts_messaging>` or the database and
*updated in real time*. New or updated
parameters can be commited to the messaging. Simply start scolv without any argument
or connect to a specific host providing the messaging, e.g.:

   scolv
   scolv -H [host]

 where all event and station inventory parameters
are received from the 

. New or updated

**Offline without messaging** where all event and station
inventory parameters are read from an XML files or from the database and
*updated interactively*. New or updated parameters can be written to an XML file.
Execute scolv with the command-line option
``--offline`` and optionally provide the database or inventory and bindings
parameters in :term:`SCML` format to fetch event parameters as well as inventory
and bindings configuration parameters. Examples:

   scolv --offline
   scolv --offline -d [database]
   scolv --offline --inventory-db [inventory] --config-db [config]

Select one XML file in the `File` menu to read event parameters.
After processing, the parameters can be saved to another XML file though the
`File` menu.

 where all event and station

. New or updated parameters can be written to an XML file.

 and optionally provide the database or inventory and bindings
parameters in 

 format to fetch event parameters as well as inventory

scolv --offline
scolv --offline -d [database]
scolv --offline --inventory-db [inventory] --config-db [config]

 menu to read event parameters.

The Location tab shows detailed information of the associated
phases and the residuals from the chosen origin additional information about the
hypocenter, time, station distribution, helps to find outlier.

.. figure:: media/scolv/tab_location.png

   Location tab of scolv with summary widget to the left.

   (**Redo/Undo**) Switch to last/next location result
   (**Tab 1-4**) Location/Magnitude/Event/Events tab
   (**Map**) map with the event location, associated stations, the color coded
   residuals (red-positive, blue-negative) and ray paths
   (**Information**) Origin information including time, epicentre, depth, number of
   used and available phases, RMS, azimuthal gap and minimum
   station distance
   (**List**) Table of associated arrivals (phases) containing stream information
   and phase information
   (**Tab 5-10**) Arrival residual plots against distance and azimuth (linear and
   polar) in a separate tab
   (**Plot**) Arrival residual plot (distance over residual in seconds)
   (**Depth**) Checkbox to fix to a defined depth
   (**B1**) Relocate with the given arrival information
   (**B2**) Open Manual Picker
   (**B3**) Import picks of other automatic origins belonging to the same event
   (**B4**) Compute magnitudes
   (**B5**) Commit origin
   (**Summary**) all information of the preferred origin of the loaded event

(**Redo/Undo**) Switch to last/next location result
(**Tab 1-4**) Location/Magnitude/Event/Events tab
(**Map**) map with the event location, associated stations, the color coded
residuals (red-positive, blue-negative) and ray paths
(**Information**) Origin information including time, epicentre, depth, number of
used and available phases, RMS, azimuthal gap and minimum
station distance
(**List**) Table of associated arrivals (phases) containing stream information
and phase information
(**Tab 5-10**) Arrival residual plots against distance and azimuth (linear and
polar) in a separate tab
(**Plot**) Arrival residual plot (distance over residual in seconds)
(**Depth**) Checkbox to fix to a defined depth
(**B1**) Relocate with the given arrival information
(**B2**) Open Manual Picker
(**B3**) Import picks of other automatic origins belonging to the same event
(**B4**) Compute magnitudes
(**B5**) Commit origin
(**Summary**) all information of the preferred origin of the loaded event

) map with the event location, associated stations, the color coded
(

) Origin information including time, epicentre, depth, number of
(

) Table of associated arrivals (phases) containing stream information
(

) Arrival residual plots against distance and azimuth (linear and
(

) Import picks of other automatic origins belonging to the same event
(

The summary widget in the Location tab contains two other tabs: *Preferred* and
*Current*. *Preferred*
reflects the current official (database) state of the event while *Current*
shows the current solution (location and magnitudes). Activate the Summary widget
by pressing :kbd:`F8` or from the *View* menu.

The summary widget in the Location tab contains two other tabs: 

reflects the current official (database) state of the event while 

by pressing 

The summary tab is available for all other tabs of the scolv main window and
also for other GUI applications.

The default arrival residual plot is shown in the figure above. Additional
plots are available to analyze arrivals which can be shown by activating the
corresponding tab.

In these diagrams, arrival can be activated or deactivating for :ref:`relocating <scolv-sec-relocating>`
by clicking on a point or by selecting a range using mouse drag. Deselecting is
available by mouse drag when pressing :kbd:`Ctrl`.

In these diagrams, arrival can be activated or deactivating for 

available by mouse drag when pressing 

.. figure:: media/scolv/tab_location_plots.png

   Additional arrival plots in Location tab of the main window

   From upper left to lower right: **1**) travel-time residual vs distance, **2**)
   travel-time residual vs azimuth, **3**) azimuth vs distance in polar plot
   **4**) travel-time vs distance, **5**) corrected travel-time vs distance
   **6**) focal mechanism.

From upper left to lower right: **1**) travel-time residual vs distance, **2**)
travel-time residual vs azimuth, **3**) azimuth vs distance in polar plot
**4**) travel-time vs distance, **5**) corrected travel-time vs distance
**6**) focal mechanism.

The move out plot uses the reduced travel time with a default reduction velocity
of 6km/s. This value is configurable by :confval:`olv.Pvel`, either in the configuration file
(:file:`scolv.cfg`) or in the :ref:`settings window <scolv-settings>`, e.g.:

of 6km/s. This value is configurable by 

The diagrams in the scolv Location tab present observations (e.g. arrival residuals). Each plot
is also interactive to select a subset of data or to zoom into a region.

A plot filter can be defined. Filtering means that arrivals that match the
filter are not plotted. They are filtered out visually. To enable a filter
click the link "not active" right below the plot tabs. A setup window pops up
where the filter can be defined. Currently only a filter by azimuth around
epicenter can be applied.

click the link “not active” right below the plot tabs. A setup window pops up

.. figure:: media/scolv/plot-filter-setup.png

Select the center azimuth and the extent to either side. If OK is pressed all
arrivals that fall outside the defined azimuthal area are hidden from the plot
and the line below the tabs turns into "Filter is active". Clicking on the
link again and select the "None" filter will show all arrivals in the plot again.

and the line below the tabs turns into “Filter is active”. Clicking on the
link again and select the “None” filter will show all arrivals in the plot again.

Plots can also be configured to show or hide dashed grid lines. Use :confval:`olv.drawGridLines`
for configuration (:file:`scolv.cfg`). The default is true.

Plots can also be configured to show or hide dashed grid lines. Use 

The arrival table shows all arrivals of the current origin. The columns are
sortable by clicking on the corresponding header item. Additional data columns
can be shown or active columns can be hidden, either initially or interactively.
Available column identifiers are:

The columns printed bold are shown initially. The initial column
list can be changed in :file:`scolv.cfg` by adjusting :confval:`olv.arrivalTable.visibleColumns`:

list can be changed in 

olv.arrivalTable.visibleColumns = Used, Status, Weight, Phase, Net, Sta,\
                                  Loc/Cha, Res, Dis, Az, Time, +/-

The user can also interactively select what columns are be visible or hidden
from a context menu which pops up after a right click on the table header.

.. figure:: media/scolv/arrivals-header-context.png

The checkbox in the first column indicates if the arrival was used for locating the
origin. The overall usage state of arrival contains three flags: arrival time used,
backazimuth used and slowness used. If any of these flags is active then the
overall usage state is active as well. The arrival table shows those flags indicated
by **T** for pick time, **S** for horizontal slowness and **B** for backazimuth.
A flag is rendered with a dash if the referred pick does not contain the
corresponding feature. For example, if a pick does not carry a backazimuth
measure then the backazimuth flag is disabled. It would not make sense to
activate backazimuth usage without a corresponding measure.

by 

 for backazimuth.

In most cases, only the time flag, indicated by the capital **T**, will be active.
The other two flags are rendered with dashes, meaning that they are inactive.
Background: an arrival refers to a pick which can hold several features. The basic
feature a pick must hold is the pick time. Some modules such as for array processing
might compute additional pick features. Such features can be the backazimuth and
the horizontal slowness. Locators like LocSAT were developed to use those features
to increase the precision of a location. Special applictions are locations based
borehole networks with poor azimuthal coverage or locations with very few stations.

, will be active.

There may be cases where a backazimuth measure of a pick should not be used by
the locator. In contrast, if a backazimuth is available but the timing is bad,
disabling the use of the pick time but including the backazimuth may be advantageous.
For that a simple weight value is not enough. With a weight one cannot separate
whether or not to use a particular feature. So the arrival does not only refer
to a pick but holds flags indicating which features of that pick should be used
for locating.

Single or multiple rows can be selected in the table. The selection of multiple
rows works either with Ctrl+LeftMouse (add single row) or
Shift+LeftMouse (range selection).

When pressing the right mouse button on a selected row a context menu pops up.
If an unselected row is used, the current selection will be reset and only the
row below the mouse is selected.

If arrivals are deleted, they are removed physically from this solution in
contrast to deactivate an arrival where only the used flags are set to zero.

The *Picker* button opens the interactive waveform picker window. It allows
to view and process waveforms for

 button opens the interactive waveform picker window. It allows

Adding additional pick information such as polarity and uncertainty,

Data procssing, e.g. filtering, rotation, spectrogram and much more.

The zoom trace shows a sub area of the active trace in the list.

.. figure:: media/scolv/picker.png

When the picker window opens waveforms are initially requested for all streams
which have associated phase picks (arrivals). More waveforms can be fetched
interavtively:

Toggle viewing data without arrivals by clicking the purple `Hide` button.

During request the background of the traces is changed according to the current
state:

.. figure:: media/scolv/picker-acqui.png

If a trace displays all three components and amplitudes are scaled up, they are
not clipped to their window area. The clipping behavior can be toggled by
either pressing :kbd:`C` or in the menu
:menuselection:`View --> Zoomtrace --> Clip components to viewport`.

either pressing 

:menuselection:`View --> Zoomtrace --> Clip components to viewport`

.. figure:: media/scolv/clobber-off.png

   Trace clipping enabled

.. figure:: media/scolv/clobber-on.png

   Trace clipping disabled

Initially the picker window shows only the vertical channels for each station that
have been associated with the current location. When opening, it can be configured to

Hotkey :kbd:`t` can be used to toggle beetween 1- and 3-component data. Use the
yellow buttons or :ref:`hot keys <sec-scolv-hotkeys>` to load components not yet
loaded.

 can be used to toggle beetween 1- and 3-component data. Use the
yellow buttons or 

When the picker window opens, the waveforms are filtered by the default filter
configured in :confval:`picker.filters`. Selecting filters or unfitlered data
interactively is available by choosing the filter from the filter menu or
:ref:`hot keys <sec-scolv-hotkeys>`.

configured in 

. Selecting filters or unfitlered data

Waveforms can be rotated to better view details. For rotating the waveform
components into ZNE or ZRT system a new drop down list was added in the toolbar.
Selecting either ZNE or ZRT implies that all missing components are requested.

.. figure:: media/scolv/rotation-options.png

Mature and light colors indicate arrivals and unassociated picks, respectively.
Unassociated picks can be shown/hidden using :kbd:`Ctrl` + :kbd:`5`.

Unassociated picks can be shown/hidden using 

Initially the picker window allows to pick the arrival times of the following phases:

Up to 9 phase types can be configured for selection by
:ref:`hot keys <sec-scolv-hotkeys>`. This list of favourite phases can be customized
by :confval:`picker.phases.favourites`, e.g. (:file:`scolv.cfg`):

# Define a list of favourite phases for quick access
picker.phases.favourites = Pn, P, Pg, PmP, P1, Pg, Sg, S, Sn, SmS

The list of favourites is used to assign shortcuts to. :kbd:`1` is assigned
to the first phase in the list, :kbd:`2` to the second and so on.

Shortcuts are assigned only  to the first 9 favourite phases. All
other defined phases can be activated from the *Picking* menu.

other defined phases can be activated from the 

The phases can be also grouped to reflect e.g. regional
and teleseismic profiles. In group not hot keys are available.
An example configuration looks like this (:file:`scolv.cfg`):

An example configuration looks like this (

# Define two phase groups: regional and teleseismic
picker.phases.groups = regional, teleseismic

# Define all phases of group "regional"
picker.phases.groups.regional = Pn, P, Pg, PmP, P1, Sg, S, Sn, SmS

# Define all phases of group "teleseismic"
picker.phases.groups.teleseismic = pP, sP, sS, PKP, PKP

.. figure:: media/scolv/phases-menu.png

   Pick phase selection menu

For making a phase pick the picking mode must be activated by choosing a phase in the
Picking menu. Short cuts are:

Blue P and S buttons for picking P and phases, respectively (hot keys :kbd:`F1`, :kbd:`F2`),

Blue P and S buttons for picking P and phases, respectively (hot keys 

Press :kbd:`ESC` to leave the picking menu. To send all picks to the main scolv
window click on the red `Apply` button or press :kbd:`F5`. The picks will be used
immediately for :ref:`relocating <scolv-sec-relocating>`.

 to leave the picking menu. To send all picks to the main scolv
window click on the red 

All manual work will be lost when closing the picker window without sending
the picks.

If the mouse hovers a pick, a dashed rectangle is drawn around this pick. Then
the pick is active and the right mouse button can be pressed to open the context
menu where the polarity and uncertainty can be defined. The following screen shot
shows the available uncertainties.

.. figure:: media/scolv/pick-context2.png

   Pick context menu

Additionally, pick uncertainties can be defined freely whereas choosing
among a predefined set of uncertainties is a lot faster. The way, pick uncertainties
are used depends on the applied locator routine and its configuration.
To set the uncertainty of a pick more easily a list of predefined uncertainties can be
defined using :confval:`picker.uncertainties`, e.g.:

defined using 

picker.uncertainties = 0.05, 0.1, 0.2, "(0.1,0.2)", "(0.05,0.02)"

where single values define symmetric and pairs of values define asymmetric uncertainties.
The pre-defined uncertainties can be selected during picking using
:ref:`hot keys <sec-scolv-hotkeys>`, e.g.
:kbd:`1` or :kbd:`2` for the 1st or the 2nd value defined in :confval:`picker.uncertainties`.
Later, the uncertainties can be adjusted manually.
As for phase types, uncertainty profiles can be additionally configured (:file:`scolv.cfg`):

.
As for phase types, uncertainty profiles can be additionally configured (

# Define available pick uncertainty profiles. Single values
# are symmetric uncertainties whereas tuples are asymmetric
# uncertainties: (left,right). Uncertainty values are given
# in seconds.

# Define an uncertainty profile for local events
picker.uncertainties.profile.local = 0.05, 0.1, 0.2, 0.3, "(0.1,0.2)"

# Define an uncertainty profile for teleseismic events
picker.uncertainties.profile.teleseismic = 0.5, 1, 2, 3, "(1,2)"

# Define the list of uncertainty sets that are active in scolv.
# This first set in the list is used by default. The other sets
# can be activated in the settings dialog (scolv: F3)
picker.uncertainties.preferred = local, teleseismic

If an uncertainty is selected, the active pick is copied into a manual pick
and the uncertainty is displayed as semi transparent bar to the left and
to the right of the pick. The width of the bar corresponds to the uncertainty
in seconds.

.. figure:: media/scolv/pick-uncertainty.png

Furthermore the phase pick polarity can be defined. When this is the polarity
of the first arrival P phase it can be used to manually set the focal mechanisms
of the origin in the :ref:`FirstMotion <scolv-sec-diagrams>` diagram.

of the origin in the 

Right-click on the pick to make a choice: Either *positive*, *negative*,
*undecidable* or *unset* is available. You may speed up your work by using
:ref:`hot keys <sec-scolv-hotkeys>`. If set, the polarity is displayed as an
arrow. *Undecidable* is displayed as a cross (X).

The *Relocate* button allows relocating based on the selected pick set. Picks may
be manually adjusted or created before in the
:ref:`wave review window<scolv-sec-waveform-review>` or arrival properties may
be directly adjusted in the :ref:`arrival table <scolv-sec-location-arrival-table>`.
Prior to relocating choose the locator, the locator profile and additional parameters
to the right or from the the tool box.

 button allows relocating based on the selected pick set. Picks may

.

.. figure:: media/scolv/scolv-relocating.png

:confval:`olv.locator.defaultProfile`: Default profile of the default locator

:confval:`olv.locator.minimumDepth`: Minimum depth for the locator to consider.

Additional locator routines are available by :ref:`concepts_plugins` which
provide their own specific global configuration. Read the
:ref:`concepts section on locators <concepts_locators>` for an introduction.

 which

Pressing *Relocate* creates a new origin and updates the arrival table and the
parameters displayed in the Location tab.

 creates a new origin and updates the arrival table and the

Undoing and redoing actions is availalbe by buttons and

.. figure:: media/scolv/tab_previous-next.png

You need to create a new origin for :ref:`computing magnitudes <scolv-sec-magnitudes>`.

When an event was :ref:`relocated <scolv-sec-relocating>` a new origin is created
and new magnitudes can be calculated by using the
"Compute Magnitudes" button. The advantage of calculating the magnitudes before
committing the new origin, is the possibility to check the resulting magnitudes
before they are computed manually by :ref:`scmag`.

 a new origin is created
“Compute Magnitudes” button. The advantage of calculating the magnitudes before
before they are computed manually by 

:ref:`An amplitudes status window <fig-scolv-location-amp-status>` will pop up showing the progress
information of measurements. The amplitudes are either measured or fetched from
database if the pick is unchanged and the amplitude is already in the system.
For new manual picks, waveforms are requested to measured the amplitudes. The
popup window contains information about the progress, limitations and possible
errors.

:ref:`An amplitudes status window <fig-scolv-location-amp-status>`

 will pop up showing the progress
errors.

.. figure:: media/scolv/tab_location_amp_status.png

   Measure amplitudes status window.

After closing the amplitude status window magnitudes are computed and
possible limitations are shown, if applicable, in the magnitudes status window.
Confirm this window in order to proceed.

.. figure:: media/scolv/tab_location_mag_status.png

   Compute magnitudes status window.

All available magnitudes are then shown and can be interactively re-processed in
the :ref:`Magnitudes tab <scolv-sec-magnitude-tab>`.

the 

Committing a solution means to send the location (including optional magnitudes)
to the processing system and let it decide what origin becomes preferred.

*Optional:* Change to Event tab for setting

* This solution preferred
* Event type
* Event certainty
* Preferred magnitude
* Preferred focal mechanism

Instead of selecting events from the Events tab, the previous or the next event
can be conveniently selected from the edit buttons above the Location tab.

Instead of optionally setting parameters in the Event tab an additional commit
mode allows to directly set certain parameters such as

and to choose options along with the location and its magnitudes. After pressing
and holding the Commit button down for a little while, a menu pops up which
allows to select *With additional options*.

allows to select 

Selecting this entry
brings up another window where the different options can be set.

It allows to fix the origin to be committed as preferred origin and to set the
event type in one go. If *Return to event list after commit* is ticked, the
event list is activated after pressing OK to select another event quickly.

event type in one go. If 

 is ticked, the

*Earthquake name*
Contains the event description *earthquake name*. If this field is empty, the
description will be removed from the event otherwise it will be added.

. If this field is empty, the

*Comment*
Contains an optional event comment added as comment with ID *Operator*. The
comment text can be visualized in event lists
(:ref:`Events tab <scolv-events-tab>`) by configuration of the global parameters
:confval:`eventlist.customColumn.eventCommentID` or :confval:`eventlist.scripts.*`.

As a shortcut for committing with additional options,
:ref:`custom commit buttons <fig-scolv-custom-commit>` can be added by
configuration: Add, enable and configure a custom commit profile in
:confval:`olv.customCommits`.
With custom commit buttons origin and event paramters can be set, e.g.:

 can be added by

.

Magnitude type of the :term:`preferred magnitude`. The preferred magnitude
can also be set in the :ref:`magnitude tab <scolv-sec-magnitude-summary>`.

.. figure:: media/scolv/commit-custom.png

   Custom commit buttons in the Location tab for configured actions and with specific label and color.

Custom commit buttons in the Location tab for configured actions and with specific label and color.

The Magnitude tab shows all available magnitude information for the current
origin. They can be recomputed after creating a new origin, e.g. by relocating.

.. figure:: media/scolv/tab_magnitudes.png

   Magnitudes tab of scolv.

   (**Map**) Map with residual and status of the station magnitude, filled
   circles show stations which delivered a magnitude, empty circles represent
   for which no magnitude was calculated
   (**Magnitude tabs**) Each magnitude and the residuals are displayed in a
   separate tab, no residuals are displayed for deduced magnitudes like
   Mw(mB) or M
   (**Information**) Magnitude information including network magnitude value,
   magnitude error, number of used and available station magnitudes and
   minimum/maximum station magnitude
   (**List**) Station magnitude table with weights
   (**Plot**) Station magnitude residual from network magnitude (distance
   over residual)
   (**Weighting**) Weighting scheme for the network magnitude
   (**B1**) Recalculation of the network magnitudes
   (**B2**) Open waveform review

(**Map**) Map with residual and status of the station magnitude, filled
circles show stations which delivered a magnitude, empty circles represent
for which no magnitude was calculated
(**Magnitude tabs**) Each magnitude and the residuals are displayed in a
separate tab, no residuals are displayed for deduced magnitudes like
Mw(mB) or M
(**Information**) Magnitude information including network magnitude value,
magnitude error, number of used and available station magnitudes and
minimum/maximum station magnitude
(**List**) Station magnitude table with weights
(**Plot**) Station magnitude residual from network magnitude (distance
over residual)
(**Weighting**) Weighting scheme for the network magnitude
(**B1**) Recalculation of the network magnitudes
(**B2**) Open waveform review

) Map with residual and status of the station magnitude, filled
(

) Each magnitude and the residuals are displayed in a
Mw(mB) or M
(

) Magnitude information including network magnitude value,
(

) Station magnitude residual from network magnitude (distance
(

For each of the different magnitude types (e.g. mb, mB, MLv, Mw(mB)),
the :ref:`station magnitudes <scmag-stationM>` are shown in the magnitude residual plot and the table.
The residual plot visualizes the difference between the station magnitude and
the network magnitude for the different station distances. After relocation the
magnitudes can be recalculated by the "Compute Magnitudes" button in the
Location tab.

the 

 are shown in the magnitude residual plot and the table.
magnitudes can be recalculated by the “Compute Magnitudes” button in the

The station magnitudes can also be recalculated by
:ref:`interactive waveform analysis<scolv-sec-amplitude-review>`. Press the B2 button to
start the interactive analysis.

:ref:`interactive waveform analysis<scolv-sec-amplitude-review>`

Magnitudes cannot be recalculated for origins loaded from
database. To review magnitudes, create a new origin (relocate), recompute
magnitudes and then change into this tab to open either the waveform
review window or to just remove outliers.

:ref:`Network magnitudes <scmag-networkM>` are computed from corresponding
:ref:`station magnitudes <scmag-stationM>`.
The considered station magnitudes can be selected or unselected in the
list and in the plot of station magnitudes. The method, the status and the margins
to disregard outliers can be selected.
Normally, the 25%-trimmed mean is calculated as network magnitude to stabilize
the result against a few outliers. The 25%-trimmed mean first removes the outliers
of the outer 12.5% percentiles and then forms the mean.

.

Magnitudes that were not computed due to missing data or low signa-to-noise
ratios have a cross button rendered in their tab headers and their value is
nan (not a number). Furthermore was the status of the magnitude set to
rejected. To manually review the waveforms and to fine tune the
parameters, open the waveforms and add at least one station magnitude. Otherwise
the rejected magnitude will be removed from the origin prio to committing it.

The :ref:`summary magnitude <scmag-summaryM>` typically is calculated from all network magnitudes
by :ref:`scmag` and set as preferred magnitude type by :ref:`scevent` after committing
or confirming an origin. The defaults can be changed by configuring :ref:`scmag`
and :ref:`scevent`.

 after committing
or confirming an origin. The defaults can be changed by configuring 

However, in combination with :ref:`custom commit buttons <sec-scolv-custom-commit>`,
the network magnitude to be considered as the preferred can be set by hitting this
configured button or interactively in the :ref:`magnitude tab <fig-scolv-magnitudes>`
of scolv. Interactively check the box in the network magnitudes tab, then press the
custom commit button. Setting the preferred magnitude interactively in the magnitude
tab takes priority over the configuration of the custom commit button.

,
configured button or interactively in the 

The magnitude review page also allows the review of waveforms.
The button *Waveforms* brings up the amplitude waveform review page.
The waveform review magnitude type is the same as the currently active tab.

The button 

 brings up the amplitude waveform review page.

.. figure:: media/scolv/magnitudes-waveforms.png

The initial view loads all traces of all arrivals within the defined distance
for that magnitude type. The zoom trace shows all components required for this
particular amplitude type and the lower part shows all stations and only the
currently active component. All traces are aligned on trigger time (blue P marker).
If a station has got an amplitude, it shows up as a red (automatic
determined amplitude) or green (manually determined amplitude) marker.
This display is similar to the Picker.

The toolbar contains two lines of settings. The first line is similar to the
Picker, the second line is amplitude picker specific.

.. figure:: media/scolv/magnitudes-toolbar.png

   Second toolbar line: filter selection, filter toggle, min SNR editor,
   amplitude measurement type selector, amplitude combiner selector,
   (re)calculate amplitudes, apply amplitudes.

Second toolbar line: filter selection, filter toggle, min SNR editor,
amplitude measurement type selector, amplitude combiner selector,
(re)calculate amplitudes, apply amplitudes.

The example above shows nicely how different data time windows are used for
amplitude determination depending on the distance. This depends on the
amplitude type and its implementation.

Adjust processing areas (noise, signal) for a single trace or all traces

Apply a secondary filter (e.g. to remove noise or low frequencies)

Add unpicked/unassociated stations that are within a certain distance

By default the processed waveforms are displayed. The processing is defined by
the magnitude type. To view the raw waveforms change the filter drop down box
to *Raw*.

to 

A basic amplitude processor uses two basic settings: Minimum signal/noise
ratio (SNR) and data time windows. The default minimum SNR is defined by the
implementation of the amplitude algorithm. This default SNR is shown in the
toolbar right from *Min SNR:*. In some situations an operator might want to
increase or decrease the minimum SNR for some reason. This can be done by
modifying the value in the corresponding spin box.

toolbar right from 

. In some situations an operator might want to

In the time scale of the zoom widget and the overview three black triangles are
visible. Those triangles can be used to adjust the data time windows of either
the zoom trace (upper part) or all traces (lower part) by dragging the handle
with the left mouse button.

Some amplitude processors allow the modification of the type of amplitude
measurement (e.g. absolute maximum or peak-to-peak) and/or the amplitude
combiner procedure. This procedure is mostly used when a final amplitude from
two components is computed, e.g. ML on the horizontals. The combiner procedure
defines how the amplitudes of each horizontal are combined to a single amplitude,
e.g. by taking the maximum of both or the average.

If the amplitude processor allows any of these options, the corresponding drop
down boxes are enabled in the toolbar and can be used to change the defaults.

Amplitudes are not recalculated if any changes to the settings are
made. Recalculation has to be activated manually (see below).

Another option is to filter the data additionally to the internal filter of the
amplitude processor. Be warned that wrongly applied filters screw up the results.
The available filters can be defined in the settings dialog of scolv or in the
configuration file similar to the manual picker filters (:file:`scolv.cfg`):

configuration file similar to the manual picker filters (

# List of filters available in the picker. Format:
# "name1;filter-definition1", "name2;filter-definition2"
amplitudePicker.filters = "4 pole HP @2s;BW_HP(4,0.5)"

The new filter selection is applied immediately to the waveforms while the amplitudes are not recalculated
(see next section).

To calculate the amplitudes of all traces with the current settings press the
green check in the toolbar. It will process all traces and recalculate the
amplitudes within the shown time windows. If an error occurs, it will show up as
a small message box in the station trace itself. If a new amplitude is available,
its state is set to manual and the marker is updated to reflect the new position
of the amplitude. If the mouse hovers an amplitude marker, a tooltip pops up
after a certain amount of time and shows information about the amplitude.

.. figure:: media/scolv/amplitude-tooltip.png

In addition to the default picking of all stations it is also possible to
define the time window of the amplitude of a station manually. To do so,
activate picking by pressing :kbd:`1` or in the main menu:
:menuselection:`Amplitudes --> Pick amplitudes`.

activate picking by pressing 

Create a time window by pressing with left mouse button at the start time and
releasing at the end time, or

Double click at a time and use a time window of [t-0.5sec;t+0.5sec]

Unpicked or unassociated stations can be added the same way as in the manual
picker. The new stations will not have an amplitude and need either manual
picking or global amplitude recalculation.

Stations can be disabled by either double clicking on the trace label in the
overview or by deactivating an amplitude similar to deactivating a pick.

The red button in the toolbar confirms all amplitudes and transfers them to the
magnitude review page. Only activated amplitudes are transferred. Disabled
stations or disabled amplitudes are ignored. At this stage all magnitudes are
calculated and the network magnitude is calculated according to the available
settings: *Mean*, *Median* or *Trimmed mean*.

settings: 

The Event tab gives all information of associated origins and magnitude of the
actual event. Here the selection of the preferred origin and preferred magnitude
can be influenced independent from :ref:`scevent`. The messaging between
scevent and scolv about the selected origins and magnitudes can be viewed in
a window that has to be opened by pulling the left side frame to the right.

can be influenced independent from 

. The messaging between

.. figure:: media/scolv/tab_event.png

   Event tab of scolv.

**Origin list:** List of all associated origins
* **B1** Selector for the event type
* **B2** Button to fix the selected origin as preferred
* **B3** Button to let :ref:`scevent` select the preferred origin

**Magnitude list** List of magnitudes of the actual origin
* **B4** Button to fix the selected magnitude as preferred
* **B5** Button to let :ref:`scevent` select the preferred magnitude

**Focal Mechanism:** List of all focal mechanisms associated to the selected event.

The map (lower left part) shows all associated origins while the currently
selected origin (**Origin list**) is drawn filled.

selected origin (

The Origin list shows details of all available origins. You may fix/unfix an
origin to become the preferred one or select the type and set
the type uncertainty for the selected sevent.

Select a row or cell and
press the right mouse button to copy the row or cell, respectively.
The *Stat* column indicates a combination of the mode and the status of the origin.

The 

 column indicates a combination of the mode and the status of the origin.

**A**: unset, status not specifically set, e.g. usually automatic origins from :ref:`scautoloc`

: unset, status not specifically set, e.g. usually automatic origins from 

The magnitude list shows all available magnitudes available for the origin
selected in the :ref:`Origin list <scolv-origin-list>`. You may fix/unfix a
magnitude type to become the preferred magnitude.

selected in the 

. You may fix/unfix a

The Focal Mechanism tab shows all focal mechanisms and moment tensors associated
to the selected event. You may fix the preferred mechanism or fix/unfix
:term:`Mw <magnitude, moment (Mw)>` to become the preferred magnitude.

The Events tab gives an overview of the events in the defined time span. Listed
events are updated in real time as new events arrive in |scname| or are loaded
from the database. The title of the tab also indicates the number of shown vs.
the total number of loaded events. The numbers can be different because events
can be :ref:`hidden from the list by filtering <scolv-events-filtering>`.

events are updated in real time as new events arrive in 

 or are loaded
can be 

:ref:`hidden from the list by filtering <scolv-events-filtering>`

When starting scolv with the option **--offline**, events can also be loaded from an XML
file using the File menu in the main window.

, events can also be loaded from an XML

.. figure:: media/scolv/tab_events.png

   scolv Events tab with the list of events and the filter window.

Information about origin time, preferred ("best") magnitude, preferred magnitude
type, number of phases, epicenter and depth, origin status, region, agency and
event/origin ID are similar to the event list in :ref:`scesv`. Additionally,
all origins associated with one event are displayed if an event item is expanded.

Information about origin time, preferred (“best”) magnitude, preferred magnitude
event/origin ID are similar to the event list in 

. Additionally,

The region name of an event is read from the database or received via the
messaging bus. It is an integral part of the event description and set based
on the data set available at the time of the event creation. The region name
of the origins is not part of the origin description and resolved dynamically
when the information is required. That can lead to confusion if the dataset
of the computer where the event has been created and the local dataset
differs. Therefore the region names resolved locally are rendered with italic
font style.

As with the arrival table the shown columns of the list are also configurable.
The available identifiers are:

AzGap: largest azimuthal gap between two neighboring stations of an origin

**Stat** : a combination of the :ref:`color-coded mode <scolv-origin-mode>` and
the :ref:`status<scolv-origin-status>` of the preferred origin as described by
a letter. A trailing "+" indicates that origins were contributed to the event
by multiple agencies, e.g. "C+".

 of the preferred origin as described by
a letter. A trailing “+” indicates that origins were contributed to the event
by multiple agencies, e.g. “C+”.

The bold identifiers are visible initially by default.
To show or hide columns interactively click with the right mouse button on the
table header and check or uncheck the corresponding column.

Sorting and re-ordering is available by clicking on the header of the columns and
by dragging the header fields, respectively. Right-click on cells to copy individual
cells values or entire rows.

The initial list can configured with the global module parameter
:confval:`eventlist.visibleColumns` in :file:`global.cfg` or :file:`scolv.cfg`,
e.g.:

# Remove Type and Author from column list that is initially active
eventlist.visibleColumns = Type, M, MType Phases, RMS, Lat, Lon, Depth, DType, Stat, FM, Author, Agency, Region, ID

Database request filters can be applied interactively or automatically by

**Time:** Select a time period or a number of days before current time.

**Interactive custom request filters**: You may set and adjust a custom request
filter** in the filter parameter window which opens when pressing the Filter
button. Press *Read* to reload the events list based on the filter parameters.
**The interactive custom request filter only concerns the
database request for loading events. It does not update the current list.**
Use the :ref:`global` for presetting the values (:file:`scolv.cfg` or
:file:`global.cfg`), e.g.:

   eventlist.filter.database.minlat = 51.0

: You may set and adjust a custom request
button. Press 

The interactive custom request filter only concerns the
database request for loading events. It does not update the current list.

Event lists already loaded from from the database can be filtered by

**Event type:** Activate by check box *Hide other/fake events*. If checked, all

events with the configured types are hidden from the list. The default event types
to hide are *not existing* and *other* are hidden. If unchecked, the filtering
is inactive and the events are shown. **Pressing the Hide button only affects
the currently loaded list.** Configure the event types used for this filter as well
as the label text for the checkbox.
Use the :ref:`global` for presetting the values s (:file:`scolv.cfg` or :file:`global.cfg`):

to hide are 

 are hidden. If unchecked, the filtering
is inactive and the events are shown. 

**Pressing the Hide button only affects
the currently loaded list.**

Pressing the Hide button only affects
the currently loaded list.

 Configure the event types used for this filter as well
Use the 

# Define the event types to be filtered
eventlist.filter.types.blacklist = "not existing", "other",\
                                   "outside of network interest"

# Define the label of the button to filter the events
eventlist.filter.types.label = "Hide fake events"

# Define the default behavior
eventlist.filter.types.enabled = true

**Agency**: Activate by check boxes *Show only own origin* and/or "Show only
latest/preferred origin per agency". The button *Show only own events*
will hide all events where the preferred origins agencyID is not the configured
:confval:`agencyID` of scolv. This is the default behavior which can be customized
(:file:`scolv.cfg` or :file:`global.cfg`):

   # Set the preferred agencyIDs to GFZ and EMSC
   eventlist.filter.agencies.whitelist = GFZ, EMSC

   # Set type to 'origins' which means that an event will pass the filter if
   # at least one origin is from a preferred agency defined with the whitelist
   # above. The default type is 'events' which checks only the events preferred
   # origin.
   eventlist.filter.agencies.type = origins

   # Defines the text of the option "Show only own events".
   eventlist.filter.agencies.label = "Show only own events"

   # Enable this filter initially. If this option is not used, the filter
   # is disabled by default.
   eventlist.filter.agencies.enabled = true

 and/or “Show only
latest/preferred origin per agency”. The button 

 of scolv. This is the default behavior which can be customized
(

# Set the preferred agencyIDs to GFZ and EMSC
eventlist.filter.agencies.whitelist = GFZ, EMSC

# Set type to 'origins' which means that an event will pass the filter if
# at least one origin is from a preferred agency defined with the whitelist
# above. The default type is 'events' which checks only the events preferred
# origin.
eventlist.filter.agencies.type = origins

# Defines the text of the option "Show only own events".
eventlist.filter.agencies.label = "Show only own events"

# Enable this filter initially. If this option is not used, the filter
# is disabled by default.
eventlist.filter.agencies.enabled = true

**Source region:** Select a source region, activate "Hide events" and choose to
hide events inside or outside the region.
**Pressing the Hide button only affects the currently loaded list.**
Pre-defined regions can be configured in the global configuration per bounding
box or region defined by a BNA or GeoJSON polygon
(:file:`global.cfg`, :file:`scolv.cfg`):

   # Configured a list of regions that can be used as filter of the result set.
   eventlist.filter.regions.profiles = chile

   # Defines the name of the region that shows up in the listbox.
   eventlist.filter.regions.region.chile.name = Chile

   # Defines a rectangular region with a list of 4 values: latmin, lonmin, latmax,
   # lonmax.
   # eventlist.filter.regions.region.chile.rect = -40, -80, -10, -60

   # Defines the name of the polygon for the region check. If defined then the
   # rect region has no effect. The configured polygon name is being search for in
   # the global FEP regions and the spatial vector layer. The first polygon found
   # with the given name will be taken.
   eventlist.filter.regions.region.chile.poly = chile

 Select a source region, activate “Hide events” and choose to

Pressing the Hide button only affects the currently loaded list.

(

# Configured a list of regions that can be used as filter of the result set.
eventlist.filter.regions.profiles = chile

# Defines the name of the region that shows up in the listbox.
eventlist.filter.regions.region.chile.name = Chile

# Defines a rectangular region with a list of 4 values: latmin, lonmin, latmax,
# lonmax.
# eventlist.filter.regions.region.chile.rect = -40, -80, -10, -60

# Defines the name of the polygon for the region check. If defined then the
# rect region has no effect. The configured polygon name is being search for in
# the global FEP regions and the spatial vector layer. The first polygon found
# with the given name will be taken.
eventlist.filter.regions.region.chile.poly = chile

Since the internal data model is limited, scolv allows
deriving custom quantities from the event or origin objects. These quantities can
be displayed or processed further by external script.
This procedure can help to evaluate origins in a better or more specific way.

:ref:`Origin comments <sec-scolv-comments>` provided along with origins to be
shown in scolv tabs,

:ref:`External scripts <sec-scolv-scripts>` provided by the |scname| operator
to extract specific information from events or origins which are shown in tabs
or processed further.

 operator

Currently only one comment of an origin can be added to the different panels.

To add an origin comment value to the information panel of the Location tab,
configure display paramters in scolv. Example (:file:`scolv.cfg`):

configure display paramters in scolv. Example (

# Define the comment id to be used
display.origin.comment.id = SED.quality

# Define the default display value if no comment is available
display.origin.comment.default = "-"

# Define the label text in the information panel for this value
display.origin.comment.label = Quality

To add a custom column to the **origin list of the Event tab** showing an origin
comment value, configure eventedit parameters in scolv or global. Example

 showing an origin
(

# Define the default value if no comment is present
eventedit.origin.customColumn.default = "-"

eventedit.origin.customColumn.originCommentID = SED.quality

# Define the column header label
eventedit.origin.customColumn.name = "Qual"

# Define the column position in the table
eventedit.origin.customColumn.pos = 4

# Allows to map comment values (strings) to colors. In this case the
# comment will have A,B,C or D which is mapped to green, yellow, orange and
# red
eventedit.origin.customColumn.colors = "A:00FF00","B:rgb(64,192,0)",\
                                        "C:rgb(192,64,0)","D:FF0000"

To add a custom column to the **event list of the Events tab** using a comment
value, configure eventlist parameters in scolv or global. Example

 using a comment
(

eventlist.customColumn.default = "-"

eventlist.customColumn.originCommentID = "SED.quality"

eventlist.customColumn.name = "Qual"

eventlist.customColumn.pos = 5

# red
eventlist.customColumn.colors = "A:00FF00","B:rgb(64,192,0)",\
                                "C:rgb(192,64,0)","D:FF0000"

The last three examples are used to show the *SED.quality* comment value which
is set by the :ref:`NonLinLoc locator plugin <global_nonlinloc>`.

In order to show event comments, e.g.,
:ref:`set during committing <scolv-sec-commit-additional>` replace
:confval:`eventlist.customColumn.originCommentID` by
:confval:`eventlist.customColumn.eventCommentID`:

eventlist.customColumn.eventCommentID = "Operator"

eventlist.customColumn.name = "Operator"

Automatically to show :ref:`custom information <sec-scolv-information>` in the
Location, Event and the Events tabs.
The information may include parameters derived from origins.

 in the

scolv allows to add one custom button to the **Summary window** and two custom
buttons to the **Location tab**.
When pressing the custom buttons, user-defined external scripts are executed.
Configuration (:file:`scolv.cfg`):

.
Configuration (

Button in Summary window. Configure: :confval:`scripts.export` and read
:confval:`scripts.export` for the description of the parameters passed to the
script.

Up to 2 buttons in Location tab. Configure:

* button1: :confval:`button0`, :confval:`scripts.script0`,
* button2: :confval:`button1`,  :confval:`scripts.script1`.

Read :confval:`scripts.script0` and :confval:`scripts.script1` for the
description of the parameters passed to the scripts.

Origin parameters can be derived by external scripts.
When configured for the scolv tabs *Location*, *Event* or *Events*, scolv will call
those scripts and writes a binary serialized origin object
to its standard input. scolv reads the script output and displays this value
only if the return code of the script is 0.

When configured for the scolv tabs 

, scolv will call

:ref:`Custom information in the Location tab <sec-scolv-parameters-location>`

:ref:`Custom information in the Event tab <sec-scolv-parameters-event>`

:ref:`Custom information in the Events tab <sec-scolv-parameters-events>`

Example script reading origin parameters from stdin just returning the standard
error of the origin:

#!/usr/bin/env seiscomp-python
from __future__ import print_function
import sys
from seiscomp import datamodel, io

def main():
    ar = io.BinaryArchive()

    # Open standard input
    if not ar.open("-"):
        # Hmmm, opening stdin failed
        return 1

    # Read the object
    obj = ar.readObject()
    ar.close()

    # Try to cast obj to an origin
    org = datamodel.Origin.Cast(obj)
    # No origin -> error
    if not org:
        return 1

    # Try to print the standard error to stdout
    try:
        print(org.quality().standardError())
    # Field not set, return error
    except Exception:
        return 1

    return 0

if __name__ == "__main__":
    sys.exit(main())

The script must be executable. In Linux don't forget
to call

   chmod +x /path/to/script

Calling external scripts causes overhead and can take some time
depending on the implementation of the script. scolv needs to access the
database to fetch additional information which it does not need normally.
The slower the database access, the longer it takes to display the results.

To add the output of an external custom script to the information panel of the Location tab,
configure display parameters in scolv. An example script is given
:ref:`above <sec-scolv-example-script>`. Configuration example (:file:`scolv.cfg`):

# Define the available add-ons to be used
display.origin.addons = qual, qual2

# Configure each add-on
display.origin.addon.qual1.label = "Qual1"
display.origin.addon.qual1.script = "@DATADIR@/scripts/scolv/script1"

display.origin.addon.qual2.label = "Qual2"
display.origin.addon.qual2.script = "@DATADIR@/scripts/scolv/script2"

Provide the external script and add the output to the **origin list of the Event tab**,
configure the eventedit parameters in :file:`global.cfg` or :file:`scolv.cfg`.
An example script is given :ref:`above <sec-scolv-example-script>`.
Configuration example:

eventedit.scripts.columns = qual1, qual2

eventedit.scripts.column.qual1.label = "Qual1"
eventedit.scripts.column.qual1.pos = 8
eventedit.scripts.column.qual1.script = "@DATADIR@/scripts/scolv/script1"

eventedit.scripts.column.qual2.label = "Qual2"
eventedit.scripts.column.qual2.pos = 9
eventedit.scripts.column.qual2.script = "@DATADIR@/scripts/scolv/script2"

From the event list external scripts can be excuted with :term:`origin` or
:term:`event` objects or both as input from stdin to display the output of the
script (stdout) in a custom column.

 objects or both as input from stdin to display the output of the

Provide an external script and add the output to **event list of the Events tab**,
configure the eventlist parameters in :file:`global.cfg` or :file:`scolv.cfg`.
Configuration example for passing origin or event objects:

eventlist.scripts.columns = qual1, qual2

eventlist.scripts.column.qual1.label = "Qual1"
eventlist.scripts.column.qual1.pos = 5
eventlist.scripts.column.qual1.script = "@DATADIR@/scripts/scolv/script1"
eventlist.scripts.column.qual1.types = Origin

eventlist.scripts.column.qual2.label = "Qual2"
eventlist.scripts.column.qual2.pos = 6
eventlist.scripts.column.qual2.script = "@DATADIR@/scripts/scolv/script2"
eventlist.scripts.column.qual2.types = Event

Adding external scripts to the event list is the most expensive part. Whenever
the event list is reloaded, it will start to run the scripts on all origins
in the background. It can take a while until the complete list has been
processed. A progress indicator is plotted in the middle of the event list while
the background processes are running.

All settings of scolv can be adjusted in its :ref:`configuration file <scolv_configuration>`.
However, some settings can be changed on-the-fly. The connection to the messaging
system and the database can be adjusted in the *Setup connection* dialog access
by pressing :kbd:`F2`. A window for adjusting scolv settings is
available which can be opened by pressing :kbd:`F3`.

.
system and the database can be adjusted in the 

. A window for adjusting scolv settings is
available which can be opened by pressing 

When pressing the Save button in the scolv settings menu, the parameters will be written
to :file:`$HOME/.seiscomp/scolv.cfg` (use mode configuration) where they take
priority over configurations in :file:`$SEISCOMP_ROOT/etc/scolv.cfg` (system mode configuration).

to 

 (use mode configuration) where they take
priority over configurations in 

This section contains settings for all the main tabs and *all* waveform windows.

.. figure:: media/scolv/settings-global.png

   Global settings

*Reduction velocity*
Sets the reduction velocity used for plot *MoveOut*.

*Compute magnitudes after relocate*
Automatically computes magnitudes after each relocation. This has the same
effect as pressing "Compute magnitudes" manually.

effect as pressing “Compute magnitudes” manually.

*Compute magnitudes silently*
Automatically closes the compute magnitudes dialog if the computation is
finished and no error occurred.

*Data source*
Defines the waveform data source for both, pick review and amplitude review

*Default distance for "add station"*
The default value to add stations (traces) that have not been picked or
associated is 15 degrees. A lower value can be defined, e.g. if mainly local events are analyzed.

*Hide station traces without data and arrivals*
If new stations are added during pick review or amplitude review and if no
data is available for some of those stations, they will be hidden and not
shown. Once data arrives the trace becomes visible.

.. figure:: media/scolv/settings-picker.png

   Waveform picker settings

*Show cross hair cursor*
Enables the cross hair cursor which shows the currently selected uncertainty
ranges.

ranges.

*Uncertainties*
Select the current uncertainty set to be used (:confval:`picker.uncertainties.preferred`).

*Remove automatic station picks*
If checked all automatic picks of a station with manual picks are removed once
the manual review is confirmed.

*Remove all automatic picks*
If checked all automatic picks are removed once the manual review is confirmed.

This section contains settings for the magnitude waveform review window.

.. figure:: media/scolv/settings-amplitude.png

   Amplitude/magnitude review settings

*Waveform time window pre offset*
Sets an offset before the used amplitude time window that is used when
collecting data.

*Waveform time window post offset*
Sets an offset after the used amplitude time window that is used when

The greater the offset the more the amplitude time window can be extended or
shifted.

shifted.

Local network users prefer the distance unit in kilometers while others prefer degrees.
scolv (as any other GUI) can be configured to show either the one or the other.

# If true, show distances in km. Use degree otherwise.
scheme.unit.distanceInKM = true

# Precision of depth values.
scheme.precision.depth = 0
# Precision of latitude/longitude values.
scheme.precision.location = 2
# Precision of magnitude values.
scheme.precision.magnitude = 2
# Precision of pick times (fractions of seconds).
scheme.precision.pickTime = 1

Configuring units and precisions only affects the way the values are presented,
not the values themselves. These and other lock-and-feel parameters can be
adjusted in *scheme* section of the :ref:`global configuration <global>`.

adjusted in 

The following table describes the available key combinations and their triggered
actions in scolv. The hotkeys are provided for:

Picker window

* all areas
* upper area - picking trace
* lower area - picker overview

Create an unassociated artificial origin at the current map
center

Toggle display of picks (not arrivals). If picks should
be shown the first time, all picks within the time span of
interest are loaded from database. The behavior is the
same as ticking the option "Load all picks".

same as ticking the option “Load all picks”.

Number of days to preload events from the database when staring scolv.

List of magnitude types to be calculated when computing
magnitudes. This list can be altered interactively so it
reflects only the default unless computeMagnitudesSilently
is set to true. The configured types should include all
types which are also computed by scmag in order to allow
their processing in scolv. Otherwise scmag may add
magnitudes to origins without interaction in scolv.

A list of magnitude types to be displayed in the summary widget \(F8\).

Label of the button that triggers the script defined in
\"scripts.script0\".

\"scripts.script1\".

**scripts.\***
*Define scripts linked to extra buttons. A button is created*
*by definition of the corresponding script.*

Full path to the script which enables a publish button in the
summary panel on the left side of scolv \(activated with F8\).

Full path to the script executed when hitting the button labeled with \"button0\".
OriginID and EventID are passed to the script as arguments.

Full path to the script executed when hitting the button labeled with \"button1\".

If the publish button is clicked while another script is
still running, a message box pops up with a warning that
a script is still running and to option to terminate it. If
this flag is true, then it will be terminated automatically
without user interaction and the warning message.

Sets the default event type to be used when confirming a solution. If
not set, the event type is not changed at all unless \"with options\"
is used. The origin or its source must be associated with an event already.

A list of event types which are commonly set. This defines
a priority list which will be displayed on top of the event
type selection menu. Additionally the remaining \(non\-prioritized\)
types are displayed with less contrast.
The order is preserved in the event editor as well as in the drop\-down
list of the \"Commit with additional options\" dialog.

Sets the default magnitude aggregation method. It can be either \"mean\",
\"trimmed mean\" or \"median\". If not set, the default
behavior is used which computes the mean if less than 4 stations are available,
trimmed mean otherwise.

Automatically starts computation of magnitudes after relocating an
origin.

Starts magnitude computation without user interaction if everything
runs without errors. In case of errors a window pops up with
the current state of processing.

If enabled, a magnitude selection pop window will open
in advance to compute magnitudes. The default selection
reflects the configuration parameter \"magnitudes\".

The velocity applied to reduce travel times in the
\"MoveOut\" plot of the Location tab.

Sets the drawing of lines in the map connecting the station with the event.

If a locator does not populate the take off angle in its arrivals,
the first motion plot will not show picked polarities. This option
defines whether to compute take off angles that are not present
in the arrivals or not.

The default value for adding unassociated stations in the picker.

If enabled, all traces without data and arrivals are
hidden in the picker.

If enabled, all traces of disabled stations without picks are hidden.

When creating an artificial origin this is the default depth used.

Adds an icon to the system tray and displays a message
when a new event was received.

A list of origin comment profiles. These profiles will be
used to populate origin comments when committing an origin.

A list of magnitude comment profiles. These profiles will be
used to populate magnitude comments when committing a magnitude.

Maximum distance in degrees up to which also unassociated stations are
shown in the map. 360.0 deg which will
show all unassociated stations.

Default map radius in degrees if a new event is selected.
A negative value restores the default behavior.

Defines the visible columns in the arrival table. Valid tokens are:
Used, Status, Phase, Weight, Method, Polarity, Takeoff,
Net, Sta, Loc\/Cha, Timeres, Dis, Az, Time, +\/\-,
Slo, Slores, Baz, Bazres, Created, Latency

Whether the arrival plot should show uncertainties
or not by default. That flag can be toggled with 'e'
or via the context menu during runtime.

or not by default. That flag can be toggled with ‘e’

Minimum depth which is set if the locator used supports fixing
the depth. If the depth is lower than this value, the depth is
fixed to this configured value and the origin is relocated again.

Whether to preset the locator settings when an origin
is being loaded. It tries to figure the locator type
from Origin.methodID and the profile from Origin.earthModelID.

Activates the button \"Force association with event\" when
committing with additional options. This is just the default
setting and can be changed manually when the dialog pops up.

Activates the button \"Fix this origin as preferred solution\" when

Whether to return to the event list after committing with
additional options or not.

Turns the event comment input field into a drop down box
allowing the user to select from a list a predefined comment
values which may be changed if required.

**olv.originComments.\***
*The container for all origin comment profiles.*

**olv.originComments.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`olv.originComments` to become active.

   olv.originComments = a,b
   olv.originComments.a.value1 = ...
   olv.originComments.b.value1 = ...
   # to the list of olv.originComments
   olv.originComments.c.value1 = ...

olv.originComments = a,b
olv.originComments.a.value1 = ...
olv.originComments.b.value1 = ...
# to the list of olv.originComments
olv.originComments.c.value1 = ...

A list of options to select from. Actually the values
to populate the dropdown list with.

**olv.customCommits.\***
*Configure custom commit buttons which*
*behave like shortcuts to "Commit with additional options".*
*Pressing a custom button does not open a popup window. Instead*
*it reads the configured profile and applies the options to the event*
*and origin. Each commit button can be coloured and labeled.*

it reads the configured profile and applies the options to the event

**olv.customCommits.$name.\***

Ask for confirmation by presenting the \"commit with options\"
dialog with the options pre\-populated from this configuration.
Cancelling the dialog aborts the commit procedure.

olv.customCommits.$name.forceEventAssociation; configuration value

Fix the origin as preferred
solution in the event it is associated to.

The event type to be set of the event associated with
the committed origin. If unset, the type remains unchanged.
Use quotes for event types with spaces, e.g.
\"not existing\".

The event type certainty to be set of the event
associated with the committed origin. If unset,
the type certainty remains unchanged.

The status to be set of the origin being
committed. If unset, the status remains unchanged.
If empty, the origin status will be set to none.

Sets the preferred magnitude type of the event. If
unset, no changes will be requested. If empty,
the currently fixed preferred magnitude type will
be reset.

Optional event name which will be set. This option
exists for completeness and does not make much
sense to be applied on any event. Use quotes for event
names with spaces, e.g. \"Quarry XYZ\".

Optional event comment which will be set. Use quotes for event
comments with spaces, e.g. \"Blast on Monday morning\".

The commit button label. Use quotes for labels with
spaces, e.g. \"Earthquake reported\".

Optional primary color for the bulk commit button.
Use hexadecimal values.

Optional text color for the bulk commit button.

**olv.magnitudeComments.\***
*The container for all magnitude comment profiles.*

**olv.magnitudeComments.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`olv.magnitudeComments` to become active.

   olv.magnitudeComments = a,b
   olv.magnitudeComments.a.value1 = ...
   olv.magnitudeComments.b.value1 = ...
   # to the list of olv.magnitudeComments
   olv.magnitudeComments.c.value1 = ...

olv.magnitudeComments = a,b
olv.magnitudeComments.a.value1 = ...
olv.magnitudeComments.b.value1 = ...
# to the list of olv.magnitudeComments
olv.magnitudeComments.c.value1 = ...

Activate a cross hair cursor showing the configured uncertainties
when in picking mode.

If enabled, the picker will not add stations that are not
configured with a detecStream in global bindings.

Limit the data acquisition to the number of nearest
stations given by \"picker.limitStationAcquisitionCount\".

Limit the data acquisituion to the given number of
the nearest stations. Requires to activate
\"picker.limitStationAcquisition\".

If enabled, acceleration data is loaded for co\-located
stations where picked on velocity data.

Load all three components by default. If disabled, additional
components are fetched upon request.

If enabled, all three components are shown in the picker
zoom trace. The distance is limited to what is configured
in \"picker.allComponentsMaximumDistance\".

If enabled, data is requested around the P pick for each stations.
Otherwise origin time is used and the time window for all stations
is the same.

picker.removeAutomaticPicksFromStationAfterManualReview; configuration value

After picking and pushing the solution back to scolv all automatic arrivals
are removed from a station if a manual pick exists.

picker.removeAllAutomaticPicksAfterManualReview; configuration value

are removed from all stations regardless if a manual pick exists or not.

The data time span added to the left of either origin time or
first arrival depending on the usePerStreamTimeWindows flag.

The data time span added to the right of the requested time window.

Defines the relative position of the alignment when traces are
aligned at a phase. This value is bound
to interval [0:1] where 0 is the left side and 1 is right
side of the trace window.

Start of the re\-picker time window relative the cursor position on the trace.

End of the re\-picker time window relative the cursor position on the trace.

List of filters available in the picker. Format:
\"name1;filter\-definition1\", \"name2;filter\-definition2\"

A list of channel codes to be used when searching for
velocity channels. Usually this information is part of the
meta data. In case it is not, this list is used.

acceleration channels. Usually this information is part of the

A list of phases that is available for picking in the Picking menu.
The phases are not accessible through hot keys as for
\"picker.phases.favourites\".
The phases are considered if the more complex phase group definition
\"picker.phases.groups\" is not provided.

List of pre\-defined pick uncertainties.
The format of each list item is either a double value or a pair of
double values for asymmetric uncertainties, e.g.
\"val1\",\"\(val2,val3\)\".
This parameter is only used if \"picker.uncertainties.preferred\"
is undefined.

If enabled then the currently selected component for all traces
will be activated according to the mouse position in the
zoom trace \(old behaviour\). If disabled \(default\) then only
the component of the zoom trace will change but the overall
component will stay the same. It must be changed explicitely.

**picker.auxiliary.\***
*Define the notion and behaviour of auxiliary channels.*
*They are identified through configurable patterns and if*
*identified as such they will be treated differently in*
*defined situations.*

A list of wildcard patterns to identify auxiliary
channels. A pattern is simply checked against a stream
ID, the concatenation of NSLC separated by a period.

The minimum distance in degrees from origin to load an
unassociated auxiliary channel. Loading a
channel \/ station explicitely \(F3\) will not respect
this setting.

The maximum distance in degrees from origin to load an

**picker.phases.\***
*Phases defined for picking. The phase phases can be selected*
*from the Picking menu of the picker window.*
*Make sure, the locator can handle all defined phases.*

Phase types available for rapid picking by hot keys and
in the Picking menu. Separate the types by comma.

List of defined phase type profiles to be considered.
Separate profiles by comma.

**picker.phases.groups.\***
*Definiton of phase type profiles. The profiles and phase types*
*can be selected from the Picking menu of the picker window*
*but not with hot keys.*

**picker.phases.groups.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`picker.phases.groups` to become active.

   picker.phases.groups = a,b
   picker.phases.groups.a = ...
   picker.phases.groups.b = ...
   # to the list of picker.phases.groups
   picker.phases.groups.c = ...

picker.phases.groups = a,b
picker.phases.groups.a = ...
picker.phases.groups.b = ...
# to the list of picker.phases.groups
picker.phases.groups.c = ...

**picker.uncertainties.\***
*Define uncertainty profiles. Once defined,*
*they can be selected in the scolv picker settings [F3].*
*The profiles override uncertainties defined in "uncertainties".*

Pick uncertainty profiles to be loaded. The first profile
will be used by default.

**picker.uncertainties.profile.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`picker.uncertainties.preferred` to become active.

   picker.uncertainties.preferred = a,b
   picker.uncertainties.profile.a = ...
   picker.uncertainties.profile.b = ...
   # to the list of picker.uncertainties.preferred
   picker.uncertainties.profile.c = ...

picker.uncertainties.preferred = a,b
picker.uncertainties.profile.a = ...
picker.uncertainties.profile.b = ...
# to the list of picker.uncertainties.preferred
picker.uncertainties.profile.c = ...

**picker.integration.\***
*Settings related to waveform integration which may be*
*required if the desired waveform unit is changed and the*
*sensor data must be integrated once or multiple times.*

An optional pre\-filter which is applied prior to the
numerical integration to stabilize the result. This
filter is applied for each integration step or just
once depending on the parameter \"applyOnce\".
Multiple integrations are necessary if acceleration
data should be converted to displacement.

Whether to apply the pre\-filter only prior the first
integration step or prior to each step.

**amplitudePicker.\***
*Parameters controlling the amplitude picker window for computing station magnitudes.*

Parameters controlling the amplitude picker window for computing station magnitudes.

Time span in seconds to be added to the left of the used
amplitude time window.

Time span in seconds to be added to the right of the used

A list of filters used for the amplitude picker. Format:

*Display custom information in the Location tab.*

**display.origin.\***
*Origin information to show. Event comments can be*
*processed by addons or shown in the event list as*
*configured by global parameters.*

Name\(s\) of quality addon profile\(s\) to be considered.
The profiles provide values through a script which are
shown in the location tab. The scolv documentation
provides an example script.

**display.origin.comment.\***
*Origin comment value to be shown based on its comment ID.*

**display.origin.addon.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`display.origin.addons` to become active.

   display.origin.addons = a,b
   display.origin.addon.a.value1 = ...
   display.origin.addon.b.value1 = ...
   # to the list of display.origin.addons
   display.origin.addon.c.value1 = ...

display.origin.addons = a,b
display.origin.addon.a.value1 = ...
display.origin.addon.b.value1 = ...
# to the list of display.origin.addons
display.origin.addon.c.value1 = ...

Defines the label text of the information panel in the
Location tab of the parameter evaluated by this addon.

Load events in given XML file during startup and switch to offline mode

Hyperlink target "scolv-sec-location-arrival-table" is not referenced.

Hyperlink target "fig-scolv-location-amp-status" is not referenced.

Hyperlink target "fig-scolv-location-mag-status" is not referenced.

Hyperlink target "scolv-sec-commit-additional" is not referenced.

Hyperlink target "scolv-sec-magnitude-station" is not referenced.

Hyperlink target "scolv-sec-magnitude-network" is not referenced.

Hyperlink target "scolv-sec-magnitude-summary" is not referenced.

Hyperlink target "scolv-sec-amplitude-review" is not referenced.

Hyperlink target "sec-scolv-parameters-location" is not referenced.

Hyperlink target "sec-scolv-parameters-event" is not referenced.

Hyperlink target "sec-scolv-parameters-events" is not referenced.

*scorgls* lists all available origin IDs within a given time range to stdout.
Origins are fetched from database or read from a :term:`SCML` file.

 lists all available origin IDs within a given time range to stdout.
Origins are fetched from database or read from a 

Similarly, use :ref:`scevtls` for listing all event IDs. In extension to
*scorgls* and :ref:`scevtls` :ref:`scquery` can search for parameters based on

Print all origin IDs for the complete year 2012.

   scorgls -d mysql://sysop:sysop@localhost/seiscomp \

scorgls -d mysql://sysop:sysop@localhost/seiscomp \

Print the IDs of all origins provided with the XML file:

   scevtls -i origins.xml

Deactivates reading origins from database.

The lower bound of the time interval. Format:
012\-01\-01T00:00:00.

The upper bound of the time interval. Format:

scqc determines waveform quality control (QC) parameters of data streams. The
output parameters are time averaged in terms of waveform quality messages.
In regular intervals report messages are sent containing the short term average
representation of the specific QC parameter for a given time span. Alarm messages
are generated if the short term average (e.g. 90 s) of a QC parameter differs from
the long term average (e.g. 3600 s) by more than a defined threshold.
To avoid an excessive load, QC messages are sent distributed over time. Storing
QC parameters into the database should be avoided by configuring, e.g.,
:confval:`plugins.default.archive.interval` as otherwise the database grows
quickly.

The QC parameters can be interactively observed using :ref:`scqcv` or :ref:`scmm`.

scqc uses :term:`plugins <plugin>` to compute the waveform quality control (QC)
parameters. The plugins can be found in @DATADIR@/plugins/qc. They are loaded
by default or selected by :ref:`configuration setup <scqc-setup>`.

 to compute the waveform quality control (QC)
by default or selected by 

.. figure:: media/times.png

   Times describing the data records, e.g., for calculating
   :ref:`delay<scqc-delay>` or :ref:`latency<scqc-latency>`.
   :math:`t_{now}` may be measured differently depending on the QC parameter.

Times describing the data records, e.g., for calculating
:ref:`delay<scqc-delay>` or :ref:`latency<scqc-latency>`.
:math:`t_{now}` may be measured differently depending on the QC parameter.

The following QC parameters are determined when the corresponding plugin is
loaded:

availability [%]
**Plugin:** qcplugin_availability

**Description:** Availability of data in the configured time span.

delay [s]
**Plugin:** qcplugin_delay

**Description:** Time difference between current time, :math:`t_{now}`, and
time of the last record in the |scname| system (see :ref:`Figure<scqc-fig-times>`):

.. math::

  delay = t_{now} - t_{2}.

.. note ::

   Current time is measured during reception of a record and updated in the
   report intervals configured for delay.

Current time is measured during reception of a record and updated in the
report intervals configured for delay.

gaps (count [counts], interval [s], length [s])
**Plugin:** qcplugin_gap

**Description:** In case of a data gap between two consecutive records this
parameter delivers the gap interval time (interval), the mean length of the gaps
(length) and the number of the gaps (count) over the configured time interval.

.. hint ::

   gaps interval = 0 for gaps count = 1 but gaps interval > 0
   for gaps count > 1. This may be important when evaluating the intervals.

 In case of a data gap between two consecutive records this

gaps interval = 0 for gaps count = 1 but gaps interval > 0
for gaps count > 1. This may be important when evaluating the intervals.

latency [s]
**Plugin:** qcplugin_latency

arrival time of the last record (see :ref:`Figure<scqc-fig-times>`):

.. math::

  latency = t_{now} - t_{arr}.

.. note ::

   report intervals configured for latency.

report intervals configured for latency.

offset [counts]
**Plugin:** qcplugin_offset

**Description:** Average value of all samples of a record.

outage [time string]
**Plugin:** qcplugin_outage

**Description:** Delivers the start and the end time of a data outage (gap).

overlaps (count [counts], interval [s], length [s])
**Plugin:** qcplugin_overlap

**Description:** In case of overlaps between two consecutive records this parameter
delivers the overlaps interval time (interval), the mean length (length) of the
overlaps and the number of the overlaps (count) over the configured time interval.

.. hint ::

   overlaps interval = 0 for overlaps count = 1 but overlaps interval > 0
   for overlaps count > 1. This may be important when evaluating the intervals.

 In case of overlaps between two consecutive records this parameter

overlaps interval = 0 for overlaps count = 1 but overlaps interval > 0
for overlaps count > 1. This may be important when evaluating the intervals.

rms [counts]
**Plugin:** qcplugin_rms

**Description:** Offset corrected root mean square (RMS) value of a record.

spikes (count [counts], interval [s], amplitude [counts])
**Plugin:** qcplugin_spike

**Description:** In case of the occurrence of a spike in a record this parameter
delivers the time interval between consecutive spikes (interval), the mean
amplitude of the spike (amplitude) and the number of the spikes (count) over the
configured time interval. Internally a list of spikes is stored (spike time,
spike amplitude); the spike finder algorithm is still preliminary.

.. hint ::

   spikes interval = 0 for spikes count = 1 but spikes interval > 0
   for spikes count > 1. This may be important when evaluating the intervals.

 In case of the occurrence of a spike in a record this parameter

spikes interval = 0 for spikes count = 1 but spikes interval > 0
for spikes count > 1. This may be important when evaluating the intervals.

timing [%]
**Plugin:** qcplugin_timing

**Description:** miniSEED record timing quality (0 - 100 %) as written into the
miniSEED records by the digitizer.

 miniSEED record timing quality (0 - 100 %) as written into the

The configuration can be adjusted in the module configuration (:file:`scqc.cfg`).

Select the streams for which to compute the QC parameters. Be default, only
streams defined global bindings are considered:

* :confval:`use3Components`: Select to consider the 3 components related to
  the stream defined by global bingings. Reguires to **select**
  :confval:`useConfiguredStreams`.
* :confval:`streamMask`: Freely choose any available stream to compute the QC
  parameters for. This requires to **unselect** :confval:`useConfiguredStreams`.
  Regular expressions may be used, e.g.:

  * Consider BHZ streams from all networks, stations and locations: ::

       streamMask = ""(.+)\.(.+)\.(.*)\.(BHZ)$"

  * Consider any component from BH, LH and HH streams: ::

       streamMask = "(.+)\.(.+)\.(.*)\.((BH)|(LH)|(HH))?$"

:confval:`use3Components`: Select to consider the 3 components related to
the stream defined by global bingings. Reguires to **select**
:confval:`useConfiguredStreams`.

: Select to consider the 3 components related to
the stream defined by global bingings. Reguires to 

:confval:`streamMask`: Freely choose any available stream to compute the QC
parameters for. This requires to **unselect** :confval:`useConfiguredStreams`.
Regular expressions may be used, e.g.:

* Consider BHZ streams from all networks, stations and locations: ::

     streamMask = ""(.+)\.(.+)\.(.*)\.(BHZ)$"

* Consider any component from BH, LH and HH streams: ::

     streamMask = "(.+)\.(.+)\.(.*)\.((BH)|(LH)|(HH))?$"

: Freely choose any available stream to compute the QC
parameters for. This requires to 

Consider BHZ streams from all networks, stations and locations: ::

   streamMask = ""(.+)\.(.+)\.(.*)\.(BHZ)$"

Consider any component from BH, LH and HH streams: ::

   streamMask = "(.+)\.(.+)\.(.*)\.((BH)|(LH)|(HH))?$"

Load the QC and other plugins, e.g. for data acquisition.
The QC plugins loaded by default are :code:`qcplugin_availability`,
:code:`qcplugin_delay`, :code:`qcplugin_gap`, :code:`qcplugin_latency`,
:code:`qcplugin_offset`, :code:`qcplugin_outage`, :code:`qcplugin_overlap`,
:code:`qcplugin_rms`, :code:`qcplugin_spike` and :code:`qcplugin_timing`.

Adjust :confval:`plugins` for setting plugins explicitly and to exclude the other
ones, e.g. ::

   plugins = qcplugin_availability, qcplugin_spike

Further :term:`RecordStream` plugins for reading data may be considered.

The QC plugins loaded by default are 

 for setting plugins explicitly and to exclude the other
ones, e.g.

Configure the plugin parameters: Each plugin considers specific parameters
which can be configured separately or the default section.

Limit QC determination to processed data streams which are
defined in global bindings with detecLocid and detecStream.

If useConfiguredStreams is true, this parameter decides whether
to use only the vertical component \(default\) or all three
components. The 3 components are collected from the inventory
according to channel orientation. If that is not possible,
the fixed components N and E will be used.

If useConfiguredStreams is false, then
load \(from inventory\) only those streams, matching the streamMask

Database look up for past entries not older than x days
\(to determine the last QC parameter calculated\).

**plugins.default.\***
*Default configuration parameters for the plugins.*
*Can be overwritten by the individual plugin configurations.*

Default [disable]: plugin is able to process archived data AND realtime data streams.

Filter string used to filter waveforms before
processing. Currently only used by QcRms.

Qc\-Buffer Length [s] \(aka LTA\-Buffer\). Must be >\= plugins.\*.bufferLength.

**plugins.default.report.\***
*Control interactions with the messaging system.*

Interval for sending report messages which e.g.
will be  may be displayed by scqcv.

Report messages are generated in case no data
is received since timeout. Only in real\-time processing.

**plugins.default.archive.\***
*Control sending QC reports as notifier to the messaging where*
*scmaster will write them to the database.*

Default [\-1]: Do not send any QC report. This will prevent writing
QC reports into the database.

**plugins.default.alert.\***
*Control for sending alerts based on QC reports.*

Interval for checking and sending alert thresholds.
\-1 disables threshold checking.

List of thresholds for sending QC reports. Use comma to separate values.

**plugins.QcLatency.\***
*Configuration parameters for the plugin qcplugin_latency. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_latency. Overwrites the parameters from the default section.

**plugins.QcLatency.report.\***

Interval for sending report messages which, e.g.,
can be displayed by scqcv.

**plugins.QcLatency.archive.\***

**plugins.QcLatency.alert.\***

**plugins.QcDelay.\***
*Configuration parameters for the plugin qcplugin_delay. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_delay. Overwrites the parameters from the default section.

Default [disable]: plugin is able to processd data AND realtime data streams.

**plugins.QcDelay.report.\***

**plugins.QcDelay.archive.\***

**plugins.QcDelay.alert.\***

**plugins.QcGap.\***
*Configuration parameters for the plugin qcplugin_gap. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_gap. Overwrites the parameters from the default section.

**plugins.QcGap.report.\***

**plugins.QcGap.archive.\***

**plugins.QcGap.alert.\***

**plugins.QcOffset.\***
*Configuration parameters for the plugin qcplugin_offset. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_offset. Overwrites the parameters from the default section.

**plugins.QcOffset.report.\***

**plugins.QcOffset.archive.\***

**plugins.QcOffset.alert.\***

**plugins.QcOverlap.\***
*Configuration parameters for the plugin qcplugin_overlap. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_overlap. Overwrites the parameters from the default section.

**plugins.QcOverlap.report.\***

**plugins.QcOverlap.archive.\***

**plugins.QcOverlap.alert.\***

**plugins.QcRms.\***
*Configuration parameters for the plugin qcplugin_rms. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_rms. Overwrites the parameters from the default section.

**plugins.QcRms.report.\***

**plugins.QcRms.archive.\***

**plugins.QcRms.alert.\***

**plugins.QcSpike.\***
*Configuration parameters for the plugin qcplugin_spike. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_spike. Overwrites the parameters from the default section.

**plugins.QcSpike.report.\***

**plugins.QcSpike.archive.\***

**plugins.QcSpike.alert.\***

**plugins.QcTiming.\***
*Configuration parameters for the plugin qcplugin_timing. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_timing. Overwrites the parameters from the default section.

**plugins.QcTiming.report.\***

**plugins.QcTiming.archive.\***

**plugins.QcTiming.alert.\***

**plugins.QcAvailability.\***
*Configuration parameters for the plugin qcplugin_availability. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_availability. Overwrites the parameters from the default section.

**plugins.QcAvailability.report.\***

**plugins.QcAvailability.archive.\***

**plugins.QcAvailability.alert.\***

**plugins.QcOutage.\***
*Configuration parameters for the plugin qcplugin_outage. Overwrites the parameters from the default section.*

Configuration parameters for the plugin qcplugin_outage. Overwrites the parameters from the default section.

If there is a gap of more than notifyDB [s], write an OUTAGE entry into the database.

**plugins.QcOutage.report.\***

**plugins.QcOutage.archive.\***

**plugins.QcOutage.alert.\***

scqcv provides both, a brief overview of the seismometer network status and a
detailed view of specific stream parameters. Quality Control (QC) parameters,
determined by :ref:`scqc` and sent via messaging system, are received and displayed.

determined by 

scqcv allows to interactively disable or to enable streams for automatic data processing
based on the observed QC reports.

:ref:`fig-tab-view` shows the tabular view of the QC report messages.
Each QC parameter is shown in a column. The default sorting by stream code can
be changed by pressing a header field of a parameter. A widget displaying the
currently received waveform data is shown by pressing the cell with the streamID.
Positioning the mouse over the parameter cell a ToolTip indicates
more detailed information on the selected parameter. Typing a regular
expression in the "StreamIDFilter" text entry field results in a stream code
filter, only displaying the matching stream codes with QC parameter. Green
colored fields indicate that the QC parameter values lie within the configured
"good" interval. Red colors indicate that the QC parameters lie outside the
tolerated value interval -- this stream might have an issue. All :ref:`colors are
configurable <scqcv-sec-setup>`.
Click on the table header to sort by the selected value or drag the columns to
another position. The order of the columns is controlled by :confval:`parameter`.
By clicking on a streamID, the past waveforms are displayed at length configured
by :confval:`streamWidget.length`.

 shows the tabular view of the QC report messages.
expression in the “StreamIDFilter” text entry field results in a stream code
“good” interval. Red colors indicate that the QC parameters lie outside the
tolerated value interval – this stream might have an issue. All 

.
another position. The order of the columns is controlled by 

.
by 

To **disable / enable** a station click on the respective station field in the
*enabled* column.

.. figure:: media/scqcv/Tabulator_view_of_scqcv.png

   Tabulator view of scqcv

:ref:`fig-status-overview` shows the status overview grouped by network code.
The status is color coded and the color is derived from a
:ref:`score <scqcv-sec-scoring>` per station.

 shows the status overview grouped by network code.

The more the color usually varies from green to dark red, the worse the waveform data might be.
A dark red color indicates a stream with low quality, e.g. high latency.
Light to darker red
represents a badness sum of related QC parameters. Colors are subject to
changes in near future and are configurable. Pressing a stream code item opens a
single line table
with detailed information of the selected stream. Again it is possible to open
a real time waveform widget by pressing the leading header field indicating
the stream code.

Typing a regular expression in the bottom text entry field
results in a stream code filter, only displaying the matching stream codes.
Disabled stations are crossed out. Click on a stream field to view the detailed
QC parameters where stations can also be enabled / disabled.

.. figure:: media/scqcv/Status_overview_of_scqcv.png

   Status overview of scqcv with a stream widget

The compact status overview allows a quick impression of the present status of
all received streams (:ref:`fig-compact-status`). Functionality is equal to the
status overview grouped by network.

all received streams (

). Functionality is equal to the

Switch between compact view and
network seperated view by clicking the checkbox in the bottom line.

.. figure:: media/scqcv/Compact_status_overview_of_scqcv.png

   Compact status overview of scqcv

The score is formed per station as the sum of the counts for the parameters defined,
e.g., by :confval:`score.default`. The counts are defined per QC parameter by the
`count` parameter of the applicable range, e.g. :confval:`timing.range.$name.count`.

e.g., by 

While some important parameters can be configured using :ref:`scconfig` the configuration
of others is available by examples in the extensive default configuration of scqcv in
*@DEFAULTCONFIGDIR/scqcv.cfg@*

 the configuration

Apply your setup to scqcv.cfg in @SYSTEMCONFIGDIR@ or in @CONFIGDIR@.
If the parameters are not configured, the defaults configuration will be considered.

Select the desired parameters from the list below. "#" disables a parameter.

Select the desired parameters from the list below. “#” disables a parameter.

connection.primaryGroup = QC
connection.subscription = QC, CONFIG

parameter =  "latency           : latency",\
                             "delay             : delay",\
                             "timing quality    : timing",\
                             "offset            : offset",\
                             "rms               : rms",\
                             "gaps count        : gap",\
                             "overlaps count    : overlap",\
                             "availability      : availability",\
                             "spikes count      : spike"
#                            "gaps interval     : gapInterval",\
#                            "gaps length       : gapLength",\
#                            "spikes interval   : spikeInterval",\
#                            "spikes amplitude  : spikeAmplitude"
#                            "overlaps interval : overlapInterval",\
#                            "overlaps length   : overlapLength"

By default all streams configured by the global bindings will be displayed. To limit
the streams or to use a specific list configure :confval:`streams.codes` and
:confval:`streams.cumulative`.

the streams or to use a specific list configure 

# List of channels to display. By default the global configuration is used
# which can be overwritten with this parameter.
streams.codes = AM.*.*.*

# Add new streams from WfQ automatically to the list of stream configured in
# streams.codes.
streams.cumulative = false

Configure intervals, values and format and background colors for QC parameters to
display in :file:`scqcv.cfg`.

display in 

In the configuration the QC parameter is referred to by its unique ConfigName. You may
generate structures for each parameter starting with its ConfigName. The structures
contain all configuration parameters. Example for the QC parameter *timing quality*
referred to as *timing*:

contain all configuration parameters. Example for the QC parameter 

timing.ranges = sane, inter, bad
timing.format = int
timing.expire = 600
timing.useAbsoluteValue = false

timing.range.sane = 90.0, 100.0
timing.range.inter = 50.0, 90.0

timing.range.bad.count = -100
timing.range.bad.color = darkred

timing.range.inter.count = -1
timing.range.inter.color = yellow

timing.range.sane.count = 0
timing.range.sane.color = green

The mapping of parameter names to ConfigName is configurable by
:confval:`parameter` but the default mapping is available in
:file:`@DEFAULTCONFIGDIR@/scqcv.cfg`.

List of QC parameters to be displayed in the details table.
Read the scqc documentation for a list of available QC parameters
and the default configuration of scqcv
\$SEISCOMP_ROOT\/etc\/defaults\/scqcv.cfg for more examples.

Example: \"delay : delay\",\"spikes count : spike\",\"spikes amplitude :
spikeAmplitude\".
Refer to the parameters by their ConfigName to configure the
attributes.

The list of channel codes to be displayed. List items may
contain wildcards and are separated by comma.
The list is  intersected with all channels configured in

default, PF.BON.00.HH? : display default and all HH streams
of PF.BON.00

Add new streams automatically to the streams configured in
streams.codes when waveform QC parameters are provided for
these streams.

**streamWidget.\***
*Control the stream widget which opens when clicking on a stream*
*name in the detailed table.*

**score.\***
*Parameters controlling the overall QC score of a station.*
*The score is computed from the valid count parameter of the*
*defined ranges. It is vizualized in the QcOverview.*

Ranges to be considered for forming the score. Set the
count parameter om the respective range section for
controlling the contribution of this range. The
range parameters control the coloring.

**default.\***
*Default configuration for all QC parameters. The configuration*
*can be extended to each QC parameter by placing "default" with*
*the parameter name in scqcv.cfg. Examples for some QC parameters*
*are given below.*
**
*Read the scqc documentation for a list of available QC*
*parameters and the default configuration of scqcv*
*$SEISCOMP_ROOT/etc/defaults/scqcv.cfg for more examples.*

the parameter name in scqcv.cfg. Examples for some QC parameters

Names of range profile to be considered.
The range profiles define the background color table
fields depending on the field value. Add the default
ranges for which different intervals and the color are
configured.

Default time in seconds, how long a value is displayed in
scqcv if no update is received. Setting to 0 means, show
value until updated.

**default.range.\***
*Range parameters overriding parameters from the general*
*range section below. Unset values or range profiles*
*undefined here will be inherited from the general range*
*section.*

**default.range.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`ranges` to become active.

   ranges = a,b
   default.range.a.value1 = ...
   default.range.b.value1 = ...
   # to the list of ranges
   default.range.c.value1 = ...

ranges = a,b
default.range.a.value1 = ...
default.range.b.value1 = ...
# to the list of ranges
default.range.c.value1 = ...

Contribution of this range for computing the score.
The range must be considered.

**availability.\***
*Parameters controlling the display of the QC parameter*
*'availability'*

Names of range profile to be considered
The range profiles s define the background color table

**availability.range.\***

**availability.range.$name.\***

   availability.range.a.value1 = ...
   availability.range.b.value1 = ...
   availability.range.c.value1 = ...

availability.range.a.value1 = ...
availability.range.b.value1 = ...
availability.range.c.value1 = ...

**delay.\***
*Parameters controlling the display of the QC parameter 'delay'*

**delay.range.\***

**delay.range.$name.\***

   delay.range.a.value1 = ...
   delay.range.b.value1 = ...
   delay.range.c.value1 = ...

delay.range.a.value1 = ...
delay.range.b.value1 = ...
delay.range.c.value1 = ...

**gap.\***
*'gaps count'.*

**gap.range.\***

**gap.range.$name.\***

   gap.range.a.value1 = ...
   gap.range.b.value1 = ...
   gap.range.c.value1 = ...

gap.range.a.value1 = ...
gap.range.b.value1 = ...
gap.range.c.value1 = ...

**gapLength.\***
*'gaps length'*

**gapLength.range.\***

**gapLength.range.$name.\***

   gapLength.range.a.value1 = ...
   gapLength.range.b.value1 = ...
   gapLength.range.c.value1 = ...

gapLength.range.a.value1 = ...
gapLength.range.b.value1 = ...
gapLength.range.c.value1 = ...

**gapInterval.\***
*Parameters controlling the display of the QC parameter 'gaps interval'*

Parameters controlling the display of the QC parameter ‘gaps interval’

Default time in seconds, how long a value is displayed in scqcv
if no update is received. Setting to 0 means, show value until
updated.

**gapInterval.range.\***

**gapInterval.range.$name.\***

   gapInterval.range.a.value1 = ...
   gapInterval.range.b.value1 = ...
   gapInterval.range.c.value1 = ...

gapInterval.range.a.value1 = ...
gapInterval.range.b.value1 = ...
gapInterval.range.c.value1 = ...

**latency.\***
*Parameters controlling the display of the QC parameter 'latency'*

Parameters controlling the display of the QC parameter ‘latency’

**latency.range.\***

**latency.range.$name.\***

   latency.range.a.value1 = ...
   latency.range.b.value1 = ...
   latency.range.c.value1 = ...

latency.range.a.value1 = ...
latency.range.b.value1 = ...
latency.range.c.value1 = ...

**offset.\***
*Parameters controlling the display of the QC parameter 'offset'*

**offset.range.\***

**offset.range.$name.\***

   offset.range.a.value1 = ...
   offset.range.b.value1 = ...
   offset.range.c.value1 = ...

offset.range.a.value1 = ...
offset.range.b.value1 = ...
offset.range.c.value1 = ...

**overlap.\***
*Parameters controlling the display of the QC parameter 'overlaps count'*

Parameters controlling the display of the QC parameter ‘overlaps count’

**overlap.range.\***

**overlap.range.$name.\***

   overlap.range.a.value1 = ...
   overlap.range.b.value1 = ...
   overlap.range.c.value1 = ...

overlap.range.a.value1 = ...
overlap.range.b.value1 = ...
overlap.range.c.value1 = ...

**overlapInterval.\***
*Parameters controlling the display of the QC parameter 'overlaps interval'*

Parameters controlling the display of the QC parameter ‘overlaps interval’

**overlapInterval.range.\***

**overlapInterval.range.$name.\***

   overlapInterval.range.a.value1 = ...
   overlapInterval.range.b.value1 = ...
   overlapInterval.range.c.value1 = ...

overlapInterval.range.a.value1 = ...
overlapInterval.range.b.value1 = ...
overlapInterval.range.c.value1 = ...

**overlapLength.\***
*'overlaps length'*

**overlapLength.range.\***

**overlapLength.range.$name.\***

   overlapLength.range.a.value1 = ...
   overlapLength.range.b.value1 = ...
   overlapLength.range.c.value1 = ...

overlapLength.range.a.value1 = ...
overlapLength.range.b.value1 = ...
overlapLength.range.c.value1 = ...

**rms.\***
*Parameters controlling the display of the QC parameter 'rms'*

**rms.range.\***

**rms.range.$name.\***

   rms.range.a.value1 = ...
   rms.range.b.value1 = ...
   rms.range.c.value1 = ...

rms.range.a.value1 = ...
rms.range.b.value1 = ...
rms.range.c.value1 = ...

**spike.\***
*'spikes count'*

**spike.range.\***

**spike.range.$name.\***

   spike.range.a.value1 = ...
   spike.range.b.value1 = ...
   spike.range.c.value1 = ...

spike.range.a.value1 = ...
spike.range.b.value1 = ...
spike.range.c.value1 = ...

**spikeAmplitude.\***
*'spikes amplitude'.*

**spikeAmplitude.range.\***

**spikeAmplitude.range.$name.\***

   spikeAmplitude.range.a.value1 = ...
   spikeAmplitude.range.b.value1 = ...
   spikeAmplitude.range.c.value1 = ...

spikeAmplitude.range.a.value1 = ...
spikeAmplitude.range.b.value1 = ...
spikeAmplitude.range.c.value1 = ...

**spikeInterval.\***
*'spikes interval'.*

**spikeInterval.range.\***

**spikeInterval.range.$name.\***

   spikeInterval.range.a.value1 = ...
   spikeInterval.range.b.value1 = ...
   spikeInterval.range.c.value1 = ...

spikeInterval.range.a.value1 = ...
spikeInterval.range.b.value1 = ...
spikeInterval.range.c.value1 = ...

**timing.\***
*'timing quality'.*

**timing.range.\***

**timing.range.$name.\***

   timing.range.a.value1 = ...
   timing.range.b.value1 = ...
   timing.range.c.value1 = ...

timing.range.a.value1 = ...
timing.range.b.value1 = ...
timing.range.c.value1 = ...

**range.\***
*Range parameters defining default values which can be overridden*
*per QC parameter in the section of this parameter.*
*More ranges can be added by adjusting scqcv.cfg e.g. in*
*@SYSTEMCONFIGDIR@/.*

Range parameters defining default values which can be overridden

**range.$name.\***

The range must be considered. The count is also set in
[parameter].range.[range profile].count .

**color.\***
*Color definitions. More colors can be added by adjusting*
*scqcv.cfg e.g. in @SYSTEMCONFIGDIR@/.*

**format.\***
*Format describtions for showing values. The format parameter*
*is defined seprately for earch parameter but the actual format*
*can be adjusted here.*

*scquery* reads objects such as event information from a
:ref:`SeisComP database <concepts_database>` using custom queries. The results
are written to stdout. The module extends :ref:`scevtls` and :ref:`scorgls`
which are limited to searching event and origin IDs, respectively, by time.

 using custom queries. The results
are written to stdout. The module extends 

scquery takes into account and requires :ref:`query profiles <scquery_queries>`
for querying the database. The profiles are defined in

while parameters in the latter take priority. The are no default query profile,
hence they must be created first.

Create the query profiles in :file:`queries.cfg` in :file:`@SYSTEMCONFIGDIR@`
or :file:`@CONFIGDIR@`. The file contains your database queries. Examples for
MariaDB/MySQL and PostgreSQL are found in the section :ref:`scquery_queries`.

. The file contains your database queries. Examples for
MariaDB/MySQL and PostgreSQL are found in the section 

**Optional:** Add the database connection parameter to the configuration file
:file:`scquery.cfg` or :file:`global.cfg` in @CONFIGDIR@ or to @SYSTEMCONFIGDIR@:

   database = mysql://sysop:sysop@localhost/seiscomp

.. hint ::

   If the database connection is configured, the database option
   :confval:`-d <database>` in the section :ref:`Examples<scquery_examples>`
   can be omitted or used to override the configuration.

 Add the database connection parameter to the configuration file

If the database connection is configured, the database option
:confval:`-d <database>` in the section :ref:`Examples<scquery_examples>`
can be omitted or used to override the configuration.

Choose any query profile defined in the :ref:`queries.cfg<scquery_queries>`.
Provide the required parameters in the same order as in the database request.
The required parameters are indicated by hashes, e.g. ##latMin##.

.

List all available query profiles using the command-line option
:confval:`showqueries`:

   scquery --showqueries

Profile **event_filter**: Fetch all event IDs and event parameters for events
with magnitude ranging from 2.5 to 5 in central Germany between 2014 and 2017:

   scquery -d localhost/seiscomp eventFilter 50 52 11.5 12.5 2.5 5 2014-01-01 2018-01-01 > events_vogtland.txt

: Fetch all event IDs and event parameters for events

scquery -d localhost/seiscomp eventFilter 50 52 11.5 12.5 2.5 5 2014-01-01 2018-01-01 > events_vogtland.txt

Profile **eventByAuthor**: Fetch all event IDs where the preferred origin was
provided by a specific author for events 2.5 to 5 with 6 to 20 phases in central
Germany between 2014 and 2017:

   scquery -d localhost/seiscomp eventByAuthor 50 52 11.5 12.5 6 20 2.5 5 2014-01-01 2018-01-01 scautoloc > events_vogtland.txt

: Fetch all event IDs where the preferred origin was

scquery -d localhost/seiscomp eventByAuthor 50 52 11.5 12.5 6 20 2.5 5 2014-01-01 2018-01-01 scautoloc > events_vogtland.txt

Profile **eventType**: Fetch all event IDs and event times from events
with the given event type and within the provided time interval:

   scquery -d localhost/seiscomp eventType explosion '2017-11-01 00:00:00' '2018-11-01 00:00:00'

: Fetch all event IDs and event times from events

scquery -d localhost/seiscomp eventType explosion '2017-11-01 00:00:00' '2018-11-01 00:00:00'

Example queries for :ref:`scquery_mariadb` and :ref:`scquery_psql` are given
below.

queries = eventFilter, eventUncertainty, eventByAuthor, eventWithStationCount, eventType, originByAuthor

query.eventFilter.description = "Returns all events (lat, lon, mag, time) that fall into a certain region and a magnitude range"
query.eventFilter = "SELECT PEvent.publicID, Origin.time_value AS OT, Origin.latitude_value,Origin.longitude_value, Origin.depth_value, Magnitude.magnitude_value, Magnitude.type FROM Origin,PublicObject as POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject as PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID=Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Magnitude.magnitude_value >= ##minMag## AND Magnitude.magnitude_value <= ##maxMag## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.eventUncertainty.description = "Returns all events (eventsIDs, time, lat, lat error, lon, lon error, depth, depth error, magnitude, region name) in the form of an event catalog"
query.eventUncertainty = "SELECT PEvent.publicID, Origin.time_value AS OT, ROUND(Origin.latitude_value, 3), ROUND(Origin.latitude_uncertainty, 3), ROUND(Origin.longitude_value, 3), ROUND(Origin.longitude_uncertainty, 3), ROUND(Origin.depth_value, 3), ROUND(Origin.depth_uncertainty, 3), ROUND(Magnitude.magnitude_value, 1), EventDescription.text FROM Event, PublicObject AS PEvent, EventDescription, Origin, PublicObject AS POrigin, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND Event.preferredOriginID = POrigin.publicID AND Event.preferredMagnitudeID = PMagnitude.publicID AND Event._oid = EventDescription._parent_oid AND EventDescription.type = 'region name' AND Event.type = '##type##' AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.eventByAuthor.description = "Get events by preferred origin author etc"
query.eventByAuthor = "SELECT PEvent.publicID, Origin.time_value AS OT, Origin.latitude_value AS lat,Origin.longitude_value AS lon, Origin.depth_value AS dep, Magnitude.magnitude_value AS mag, Magnitude.type AS mtype, Origin.quality_usedPhaseCount AS phases, Event.type AS type, Event.typeCertainty AS certainty, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Origin.quality_usedPhaseCount >= ##minPhases## AND Origin.quality_usedPhaseCount <= ##maxPhases## AND Magnitude.magnitude_value >= ##minMag## AND Magnitude.magnitude_value <= ##maxMag## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##' AND Origin.creationInfo_author like '##author##';"

query.eventWithStationCount.description = "Get events by preferred origin author etc"
query.eventWithStationCount = "SELECT PEvent.publicID, Origin.time_value AS OT, Origin.latitude_value AS lat, Origin.longitude_value AS lon, Origin.depth_value AS dep, Magnitude.magnitude_value AS mag, Magnitude.type AS mtype, Origin.quality_usedStationCount AS stations, Event.type AS type, Event.typeCertainty AS certainty, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.eventType.description = "Returns all eventIDs FROM event WHERE the type is flagged AS 'event type'"
query.eventType = "SELECT pe.publicID, o.time_value AS OT FROM PublicObject pe, PublicObject po, Event e, Origin o WHERE pe._oid = e._oid AND po._oid = o._oid AND e.preferredOriginID = po.publicID AND e.type = '##type##' AND o.time_value >= '##startTime##' AND o.time_value <= '##endTime##';"

query.originByAuthor.description = "Get origins by author"
query.originByAuthor = "SELECT po.publicID, o.time_value AS OT, o.creationInfo_author FROM PublicObject po JOIN Origin o ON po._oid = o._oid WHERE o.creationInfo_author like '##author##' AND o.time_value >= '##startTime##' AND o.time_value <= '##endTime##';"

queries = phaseCountPerAuthor, time, mag_time, space_time, all, space_mag_time, event, fm_space_time, picks, stationPicks, assoc_picks, pref_assoc_picks, sta_net_mag, sta_net_mag_type, delta_sta_net_mag, delta_sta_net_mag_type

query.phaseCountPerAuthor.description = "Get phase count per origin author FROM event #EventID#"
query.phaseCountPerAuthor = "SELECT PEvent.publicID, Origin.creationInfo_author, MAX(Origin.quality_usedPhaseCount) FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, OriginReference WHERE Origin._oid = POrigin._oid AND Event._oid = PEvent._oid AND OriginReference._parent_oid = Event._oid AND OriginReference.originID = POrigin.publicID AND PEvent.publicID = '##EventID##' group by Origin.creationInfo_author;"

query.time.description = "Events in time range"
query.time = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, Origin.quality_usedPhaseCount, Origin.quality_usedStationCount, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.mag_time.description = "Events in magnitude-time range"
query.mag_time = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, Origin.quality_usedPhaseCount, Origin.quality_usedStationCount, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Magnitude.magnitude_value >= ##minMag## AND Magnitude.magnitude_value <= ##maxMag## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.space_time.description = "Events in space-time range"
query.space_time = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, Origin.quality_usedPhaseCount, Origin.quality_usedStationCount, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.all.description = "Events in space-magnitude-time-quality range by author"
query.all = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, Origin.quality_usedPhaseCount, Origin.quality_usedStationCount, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Origin.quality_usedPhaseCount >= ##minPhases## AND Origin.quality_usedPhaseCount <= ##maxPhases## AND Magnitude.magnitude_value >= ##minMag## AND Magnitude.magnitude_value <= ##maxMag## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##' AND Origin.creationInfo_author like '##author##%';"

query.space_mag_time.description = "Events in space-magnitude-time range"
query.space_mag_time = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, Origin.quality_usedPhaseCount, Origin.quality_usedStationCount, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Magnitude.magnitude_value >= ##minMag## AND Magnitude.magnitude_value <= ##maxMag## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.fm_space_time.description = "Events with focal mechanisms in space-time range"
query.fm_space_time = "SELECT PEvent.publicID, Origin.time_value, ROUND(Origin.latitude_value, 4), ROUND(Origin.longitude_value, 4), ROUND(Origin.depth_value, 1), ROUND(Magnitude.magnitude_value, 1), Magnitude.type, MomentTensor.doubleCouple, MomentTensor.variance, Event.typeCertainty, Event.type, Origin.creationInfo_author FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude, FocalMechanism, PublicObject AS PFocalMechanism, MomentTensor WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.publicID = Event.preferredMagnitudeID AND FocalMechanism._oid = PFocalMechanism._oid AND PFocalMechanism.publicID = Event.preferredFocalMechanismID AND MomentTensor._parent_oid = FocalMechanism._oid AND POrigin.publicID = Event.preferredOriginID AND Origin.latitude_value >= ##latMin## AND Origin.latitude_value <= ##latMax## AND Origin.longitude_value >= ##lonMin## AND Origin.longitude_value <= ##lonMax## AND Origin.time_value >= '##startTime##' AND Origin.time_value <= '##endTime##';"

query.event.description = "List authors and number of origins for event"
query.event = "SELECT PEvent.publicID, Origin.creationInfo_author, MAX(Origin.quality_usedPhaseCount) FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, OriginReference WHERE Origin._oid = POrigin._oid AND Event._oid = PEvent._oid AND OriginReference._parent_oid = Event._oid AND OriginReference.originID = POrigin.publicID AND PEvent.publicID = '##EventID##' group by Origin.creationInfo_author;"

query.picks.description = "List number of picks per station in a certain timespan"
query.picks = "SELECT waveformID_networkCode AS Network, waveformID_stationCode AS Station, COUNT(_oid) AS Picks, MIN(time_value) AS Start, MAX(time_value) AS End FROM Pick WHERE time_value >= '##startTime##' AND time_value <= '##endTime##' GROUP BY waveformID_networkCode, waveformID_stationCode;"

query.stationPicks.description = "List the picks and phase hints per station in a certain timespan"
query.stationPicks = "SELECT PPick.publicID, Pick.phaseHint_code FROM Pick, PublicObject AS PPick WHERE Pick._oid = PPick._oid AND waveformID_networkCode = '##netCode##' AND waveformID_stationCode = '##staCode##' AND time_value >= '##startTime##' AND time_value <= '##endTime##';"

query.assoc_picks.description = "List number of associated picks per station in a certain time span"
query.assoc_picks = "SELECT Pick.waveformID_networkCode AS Network, Pick.waveformID_stationCode AS Station, COUNT(DISTINCT(Pick._oid)) AS Picks, MIN(Pick.time_value) AS Start, MAX(Pick.time_value) AS End FROM Pick, PublicObject PPick, Arrival WHERE Pick._oid = PPick._oid AND PPick.publicID = Arrival.pickID AND Pick.time_value >= '##startTime##' AND Pick.time_value <= '##endTime##' GROUP BY Pick.waveformID_networkCode, Pick.waveformID_stationCode;"

query.pref_assoc_picks.description = "List number of associated picks of preferred origins per station for certain time span"
query.pref_assoc_picks = "SELECT Pick.waveformID_networkCode AS Network, Pick.waveformID_stationCode AS Station, COUNT(DISTINCT(Pick._oid)) AS Picks, MIN(Pick.time_value) AS Start, MAX(Pick.time_value) AS End FROM Pick, PublicObject PPick, Arrival, Origin, PublicObject POrigin, Event WHERE Event.preferredOriginID = POrigin.publicID AND Origin._oid = POrigin._oid AND Origin._oid = Arrival._parent_oid AND Pick._oid = PPick._oid AND PPick.publicID = Arrival.pickID AND Pick.time_value >= '##startTime##' AND Pick.time_value <= '##endTime##' GROUP BY Pick.waveformID_networkCode, Pick.waveformID_stationCode;"

query.sta_net_mag.description = "Compares station magnitudes of a particular station with the network magnitude in a certain time span"
query.sta_net_mag = "SELECT StationMagnitude.waveformID_networkCode AS Network, StationMagnitude.waveformID_stationCode AS Station, StationMagnitude.magnitude_value AS StaMag, Magnitude.magnitude_value AS NetMag, Magnitude.type AS NetMagType, StationMagnitude.creationInfo_creationTime AS CreationTime FROM StationMagnitude, PublicObject PStationMagnitude, StationMagnitudeContribution, Magnitude WHERE StationMagnitude._oid = PStationMagnitude._oid AND StationMagnitudeContribution.stationMagnitudeID = PStationMagnitude.publicID AND StationMagnitudeContribution._parent_oid = Magnitude._oid AND StationMagnitude.waveformID_networkCode = '##netCode##' AND StationMagnitude.waveformID_stationCode = '##staCode##' AND StationMagnitude.creationInfo_creationTime >= '##startTime##' AND StationMagnitude.creationInfo_creationTime <= '##endTime##' ORDER BY StationMagnitude.creationInfo_creationTime;"

query.sta_net_mag_type.description = "Compares station magnitudes of a particular station with the network magnitude of specific type in a certain time span"
query.sta_net_mag_type = "SELECT StationMagnitude.waveformID_networkCode AS Network, StationMagnitude.waveformID_stationCode AS Station, StationMagnitude.magnitude_value AS StaMag, Magnitude.magnitude_value AS NetMag, Magnitude.type AS NetMagType, StationMagnitude.creationInfo_creationTime AS CreationTime FROM StationMagnitude, PublicObject PStationMagnitude, StationMagnitudeContribution, Magnitude WHERE StationMagnitude._oid = PStationMagnitude._oid AND StationMagnitudeContribution.stationMagnitudeID = PStationMagnitude.publicID AND StationMagnitudeContribution._parent_oid = Magnitude._oid AND StationMagnitude.waveformID_networkCode = '##netCode##' AND StationMagnitude.waveformID_stationCode = '##staCode##' AND StationMagnitude.creationInfo_creationTime >= '##startTime##' AND StationMagnitude.creationInfo_creationTime <= '##endTime##' AND Magnitude.type = '##magType##' ORDER BY StationMagnitude.creationInfo_creationTime;"

query.delta_sta_net_mag.description = "Calculates delta values of station and network magnitudes for all stations in a certain time span"
query.delta_sta_net_mag = "SELECT StationMagnitude.waveformID_networkCode AS Network, StationMagnitude.waveformID_stationCode AS Station, AVG(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaAvg, MIN(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaMin, MAX(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaMax, MIN(StationMagnitude.creationInfo_creationTime) AS Start, MAX(StationMagnitude.creationInfo_creationTime) AS End FROM StationMagnitude, PublicObject PStationMagnitude, StationMagnitudeContribution, Magnitude WHERE StationMagnitude._oid = PStationMagnitude._oidStationMagnitudeContribution.stationMagnitudeID = PStationMagnitude.publicIDStationMagnitudeContribution._parent_oid = Magnitude._oidStationMagnitude.creationInfo_creationTime >= '##startTime##'StationMagnitude.creationInfo_creationTime <= '##endTime##' GROUP BY StationMagnitude.waveformID_networkCode, StationMagnitude.waveformID_stationCode;"

query.delta_sta_net_mag_type.description = "Calculates delta values of station and network magnitudes for all stations and all magnitude types in a certain time span"
query.delta_sta_net_mag_type = "SELECT StationMagnitude.waveformID_networkCode AS Network, StationMagnitude.waveformID_stationCode AS Station, AVG(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaAvg, MIN(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaMin, MAX(StationMagnitude.magnitude_value - Magnitude.magnitude_value) AS DeltaMax, Magnitude.type AS NetMagType, MIN(StationMagnitude.creationInfo_creationTime) AS Start, MAX(StationMagnitude.creationInfo_creationTime) AS End FROM StationMagnitude, PublicObject PStationMagnitude, StationMagnitudeContribution, Magnitude WHERE StationMagnitude._oid = PStationMagnitude._oid AND StationMagnitudeContribution.stationMagnitudeID = PStationMagnitude.publicID AND StationMagnitudeContribution._parent_oid = Magnitude._oid AND StationMagnitude.creationInfo_creationTime >= '##startTime##' AND StationMagnitude.creationInfo_creationTime <= '##endTime##' GROUP BY StationMagnitude.waveformID_networkCode, StationMagnitude.waveformID_stationCode, Magnitude.type;"

In contrast to queries for objects in :ref:`MariaDB/MySQL <scquery_mariadb>` the
string ``m_`` must be added to the value and publicID database columns as shown
below for the query "eventFilter".

 must be added to the value and publicID database columns as shown
below for the query “eventFilter”.

queries = eventFilter

query.eventFilter = "SELECT PEvent.m_publicID, Origin.m_time_value AS OT, Origin.m_latitude_value, Origin.m_longitude_value, Origin.m_depth_value, Magnitude.m_magnitude_value, Magnitude.m_type FROM Origin, PublicObject AS POrigin, Event, PublicObject AS PEvent, Magnitude, PublicObject AS PMagnitude WHERE Event._oid = PEvent._oid AND Origin._oid = POrigin._oid AND Magnitude._oid = PMagnitude._oid AND PMagnitude.m_publicID = Event.m_preferredMagnitudeID AND POrigin.m_publicID = Event.m_preferredOriginID AND Origin.m_latitude_value >= ##latMin## AND Origin.m_latitude_value <= ##latMax## AND Origin.m_longitude_value >= ##lonMin## AND Origin.m_longitude_value <= ##lonMax## AND Magnitude.m_magnitude_value >= ##minMag## AND Magnitude.m_magnitude_value <= ##maxMag## AND Origin.m_time_value >= '##startTime##' AND Origin.m_time_value <= '##endTime##';"

Column delimiter. If found, this character will be escaped
in output values. Default: '\|'.

Print the query parameters and the query filter description
as a header of the query output.

Execute the given query instead of applying queries
pre\-defined by configuration.

**Query waveform quality control (QC) parameters from database.**

scqueryqc queries a database for waveform quality control (QC) parameters. The
QC parameters can be provided and written to the database, e.g., by :ref:`scqc`.

QC parameters can be provided and written to the database, e.g., by 

Writing QC parameters to the database by :ref:`scqc` will result in a rapidly
growing database and is therefore not recommended in permanent application without
regularly stripping these parameters from the  database!

 will result in a rapidly

One or multiple QC parameters. All QC parameters can be requested. Defaults
apply. For reading the defaults use

   scqueryqc -h

A single time window where the begin time must be provided. Current time is
considered if the end is not give.

You should minimize the impact of stored waveform QC parameters on the size of the
database.

Compute the QC parameters in real time using :ref:`scqc` and save them in the
|scname| database. Saving the QC parameters in the database requires to
adjust the scqc module configuration parameters
:confval:`plugins.$name.archive.interval` for each plugin.

 database. Saving the QC parameters in the database requires to

Regularly use scqueryqc for some time span to read the QC parameters from the
database. Save them in a XML files.

Example for all QC parameters found for all streams in the inventory before
end time:

   scqueryqc -d [host] -e '[end time]' --streams-from-inventory -o [XML file]

end time:

scqueryqc -d [host] -e '[end time]' --streams-from-inventory -o [XML file]

Clean the database from QC parameters.

* Either use :ref:`scdispatch` with the parameters saved in XML. You may need
  to set the routing table for sending the QualityControl parameters to the
  right message group, e.g., QC:

     scdispatch -H [host] -O remove --routingtable QualityControl:QC -i [XML file]

* Alternatively, use :ref:`scdbstrip` with the command-line option
  :option:`--qc-only` and remove **all** QC parameters in the time span. Use the same
  period for which the QC parameters were retrieved:

     scdbstrip -d [database] -Q --date-time '[end time]'

  .. note ::

     Considering an end time by :option:`--date-time` has the advantage that no QC
     parameters are removed which were measured after scqueryqc was applied with the
     same end time value.

Either use :ref:`scdispatch` with the parameters saved in XML. You may need
to set the routing table for sending the QualityControl parameters to the
right message group, e.g., QC:

   scdispatch -H [host] -O remove --routingtable QualityControl:QC -i [XML file]

 with the parameters saved in XML. You may need

scdispatch -H [host] -O remove --routingtable QualityControl:QC -i [XML file]

Alternatively, use :ref:`scdbstrip` with the command-line option
:option:`--qc-only` and remove **all** QC parameters in the time span. Use the same
period for which the QC parameters were retrieved:

   scdbstrip -d [database] -Q --date-time '[end time]'

.. note ::

   Considering an end time by :option:`--date-time` has the advantage that no QC
   parameters are removed which were measured after scqueryqc was applied with the
   same end time value.

 QC parameters in the time span. Use the same

Considering an end time by :option:`--date-time` has the advantage that no QC
parameters are removed which were measured after scqueryqc was applied with the
same end time value.

 has the advantage that no QC

Query rms and delay values for the stream AU.AS18..SHZ,AU.AS19..SHZ before
'2021-11-20 00:00:00'. Write the XML to stdout

   scqueryqc -d localhost -e '2021-11-20 00:00:00' -p rms,delay -i AU.AS18..SHZ,AU.AS19..SHZ

‘2021-11-20 00:00:00’. Write the XML to stdout

scqueryqc -d localhost -e '2021-11-20 00:00:00' -p rms,delay -i AU.AS18..SHZ,AU.AS19..SHZ

Query all default QC parameter values for all streams found in the inventory
from '2021-11-20 00:00:00' until current. Write the formatted XML output to
:file:`/tmp/query.xml`

   scqueryqc -d localhost -b '2021-11-20 00:00:00' --streams-from-inventory -f -o /tmp/query.xml

from ‘2021-11-20 00:00:00’ until current. Write the formatted XML output to

scqueryqc -d localhost -b '2021-11-20 00:00:00' --streams-from-inventory -f -o /tmp/query.xml

Name of output XML file. Objects are sent to stderr if none
is given.

Begin time of query. Format: 'YYYY\-MM\-DD hh:mm:ss'.
'1900\-01\-01T00:00:00Z' is considered if undefined.

End time of query. Format: 'YYYY\-MM\-DD hh:mm:ss'.
Current time is considered if undefined.

Waveform stream ID to search for QC parameters: net.sta.loc.cha \-
[networkCode].[stationCode].[sensorLocationCode].[channelCode].
Provide a single ID or a comma\-separated list. Overrides
'\-\-streams\-from\-inventory'.

QC parameter to output: \(e.g. delay,rms,'gaps count' ...\).
Use quotes if QC parameter has more than 1 word.
Provide a single parameter or a comma\-separated list.
Defaults are used if parameter is undefined.

screloc is an automatic relocator that receives origins from realtime
locators such as scautoloc and relocates them with a configurable locator.
screloc can be conveniently used to test different locators and velocity models
or to relocate events with updated velocity models. Check the
:ref:`Example applications <screloc-example>` for screloc.

screloc processes any incoming automatic origin but does not yet listen to event
information nor does it skip origins for that a more recent one exists.

To run screloc along with all processing modules add it to the list of
clients in the seiscomp configuration frontend.

The following example configuration shows a setup of screloc for
:ref:`NonLinLoc <global_nonlinloc>`:

plugins = ${plugins}, locnll

# Define the locator algorithm to use
reloc.locator = NonLinLoc

# Define a suffix appended to the publicID of the origin to be relocated
# to form the new publicID.
# This helps to identify pairs of origins before and after relocation.
# However, new publicIDs are unrelated to the time of creation.
# If not defined, a new publicID will be generated automatically.
reloc.originIDSuffix = "#relocated"

# The NonLinLoc default control file to use for this profile

Run screloc to with a specific velocity model given in a profile by :ref:`NonLinLoc <global_nonlinloc>`.
Use a specific userID and authorID for uniquely recognizing the relocation.
Changing the priority in :ref:`scevent` before running the example, e.g. to
TIME_AUTOMATIC, sets the latest origin (which will be created by screloc) to preferred.

  # set specific velocity profile defined for NonLinLoc
  profile=<your_profile>
  # set userID
  userID="<your_user>"
  # set authorID
  authorID="<screloc>"

  for i in `scevtls -d mysql://sysop:sysop@localhost/seiscomp --begin '2015-01-01 00:00:00' --end '2015-02-01 00:00:00'`; do

      orgID=`echo "select preferredOriginID from Event,PublicObject where Event._oid=PublicObject._oid and PublicObject.publicID='$i'" |\
      mysql -u sysop -p sysop -D seiscomp -h localhost -N`

      screloc -O $orgID -d localhost --locator NonLinLoc --profile $profile -u $userID --debug --author=$authorID

  done

Run screloc to with a specific velocity model given in a profile by 

.
Changing the priority in 

 before running the example, e.g. to

# set specific velocity profile defined for NonLinLoc
profile=<your_profile>
# set userID
userID="<your_user>"
# set authorID
authorID="<screloc>"

for i in `scevtls -d mysql://sysop:sysop@localhost/seiscomp --begin '2015-01-01 00:00:00' --end '2015-02-01 00:00:00'`; do

    orgID=`echo "select preferredOriginID from Event,PublicObject where Event._oid=PublicObject._oid and PublicObject.publicID='$i'" |\
    mysql -u sysop -p sysop -D seiscomp -h localhost -N`

    screloc -O $orgID -d localhost --locator NonLinLoc --profile $profile -u $userID --debug --author=$authorID

done

Triggers processing on origins with any evaluation status.
Overrides \"allowPreliminaryOrigins\" but not
\"ignoreRejectedOrigins\".

Triggers processing also on origins with status PRELIMINARY.
Origins with any other status is ignored anyway. The parameter
is overridden by \"allowAnyStatus\".

Triggers processing also on origins with evaluatuion mode
MANUAL. Otherwise only origins with mode AUTOMATIC are
considered. The triggering may be limited due to an evaluation
status, see \"allowPreliminaryOrigins\".

Whether to use the weight of the picks associated with the
input origin as defined in the input origin as input for
the locator or not. If false then all picks associated with
the input origin will be forwarded to the locator with full
weight.

If the input origin's depth is fixed then it will be fixed
during the relocation process as well.

If the input origin’s depth is fixed then it will be fixed

Whether to store the ID of the input origin as comment in the
relocated origin or not.

Suffix appended to the publicID of the origin to be relocated
to form the new publicID. This
helps to identify pairs of origins before and after relocation.
However, new publicIDs are unrelated to the time of creation.
If not defined, a new publicID will be generated automatically.

Reprocess the origin and send a message unless test mode is activated

in that file. Each relocated origin is appended to the list
of origins unless \-\-replace is given.

Used in combination with \-\-ep. If given then each origin for
that an output has been generated is replaced by the result
of relocation. In other words: two LocSAT origins in, two
NonLinLoc origins out. All other objects are passed through.

improve measurement of relocation time by running each relocation multiple times. Specify the number of relocations, e.g. 100.

**Reads an XML file of picks and repicks them using a post picker. The
picks will be modified in place and written to another XML file.**

Reads an XML file of picks and repicks them using a post picker. The
picks will be modified in place and written to another XML file.

If enabled then all picks will be processed. Otherwise only
P phases or picks without a phase hint will be considered.

Name of input XML file \(SCML\) with all picks for offline
processing.

Defines the picker interface to be used. It must be part of
the common libraries or loaded as plugin.

scrttv visualizes waveform data in miniSEED format
(see :ref:`Figure below <fig-scrttv-overview>`) in real-time or from archives
with a defined window length (default: 30 minutes) of defined streams/stations
(default: streams defined by global bindings). Additionally, phase picks are
visualized.

) in real-time or from archives

scrttv can be used for view waveforms,
:ref:`visual waveform quality control <scrttv-waveform-qc>` or
:ref:`interactive signal detection <scrttv-signal-detection>`.

When in :ref:`message mode <scrttv-modes>` scrttv dynamically resorts waveforms:
Normally, the trace order is given by configuration, e.g., ordering by epicentral
distance from a location given by :confval:`streams.sort.latitude` and
:confval:`streams.sort.longitude`.
In the event that a new SeisComP :term:`event` arrives from the messaging, the
traces are sorted  automatically by epicentral distance to the latest origin
received. In addition to waveforms, information about gaps or overlaps, picks
and the time of incoming origins are displayed.

 scrttv dynamically resorts waveforms:
distance from a location given by 

 arrives from the messaging, the

.. figure:: media/scrttv/scrttv.png

   scrttv overview

   An example of scrttv and the dialog window to associate picks to new origins.
   Tabs: Enable/Disable; Amplitude: mean and maximum;
   Stream: station, network, sensor location and channel code;
   Filter: filter applied traces; Status = connection status to messaging.

An example of scrttv and the dialog window to associate picks to new origins.
Tabs: Enable/Disable; Amplitude: mean and maximum;
Stream: station, network, sensor location and channel code;
Filter: filter applied traces; Status = connection status to messaging.

scrttv shows two tabs: the Enabled and the disabled tab
(see :ref:`fig-scrttv-overview`). Stations listed in the disabled tab
are excluded from automatic processing (e.g. phase picking). To move a station
from one tab to another just drag and drop the trace to the new tab. An alternative solution is
to double click on the trace label to disable a trace. Read the section
:ref:`scrttv-waveform-qc` for the details.

). Stations listed in the disabled tab

Normally, the raw data are displayed. Pressing :kbd:`f` the predefined bandpass filter
of third order from 0.5 Hz to 8 Hz, :ref:`BW(3,0.5,8) <filter-bw>` is applied
to the traces. Also zoom functions for the time and amplitude axis are provided.
Read the sections :ref:`<scrttv-filtering>` and  :ref:`scrttv-visualization` for
more details.

 the predefined bandpass filter
of third order from 0.5 Hz to 8 Hz, 

 is applied
Read the sections 

Global :term:`bindings <binding>`:

* default definition of traces to show (:confval:`detecStream` and :confval:`detecLocid`).

default definition of traces to show (:confval:`detecStream` and :confval:`detecLocid`).

:term:`Module <module>` configuration:

* network, stations, locations and streams to show extending or overriding the
  default definition (:confval:`streams.codes`),
* :ref:`data filters <scrttv-filtering>`,
* buffer size controlling the length of loaded data (:confval:`bufferSize`),
* sorting of traces upon arrival of new origins (:confval:`resortAutomatically`),
* reference coordinate for sorting traces by default (:confval:`streams.sort.*`),
* region filters (:confval:`streams.region.*`),
* :ref:`grouping of streams <scrttv-grouping>` with different properties,
* number of traces to show with fixed height (:confval:`streams.rows`).

network, stations, locations and streams to show extending or overriding the
default definition (:confval:`streams.codes`),

default definition (

buffer size controlling the length of loaded data (:confval:`bufferSize`),

sorting of traces upon arrival of new origins (:confval:`resortAutomatically`),

reference coordinate for sorting traces by default (:confval:`streams.sort.*`),

:ref:`grouping of streams <scrttv-grouping>` with different properties,

number of traces to show with fixed height (:confval:`streams.rows`).

Scheme parameters in global :term:`module` configuration:

* trace properties and trace background colors,
* font and general GUI parameters.

Message mode: scrttv is started normally and connects to the messaging,
:term:`picks <picks>`, :term:`origins <origin>` and inventory are read from
the database and received in real time from the messaging. Data are received
from :term:`recordstream`.

 and inventory are read from
from 

Offline mode: scrttv is started without connection to the messaging,
:term:`picks <picks>` and :term:`origins <origin>` are not received in real
time from the messaging. However, they can be loaded from XML files using the
*File* menu. Data are received from :term:`recordstream` or from file. The
offline mode is invoked when using the option :option:`--offline` or when
passing a file name to scrttv at startup. Example:

   scrttv file.mseed

 are not received in real

 or from file. The
offline mode is invoked when using the option 

Without further configuration scrttv displays waveforms for streams defined
in global bindings. The selection can be refined by configuring
:confval:`streams.codes` and overridden on the command line using
:option:`--channels`.

Streams with :ref:`data latency <scqc>` < :confval:`maxDelay` are hidden but
shown again when applicable. By default  :confval:`maxDelay` is unconfigured and
hiding streams is inactive. For listing
streams hidden from one tab press :kbd:`h`.

 is unconfigured and
streams hidden from one tab press 

The reading waveforms from RecordStream, the data is displayed for a time
window which by default ends at current time or as given by the command-line
option :option:`--end-time`. Initially, the time window takes the length defined
in :confval:`bufferSize` or by the option :option:`--buffer-size`. When reading data
directly from file in offline mode, the time window is set
from the time limits of the waveforms.

option 

. When reading data

The **length of visible time windows** can be adjusted by
:ref:`zooming <scrttv-zooming>`.

The **end time of the data** progresses in continuously in real time (UTC)
with the time of the computer clock unless fixed (:kbd:`F8`). The end time is
fixed during startup when applying :option:`--end-time`.

 progresses in continuously in real time (UTC)
with the time of the computer clock unless fixed (

For **progressing or rewinding by 30 minutes** press :kbd:`Alt right` or
:kbd:`Alt left`, respectively. Data will be loaded immediately.

You may also **freely zoom** into any time window. Data and picks will be loaded
when pressing :kbd:`Ctrl + r`

 into any time window. Data and picks will be loaded
when pressing 

**Return to default real-time processing** by pressing :kbd:`Ctrl + Shift + r`
or :kbd:`N`.

Gaps and overlaps in waveforms are indicated by yellow and purple areas,
respectively. The colors are configurable.

Waveforms can be zoomed in and out interactively in amplitude and time. Use the
*View* menu or refer to the section :ref:`scrttv-hot-keys` for options. In
addition to the actions available from the View menu, zooming is supported by
mouse actions:

 for options. In

Zooming in in time: Right-click on time axis, drag to the right. A green bar appears
which is the new time window. Dragging up or down (gray bar) disables zooming.

Zooming out in time: Right-click on time axis, drag to the left. A red bar appears. The
longer the bar, the more you zoom out.  Dragging up or down (gray bar)
disables zooming.

Zooming in time and amplitude: Mouse over a trace of interest, use
:kbd:`Ctrl + mouse wheel` for zooming in or out.

Zooming around a selected area: Press :kbd:`z` and drag an area with while
pressing the left mouse button. Press :kbd:`z` again for leaving the zoom
mode.

mode.

 and drag an area with while
pressing the left mouse button. Press 

scrttv allows grouping of stations and even streams with different properties,
e.g. colors or color gradients.

.. figure:: media/scrttv/groups.png

   Stations with 2 groups and different line color gradients. Ungrouped stations
   are visible with default line properties. The applied filter
   is shown in the lower left corner. The tooltip on top of station CX.PB19
   is derived from :confval:`streams.group.$name.title`.

Stations with 2 groups and different line color gradients. Ungrouped stations
are visible with default line properties. The applied filter
is shown in the lower left corner. The tooltip on top of station CX.PB19
is derived from :confval:`streams.group.$name.title`.

is derived from 

Define the groups:

* add a new group profile to :confval:`streams.group`.
* set the properties for this group profile. :term:`Colors <color>` and color
  gradients are defined by hexadecimal values or by
  :term:`color keyword name`.
  When choosing gradients the colors of the traces within one group will be
  varied in alphabetic order of the streams.
* set a group title in :confval:`streams.group.$name.title`.

set the properties for this group profile. :term:`Colors <color>` and color
gradients are defined by hexadecimal values or by
:term:`color keyword name`.
When choosing gradients the colors of the traces within one group will be
varied in alphabetic order of the streams.

.

Select *Sort by group* in the *Interaction* menu or use the hotkey :kbd:`5`
to sort the traces by their groups.

Mouse over a station belonging to a group. The tooltips shows the group title.

For maintaining the sorting by groups adjust the :program:`scrttv` module
configuration (:file:`scrttv.cfg`): ::

   resortAutomatically = false

Previous versions of scrttv (< 5.4) only displayed :term:`picks <pick>` with the
colors indicating the pick evaluation mode along with the phase hint of the
pick:

 with the
pick:

This hasn't really changed in later versions but additionally scrttv determines
an additional state of a pick called :term:`arrival`. In scrttv a pick is
considered an arrival if it is associated to an valid origin. An origin is
called valid if its evaluation status is not REJECTED. When scrttv loads all
picks from the database for the currently visible time span it also checks if
each pick is associated with a valid origin and declares the arrival state if
the check yields true. The visibility of picks and arrivals can be toggled by
pressing :kbd:`Ctrl + p` and :kbd:`Ctrl + a`, respectively. :kbd:`c` removes all
markers. The configuration parameter :confval:`showPicks` controls the default
visibility.

This hasn’t really changed in later versions but additionally scrttv determines
an additional state of a pick called 

. In scrttv a pick is
pressing 

Picks and arrivals can be differentiated visually by their colours. When
configured in global module configuration, the same colours are being used
consistently as in any other GUI displaying both types, namely

That visual difference should support the operator in finding clusters of picks
and creating new location missed by the automatic system.

The next sections will only use the :term:`pick` which can be used
interchangeable for pick or arrival.

The borders of records are toggled by using the hotkey :kbd:`b`.

.. figure:: media/scrttv/borders.png

   Record borders in box mode on top of waveforms.

Border properties can be adjusted and signed records can be visualized by colors
configured in the scheme parameters in :file:`global.cfg` or :file:`scrttv.cfg`:

configured in the scheme parameters in 

:confval:`scheme.records.borders.drawMode`: Define where to draw borders, e.g. on top, bottom or as boxes.

: Define where to draw borders, e.g. on top, bottom or as boxes.

:confval:`scheme.colors.records.borders.*`: Define pen and brush properties.

Use scrttv for regular visual waveform inspection and for enabling or disabling
of stations. Disabled stations will not be used for automatic phase detections
and can be excluded from manual processing in :ref:`scolv`. They will also be
highlighted in :ref:`scmv` and :ref:`scqc`.

and can be excluded from manual processing in 

To enable or disable a station for automatic data processing in |scname| select
a station code with the mouse and drag the stations to the disable / enable tab
or simply double-click on the station code in the respective tab.

To enable or disable a station for automatic data processing in 

 select

scrttv allows filtering of waveforms. Any
:ref:`filter available in SeisComP <filter-grammar>` can be considered. The
filter selection dropdown menu (see :ref:`Figure above <fig-scrttv-overview>`)
and the hotkeys :kbd:`g` or :kbd:`d` can be used to toggle the list of filters.
This list of pre-defined in :confval:`filter` or in :confval:`filters`. You may
switch between filtere and unfiltered data by pressing :kbd:`f`. To show
filtered and raw data together use the hotkey :kbd:`r`.

 can be used to toggle the list of filters.
This list of pre-defined in 

. You may
switch between filtere and unfiltered data by pressing 

The list of filters defined in :confval:`filters` overwrites :confval:`filter`.
Activate :confval:`autoApplyFilter` to filter all traces at start-up of scrttv
with the first filter defined in :confval:`filters`.

 to filter all traces at start-up of scrttv
with the first filter defined in 

The stream gain is applied to waveforms and amplitude values are given in the
physical units defined in the inventory of the stream by default. For showing
amplitudes in counts, deactivate the option *Apply gain* in the Interaction menu.

amplitudes in counts, deactivate the option 

Beside visual inspection of waveforms for quality control, scrttv can also be
used for interactive signal detection in real time or for selected time windows
in the past.

.. figure:: media/scrttv/artificial-origin.png

   Artificial origin.

In case the operator recognizes several seismic signals which shall be processed
further, e.g. in :ref:`scolv`, an artificial/preliminary origin can be set by
either pressing the middle mouse
button on a trace or by opening the context menu (right mouse button) on a trace
and selecting "Create artificial origin". The following pop-up window shows the
coordinates of the selected station and the time the click was made on the
trace. The coordinates and time define the hypocenter parameters of the the new
artificial origin without adding any arrivals.
Pressing "Create" sends this origin to the LOCATION group. This artificial
origin is received e.g., by :ref:`scolv` and enables an immediate manual analysis
of the closest traces.

further, e.g. in 

, an artificial/preliminary origin can be set by
and selecting “Create artificial origin”. The following pop-up window shows the
Pressing “Create” sends this origin to the LOCATION group. This artificial
origin is received e.g., by 

 and enables an immediate manual analysis

In order to send artificial origins and receive them in other GUIs
:confval:`commands.target` of the global module configuration must be configured
in line with :confval:`connection.username` of the receiving GUI module.

 of the global module configuration must be configured
in line with 

Alternatively, picks can be selected and preliminary origins can be created
which are sent to the system as regular origin objects, see section
:ref:`scrttv-origin-association`.

scrttv comes with a minimal version of a phase associator and manual locator
based on selected and associated picks (Fig. :ref:`fig-scrttv-overview`). The
workflow is:

based on selected and associated picks (Fig. 

Visually identify phase picks which potentially belong to an event of interest,

:ref:`Select these picks <scrttv_pick-selection>` for automatic association,

:ref:`Commit <scrttv_pick-commit>` created origins along with all associated
picks.

picks.

Origins are committed to the messaging system as manual but preliminary location.
In contrast to the artificial origin operation which requires an immediate
intervention with, e.g. :ref:`scolv`, this operation allows to store all those
detected origins and work on them later because they will be stored in the
database.

intervention with, e.g. 

, this operation allows to store all those
database.

More detailed waveform and event analysis can be made in :ref:`scolv`.

In order to select picks, the pick association mode must be entered. When done,
clicking with mouse onto the data and dragging a box (rubber band) around the
picks of interest will add the picks to a "cart".
"cart" refers to the list of selected picks which then available in the
associator/locator control widget used for locating an origin.

picks of interest will add the picks to a “cart”.
“cart” refers to the list of selected picks which then available in the

Simply dragging a new box will remove all previously selected picks. Further
keyboard-mouse options are:

:kbd:`Shift + drag`: Add more picks to the while keeping the previous selection.

:kbd:`Ctrl + drag`: Remove selected picks from the previous selection.

If at least one pick has been selected, the associator control will open as a
dock widget for locating based on the selected picks. There, individual picks
can also be removed from the selection by clicking on the close icon of each
pick item. Selected picks are also highlighted in the traces by a color
background bar.

A dock widget is a special kind of window which can be docked to any border
of the application or even displayed floated as kind of overlay window. The
position of the dock widget will be persistent across application restarts.

At any change of the pick set, the associator will attempt a relocation
displaying the results in the details. Error message will show up at the top.

The associator control exposes all locators available in the system presenting them
in a dropdown list at the bottom. The locator which should be selected as default
can be controlled with :confval:`associator.defaultLocator` and its default
profile by :confval:`associator.defaultLocatorProfile`.

can be controlled with 

Whenever the operator changes any of the values, a new location attempt is being
made which can succeed or fail. A successful attempt will update the details,
a failed attempt will reset the details and print an error message at the top
of the window.

Each locator can be configured locally by clicking the wrench icon. This
configuration is not persistent across application restarts. It can be used
to tune and test various settings. Global locator configurations in the
configuration files are of course being considered by scrttv.

In addition to the locator and its profile a fixed depth can be set. By default
the depth is free and it is up to the locator implementation to assign a depth
to the origin. The depth dropdown list allows to set a predefined depth. The
list of depth values can be controlled with :confval:`associator.fixedDepths`.

list of depth values can be controlled with 

Once you accept a solution you may press the button "Commit" be for sending it
to the messaging as a regular origin. The receiving message group is defined by
:confval:`messaging.groups.location`. The new origin is then grabbed by all
connected modules, e.g., :ref:`scevent` and possibly associated to an
:term:`event`.

Once you accept a solution you may press the button “Commit” be for sending it

. The new origin is then grabbed by all
connected modules, e.g., 

When considering non-default message groups such as in multi-pipeline systems,
:confval:`messaging.groups.location` should be configuring accordingly.

Alternatively, the button "Show Details" can be used to just send the origin to
the GUI group and let :ref:`scolv` or other GUIs pick it up and show it. This
will not store the origin in the database and works the same way as creating
:ref:`artificial origins <scrttv-artificial-origins>`.

Alternatively, the button “Show Details” can be used to just send the origin to
the GUI group and let 

 or other GUIs pick it up and show it. This

If greater than 0, then all traces for which the data latency is
higher than this value are hidden. 0 disables the feature.

If enabled, then all traces are sorted by distance when a new
origin arrives.

Map picks to best matching rows. This is important
if picks created on BHN should be shown but only the BHZ trace
is part of the list. Network code, station code and location code
must match anyway.

Define the filter to be used when filtering is activated. This
parameter is ignored if \"filters\" is configured.
This parameter exists mainly for backward compatibility.

Define a list of filters that is cycles through when pressing
'G' or 'D'. Filtering is toggled with 'F'.
This parameter supersedes \"filter\". If undefined,
\"filter\" is used instead. If defined, this filter
list is used exclusively and the filter option is ignored.

\"filter grammar\": filter grammar is shown in
the scrttv filter selection and applied.

\"name;filter grammar\": name is shown in the scrttv
filter selection but filter grammar is applied.

Activate the first filter of the configured filter list
after startup. This is equivalent to pressing 'f'.

after startup. This is equivalent to pressing ‘f’.

If set to true, all traces will be visible on application startup
independent of data availability.

Time span in seconds to switch back to the last view after an origin
caused resorting. The default is 15 min.

If enabled, all three components \(vertical, 1st and 2nd horizontal\)
related to the detecStream will be shown rather than only the
component configured in global bindings. The option is ignored
when using \-\-no\-inventory.

The messaging group to which config messages \(such
as station enable\/disable messages\) are being sent.

The list of channel codes to be displayed. List items
may contain wildcards at any position and are separated
by comma. Wildcard support depends on RecordStream,
e.g.:

The channel list is intersected with all channels
configured in inventory unless \-\-no\-inventory is used.

default, PF.BON.00.HH? : display default and all HH
streams of PF.BON.00

If not empty then all stream patterns are part of the blacklist.
The blacklist is only active if \"streams.codes\"
is omitted and the default stream list according to the
bindings is to be shown. Each pattern can include wildcards
\(either ? or \*\). The pattern is checked against the channel
id which is a concatenation of network code, station code,
location code and channel code separated with a dot,
e.g. \"GE.MORC..BHZ\".

Number of rows to show at once in one windows. If more traces
than rows are loaded, the are accessible by a scroll bar.

Stream group profiles to be considered which must be defined in
group section. Use comma separation for a list of groups.

Stream profiles to be considered which must be defined in
profile section. Use comma separation for a list of profiles.

The sort mode applied initially. Allowed values
are: config, distance, station, network, group.

Latitude of the initial location for sorting traces.
Only valid if mode \=\= distance.

Longitude of the initial location for sorting traces.

**streams.region.\***
*Define a region used for clipping requested stations.*

**streams.group.\***
*Definiton of stream groups shown in scrttv with unique features.*
*Register the profiles in "groups" to apply them.*

Definiton of stream groups shown in scrttv with unique features.

**streams.group.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`streams.groups` to become active.

   streams.groups = a,b
   streams.group.a.value1 = ...
   streams.group.b.value1 = ...
   # to the list of streams.groups
   streams.group.c.value1 = ...

streams.groups = a,b
streams.group.a.value1 = ...
streams.group.b.value1 = ...
# to the list of streams.groups
streams.group.c.value1 = ...

List of channels codes to be displayed within
this group. List items may contain wildcards at any position
and are separated by comma.
The list is  intersected with all channels configured in inventory.

CX.\*..BH?,PF.BON.00.HH? : all BH streams of the CX network
and all HH streams of PF.BON.00

**streams.group.$name.pen.\***
*Define the trace pen of the group.*

The color of the pen. If not given, the default
trace color is being used. The parameter is overridden
by \"streams.group.\$profile.gradient\" .

Define the color gradient used to generate the
trace color for each group member. When given, the
value in \"streams.group.\$profile.pen.color\"
is ignored. The colors are distributed equally and
given in hexadecimal representation or by or
:term:`color keyword names`.
The stop points
can be set at any value. The final trace color
will be interpolated from the normalized gradient
where the value range is scaled to [0,1].

.

The style of the pen. Supported values are: NoPen,
SolidLine, DashLine, DotLine, DashDotLine,
DashDotDotLine.

**streams.profile.\***
*Definiton of profiles for streams shown with unique decorations.*
*Register the profiles in "profiles" to apply them.*

Definiton of profiles for streams shown with unique decorations.

**streams.profile.$name.\***
$name is a placeholder for the name to be used and needs to be added to :confval:`streams.profiles` to become active.

   streams.profiles = a,b
   streams.profile.a.value1 = ...
   streams.profile.b.value1 = ...
   # to the list of streams.profiles
   streams.profile.c.value1 = ...

streams.profiles = a,b
streams.profile.a.value1 = ...
streams.profile.b.value1 = ...
# to the list of streams.profiles
streams.profile.c.value1 = ...

Stream applying this profile to. Use regular expressions
for defining multiple streams. Examples:

GR.\*.00.BHZ: All stations from GR network and their
vertical components.

The physical unit shown along with stream maximum and
minimum values.

The gain applied to scale trace amplitudes. 0 disables
showing trace amplitude value

**streams.profile.$name.minimum.\***
*Properties defining the minimum line on each trace.*

**streams.profile.$name.minimum.brush.\***
*Properties of the area below the minimum.*

**streams.profile.$name.maximum.\***
*Properties defining the maximum line on each trace.*

**streams.profile.$name.maximum.brush.\***
*Properties of the area above the maximum.*

**associator.\***
*Define parameters for manually associating phases to origin and*
*for locating the origins.*

The locator profile which is activated as default profile for
the default locator.

A list of depths used to populate the locator depth selection
dropdown list.

**spectrogram.\***
*Define parameters for spectrogram representation.*

Which amplitude normalization mode to use: \"fixed\",
\"frequency\" or \"time\".

The lower bound of the static amplitude range give as logarithm of
the power spectrum \(log\(real\*\*2 + imag\*\*2\)\).

The upper bound of the static amplitude range give as logarithm of

The upper bound of the frequency to be shown. Zero is a special
value and means \"auto\" and sets the maximum
frequency from the spectra.

The time span of each data slice used to compute the
frequency spectrum.

The overlap of the data time window between zero and one
\(exclusive\).

Do not read streams from inventory but display all streams
available from the specified record source. This option may
be combined with the streams.codes parameter to filter the
available streams.

default: 'gmt'.

Do not ask for time window at data server. This might be
important if e.g. Seedlink does not allow time window
extraction.

Channel\(s\) to display. The channel code may contain wildcards
at any position but the support of wildcards depends on
RecordStream. Repeat the option for multiple
channel groups. Examples:

**Send journaling information to the messaging to manipulate event parameter objects.**

Send journaling information to the messaging to manipulate event parameter objects.

scsendjournal sends journals to the `scname` messaging system.
Currently, journals can be used to command :ref:`scevent`.
The journals command :ref:`scevent` to manipulate event parameters according to
the :ref:`journal actions <scsendjournal-actions>` which must be known to
:ref:`scevent`.

There are specific journal actions for handling non-events and events. The documentation
of :ref:`scevent` contains a :ref:`complete list of journals known to scevent <scevent-journals>`.
Parameters used on the command line can also be passed from file using the option
:option:`-i`.

of 

:ref:`complete list of journals known to scevent <scevent-journals>`

.

**EvNewEvent**: Create a new event from origin with the provided origin ID.
The origin must be known to :ref:`scevent`.

Example: Create a new event from the
origin with given originID. Apply the action in the message system on *localhost*: ::

   scsendjournal -H localhost Origin#20170505130954.736019.318 EvNewEvent

: Create a new event from origin with the provided origin ID.
The origin must be known to 

origin with given originID. Apply the action in the message system on 

scsendjournal -H localhost Origin#20170505130954.736019.318 EvNewEvent

**EvGrabOrg**: Grab origin and move the origin to the event with the given eventID.
If the origins is already associated to another event, remove this reference
in the other event.

: Grab origin and move the origin to the event with the given eventID.

**EvMerge**: Merge events into one event.

Example: Merge all origins from the source event with eventID *eventS* into the
target event with eventID *eventT*. Remove event *eventS*. Apply the action in
the message system on *host*: ::

   scsendjournal -H {host} {eventT} EvMerge {eventS}

**EvName**: Set *EventDescription* of type *earthquake name*.

Example, setting the name of the event with
eventID *gempa2021abcd* to *Petrinja* ::

   scsendjournal -H localhost gempa2020abcd EvName "Petrinja"

**EvPrefMw**: Set Mw from focal mechanism as preferred magnitude.

**EvPrefOrgAutomatic**: Set the preferred mode to *automatic* corresponding to *unfix* in scolv.

**EvRefresh**: Select the preferred origin, the preferred magnitude, update
the region. Call processors loaded with plugins, e.g. the
:ref:`evrc <scevent_regioncheck>` plugin for scevent.

Example: ::

   scsendjournal -H localhost gempa2021abcd EvRefresh

: Select the preferred origin, the preferred magnitude, update

**EvType**: Set event type.

Example: Set the type of the event with eventID *gempa2021abcd* to *nuclear explosion*. ::

   scsendjournal -H localhost gempa2021abcd EvType "nuclear explosion"

scsendjournal -H localhost gempa2021abcd EvType "nuclear explosion"

:program:`scsendjournal [opts] {objectID} {action} [parameters]`

**Connect to the messaging and collect all information sent from connected
clients.**

Connect to the messaging and collect all information sent from connected
clients.

scsohlog connects to the messaging and collects all information sent from connected
clients. It creates an XML file and writes that to disc at a configurable interval.
That output can be read by any consumer and converted to the desired output.

Create an output XML file every 60 seconds and execute a custom script to process
that XML file.

monitor.output.file = /path/to/stat.xml
monitor.output.interval = 60
monitor.output.script = /path/to/script.sh

The script to execute.
Example: \@CONFIGDIR\@\/scripts\/scsohlog_script.sh.

This tool runs an external script whenever an event has been created or updated.
It can also run a script in case an amplitude of a particular type or a
preliminary origin (heads-up message) has been sent. The common purpose for
this tool is to play a sound or to convert a message to speech using external
tools like festival or espeak.
There are three possible trigger mechanisms for calling scripts:

Although this tool was designed to alert the user acoustically it can also be
used to send e-mails, sms or to do any other kind of alert. scvoice can only
run one script per call type at a time! A template (:ref:`scalert`) Python script with
more options has been added to |scname| to be used as source for custom notifications.

run one script per call type at a time! A template (

The following script is used as event script. It requires
`festival <http://www.cstr.ed.ac.uk/projects/festival/>`_ which should be
available in almost any Linux distribution.

When saving the scripts given below do not forget to set the executable
bit otherwise scvoice cannot call the scripts. In Linux just run:

   chmod +x /path/to/file

Save an executable script file, e.g., under, e.g. :file:`~/.seiscomp/event.sh`:

   #!/bin/sh
   if [ "$2" = "1" ]; then
   echo " $1" | sed 's/,/, ,/g'   | festival --tts;
   else
   echo "Event updated, $1" | sed 's/,/, ,/g'   | festival --tts;
   fi

#!/bin/sh
if [ "$2" = "1" ]; then
echo " $1" | sed 's/,/, ,/g'   | festival --tts;
else
echo "Event updated, $1" | sed 's/,/, ,/g'   | festival --tts;
fi

Add the file to the configuration of :confval:`scripts.event` in the file
:file:`SEISCOMP_ROOT/etc/scvoice.cfg` or :file:`~/.seiscomp/scvoice.cfg`:

   scripts.event = /home/sysop/.seiscomp/event.sh

Save an executable script file, e.g., under :file:`~/.seiscomp/amplitude.sh`

   #!/bin/sh
   # Play a wav file with a particular volume
   # derived from the amplitude itself.
   playwave ~/.seiscomp/beep.wav -v $3

#!/bin/sh
# Play a wav file with a particular volume
# derived from the amplitude itself.
playwave ~/.seiscomp/beep.wav -v $3

Add the file to the configuration of :confval:`scripts.amplitude` in the
file :file:`SEISCOMP_ROOT/etc/scvoice.cfg` or :file:`~/.seiscomp/scvoice.cfg`:

   scripts.amplitude = /home/sysop/.seiscomp/amplitude.sh

Save an executable script file under, e.g., :file:`~/.seiscomp/alert.sh`:

   #!/bin/sh
   playwave /home/sysop/.seiscomp/siren.wav

Add the script filename to the configuration of :confval:`scripts.alert` in
the file :file:`SEISCOMP_ROOT/etc/scvoice.cfg` or :file:`~/.seiscomp/scvoice.cfg`.

   scripts.alert = /home/sysop/.seiscomp/alert.sh

Define a white list of agencyIDs to alert an event. The
agencyID is extracted from the preferred origin of the event.
If this list is empty, all agencies are allowed.

is the string given in the event.description attribute.
This string can be overwritten using one of the following
options. There are three placeholders that can be used:
\@region\@, \@dist\@ and \@poi\@.
Example: \"\@region\@, \@dist\@ kilometers from \@poi\@ away\".

When using the nearest point of interest \(city\) as part of the
message string, specify the maximum distance in degrees from the
event. Any point of interest farther away will be ignored.

Specify the script to be called if an amplitude
arrives, network\-, stationcode and amplitude are passed
as parameters \$1, \$2 and \$3.

Specify the script to be called if a preliminary
origin arrives, latitude and longitude are passed as

Specify the script to be called when an event has been
declared; the message string, a flag \(1\=new event,
magnitude \(optional when set\) are passed as parameter

Specify event ID that is used for testing.
After running the alert scripts scvoice will exit.

The waveform archive server is a small application that serves a local
SDS archive via different protocols. Currently there are two implementations:

:ref:`fdsnws dataselect <sec-dataSelect>`

* dataselect/1/query
* dataselect/1/version
* dataselect/1/application.wadl

This application is meant to share data with trusted computers in a fast and
efficient way. It does not require inventory information and supports wildcards
on each level.

All data are forwarded unrestricted. There are no options to add restriction
checks or user authentication.

Defines an alternative SDS archive handler. This is the name
of an RecordStream interface that can be loaded via a plugin.
If not given, an internal implementation will be used.

The filebase of the SDS archive. If an alternative archive
handler is defined by \"handlerSDS\", this value serves
as input to setSource\(\).

The server port for Arclink connections. \-1
deactivates the Arclink server. The standard Arclink port is
18001.

The server port for FDSNWS connections. \-1
deactivates the FDSN Web server.

The base URL of the FDSN Web service that is
given in the WADL document.

The aggregated maximum time window \(seconds\)
for all requested streams. A value of 0 will deactive
any restriction.

in real-time or offline. It includes a process scheduler and handles
reprocessing of data in a smart way. It supports ShakeMap XML output as
documented in the
`ShakeMap manual <http://pubs.usgs.gov/tm/2005/12A01/pdf/508TM12-A1.pdf>`_ each
time a new set of data is available.

`ShakeMap manual <http://pubs.usgs.gov/tm/2005/12A01/pdf/508TM12-A1.pdf>`_

When the module is not started in offline mode, the processing of events is
scheduled following the configured rules. Parameters that influence the
scheduling are:

The wake-up interval specifies when the scheduler is called to check if a
process is about to be started or stopped. The default is 10 seconds.

The scheduler checks then all scheduled jobs, adds a job to the processing queue
if the next run time is not in the future and removes all scheduled jobs with
timestamps in the past. The process queue contains all jobs that are about to
be executed. Because waveform acquisition is a time- and memory-costly operation
only one process can run at a time. Once a process finished, the next process in
the queue is executed (if any). When a process is started, it fetches the latest
event parameters (origin time, magnitude, location).

To add processes to the scheduler, the module distinguishes two cases:

Process creation (new event or updated event seen the first time)

Process update (event updates after an process has been created)

When a new event or an event update is received which does not have an
associated process yet, a new process is created. The event
time (Origin[Event.preferredOriginID].time) is used to build the default
schedule according to :confval:`wfparam.cron.delayTimes`.

schedule according to 

for each time in wfparam.cron.delayTimes:
  add_cron_job(process, Origin[Event.preferredOriginID].time + time)

If a process for an event already exists, the next run time is the current time
plus wfparam.cron.updateDelay. Before adding this job to the scheduler the
application checks if the next scheduled runtime is at least
:confval:`wfparam.cron.updateDelay` seconds after the new run time. If not, a
new job is not addded to the scheduler. Pseudo code to illustrate the strategy
is given below.

 seconds after the new run time. If not, a

event_updated(event):
  p = process_for_event(event)
  # The schedule for process p could be {T1,T2,T3,T4}
  now = get_current_time()
  next_run = now + wfparam.cron.updateDelay
  # Process currently suspended?
  if isEmpty(p.schedule):
    p.schedule.add(next_run)
  elif (p.schedule[0] - next_run) > wfparam.cron.updateDelay:
    p.schedule.prepend(next_run)
  else:
    # Do nothing, ignore the event update
    pass

Collect all stations within the configured maximum distance
(:confval:`wfparam.maximumEpicentralDistance` or
:confval:`wfparam.magnitudeDistanceTable`)

Find the velocity and acceleration stream with the highest sampling frequency

- The sensor unit is used to distinguish between velocity and acceleration
  streams (M/S, M/S**2)

The sensor unit is used to distinguish between velocity and acceleration
streams (M/S, M/S**2)

Use all allowed components (:confval:`wfparam.streams.whitelist`,
:confval:`wfparam.streams.blacklist`) of each stream

If the configured time window for one stream is complete, do (optional steps
are written italic)

- Check saturation depending on :confval:`wfparam.saturationThreshold`
- Search maximum raw value (in counts)
- Apply gain
- Check STA/LTA threshold 5 seconds around P
- *If velocity, differentiate data to acceleration*
- *Compute pre-event cut-off if enabled*
- Compute offset of pre-event time window
- *Compute signal duration and check for aftershocks*
- *Deconvolution using spectral division of FFT spectrum and transfer function*
- *Apply optional sensitivity correction filter (lo-, hi- or bandpass)*
- *Apply optional lo-pass, hi-pass or band-pass filter*
- Compute PGA/PGV
- Calculate response spectra

Check saturation depending on :confval:`wfparam.saturationThreshold`

*Deconvolution using spectral division of FFT spectrum and transfer function*

Deconvolution using spectral division of FFT spectrum and transfer function

*Apply optional sensitivity correction filter (lo-, hi- or bandpass)*

Apply optional sensitivity correction filter (lo-, hi- or bandpass)

If acquisition finished

- Collect all values (also recently processed values)

  - Results from velocity streams are always preferred over acceleration
    streams if both are available (eg. co-located stations)

- Generate ShakeMap event and station XML

  - Unless :confval:`wfparam.output.shakeMap.maximumOfHorizontals` is set
    to true all processed streams are included in XML

- Call ShakeMap script and pass eventID and event ID path

Collect all values (also recently processed values)

- Results from velocity streams are always preferred over acceleration
  streams if both are available (eg. co-located stations)

Results from velocity streams are always preferred over acceleration
streams if both are available (eg. co-located stations)

Generate ShakeMap event and station XML

- Unless :confval:`wfparam.output.shakeMap.maximumOfHorizontals` is set
  to true all processed streams are included in XML

Unless :confval:`wfparam.output.shakeMap.maximumOfHorizontals` is set
to true all processed streams are included in XML

The channel is considered to be processed if the last step succeeded.

If :confval:`wfparam.output.waveforms.enable` is set to true all processed
waveforms are stored in the configured output directory
:confval:`wfparam.output.waveforms.path`. The naming convention of a channel
miniSEED file is:

 is set to true all processed

If :confval:`wfparam.output.waveforms.withEventDirectory` is set to true, an
event directory with the eventID is created additionally where the channel
files are stored under.

 is set to true, an

/path/to/waveforms/file1.mseed
/path/to/waveforms/file2.mseed
...

The miniSEED file contains uncompressed float 4096 byte records.

scwfparam can make use of the database schema extension for strong motion

In order to prepare the database the extension schema must be applied. The
database schema is installed in :file:`share/db/wfparam/*.sql`. Login into the
database backend and source the .sql file corresponding to the used database
backend.

database schema is installed in 

. Login into the
backend.

In order to enable :ref:`scmaster` to handle messages containing objects for
strong motion parameters load the dmsm (data model strong motion) plugin as
follows in scmaster.cfg:

 to handle messages containing objects for

To activate scwfparam to send messages with strong motion objects, set

The ShakeMap XML is generated according the documentation of version 3.5 if
:confval:`wfparam.output.shakeMap.enable` is set to true.

Below an example is given of an event XML and a station XML. The data was
generated from a playback and does **not** describe a **real event**.

generated from a playback and does 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE earthquake SYSTEM "earthquake.dtd">
<earthquake id="gfz2011oasp" lat="38.916" lon="40.0711"
            depth="10.3249" mag="5.80361" year="2011"
            month="7" day="19" hour="14" minute="54"
            second="21" timezone="GMT"
            locstring="tst2011oasp / 38.916 / 40.0711"
/>

<!DOCTYPE earthquake SYSTEM "stationlist.dtd">
<stationlist created="" xmlns="ch.ethz.sed.shakemap.usgs.xml">
  <station code="JMB" name="JMB" lat="42.467" lon="26.583">
    <comp name="BHZ">
      <acc value="0.0175823522" flag="0"/>
      <vel value="0.0265134476" flag="0"/>
      <psa03 value="0.0177551343" flag="0"/>
      <psa10 value="0.0179450342" flag="0"/>
      <psa30 value="0.0507100318" flag="0"/>
    </comp>
  </station>
  <station code="BUD" name="BUD" insttype="STS-2/N"
           lat="47.4836" lon="19.0239">
      <acc value="0.0018418704" flag="0"/>
      <vel value="0.0012123935" flag="0"/>
      <psa03 value="0.0019287320" flag="0"/>
      <psa10 value="0.0033152716" flag="0"/>
      <psa30 value="0.0027636448" flag="0"/>
    </comp>
  <station code="ANTO" name="ANTO" lat="39.868" lon="32.7934">
      <acc value="0.0322238962" flag="0"/>
      <vel value="0.0250842840" flag="0"/>
      <psa03 value="0.0326696355" flag="0"/>
      <psa10 value="0.0621788884" flag="0"/>
      <psa30 value="0.0903777107" flag="0"/>
    </comp>
  <station code="GNI" name="GNI" lat="40.148" lon="44.741">
      <acc value="0.0760558909" flag="0"/>
      <vel value="0.0273735691" flag="0"/>
      <psa03 value="0.0818660133" flag="0"/>
      <psa10 value="0.1230812588" flag="0"/>
      <psa30 value="0.1682284546" flag="0"/>
    </comp>
</stationlist>

Running scwfparam offline with a multiplexed miniseed volume, an event xml
and an inventory xml file. A hi-pass filter of 0.1hz (10secs) is used.
Processing starts immediately and the application finishes when processing
is done. The scheduler is disabled in offline mode.

   scwfparam --offline -I vallorcine.mseed \
             --inventory-db vallorcine_inv.xml \
             --ep vallorcine.xml -E "Vallorcine.2005.09.08" \
             --lo-filter 0.1 --hi-filter 0

scwfparam --offline -I vallorcine.mseed \
          --inventory-db vallorcine_inv.xml \
          --ep vallorcine.xml -E "Vallorcine.2005.09.08" \
          --lo-filter 0.1 --hi-filter 0

Running for a given event with scheduling enabled. Only the given event will
be processed.

   scwfparam -I arclink://localhost:18001 -E gfz2011oeej \
             -d mysql://sysop:sysop@localhost/seiscomp

scwfparam -I arclink://localhost:18001 -E gfz2011oeej \
          -d mysql://sysop:sysop@localhost/seiscomp

For running in real-time it is enough to add the module to the client list
of the trunk package in seiscomp config.

Running with remote Arclink server

To use a remote Arclink server it is
enough to configure the record stream with -I:

             -I "arclink://arclink.ethz.ch:18002"

Note that the default acquisition timeout of 30 seconds might not be enough
to get all the requested data. If necessary, increase the value with
parameter :confval:`wfparam.acquisition.initialTimeout`. This can also be
reached on command line:

             -I "arclink://arclink.ethz.ch:18002" \
             --wfparam.acquisition.initialTimeout=300

          -I "arclink://arclink.ethz.ch:18002"

parameter 

          -I "arclink://arclink.ethz.ch:18002" \
          --wfparam.acquisition.initialTimeout=300

Running with remote Seedlink server

To use a remote Seedlink server it is enough to configure the record stream with -I:

             -I "slink://geofon.gfz-potsdam.de:18000"

          -I "slink://geofon.gfz-potsdam.de:18000"

Default value of total time window length in seconds if
wfparam.magnitudeTimeWindowTable is not specified. This times window
includes wfparam.preEventWindowLength.

Magnitude dependent time window table. The format is
\"mag1:secs1, mag2:secs2, mag3:secs3\". If a magnitude falls
between two configured magnitudes the time window of the lower
magnitude is used then. No interpolation is performed. Magnitude
outside the configured range are clipped to the lowest\/highest value.
Example: \"3:100, 4:200, 5:300\"

The maximum epicentral distance in km of a station being considered
for processing. This value is used if wfparam.magnitudeDistanceTable
is not specified.

Analogue to wfparam.magnitudeTimeWindowTable but instead giving a
time window, the distance in km is specified.
Example: \"3:400, 4:450, 5:500\"

Relative saturation threshold in percent. If the absolute raw amplitude
exceeds X% of 2\*\*23 counts the station will be excluded from
processing. This assumes a 24bit datalogger.

Specifies the STA length in seconds of the applied STA\/LTA check.

Specifies the LTA length in seconds of the applied STA\/LTA check.

Specifies the minimum STALTA ratio to be reached to further process
a station.

Specifies the number of seconds around P to be used to check the STA\/LTA ratio.

Defines the factor applied to the signigicant duration to define the
processing spetra time window. If that value is <\= 0 the totalTimeWindowLength
is used.

Specifies a list of damping values \(in percent\) for computation of
the relative displacement elastic response spectrum.
Example: \"5,10,15\"

Specifies the number of natural periods for computation of the
relative displacement elastic response spectrum between Tmin and Tmax.
If \"fixed\" is given then a fixed list of periods is used. If
\"custom\" is defined then a custom list of periods
will be used. This list must be configured with \"customPeriods\".

A list of periods to be used for computation of the
relative displacement elastic response spectrum. This list
will only be in effect if \"naturalPeriods \= custom\".

Specifies the minimum period \(Tmin\) in seconds for computation of the
relative displacement elastic response spectrum.

Specifies the maximum period \(Tmax\) in seconds for computation of the

Should the maximum period \(Tmax\) clipped against the
configured filter lower corner frequency, the maximum of
pd.loFreq or filter.loFreq.

Enables\/disables aftershock removal \(Figini, 2006; Paolucci et al., 2008\)

Enables\/disables pre\-event cut\-off. A hardcoded sta\/lta algorithm
\(with sta\=0.1s, lta\=2s, sta\/lta threshold\=1.2\) is run on the time
window defined by \(expected_P_arrival_time \- 15 s\). The pre\-event
window is hence defined as
[t\(sta\/lta \=1.2\) \- 15.5s, t\(sta\/lta \=1.2\) \- 0.5s].

Magnitude dependent filter table. The format is
\"mag1:fmin1;fmax1, mag2:fmin2;fmax2, mag3:fmin3;fmax3\".
If a magnitude falls between two configured magnitudes the filter of
the lower magnitude is then used. No interpolation takes place.
Magnitude outside the configured range are clipped to the
lowest\/highest value.
Frequency values are given as simple positive doubles \(Hz is assumed\)
or with suffix \"fNyquist\" which is then multiplied by the
Nyquist frequency of the data to get the final corner frequency.

Enables\/disables deconvolution. If a channel does not provide full
response information it is not used for processing.

Defines the magnitude tolerance to completely reprocess an event with
respect to the last state.

**wfparam.streams.\***
*Defines the white- and blacklist of data streams to be used. The*
*rules to decide if a stream is used or not are the following:*
**
*1. if whitelist is not empty and the stream is not on the whitelist,*
*don't use it, ok otherwise*
**
*2. if blacklist is not empty and the stream is on the blacklist,*
**
*Both checks are made and combined with AND. Either whitelist or*
*blacklist contains a list of patterns (wildcard allowed as * and ?),*
*eg GE.*.*.*, *, GE.MORC.*.BH? Each stream id (NET.STA.LOC.CHA) will*
*be checked against the defined patterns.*

Defines the white- and blacklist of data streams to be used. The

1. if whitelist is not empty and the stream is not on the whitelist,

2. if blacklist is not empty and the stream is on the blacklist,

blacklist contains a list of patterns (wildcard allowed as * and ?),

Defines if a linear spacing or logarithmic spacing between Tmin and
Tmax is used. The default is a linear spacing. The logarithmic
spacing will fail if either Tmin or Tmax is 0.

Specifies the frequency of the 1st stage hi\-pass filter. If this
parameter is equal to 0 the hi\-pass filter is not used.
If suffix \"fNyquist\" is used then the value is multiplied
by the Nyquist frequency of the data to get the final corner
frequency of the filter.

Specifies the frequency of the 1st stage lo\-pass filter. If this
parameter is equal to 0 the lo\-pass filter is not used.

**wfparam.pd.\***
*Parameters of the post-deconvolution filter applied in the*
*frequency domain.*

Specifies the frequency of the 2nd stage hi\-pass filter. If this

Specifies the frequency of the 2nd stage lo\-pass filter. If this

Defines the cosine taper length in seconds if non\-causal filters
are activated applied on either side of the waveform. If a
negative length is given 10 percent of the pre\-event window length
is used on either side of the waveform.

The length of the zero padding window in seconds applied on either
side of the waveform if non\-causal filters are activated. If
negative, it is computed following Boore \(2005\) as
1.5\*order\/corner_freq and applied half at the beginning and half at
the end of the waveform.

Specifies the interval in seconds to check\/start scheduled operations.

Specifies the maximum allowed idle time of a process before removed.
The idle time is calculated if no further processing is scheduled
and computes as: [now]\-lastRun.

Enables\/disables updating of a cron log file. This file will be
created at \~\/.seiscomp\/log\/[appname].sched
and contains information about the scheduled events and the
processing queue. The file is updated each n seconds,
where n \= wfparam.cron.wakeupInterval.

Specifies the delay in seconds to delay processing if a new
authoritative origin arrives for an event.

Specifies a list of delay times in seconds relative to event time
to trigger the processing. When the first origin of an event arrives
this list is used to construct the crontab for this event.
Example: \"60, 120, 300, 3600\"

Specifies the initial acquisition timeout. If the acquisition
source \(e.g. Arclink\) does not respond within this threshold with
waveforms, the request is discarded.

Specifies the acquisition timeout when waveforms are being
transfered. If no new waveforms arrive within this threshold, the
request is aborted. This is important if a Seedlink connection is
configured which can block the application for a very long time if
at least one requested channel has no data. Seedlink does not
finished the request until all data has been sent. When data will
arrive for a particular channel is not known.

Enables messaging output which creates objects of the
StrongMotionParameters data model extension \(defined by SED\) and
sends them to scmaster. In order to save the objects to the database,
scmaster needs to load the dmsm plugin and the corresponding database
schema must be applied.
The default message group is AMPLITUDE. To change this group redefine
connection.primaryGroup.

Uses short event ids when an event output directory needs to be
created. The default pattern is [eventtime]_[mag]_[lat]_[lon]_[updatetime].
The short format just contains the first part, namely [eventtime] in
the format YEARmmddHHMMSS.

Specifies the waveform output path. This parameter is only used if
wfparam.output.waveforms.enable is true.

wfparam.output.waveforms.withEventDirectory; configuration value

Enables\/disables the creation of an event directory \(named with
eventID\) when storing the processed waveforms. This parameter is
only used if wfparam.output.waveforms.enable is true.

Enables\/disables the output of spectra \(psa, drs\). The output
format is a simple ASCII file where the first column is the
period and the second column the corresponding value.

Specifies the spectra output path. This parameter is only used if
wfparam.output.spectra.enable is true.

eventID\) when storing the spectra. This parameter is only used if

Define a list of pg values to be forwarded to
ShakeMap in version 4 or later.
The period xx in psa must be in the list of
naturalPeriods and must not exceed 9.9s.

Specifies the ShakeMap XML output path. This is only used if
wfparam.output.shakeMap.enable is set to true.

Specifies the path to a script that is called whenever a new
ShakeMap XML is available. The script is called with 3 parameters:
EventID, modified ShakeMap eventID, path to event directory \(where
input\/event.xml and input\/event_dat.xml lives\).
The event files are not deleted by the application. The ownership
goes to the called script.

Enables\/disables synchronous or asynchronous script calls. If
enabled, be careful to not spend too much time in the script.
The application is blocked while the script is running.

wfparam.output.shakeMap.maximumOfHorizontals; configuration value

If enabled the maximum PGV, PGA, PSA03, PSA10 and PSA30 of both
horizontal components is used in the final output. Otherwise each
component is saved.

Uses the SeisComP event publicID as id attribute of the
earthquake tag, a generated ShakeMapID otherwise.

Uses the event region name \(if available\) for the locstring
attribute, the publicID, lat, lon otherwise.

Defines the communication type of the station which is forwarded
without modification to the Shakemap input file in version 4 or
greater. Reference:
https:\/\/usgs.github.io\/shakemap\/manual4_0\/sg_input_formats.html.

Defines the saturation threshold for the optional saturation check.
By default the saturation check is configured for all stations
as module parameter. This parameters overrides the threshold
per station.

This value can either be an absolute value such as \"100000\"
or a relative value \(optionally in percent\) with respect to
the number of effective bits, e.g. \"0.8\@23\" or
\"80%\@23\". The first version uses 1\*\*23 \* 0.8
whereas the latter uses 1\*\*23 \* 80\/100.

Do not connect to the messaging and  and disable the database in combination with \-\-inventory\-db and \-\-ep

Force event processing even if a journal entry exists that processing has completed

Force ShakeMap script to be run even if no station has contributed data

The parameters are sent to stdout or written into an XML (:term:`SCML`) file.

Waveform quality control (QC) parameters can be read from databases using
:ref:`scqcquery`.

To get event, origin or pick information from the database without using SQL
commands is an important task for the user. :ref:`scxmldump` queries the
database and transforms that information into XML. Events and origins can be
treated further by :ref:`scbulletin` for generating bulletins or conversion
into KML.

commands is an important task for the user. 

 queries the
treated further by 

Many processing modules, e.g., :ref:`scevent` support the on-demand processing
of dumped event parameters by the command-line option :option:`--ep`.
Importing event parameters into another database is possible with :ref:`scdb`
and sending to a SeisComP messaging is provided by :ref:`scdispatch`.

 support the on-demand processing
of dumped event parameters by the command-line option 

.
Importing event parameters into another database is possible with 

Events, origins and picks are referred to by their public IDs. IDs of events
and origins can be provided by :ref:`scevtls` and :ref:`scorgls`,
respectively. Event, origin and pick IDs can also be read from graphical
tools like :ref:`scolv` or used database queries assisted by :ref:`scquery`.

and origins can be provided by 

,
tools like 

Conversion of :term:`SCML` into other formats is supported by :ref:`sccnv`.
An XSD schema of the XML output can be found under
:file:`$SEISCOMP_ROOT/share/xml/`.

scxmldump -fI -o inventory.xml -d mysql://sysop:sysop@localhost/seiscomp

scxmldump -fC -o config.xml -d mysql://sysop:sysop@localhost/seiscomp

scxmldump -fPAMFJ -E test2012abcd -o test2012abcd.xml \

scxmldump -fap -E test2012abcd -o test2012abcd.xml \

scxmldump -fPAMF -E test2012abcd
          -d mysql://sysop:sysop@localhost/seiscomp | \
scbulletin

scxmldump -fPAMF -E test2012abcd \
scdb -i - -d mysql://sysop:sysop@archive-db/seiscomp

scxmldump -fJ -o journal.xml \

Enable server mode which listens to the message server for
incoming events and dumps each received add\/update.

If inventory is exported, filter the stations to export.
Wildcards are supported. Format of each item: net[.{sta\|\*}].

Dump the journal. In combination with \-E only corresponding
journal entries are included.

Pick public ID\(s\) to dump. Multiple IDs may be specified
as a comma\-separated list.

Origin public ID\(s\) to dump. Multiple origins may be specified

Event public ID\(s\) to dump. Multiple events may be specified

Do not export \(network\) magnitudes of origins. This
option is most useful in combination with \-O to only
export the location information.

When exporting events only the preferred origin, the preferred
magnitude and the preferred focal mechanism will be dumped.

If only the preferred origin is exported, all magnitudes for
this origin will be dumped.

Use formatted XML output. Otherwise all XML is printed
on one line.

scxmlmerge reads all |scname| elements from one or more XML files in :term:`SCML`
format. It merges the content and prints the result to standard output. The
input can contain and :ref:`SeisComP element<api-datamodel-python>` and the
content can be filtered to print only some elements such as EventParameters.
The output can be redirected into one single file and used by other applications.

input can contain and 

 and the

The supported :ref:`SeisComP elements<api-datamodel-python>` are:

By default all supported elements will be parsed and merged. Duplicates are
removed. Use options to restrict the element types.

There are alternative modules for processing inventory XML files:

:ref:`scinv`: Merge inventory XML files, extract inventory information.

Merge the all SeisComP elements from 2 XML files into a single XML file:

   scxmlmerge file1.xml file2.xml > file.xml

Merge the all EventParameters and all Config elements from 2 XML files into a
single XML file. Other element types will be ignored:

   scxmlmerge -E -C file1.xml file2.xml > file.xml

scxmlmerge inherits :ref:`global options<global-configuration>`.

Include DataAvailability specifically. If no specfic object
type is given, all supported objects are included.

Include EventParameters specifically. If no specfic object

Include Inventory specifically. If no specfic object

Include QualityControl specifically. If no specfic object

Include Config specifically. If no specfic object

Include Routing specifically. If no specfic object

Tolerate empty or corrupted input files and continue without
interruption. Otherwise, the application stops if corrupt
or empty files are processed.

sczip can compress and decompress data using the ZIP algorithm (PKZIP). It
is not meant to supersede any available packagers but a little helper to
decompress zipped SeisComPML formats. Like GZip, sczip can only handle one file
and does not support archives. It compresses a byte stream and outputs a byte
stream.

**Real-time waveform server implementing the SeedLink protocol.**

SeedLink is a real-time data acquisition protocol and a client-server software
that implements this protocol. The SeedLink protocol is based on TCP. All
connections are initiated by the client. During handshaking phase the client can
subscribe to specific stations and streams using simple commands in ASCII coding.
When handshaking is completed, a stream of SeedLink "packets" consisting of a
8-byte SeedLink header (containing the sequence number) followed by a 512-byte
miniSEED record, is sent to the client. The packets of each individual station
are always transferred in timely (FIFO) order. The SeedLink implementation used
in SeisComP is the oldest and most widely used, however, other implementations
exist. Another well-known implementation is deployed in IRIS DMC and some
manufacturers have implemented SeedLink in their digitizer firmware. All
implementations are generally compatible, but not all of them support the full
SeedLink protocol. On the other hand IRIS DMC implements some extensions which
are not supported by other servers. In the following we use "SeedLink" to denote
the SeedLink implementation used in SeisComP. The data source of a SeedLink
server can be anything which is supported by a SeedLink plugin - a small program
that sends data to the SeedLink server. Plugins are controlled by the SeedLink
server, e.g., a plugin is automatically restarted if it crashes or a timeout
occurs. Data supplied by a plugin can be a form of miniSEED packets or just
raw integer samples with accompanying timing information. In the latter case,
the SeedLink server uses an inegrated "Stream Processor" to create the desired
data streams and assemble miniSEED packets.

When handshaking is completed, a stream of SeedLink “packets” consisting of a
are not supported by other servers. In the following we use “SeedLink” to denote
the SeedLink server uses an inegrated “Stream Processor” to create the desired

The table below lists digitizers and data acquisition systems that are supported by
SeedLink plugins. More plugins (Kinemetrics K2, Lennartz MARS-88, Lennartz PCM
5800, etc.) have been implemented by various users, but are not (yet) included
in the package. The included C language plugin interface is described in
section 5.1.1.5. Antelope, Earthworm and NAQS can also import data from
SeisComP. In SeisComP the class :ref:`RecordStream <global_recordstream>` is implemented that supports both
SeedLink and ArcLink sources; this class is used by all SeisComP modules that
work with waveform data. On a lower level, SeedLink clients can be implemented
using the :cite:t:`libslink` software library or its Java counterpart, JSeedLink. Libslink
supports Linux/UNIX, Windows and MacOS X platforms, and comes with an exhaustive
documentation in form of UNIX manual pages.

SeisComP. In SeisComP the class 

 is implemented that supports both
using the 

 software library or its Java counterpart, JSeedLink. Libslink

:ref:`seedlink-sources-echopro_3ch100hz-label` /  :ref:`seedlink-sources-echopro_6ch200hz-label`

Chad Trabant (IRIS); based on sample code from Nanometrics, Inc.

Reinoud Sleeman (KNMI), This is the second revision of the scream plugin which supports buffering for short-term completeness.

:program:`seedlink` provides a telnet interface accepting the commands set out in
:ref:`seedlink_commands` through the seedlink :confval:`port` ::

$ telnet localhost 18000
Trying 127.0.0.1...
Connected to localhost.gempa.de.
Escape character is '^]'.
hello
SeedLink v3.3 (2020.122)
bye
Connection closed by foreign host.

:program:`seedlink` provides a query interface.
Use :program:`slinktool` to send queries
for fetching:

A SeedLink session starts with opening the TCP/IP connection and ends with
closing the TCP/IP connection. During the session the following steps are
performed in order:

We will take a closer look at the protocol. Note, the details are normally
hidden from the clients by the libslink software library; therefore it is not
necessary to be familiar with the protocol in order to implement clients.

When the TCP/IP connection has been established the server will wait for the
client to start handshaking without initially sending any data to the client.
During handshaking the client sends SeedLink commands to the server. The
commands are used to set the connection into a particular mode, setup stream
selectors, request a packet sequence number to start with and eventually start
data transmission. SeedLink commands consist of an ASCII string followed by
zero or several arguments separated by spaces and terminated with carriage
return (<cr>, ASCII code 13) followed by an optional linefeed
(<lf>, ASCII code 10). The commands can be divided into two categories: "action
commands" and "modifier commands". Action commands perform a function such as
starting data transfer. Modifier commands are used to specialize or modify the
function performed by the action commands that follow. When a server receives a
modifier command it responds with the ASCII string "OK" followed by a carriage
return and a line feed to acknowledge that the command has been accepted. If
the command was not recognized by the server or has invalid parameters, then
the ASCII string "ERROR" is sent as a response to the client followed by a
carriage return and a line feed. The client should not send any further
commands before it has received a response to the previous modifier command. If
a network error or timeout occurs the client should close the connection and
start a new session. Data transmission is started when the server receives the
commands DATA, FETCH, TIME or END as described in section 5.1.1.3. Once the data
transfer has been started no more commands, except INFO, should be sent to the
server. The flow diagram of handshaking in uni-station vs. multi-station mode
is shown in :ref:`seedlink-handshaking`.

(<lf>, ASCII code 10). The commands can be divided into two categories: “action
commands” and “modifier commands”. Action commands perform a function such as
modifier command it responds with the ASCII string “OK” followed by a carriage
the ASCII string “ERROR” is sent as a response to the client followed by a
is shown in 

.. figure::  media/seedlink/Handshaking_uni_multi_station_mode.*

   Handshaking in uni-station vs. multi-station mode.

When handshaking has been completed the server starts sending data packets, each
consisting of an 8-byte SeedLink header followed by a 512-byte miniSEED record.
The SeedLink header is an ASCII string consisting of the letters "SL" followed
by a six-digit hexadecimal packet sequence number. Each station has its own
sequence numbers. If multiple stations are requested using a single TCP channel
the client should look at the contents of the miniSEED header to determine the
station name (or to maintain the current sequence numbers for each station). A
sequence number in the same format is used as an argument to the commands "DATA"
or "FETCH" to start the data transfer from a particular packet. Each SeedLink
node re-assigns sequence numbers for technical reasons. It is not possible to
use the same sequence numbers when communicating with alternative servers.
Within a particular node the sequence numbers of a single station are
consecutive and wrap around at FFFFFF. This can be used by the client to detect
"sequence gaps" (e.g., some data has been missed by the client due to long
network outage or a software bug). However, if stream selectors are used the
sequence numbers are only guaranteed to be in increasing order (with wrap)
because some packets might be filtered out by the server. In this case the
first packet is not necessarily the one requested, but the nearest packet (not
older than requested) that matches installed selectors.
The data is transferred as a continuous stream without any error detections or
flow control because these functions are performed by the TCP protocol. This
guarantees the highest data transfer rate that is possible with the particular
hardware and TCP/IP implementation.
Obviously, the average data transfer rate must be greater than the rate at
which new data becomes ready to send at the server. If this is the case, sooner
or later the server has sent all data available to the client. When this
happens, depending on the SeedLink mode, the server sends new data as soon as
it arrives or appends ASCII string "END" to the last packet and waits for the
client to close connection. The latter mode is called "dial-up mode" because
it is normally used in conjunction with dial-up lines to open the connection
periodically for a short time and download all data available. A SeedLink
packet can never start with "END" thus no ambiguity arises.

The SeedLink header is an ASCII string consisting of the letters “SL” followed
sequence number in the same format is used as an argument to the commands “DATA”
or “FETCH” to start the data transfer from a particular packet. Each SeedLink
“sequence gaps” (e.g., some data has been missed by the client due to long
it arrives or appends ASCII string “END” to the last packet and waits for the
client to close connection. The latter mode is called “dial-up mode” because
packet can never start with “END” thus no ambiguity arises.

HELLO
responds with a two-line message (both lines terminated with <cr><lf>). The first line contains the version number of the SeedLink daemon, the second  line contains station or data center description specified in the configuration. HELLO is used mainly for testing a SeedLink server with "telnet". It is also used by libslink to determine the server version.

responds with a two-line message (both lines terminated with <cr><lf>). The first line contains the version number of the SeedLink daemon, the second  line contains station or data center description specified in the configuration. HELLO is used mainly for testing a SeedLink server with “telnet”. It is also used by libslink to determine the server version.

CAT
shows the station list. Used mainly for testing a SeedLink server with "telnet".

shows the station list. Used mainly for testing a SeedLink server with “telnet”.

BYE
closes the connection. Used mainly for testing a SeedLink server with "telnet".

closes the connection. Used mainly for testing a SeedLink server with “telnet”.

STATION station code [network code]
turns on multi-station mode, used to transfer data of multiple stations over a single TCP channel. The STATION command, followed by SELECT (optional) and FETCH, DATA or TIME commands is repeated for each station and the handshaking is finished with END. STATION is a modifier command (it modifies the function of subsequent SELECT, and DATA, FETCH or TIME commands) so it responds with "OK" on success, "ERROR" otherwise.

turns on multi-station mode, used to transfer data of multiple stations over a single TCP channel. The STATION command, followed by SELECT (optional) and FETCH, DATA or TIME commands is repeated for each station and the handshaking is finished with END. STATION is a modifier command (it modifies the function of subsequent SELECT, and DATA, FETCH or TIME commands) so it responds with “OK” on success, “ERROR” otherwise.

END
end of handshaking in multi-station mode. This is an action command, because it starts data transfer. No explicit response is sent.

SELECT [pattern]
when used without pattern, all selectors are canceled. Otherwise, the pattern is a positive selector to enable matching miniSEED stream transfer. The pattern can be used as well as a negative selector with a leading "!" to prevent the transfer of some miniSEED streams. Only one selector can be used in a single SELECT request. A SeedLink packet is sent to the client if it matches any positive selector and doesn’t match any negative selectors.

when used without pattern, all selectors are canceled. Otherwise, the pattern is a positive selector to enable matching miniSEED stream transfer. The pattern can be used as well as a negative selector with a leading “!” to prevent the transfer of some miniSEED streams. Only one selector can be used in a single SELECT request. A SeedLink packet is sent to the client if it matches any positive selector and doesn’t match any negative selectors.

General format of selectors is LLCCC.T where LL is location, CCC is channel, and T is type (one of DECOTL for data, event, calibration, blockette, timing, and log records). "LL", ".T", and "LLCCC." can be omitted, meaning "any". It is also possible to use "?" in place of L and C. Some examples can be found in table 3-1 in section 3.3.3.2.
SELECT is a modifier command (it modifies the function of subsequent DATA, FETCH or TIME commands) so a response follows with "OK" on success, "ERROR" otherwise.

General format of selectors is LLCCC.T where LL is location, CCC is channel, and T is type (one of DECOTL for data, event, calibration, blockette, timing, and log records). “LL”, “.T”, and “LLCCC.” can be omitted, meaning “any”. It is also possible to use “?” in place of L and C. Some examples can be found in table 3-1 in section 3.3.3.2.
SELECT is a modifier command (it modifies the function of subsequent DATA, FETCH or TIME commands) so a response follows with “OK” on success, “ERROR” otherwise.

DATA [n [begin time]]
in multi-station mode this sets the current station into real-time mode and (optionally) the current sequence number to n; in uni-station mode this starts data transfer in real-time mode from packet n or from the next packet available if used without arguments. If begin time is used, any older packets are filtered out. begin time should be in the form of 6 decimal numbers separated by commas in the form: year,month,day,hour,minute,second, e.g. ’2002,08,05,14,00,00’. DATA is a modifier command in multi-station mode (responds with "OK" or "ERROR"); in uni-station mode it is an action command (no explicit response is sent).

in multi-station mode this sets the current station into real-time mode and (optionally) the current sequence number to n; in uni-station mode this starts data transfer in real-time mode from packet n or from the next packet available if used without arguments. If begin time is used, any older packets are filtered out. begin time should be in the form of 6 decimal numbers separated by commas in the form: year,month,day,hour,minute,second, e.g. ’2002,08,05,14,00,00’. DATA is a modifier command in multi-station mode (responds with “OK” or “ERROR”); in uni-station mode it is an action command (no explicit response is sent).

FETCH [n [begin time]]
works like DATA but sets the station to dial-up mode instead of real-time mode.

TIME [begin time [end time]]
extracts the time window from begin time to end time. The times are specified in the form of 6 decimal numbers separated by commas in the form: year,month,day,hour,minute,second, e.g. ’2002,08,05,14,00,00’.

INFO level
requests an INFO packet containing XML data embedded in a miniSEED log record. level should be one of the following: ID, CAPABILITIES, STATIONS, STREAMS, GAPS, CONNECTIONS, ALL. The XML document conforms to the Document Type Definition (DTD) shown in section ???. The amount of info available depends on the configuration of the SeedLink server.

In order to implement a SeedLink plugin a developer needs two files included in the SeisComP distribution: :file:`plugin.h` and :file:`plugin.c`.
In these files the following public functions are defined:

In order to implement a SeedLink plugin a developer needs two files included in the SeisComP distribution: 

int send_raw3(const char *station, const char *channel, const struct ptime *pt, int usec_correction, int timing_quality, const int32_t *dataptr, int number_of_samples)

(const char *station, const char *channel, const struct ptime *pt, int usec_correction, int timing_quality, const int32_t *dataptr, int number_of_samples)

is used to send a raw packet (array of 32-bit integer samples) to SeedLink. The parameters are:

station
station ID, must match one of the defined stations in seedlink.ini. (Up to 10 characters.)

channel
channel ID, referenced by the "input" element in streams.xml. (Up to 10 characters.)

channel ID, referenced by the “input” element in streams.xml. (Up to 10 characters.)

pt
time of the first sample in the array. If NULL then time is calculated relative to the previous send_raw3() call. struct ptime is defined in :file:`plugin.h`.

time of the first sample in the array. If NULL then time is calculated relative to the previous send_raw3() call. struct ptime is defined in 

usec_correction
time correction in microseconds to be written in the SEED data header. Can be useful if the digitizer is not phase locked to GPS.

timing_quality
timing quality in percent (0-100). The number is directly written into miniSEED header (blockette 1001). Semantics is implementation-defined. Usually 100 means that GPS is in lock and 0 means there never was a GPS lock, so the timing is completely unreliable. When GPS goes out of lock, the value can slowly decrease reflecting a possible timedrift.

If number_of_samples = 0 & pt = NULL set new time without sending any data.

If dataptr = NULL send a gap (advance time as if number of samples was sent without sending any actual data).

int send_raw_depoch(const char *station, const char *channel, double depoch, int usec_correction, int timing_quality, const int32_t dataptr, int number_of_samples)

(const char *station, const char *channel, double depoch, int usec_correction, int timing_quality, const int32_t dataptr, int number_of_samples)

same as send_raw3() except time is measured in seconds since 1 January 1970 (depoch). Leap seconds are ignored.

flushes all miniSEED data streams associated with a channel. All buffered data is sent out creating "unfilled" miniSEED records if necessary. The parameters are:

flushes all miniSEED data streams associated with a channel. All buffered data is sent out creating “unfilled” miniSEED records if necessary. The parameters are:

int send_mseed(const char *station, const void *dataptr, int packet_size)

is used to send a miniSEED packet to SeedLink. Such packets are not further processed. The parameters are:

int send_log3(const char *station, const struct ptime *pt, const char *fmt, ...)

(const char *station, const struct ptime *pt, const char *fmt, ...)

is used to send a log message to SeedLink (LOG stream). It must be noted that encapsulating log messages in miniSEED records is relatively inefficient because each message takes at least one record (512 bytes), regardless of message size. Due to 64-byte miniSEED header, up to 448 bytes per record can be used \*  The parameters are:

is used to send a log message to SeedLink (LOG stream). It must be noted that encapsulating log messages in miniSEED records is relatively inefficient because each message takes at least one record (512 bytes), regardless of message size. Due to 64-byte miniSEED header, up to 448 bytes per record can be used *  The parameters are:

fmt
format string, as used by printf(), followed by a variable number of arguments.

It is possible to determine the version of the plugin interface by looking at the C macro PLUGIN_INTERFACE_VERSION. The current version is 3, therefore all functions that have changed since earlier versions end with "3". It is possible to enable full backward compatibility with earlier versions of the plugin interface by defining the C macro PLUGIN_COMPATIBILITY. In this case the old functions are also defined.

It is possible to determine the version of the plugin interface by looking at the C macro PLUGIN_INTERFACE_VERSION. The current version is 3, therefore all functions that have changed since earlier versions end with “3”. It is possible to enable full backward compatibility with earlier versions of the plugin interface by defining the C macro PLUGIN_COMPATIBILITY. In this case the old functions are also defined.

The following configuration files are used by SeedLink and its plugins.

Some files such as seedlink.ini, plugin.ini and chain\*.xml are generated by the :program:`seiscomp` tool according
to the configuration in :file:`etc/seedlink.cfg` and its bindings. They live in :file:`var/lib/seedlink` and should
not be modified. If modifications are necessary then the generator needs to be changed to better support
the desired user options.

 and should

plugins.ini
Configuration file for SeedLink plugins. Used by serial_plugin, fs_plugin and comserv_plugin.

seedlink.ini
Main configuration file for SeedLink. For more details see below.

filters.fir
Coefficients of SeedLink’s decimating FIR filters. If a filter’s name ends with "M", it is a minimum-phase filter – causal filter with minimized (non-constant) phase delay; since the filter is non-symmetric all coefficients must be given. Otherwise the filter is a zero-phase filter, i.e. a non-causal filter with zero phase delay; in this case the filter is symmetric and so only half of the coefficients must be given (it is not possible to use a zero-phase filter with an odd number of coefficients).

Coefficients of SeedLink’s decimating FIR filters. If a filter’s name ends with “M”, it is a minimum-phase filter – causal filter with minimized (non-constant) phase delay; since the filter is non-symmetric all coefficients must be given. Otherwise the filter is a zero-phase filter, i.e. a non-causal filter with zero phase delay; in this case the filter is symmetric and so only half of the coefficients must be given (it is not possible to use a zero-phase filter with an odd number of coefficients).

The coefficients for non-symmetric (minimum-phase) FIR filters in the filters.fir file are stored
in reverse order. It is important to reverse the order of coefficients if the operator adds
a new minimum-phase filter or uses the included minimum-phase filters for another application.
The coefficients for symmetric (zero-phase) FIR filters are not stored in reverse order. As a
sanity check for symmetric filters the largest coefficient is always in the middle of the symmetry.

streams.xml
SeedLink stream configuration file for the internal stream processor, referenced from seedlink.ini. For details see below.

\*.ini files have a somewhat obscure syntax. They contain zero or more sections, each beginning with a section name
in squared brackets which should appear on a line of its own. Section name cannot contain spaces and squared brackets,
but it can be optionally surrounded by spaces. Each section consists of zero or more entries – definitions and assignments.
A definition consists of a keyword and a name separated by spaces (e.g. "station EDD"). An assignment consists of a
parameter and a value separated by the "=" sign and optionally surrounded by spaces (e.g. "network = GE").

*.ini files have a somewhat obscure syntax. They contain zero or more sections, each beginning with a section name
A definition consists of a keyword and a name separated by spaces (e.g. “station EDD”). An assignment consists of a
parameter and a value separated by the “=” sign and optionally surrounded by spaces (e.g. “network = GE”).

The set of assignments that immediately follow a definition is in the scope of that definition. Assignments in the
beginning of a section are "global" – they are used to set some generic parameters and provide default values
(e.g. "network = GE" in the beginning of the section sets the default network that can be overridden in the scope
of a station definition).

beginning of a section are “global” – they are used to set some generic parameters and provide default values
(e.g. “network = GE” in the beginning of the section sets the default network that can be overridden in the scope

Parameters and keywords are case insensitive and must not contain the symbols "=", "[", "]" or spaces. Names must
not contain "=" signs or spaces. Values must not contain "=" signs or spaces, unless enclosed in double quotes.
Double quotes that are part of the value itself must be preceded by "\".

Parameters and keywords are case insensitive and must not contain the symbols “=”, “[”, “]” or spaces. Names must
not contain “=” signs or spaces. Values must not contain “=” signs or spaces, unless enclosed in double quotes.
Double quotes that are part of the value itself must be preceded by “".

Each assignment must be complete on a single line, but several assignments can appear on one line, separated by spaces.
Any line beginning with a "#" or "*" character is regarded as a comment and ignored.

Any line beginning with a “#” or “*” character is regarded as a comment and ignored.

seedlink.ini may contain several sections, but only one having the same name as
the executable to be used. A section in seedlink.ini has the following structure
(parameters are shown in courier, default values are shown in squared brackets,
but relying on them is not recommended):

seedlink.ini is generated from :file:`\~/.seiscomp/seedlink.cfg` and
:file:`etc/seedlink.cfg`.

This file, like all XML documents, has a tree-like structure. The root element
is called "stream" and it in turn contains "proc" elements which are referenced
by name in seedlink.ini. A "proc" element contains one or more "tree" elements,
which in turn contain "input" and "node" elements. There should be one "input"
element per plugin channel; if an "input" element is missing, the channel is
ignored and you will see a message like::

is called “stream” and it in turn contains “proc” elements which are referenced
by name in seedlink.ini. A “proc” element contains one or more “tree” elements,
which in turn contain “input” and “node” elements. There should be one “input”
element per plugin channel; if an “input” element is missing, the channel is
ignored and you will see a message like:

**element** proc
defines a "proc" object (set of "stream trees"), referenced from seedlink.ini.

defines a “proc” object (set of “stream trees”), referenced from seedlink.ini.

**element** using
used to include all "stream trees" defined by one "proc" object in another "proc" object.

used to include all “stream trees” defined by one “proc” object in another “proc” object.

**element** tree
defines a "stream tree" – a downsampling scheme of an input channel.

defines a “stream tree” – a downsampling scheme of an input channel.

**element** input
associates an input channel with the stream tree.

**attribute** name
name of the input channel; depends on the configuration of the particular plugin (usual channel names are "Z", "N" and "E").

name of the input channel; depends on the configuration of the particular plugin (usual channel names are “Z”, “N” and “E”).

**attribute** channel
name of the output channel (last letter of a miniSEED stream name).

**attribute** location
miniSEED location code of the output channel (up to two characters).

**attribute** rate
sampling rate of the input channel (must match the actual sampling rate, which is dependent on the configuration of the plugin and digitizer).

**element** node
defines a node of a stream tree; this element is recursive, meaning that it may contain one or more "node" elements itself.

defines a node of a stream tree; this element is recursive, meaning that it may contain one or more “node” elements itself.

**attribute** filter
use the named filter for decimation; filters are defined in file filters.fir.

**attribute** stream
create miniSEED output stream at this node. The value of the attribute should be a miniSEED stream name without the last character (which is taken from the attribute "channel" of element "input").

create miniSEED output stream at this node. The value of the attribute should be a miniSEED stream name without the last character (which is taken from the attribute “channel” of element “input”).

:file:`streams.xml` is generated into :file:`var/lib/seedlink/streams.xml`. Each
data plugin provides templates with predefined procs. If e.g. the *chain* plugin
is configured with proc *stream100* then :file:`share/templates/seedlink/chain/streams_stream100.tpl`
is being read and generated into the final :file:`streams.xml`. Own proc definitions
can be added by creation a corresponding template file.

. Each
data plugin provides templates with predefined procs. If e.g. the 

. Own proc definitions

Again, the **source** and **proc** definition is used to resolve the streams proc
template file at :file:`share/templates/seedlink/[source]/streams_[proc].tpl`.

 definition is used to resolve the streams proc
template file at 

seedlink is a :term:`standalone module` and does not inherit :ref:`global options <global-configuration>`.

Defines the Seedlink port to accept requests. If this port
is changed and other modules depend on it \(slarchive, processing\)
those ports must be updated as well\!

Path to the base directory of SeedLink data files \(disk buffer\).

Default network code. Used when a network code is omitted by a client
in STATION request. Should be set to the network code of the majority
of configured stations. 1 or 2 characters long, uppercase.

List of IP addresses or IP\/mask pairs \(in ipchains\/iptables syntax\)
that can access stations. Per station access definitions
supersede this parameter. By default any client can access
all stations.

If stream_check \= enabled, also check for gaps in all channels that
match given pattern. Register all gaps that are larger than +\-0.5 seconds.
gap_check_pattern \= [EBLV][HLNG][ZNE]\|S[NG][ZNE].
Disabled to save memory.

Time difference between records \(microseconds\) above which a gap is declared.

If activated Seedlink uses the mseedfifo to read records and
only the mseedfifo_plugin is started. This command is useful
to playback historic data by eg msrtsimul.

Defines a database read connection to be used for Seedlink
station descriptions. If no database is to be used \(the default;
configure with \"\"\) then the station code will be used. Example:
\"mysql:\/\/sysop:sysop\@localhost\/seiscomp\". If a remote host is
specified, ensure that its database server is reachable from
this computer.

Give warning if an input channel has time gap larger than this \(microseconds\).

Flush streams if an input channel has time gap larger than this \(microseconds\).

Reset FIR filters if an input channel has time gap larger than this \(microseconds\).

Enable backfilling buffer for out\-of\-order records.
This values defines its capacity in seconds.

Maximum allowed deviation from the sequence number of oldest packet if
packet with requested sequence number is not found. If seq_gap_limit is
exceeded, data flow starts from the next packet coming in, otherwise
from the oldest packet in buffer.

Size of memory buffer \(number of recent Mini\-SEED records kept in RAM\).

Number of disk buffer segments \(files under <dir>\/station\/segments\/
where <dir> is the directory given by the filebase parameter\).

Size of one disk buffer segment in the records \(512\-byte units\).

Number of blank records to insert after the re\-scan of disk buffer
if <dir>\/station\/buffer.xml is not found \(assuming the server
did not terminate correctly\).

Encoding of Mini\-SEED records created by SeedLink. The value must be
steim1 or steim2. If omitted, the global encoding parameter is used.

If configured with a value greater than zero then all sequence files
created by the chain plugin are deleted which are older than X minutes
before Seedlink is started.

Path to named fifo pipe. Default:
\$SEISCOMP_ROOT\/var\/run\/seedlink\/mseedfifo for seedlink.
Alias modules automatically replace \"seedlink\"
by the alias name.

Defines the maximum number of concurrent dial\-up
connections. A value of 0 does not limit the
concurrent connections.

If enabled load_timetable is used by the chain plugin to request
the available time windows of each stream in the Seedlink buffer
to discard older records.

The maxmimum time difference with respect to current
time of the end time of a received record. If
exceeded then the end time will not be logged into
the state file.

Request all records in\-order. Out\-of\-order records will
be skipped.

List of IP addresses or IP\/mask pairs \(in ipchains\/iptables syntax\).
Only if a client's IP address
matches one of those the station is shown \(slinktool \-L, etc.\) and
accessible. If omitted, the global access parameter is used.
If the global access parameter is not set any client can access the station.

Enable backfilling buffer for out\-of\-order records when raw samples
are transmitted. This values defines its capacity in seconds.

Name of the proc object uniquely defined in a seedlink template file, e.g.
\$SEISCOMP_ROOT\/share\/templates\/seedlink\/streams_{name}.tpl.
proc is used for processing, e.g. renaming or resampling of raw
streams \(streams submitted by a plugin as raw samples\).
The template file is used to generate
\$SEISCOMP_ROOT\/var\/lib\/seedlink\/streams.xml .

Defines a list of extension bindings to be used.
Each binding can then be configured individually.

Available identifiers: :ref:`seedlink-sources-antelope-label` :ref:`seedlink-sources-caps-label` :ref:`seedlink-sources-chain-label` :ref:`seedlink-sources-dr24-label` :ref:`seedlink-sources-echopro_3ch100hz-label` :ref:`seedlink-sources-echopro_6ch200hz-label` :ref:`seedlink-sources-edata-label` :ref:`seedlink-sources-ewexport-label` :ref:`seedlink-sources-ewexport_pasv-label` :ref:`seedlink-sources-fs_mseed-label` :ref:`seedlink-sources-gdrt-label` :ref:`seedlink-sources-gmeteo-label` :ref:`seedlink-sources-hrd24-label` :ref:`seedlink-sources-liss-label` :ref:`seedlink-sources-m24-label` :ref:`seedlink-sources-maram-label` :ref:`seedlink-sources-minilogger-label` :ref:`seedlink-sources-miscScript-label` :ref:`seedlink-sources-miscSerial-label` :ref:`seedlink-sources-mk6-label` :ref:`seedlink-sources-mppt-label` :ref:`seedlink-sources-mseedfifo-label` :ref:`seedlink-sources-mseedscan-label` :ref:`seedlink-sources-mws-label` :ref:`seedlink-sources-naqs-label` :ref:`seedlink-sources-nmxp-label` :ref:`seedlink-sources-optodas-label` :ref:`seedlink-sources-ps2400_eth-label` :ref:`seedlink-sources-q330-label` :ref:`seedlink-sources-reftek-label` :ref:`seedlink-sources-sadc-label` :ref:`seedlink-sources-scream-label` :ref:`seedlink-sources-scream_ring-label` :ref:`seedlink-sources-vaisala-label` :ref:`seedlink-sources-wago-label` :ref:`seedlink-sources-wave24-label` :ref:`seedlink-sources-win-label`

# param1 and param2 are just placeholders.
sources = antelope, caps
sources.antelope1.param1 = value11
sources.antelope1.param2 = value12
sources.caps2.param1 = value21
sources.caps2.param2 = value22

# To use the same binding twice, aliases must be used.
# Aliases are created by prepending a unique name followed by a colon
sources = antelope, antelope_2:antelope
sources.antelope.param1 = value11
sources.antelope.param2 = value12
sources.antelope_2.param1 = value21
sources.antelope_2.param2 = value22

Regular expression to match ORB packets, default is all
waveform data.

Name of the proc object \(defined in streams.xml\); used for processing
raw streams \(streams submitted by a plugin as raw samples\).

CAPS URL to fetch data from, format: [[caps\|capss]:\/\/][user:pass\@]host[:port]

Comma\-separated list of streams. Stream format is [LOC.CHA].
Streams may contain wildcards

Comma\-separated list of streams to unpack. Stream format is [LOC.CHA].
Streams may contain wildcards. Unpacking in this context means that
incoming data is converted to RAW data before sending
it to SeedLink. The proc option must be set when using this option.
For each stream there must be a corresponding entry in the proc object
so that the raw stream can be processed by SeedLink. The name of the
input entry must match the chanel ID, e.g., 00ENZ or ENZ.

Comma-separated list of streams to unpack. Stream format is [LOC.CHA].

List of stream selectors. If left empty all available
streams will be requested. See slinktool manpage for
more information.

Defines the remote station code if different from the inventory
station code. Usually leave this parameter unconfigured. If
configured and different from the inventory station code,
the remote station code will be renamed to match the inventory
station code.

Defines the remote network code if different from the inventory
network code. Usually leave this parameter unconfigured. If
configured and different from the inventory network code,
the remote network code will be renamed to match the inventory
network code.

Usually stations with the same source addresses and dialup
options are grouped together and managed by a chain plugin
process. Here you can define an additional group ID. Available
placeholders are \$NET and \$STA that are replaced by the
network code or station code. Whitespaces are replaced by
underscores when generating chain.xml.

The default timing quality is used when unpacking data that
does not contain blockette 1001, that allows SeedLink to
construct blockette 1001 for downsampled data.

If overlap removal is set to \"initial\" or \"full\", then
earlier records will be discarded \(record number is used
in case several subsequent records have the same header time\).
All other values are treated as \"none\". Leave this option
unset unless you know what you are doing.

If enabled then the chain plugin tries to subscribe for
channels with the BATCH command which is magnitudes faster
than the old handshake. Not all SeedLink servers support
the BATCH mode so it needs to be turned off in case of
problems.

Enables dialup mode. Needs schedule and uptime to be
set accordingly.

Optionally rename channels. This is a comma separated list
of strings where each item defines one mapping from source to
destination in the format \"LOCCHA:LOCCHA\".
Either LOC or CHA can contain wildcard characters \(question mark\)
and the location code \(LOC\) in both identifiers is optional.
??HHZ:10HHZ renames all HHZ location codes to 10,
0J???:??? renames all 0J location codes to nothing \(''\),
HH?:EH? renames all HH channels to EH, etc.

Optionally unpack channels instead of sending them as
miniseed to Seedlink. Unpacked streams can be downsampled
by Seedlink. This is a list of strings where each item
defines one unpack mapping  in the format \"LOCCHA:ID:1\" where
ID can be an arbitrary channel id which must match the definition
of a stream in streams.xml. The last \":1\" is optional and defines
if the unpacked data should be doubled \(duplicate each sample\).
In case rename mappings are active, LOCCHA refers to
the final channel name after renaming.

\"pattern\" is a POSIX extended regular expression that
must match input file names \(useful for filtering out non\-data
files\). For example \"BH[NEZ]\" would match any files
that contained \"BHE\", \"BHN\" or \"BHZ\".
If no pattern is specified all files will be processed.

Move file to subdirectory \"processed\" before starting to read it.

Look only for files that are newer than the last file processed.

Timestamp file is used to save the modification time of the last
file processed.

Wait until the file is at least n seconds old, before trying to
read it.

Maximum number of consecutive zeros in datastream before data
gap will be declared \(\-1 \= disabled\).

If timing quality is not available, use this value as default
\(\-1 \= disabled\).

**sources.fs_mseed.channels.\***
*Channel definitions (Mini-SEED streams are defined in streams.xml,*
*look for <proc name="generic_3x50">).*

Channel definitions (Mini-SEED streams are defined in streams.xml,

**sources.fs_mseed.channels.$name.\***

GDRT (GFZ Displacement Real-Time) is the data format of the Real-time Precise
Point Positioning (RTPPP) provided by the Helmholtz Centre Potsdam – GFZ German
Research Centre for Geosciences. This development was supported by the German
Federal Ministry of Education and Research (BMBF) within the EWRICA project.

The GDRT plugin is a SeedLink plugin that converts GDRT UDP messages to
miniSEED channels according to the following table:

integer(4)
integer(2)
double(%5.2f)

The ratio value of PPP ambiguty
fixing (larger value means more
reliable ambiguity fixing)

Number of satellites used for the
solution (GPS, GLONASS, Galileo, BDS)

Coordinates X, Y, and Z in the Earth
Centered Earth Fixed (ECEF)
coordinate system in meters

Name of orbit/clock/upd product and
name of three used reference stations
in PPP-RA, separated with '+'

in PPP-RA, separated with ‘+’

UDP port for receiving GDRT messages. By default port 9999 will be used.

Device path and name of port for USB Seismometer Interface.
If the specified port cannot be opened or is not a USB Seismometer
Interface device, all available ports will be scanned.

sources.minilogger.allow_set_interface_attribs; configuration value

Allow low\-level setting of port interface attributes when available
ports are scanned to find a USB Seismometer Interface device, 0\=NO, 1\=Yes.
Setting 1 \(\=Yes\) may help successful detection and correct reading of the
USB Seismometer Interface device, particularly for the RasberryPi, but can
have adverse effects on other devices, terminals, etc. open on the system.

sources.minilogger.mswrite_header_sample_rate; configuration value

Sets a fixed sample rate to report in the miniseed file header.
The default \(\-1\) sets an estimated sample rate based on recent packet start
times. This estimated sample rate will vary slightly over time, potentially
producing errors in some software when reading the miniseed files.
See also: nominal_sample_rate

sources.minilogger.mswrite_data_encoding_type; configuration value

SEED data encoding type for writing miniseed files.
Supported values are: INT16, INT32, STEIM1, STEIM2

The initial letters to set for the miniseed header 'channel', will be
prepended to the component.

The initial letters to set for the miniseed header ‘channel’, will be

Name of the proc object used for channel naming \(and eventually down sampling\). If this field is left to default \(auto\), a basic proc \(without decimation\) will be automatically generated.

Names of the channels. These names are only used if you choose to automatically generate the proc. Nevertheless, even if you are not using the auto proc, it is important to declare correctly this list as the number of channels is used to size the internal plugin's buffers. If you do not want seedlink to use one of the channels, replace it names with \"none\". Example : 01HHZ,none,none,02HHZ,HHE,HHN

Names of the channels. These names are only used if you choose to automatically generate the proc. Nevertheless, even if you are not using the auto proc, it is important to declare correctly this list as the number of channels is used to size the internal plugin’s buffers. If you do not want seedlink to use one of the channels, replace it names with "none". Example : 01HHZ,none,none,02HHZ,HHE,HHN

This parameter aims at enforcing the sending of seedlink data blocks \(512bytes\) even if they are not yet full. 0 means no enforcing.

This parameter aims at enforcing the sending of seedlink data blocks \(512bytes, even if they are not yet full. 0 means no enforcing.

If this parameter is not 0, a date frame \(\"YYYY,mm,dd hh:mm:ss\\n\"\) will be send on serial port every serial_clock_period seconds.

MseedScan transfers new or changed miniSEED files from a directory
to a SeedLink server. It recursively a directory
structures and continuously checks for file modifications. The files
are presumed to be composed of Mini-SEED records of 512 Bytes. As the
files are appended or created the plugin will feed the new records to
the controlling SeedLink server.

NAQS (TCP/IP) with nmxptool. nmxptool is not part of SeisComP and needs to be installed
under $INSTALLDIR/share/plugins/seedlink/.

\-1 is for Raw Stream, no Short\-Term\-Completion.
Packets contain compressed data.

0 decompressed packets are received in chronological order without
waiting for missing packets.

[1..300] decompressed packets are received in chronological order
but waiting for missing packets at most SECs seconds. This requires
NaqsServer version greater than 1.90.

The ps2400_eth plug-in fetches data from a Earth Data PS2400/PS6-24
digitizer (firmware >= 2.23) using TCP/IP. Other configurable parameters
are in $SEISCOMP_ROOT/share/templates/seedlink/ps2400_eth/plugins.ini.tpl.

Name of the proc object uniquely defined in a template file of
the q330 plugin e.g.
\$SEISCOMP_ROOT\/share\/templates\/seedlink\/q330\/streams_{name}.tpl.

If proc is not given, the streams are taken as provided by the DAS.

Defines an alternative unit mapping file. The default file
is in \$INSTALLDIR\/var\/lib\/seedlink\/reftek2sl.map. If
this path is not an absolute path it will treated as relative
path to \$INSTALLDIR\/var\/lib\/seedlink. The map file is used
if the unit is not explictly given in the binding. Each line
in the file is one mapping from a unit to a station name. The
first column is the unit id e.g. 91F3 and the second column
the Seedlink station name e.g. ABCD.

the reftek plugin e.g.
\$SEISCOMP_ROOT\/share\/templates\/seedlink\/reftek\/streams_{name}.tpl.

Timeout length in seconds. If no data is received from a Reftek
unit during this period, the plugin assumes that the unit is
disconnected.

Default timing quality in percents. This value will be used when
no timing quality information is available. Can be \-1 to omit
the blockette 1001 altogether.

SCREAM! server (TCP/UDP/IP) plugin that receives data via
the SCREAM! protocol and sends raw data to Seedlink. The mapping
from SCREAM! channel id's to Seedlink net.sta.loc.cha is defined
in $INSTALLDIR/var/lib/seedlink/config/scream2sl.map if not
specified otherwise (parameter 'map').

from SCREAM! channel id’s to Seedlink net.sta.loc.cha is defined
specified otherwise (parameter ‘map’).

Enables TCP\/IP mode. By default the data is received via
UDP but TCP is used instead. This needs a propert
configuration of the SCREAM\! server to accept TCP
connections.

Defines an alternative stream mapping file. The default file
is in \$INSTALLDIR\/var\/lib\/seedlink\/scream2sl.map. If
path to \$INSTALLDIR\/var\/lib\/seedlink.

Defines the channel mappings \(ID:channel, ...\) from SCREAM\!
to the channel code used in streams.xml. If no channel mappings
are given, the map file defined in map \(either default or custom\)
is used.

SCREAM! server plugin that receives data via
specified otherwise (parameter 'map'). This is the second revision
of the scream plugin which supports buffering for short-term
completeness.

specified otherwise (parameter ‘map’). This is the second revision

Size of the stream ringbuffers \(small values are useful for RT systems;
large values for decreasing gaps\).

is in \$INSTALLDIR\/var\/lib\/seedlink\/win2sl.map. If

List of channels \(hexID:name, ...\). The name can either be a single
channel name or a combination of station and channel separated by
a whitespace, e.g. \"ABCD BHZ\". If no station name is given,
e.g. only BHZ is specified, the name of the station the plugin bound to
is used. The definition of a station name is important if the plugin
configuration is used as a profile and assigned to multiple stations.
In this case a mapping file would be the more appropriate solution.

If no channel mappings are given, the map file defined in map
\(either default or custom\) is used.

Hyperlink target "seedlink-sources-antelope-label" is not referenced.

Hyperlink target "seedlink-sources-caps-label" is not referenced.

Hyperlink target "seedlink-sources-chain-label" is not referenced.

Hyperlink target "seedlink-sources-dr24-label" is not referenced.

Hyperlink target "seedlink-sources-echopro-3ch100hz-label" is not referenced.

Hyperlink target "seedlink-sources-echopro-6ch200hz-label" is not referenced.

Hyperlink target "seedlink-sources-edata-label" is not referenced.

Hyperlink target "seedlink-sources-ewexport-label" is not referenced.

Hyperlink target "seedlink-sources-ewexport-pasv-label" is not referenced.

Hyperlink target "seedlink-sources-fs-mseed-label" is not referenced.

Hyperlink target "seedlink-sources-gdrt-label" is not referenced.

Hyperlink target "seedlink-sources-gmeteo-label" is not referenced.

Hyperlink target "seedlink-sources-hrd24-label" is not referenced.

Hyperlink target "seedlink-sources-liss-label" is not referenced.

Hyperlink target "seedlink-sources-m24-label" is not referenced.

Hyperlink target "seedlink-sources-maram-label" is not referenced.

Hyperlink target "seedlink-sources-minilogger-label" is not referenced.

Hyperlink target "seedlink-sources-miscscript-label" is not referenced.

Hyperlink target "seedlink-sources-miscserial-label" is not referenced.

Hyperlink target "seedlink-sources-mk6-label" is not referenced.

Hyperlink target "seedlink-sources-mppt-label" is not referenced.

Hyperlink target "seedlink-sources-mseedfifo-label" is not referenced.

Hyperlink target "seedlink-sources-mseedscan-label" is not referenced.

Hyperlink target "seedlink-sources-mws-label" is not referenced.

Hyperlink target "seedlink-sources-naqs-label" is not referenced.

Hyperlink target "seedlink-sources-nmxp-label" is not referenced.

Hyperlink target "seedlink-sources-optodas-label" is not referenced.

Hyperlink target "seedlink-sources-ps2400-eth-label" is not referenced.

Hyperlink target "seedlink-sources-q330-label" is not referenced.

Hyperlink target "seedlink-sources-reftek-label" is not referenced.

Hyperlink target "seedlink-sources-sadc-label" is not referenced.

Hyperlink target "seedlink-sources-scream-label" is not referenced.

Hyperlink target "seedlink-sources-scream-ring-label" is not referenced.

Hyperlink target "seedlink-sources-vaisala-label" is not referenced.

Hyperlink target "seedlink-sources-wago-label" is not referenced.

Hyperlink target "seedlink-sources-wave24-label" is not referenced.

Hyperlink target "seedlink-sources-win-label" is not referenced.

The tool :program:`seiscomp` allows controlling your |scname| system on the
command line. As other |scname| modules it provides
options and commands, e.g., the command :command:`help`. Apply
:program:`seiscomp` to

Print

* environment variables of the installed |scname| system,
* internal |scname| variables which can be used in configurations,
* suggestions for timed automatic actions, i.e. "*conjobs*",

internal |scname| variables which can be used in configurations,

Start, stop, restart or reload single or multiple modules or all default
modules,

When executing :program:`seiscomp`, all actions refer to the |scname|
installation from within which :program:`seiscomp` is called. This allows
to refer to a default but also to any other installed |scname| system and to
operate multiple |scname| systems in parallel, e.g., for testing different
versions or for running different projects. Then give the full path to the
:program:`seiscomp` tools. Example:

   $HOME/seiscomp-test/bin/seiscomp

 is called. This allows
to refer to a default but also to any other installed 

 systems in parallel, e.g., for testing different

Use the command :command:`help` for learning about the full set of options and
other commands including examples:

 for learning about the full set of options and

Software dependencies should be installed after installation or updates of
|scname|. You may install dependencies on different levels, e.g., *base*,
*gui*, *fdswnws*, *[database]-server*. Examples:

seiscomp install-deps base
seiscomp install-deps base gui mariadb-server

Alternatively run the shell scripts for your Linux flavor and version located in
:file:`seiscomp/share/deps/`.

For making a full installation and setup follow the instructions starting
with section :ref:`installation`.

with section 

You may print the environment variables related to your considered |scname|
installation, internal |scname| variables or suggestions for timed automatic
procedures. Examples:

You may print the environment variables related to your considered 

 variables or suggestions for timed automatic

seiscomp print env
$HOME/seiscomp-test/bin/seiscomp print env
seiscomp print variables
seiscomp print crontab

Add the environment variables to your shell configuration for making them known
user wide. Internal variables are resolved when applying them in user
configurations. For adjusting, adding or removing :program:`crontab` listings
execute:

configurations. For adjusting, adding or removing 

Make a basic setup of your |scname| system interactively after installation.
This will also allow you to generate a database or to configure the connection
to an existing one. Run, e.g.

 system interactively after installation.

List modules which can be started to run as background daemon modules by
categories. Examples:

seiscomp list modules
seiscomp list enabled
seiscomp list started

Enabled modules will be started to run as a background daemon module.
You may enable or disable one or multiple modules. Examples:

seiscomp enable scautopick
seiscomp enable scautopick scautoloc
seiscomp disable scautopick scautoloc

seiscomp start scautopick scautoloc
seiscomp stop scautopick scautoloc
seiscomp restart scautopick scautoloc

In order to apply configurations, a module must be (re)started since it reads
any configuration only during startup. Restarts will create downtimes and should
be avoided as much as possible. In order to minimize downtimes, some modules
may apply changes in configuration by reloading during runtime without
restarting. For reloading you may use the command :command:`seiscomp reload`.
The application of reloading is therefore restricted to a limited range of
modules and parameters.

restarting. For reloading you may use the command 

.

Graphical modules such as :ref:`scolv` cannot be operated as background
daemon modules. Therefore, they cannot be started but they can
be :ref:`executed <sec_seiscomp_execute>`.

 cannot be operated as background
be 

When modules stop unexpectedly, they are not stopped in a clean way. Such
stopped modules may be detected and started again in order to minimize
downtimes. Apply the :command:`check` command to all or specific modules.
Examples:

downtimes. Apply the 

Instead of running daemon modules you may execute modules in a terminal and
observe the output, e.g., for debugging or for applying command-line options.
Examples:

When all relevant system environment variables point to the same |scname|
installation from where seiscomp is executed, then it is enough to execute
modules by their names replacing the above:

   scolv --debug
   scautopick --debug

When all relevant system environment variables point to the same 

List the status of all, enabled, disabled, started, or specific modules.
Examples:

seiscomp status
seiscomp status enabled
seiscomp status disabled
seiscomp status started
seiscomp status scautopick

:command:status` will report modules which terminated due to errors.

For some |scname| modules aliases can be generated allowing the separate
execution with specific configurations in parallel the original module
and even in separate pipeline with specific message groups.
Using the :command:`alias` command aliases modules can be created or removed.
Examples for creating or removing the alias :program:`l1autopick` to
:ref:`scautopick`:

 modules aliases can be generated allowing the separate
Using the 

 command aliases modules can be created or removed.
Examples for creating or removing the alias 

seiscomp alias create l1autopick scautopick
seiscomp alias remove l1autopick

When creating aliases, soft links to the original module executable files, the
default configuration and the init files are created. The alias itself is
registered in :file:`SEISCOMP_ROOT/etc/descriptions/aliases`. If a module does
not allow creating aliases a notification is printed. Example:

registered in 

. If a module does

seiscomp alias create scolv1 scolv
error: module 'scolv' not found

After creating aliases, they may be configured and operated in the same way as
the original module.

The length of alias names for modules considering
:ref:`bindings<global_bindings_config>` is strictly limited to 20 characters.

When removing aliases, all links and the alias registration are removed but
possibly existing module or binding configurations remained unchanged. The
option :option:`--interactive` allows removing these configurations
interactively.

option 

The command :command:`update-config` allows reading bindings configurations from
the standard :file:`@KEYDIR@` directory as well as inventory from
:file:`@SYSTEMCONFIGDIR@/inventory` and sending them to the messaging for
storing in the database or for generating the configuration of
:term:`standalone modules <standalone module>`:

 and sending them to the messaging for

Generation of configuration for :term:`standalone modules <standalone
module>`.

module>`.

The command can therefore be rater time consuming. For speeding up you may be
more specific:

Only update global bindings and all :term:`trunk` modules without inventory

   seiscomp update-config trunk

Update only inventory

   seiscomp update-config inventory

Update bindings of :ref:`scautopick` only

   seiscomp update-config scautopick

The command may be similarly applied to any other  module considering
bindings.

bindings.

Instead of reading bindings configurations from the standard @KEYDIR@
directory, the module :ref:`bindings2cfg` can read bindings from any key
directory and write the Config parameters to :term:`SCML` or send them to
the messaging.

directory, the module 

 can read bindings from any key
directory and write the Config parameters to 

The seiscomp shell is a special environment, e.g., allowing to control
:term:`bindings <binding>` of :term:`modules <module>` to stations.

Invoke :program:`seiscomp` along with the  :command:`shell` command to start the
shell:

seiscomp shell

  ================================================================================
  SeisComP shell

  Welcome to the SeisComP interactive shell. You can get help about
  available commands with 'help'. 'exit' leaves the shell.

  $

The full list of shell control commands are printed along with the help of the
seiscomp shell:

================================================================================
SeisComP shell

Welcome to the SeisComP interactive shell. You can get help about
available commands with 'help'. 'exit' leaves the shell.

$ help
Commands:
  list stations
    Lists all available stations keys.

  list profiles {mod}
    Lists all available profiles of a module.

...

.. [*] With this command, the flag :option:`--invert` can be used
       in order to invert the application to the specific modules. You may provide
       one or more module names. A major application is to
       restart most |scname| modules after a change in global bindings. However,
       :ref:`seedlink` and :ref:`slarchive` are not affected by global
       bindings and any downtime of these modules shall be avoided. Example:

       .. code-block:: sh

          seiscomp --invert restart seedlink slarchive

       The same procedure could be achieved without :option:`--invert` by
       explicitly stating all other modules which, however, may result in a
       long list of module names.

With this command, the flag :option:`--invert` can be used
in order to invert the application to the specific modules. You may provide
one or more module names. A major application is to
restart most |scname| modules after a change in global bindings. However,
:ref:`seedlink` and :ref:`slarchive` are not affected by global
bindings and any downtime of these modules shall be avoided. Example:

   seiscomp --invert restart seedlink slarchive

The same procedure could be achieved without :option:`--invert` by
explicitly stating all other modules which, however, may result in a
long list of module names.

 can be used
restart most 

 are not affected by global

 by

Interactive mode: Allow deleting configurations interactively when
removing aliases.

Invert the selection of the specified module names when using any of the
commands: start, stop, check, status, reload, or restart.

Define a timeout in seconds for acquiring the seiscomp lock
file, e.g., `seiscomp \-\-wait 10 update\-config`.

file, e.g., 

Too many symbol footnote references: only 1 corresponding footnotes available.

sh2proc converts `Seismic Handler <http://www.seismic-handler.org/>`_ event data to
SeisComP XML format. Data is read from input file or `stdin` if no input file is
specified.  The result is available on `stdout`.

 event data to
SeisComP XML format. Data is read from input file or 

Since Seismic Handler only specifies station and component codes, a mapping to
SeisComP network, location and channel codes is necessary. The script assumes
that the same station code is not used in different networks. In case an
ambiguous id is found a warning is printed and the first network code is used.
The channel and stream code is extracted from the dectecStream and detecLocid
configured in the global bindings. In case no configuration module is available
the first location and stream is used.

Event types given in Seismic Handler files are mapped to SeisComP event types:

.. csv-table::
   :header: "Seismic Handler", "SeisComP"

   "teleseismic quake","earthquake"
   "regional quake","earthquake"
   "local quake","earthquake"
   "quarry blast","quarry blast"
   "nuclear explosion","nuclear explosion"
   "mining event","mining explosion"

The EventID given in Seismic Handler files is mapped as a comment to the event.

Magnitude types given in Seismic Handler files are mapped to SeisComP magnitudes:

   "m","M"
   "ml","ML"
   "mb","mb"
   "ms","Ms(BB)"
   "mw","Mw"
   "bb","mB"

ML magnitudes in Seismic Handler files have no corresponding measured amplitudes.
Therefore the ML station magnitudes are converted without referencing the amplitude.

Seismic Handler uses the phase name "L" for referring to surface waves without
further specification. The phase name is kept unchanged.

Seismic Handler uses the phase name “L” for referring to surface waves without

In Seismic Handler files distances can be given in units of km or degree but in
SeisComP only degree is used. Both representations are considered for conversion.
In case of double posting preference is given to the Seismic Handler values given in km
due to their higher precision.

Seismic Handler files provide the phase picks with theoretical, measured and corrected
slowness and (back) azimuth but the pick in SeisComP knows only one value.
During conversion highest preference is given to corrected values.
The theoretical values are ignored.

The following parameters from Seismic Handler files are not considered:

Convert the Seismic Handler file `shm.evt` and writes SCML into the file
`sc.xml`. The database connection to read inventory and configuration
information is fetched from the default messaging connection.

   sh2proc shm.evt > sc.xml

. The database connection to read inventory and configuration

Read Seismic Handler data from `stdin`. Inventory and configuration information
is provided through files.

   cat shm.evt | sh2proc --inventory-db=inventory.xml --config-db=config.xml > sc.xml

. Inventory and configuration information

cat shm.evt | sh2proc --inventory-db=inventory.xml --config-db=config.xml > sc.xml

The list of parameters supported by sh2proc may be incomplete.
Read the original `format and parameter description <http://www.seismic-handler.org/wiki/ShmDocFileEvt>`_
of the SeismicHandler .evt files for providing correct input files.

Read the original 

`format and parameter description <http://www.seismic-handler.org/wiki/ShmDocFileEvt>`_

Example of a SeismicHandler `shm.evt` file with supported parameters:

Event ID               : 1170102002
Station code           : VITZ
Onset time             : 2-JAN-2017_12:25:40.415
Onset type             : emergent
Phase name             : Pg
Event Type             : mining event
Applied filter         : SHM_BP_1HZ_25HZ_3
Component              : Z
Quality number         : 2
Pick Type              : manual
Weight                 : 4
Theo. Azimuth (deg)    :   27.29
Theo. Backazimuth (deg):  207.36
Distance (deg)         :  0.122
Distance (km)          : 13.572
Magnitude ml           : 1.0
Phase Flags            : L
--- End of Phase ---

Station code           : WESF
Onset time             : 2-JAN-2017_12:25:53.714
Weight                 : 4
Theo. Azimuth (deg)    :  106.98
Theo. Backazimuth (deg):  287.91
Distance (deg)         :  0.807
Distance (km)          : 89.708
Magnitude ml           : 1.8
Mean Magnitude ml      : 1.1
Latitude               : +50.779
Longitude              :  +10.003
Depth (km)             :   0.0
Depth type             : (g) estimated
Origin time            :  2-JAN-2017_12:25:38.273
Region Table           : GEO_REG
Region ID              : 5326
Source region          : Tann, E of Fulda
Velocity Model         : deu
Location Input Params  : 20
Reference Location Name: CENTRE

slarchive connects to a SeedLink server, requests data streams and writes received
packets into directory/file structures (archives). The precise layout
of the directories and files is defined in a format string.

:ref:`SDS <slarchive-section-sds>`: The SeisComP Data Structure, default in |scname|

DLOG: The old SeisComP/datalog structure for backwards compatibility

The duration for which the data are kept in archive is controlled by the bindings
parameter :confval:`keep`. slarchive itself does not clean the archive. For removing
old data execute :file:`$SEISCOMP_ROOT/var/lib/slarchive/purge_datafiles`. A
regular clean-up is suggested by ::

parameter 

. slarchive itself does not clean the archive. For removing
old data execute 

20 3 * * * /home/sysop/seiscomp/var/lib/slarchive/purge_datafiles >/dev/null 2>&1

When starting slarchive in |scname| as a daemon module in the background SDS is
considered and the packets are written without modification: ::

 as a daemon module in the background SDS is
considered and the packets are written without modification:

Writing to **other layouts** or to **multiple archives** and other options are
supported when executing slarchive on the command line.
E.g. to write to more than one archive simply specify multiple format definitions
(or presets).

 and other options are

slarchive allows generating aliases, e.g. for running in multiple instances with
different module and bindings configurations. For creating/removing aliases use the
:ref:`seiscomp script <sec-management-commands>`, e.g. ::

SDS is the basic directory and file layout in |scname| for waveform archives. The
archive base directory is defined by :confval:`archive`. The SDS layout is defined
as:

 for waveform archives. The
archive base directory is defined by 

<SDSdir>
  + year
    + network code
      + station code
        + channel code
          + one file per day and location, e.g. NET.STA.LOC.CHAN.D.YEAR.DOY

slarchive is a :term:`standalone module` and does not inherit :ref:`global options <global-configuration>`.

Host of the Seedlink server to connect to. If the acquisition
is running on one system nothing needs to be changed.

The port of the Seedlink server to connect to. If the acquisition
is running on one system this port must match the configured
local Seedlink port.

Path to waveform archive where all data is stored. Relative paths
\(as the default\) are treated relative to the installation
directory \(\$SEISCOMP_ROOT\).

Number of records \(512 byte units\) to buffer before flushing to
disk.

The network reconnect delay \(in seconds\) for the connection
to the SeedLink server. If the connection breaks for any
reason this will govern how soon a reconnection should be
attempted. The default value is 30 seconds.

The network timeout \(in seconds\) for the connection to the
SeedLink server. If no data [or keep alive packets?] are received
in this time range the connection is closed and re\-established
\(after the reconnect delay has expired\). The default value is
600 seconds. A value of 0 disables the timeout.

Timeout for closing idle data stream files in seconds. The idle
time of the data streams is only checked when some packets has
arrived. If no packets arrived no idle stream files will be
closed. There is no reason to change this parameter except for
the unusual cases where the process is running against an open
file number limit. Default is 300 seconds.

Interval \(in seconds\) at which keepalive \(heartbeat\) packets
are sent to the server. Keepalive packets are only sent if
nothing is received within the interval. This requires a
Seedlink version >\= 3.

Path to cerificate store where all certificates and CRLs are stored. Relative
paths\(as the default\) are treated relative to the installation
If the signature check is enabled slarchive loads all files at start. The store
uses the OpenSSl store format. From the offical OpenSSL documentation:
\"The directory should contain one certificate or CRL per file in PEM format,
with a file name of the form hash.N for a certificate, or hash.rN for a CRL.
The .N or .rN suffix is a sequence number that starts at zero, and is incremented
consecutively for each certificate or CRL with the same hash value. Gaps in the
sequence numbers are not supported, it is assumed that there are no more objects
with the same hash beyond the first missing number in the sequence.The .N or .rN suffix
is a sequence number that starts at zero, and is incremented consecutively for
each certificate or CRL with the same hash value. Gaps in the sequence numbers
are not supported, it is assumed that there are no more objects with the same
hash beyond the first missing number in the sequence.\"
The hash value can be obtained as follows:

Signatures are expected to be carried in blockette 2000
as opaque data. Modes:

ignore : Signatures will be ignored and no further actions
will be taken.
warning: Signatures will be checked and all received records
which do not carry a valid signature or no signature
at all will be logged with at warning level.
skip   : All received records without a valid signature
will be ignored and will not be processed.

streams will be requested. See slarchive manpage for

Number of days the data is kept in the archive. This
requires purge_datafile to be run as cronjob.

Address \([host][:][port]\) is a required argument. It specifies the address
of the SeedLink server in host:port format. Either the host, port or both
can be omitted. If host is omitted then localhost is assumed,
i.e. ':18000' implies 'localhost:18000'. If the port is omitted
then 18000 is assumed, i.e. 'localhost' implies 'localhost:18000'.
If only ':' is specified 'localhost:18000' is assumed.

Be more verbose. This flag can be used multiple times \(\"\-v \-v\" or \"\-vv\"\)
for more verbosity. One flag: report basic handshaking \(link configuration\) details and
briefly report each packet received. Two flags: report the details of the handshaking,
each packet received and detailed connection diagnostics.

Print details of received Mini\-SEED data records. This flag can be used multiple times
\(\"\-p \-p\" or \"\-pp\"\) for more detail. One flag: a single summary line
for each data packet received. Two flags: details of the Mini\-SEED data records received,
including information from fixed header and 100\/1000\/1001 blockettes.

The network reconnect delay \(in seconds\) for the connection to the SeedLink server.
If the connection breaks for any reason this will govern how soon a reconnection should
be attempted. The default value is 30 seconds.

The network timeout \(in seconds\) for the connection to the SeedLink server. If no data
[or keep alive packets?] are received in this time range the connection is closed and
re\-established \(after the reconnect delay has expired\). The default value is 600 seconds.
A value of 0 disables the timeout.

Interval \(in seconds\) at which keepalive \(heartbeat\) packets are sent to the server.
Keepalive packets are only sent if nothing is received within the interval. Requires SeedLink
version >\= 3.

During client shutdown the last received sequence numbers and time stamps \(start times\)
for each data stream will be saved in this file. If this file exists upon startup the information
will be used to resume the data streams from the point at which they were stopped. In this way the
client can be stopped and started without data loss, assuming the data are still available on the
server. If an interval is specified the state will be saved every interval in that packets are
received. Otherwise the state will be saved only on normal program termination.

During client shutdown the last received sequence numbers and time stamps (start times)

Timeout for closing idle data stream files in seconds. The idle time of the data streams is
only checked when some packets has arrived. If no packets arrived no idle stream files will be
closed. There is no reason to change this parameter except for the unusual cases where the
process is running against an open file number limit. Default is 300 seconds.

Configure the connection in \"dial\-up\" mode. The remote server will close the connection when
it has sent all of the data in its buffers for the selected data streams. This is opposed to
the normal behavior of waiting indefinitely for data.

Future check initially. Check the last Mini\-SEED data record in an existing archive file
and do not write new data to that file if it is older than a certain overlap. The default
overlap limit is 2 seconds; the overlap can be specified by appending a colon and the desired
overlap limit in seconds to the option. If the overlap is exceeded an error message will be
logged once for each time the file is opened. This option makes sense only for archive formats
where each unique data stream is written to a unique file \(e.g. SDS format\). If a data stream
is closed due to timeout \(see option \-i\) the initial future check will be preformed when the
file is re\-opened.

Future check continuously. Available only for archive Mini\-SEED data records. Check if the
first sample of the record is older than the last sample of the previous record for a given
archive file, within a certain overlap. The default overlap limit is 2 seconds; the overlap
can be specified by appending a colon and the desired overlap limit in seconds to the option.
If the overlap is exceeded an error message will be logged once until either a non\-overlapping
packet is received or a new archive file is used. This option only makes sense for archive
formats where each unique data stream is written to a unique file \(e.g. SDS format\).

If specified, all received packets \(Mini\-SEED records\) will be appended to a directory\/file
structure defined by format. All directories implied in the format string will be created if
necessary. The option may be used multiple times to write received packets to multiple archives.
See the section \"archiving data\".

If specified, all received packets \(Mini\-SEED records\) will be saved into a Simple Data
Structure \(SDS\) dir\/file structure starting at the specified directory. This directory and
all subdirectories will be created if necessary. This option is a preset of the '\-A' option.
The SDS dir\/file structure is:

If specified, all received waveform data packets \(Mini\-SEED data records\) will be saved into
a Buffer of Uniform Data \(BUD\) dir\/file structure starting at the specified directory.
This directory and all subdirectories will be created if necessary. This option is a preset
of the '\-A' option. The BUD dir\/file structure is:

If specified, all received packets \(Mini\-SEED data records\) will be saved into an old style
SeisComP\/datalog dir\/file structure starting at the specified directory. This directory and
The DLOG dir\/file structure is:

The given file contains a list of streams. This option implies multi\-station mode.
The format of the stream list file is given below in the section \"stream list file\".

Defining default selectors. If no multi\-station data streams are configured these selectors
will be used for uni\-station mode. Otherwise these selectors will be used when no selectors
are specified for a given stream with the '\-S' or '\-l' options.

The connection will be configured in multi\-station mode with optional SeedLink selectors
for each station, see examples below. Stream should be provided in NET_STA format. If no
selectors are provided for a given stream, the default selectors will be used, if defined.

The connection will be configured in multi-station mode with optional SeedLink selectors

Specifying a time window for the data streams that is applied by the server. The format
for both times is year,month,day,hour,min,sec; for example: \"2002,08,05,14,00:2002,08,05,14,15,00\".
The end time is optional but the colon must be present. If no end time is specified the
server will send data indefinitely. This option will override any saved state information.

slinktool connects to a :ref:`seedlink` server and queries the server for information
or requests data using uni-station or multi-station mode and prints information
about the packets received. All received packets can optionally be dumped to a
single file or saved in custom directory and file layouts.

 server and queries the server for information

The following would connect to a SeedLink server at slink.host.com port 18000 and
configure the link in all-station/uni-station mode, exactly which data are received
depends on the data being served by the SeedLink server on that particular port.
Additionally, all of the received packets are appended to the file 'data.mseed'
and each packet received is reported on the standard output. ::

Additionally, all of the received packets are appended to the file ‘data.mseed’
and each packet received is reported on the standard output.

The '-s' argument could be used to indicate selectors to limit the type of packets
sent by the SeedLink server (without selectors all packet types are sent). The
following would limit this connection to BHZ channel waveform data with a location
code of 10 (see an explanation of SeedLink selectors below). Additionally another
verbose flag is given, causing slinktool to report detailed header information
from data records. ::

The ‘-s’ argument could be used to indicate selectors to limit the type of packets
from data records.

The following example would connect to a SeedLink server on localhost port 18010
and configure the link in multi-station mode. Each station specified with the '-S'
argument will be requested, optionally specifying selectors for each station. ::

and configure the link in multi-station mode. Each station specified with the ‘-S’
argument will be requested, optionally specifying selectors for each station.

This would request all data from the GEOFON station WLF as no selectors were indicated,
MedNet station AQU with location code 00 and all streams and waveform data from the
IU network station KONO from stream BHZ.
A variety of different data selections can be made simultaneously.

Horizontal BH channels, data only: ::

   -s 'BHE.D BHN.D' -S 'GE\_STU,GE\_MALT,GE\_WLF'

Vertical channels only: ::

   -s BHZ -S GE\_STU,GE\_WLF,GE\_RUE,GE\_EIL

Some SeedLink implementations support wildcarding of the network and station codes.
If this is the case, the only two wildcard characters recognized are '\*' for
one or more characters and '?' for any single character.

If this is the case, the only two wildcard characters recognized are ‘*’ for
one or more characters and ‘?’ for any single character.

As an example, all US network data can be requested using the following syntax ::

As an example, all US network data can be requested using the following syntax

SeedLink selectors are used to request specific types of data within a given data
stream, in effect limiting the default action of sending all data types.
A data packet is sent to the client if it matches any positive selector
(without leading "!") and doesn't match any negative selectors (with a leading "!").
The general format of selectors is LLSSS.T, where LL is location, SSS is channel
and T is type (one of [DECOTL] for Data, Event, Calibration, Blockette, Timing,
and Log records). "LL", ".T", and "LLSSS." can be omitted, implying anything in
that field. It is also possible to use "?" in place of L and S as a single character
wildcard. Multiple selectors are separated by space(s).

(without leading “!”) and doesn’t match any negative selectors (with a leading “!”).
and Log records). “LL”, “.T”, and “LLSSS.” can be omitted, implying anything in
that field. It is also possible to use “?” in place of L and S as a single character

BH?          - BHZ, BHN, BHE (all record types)
00BH?.D      - BHZ, BHN, BHE with location code '00' (data records)
BH? !E       - BHZ, BHN, BHE (excluding detection records)
BH? E        - BHZ, BHN, BHE & detection records of all channels
!LCQ !LEP    - exclude LCQ and LEP channels
!L !T        - exclude log and timing records

Using the '-A format' option received data can be saved in a custom directory and
file structure. The archive format argument is expanded for each packet processed
using the following flags: ::

Using the ‘-A format’ option received data can be saved in a custom directory and
using the following flags:

n : network code, white space removed
s : station code, white space removed
l : location code, white space removed
c : channel code, white space removed
Y : year, 4 digits
y : year, 2 digits zero padded
j : day of year, 3 digits zero padded
H : hour, 2 digits zero padded
M : minute, 2 digits zero padded
S : second, 2 digits zero padded
F : fractional seconds, 4 digits zero padded
% : the percent (%) character
# : the number (#) character
t : single character type code:
      D - waveform data packet
      E - detection packet
      C - calibration packet
      T - timing packet
      L - log packet
      O - opaque data packet
      U - unknown/general packet
      I - INFO packet
      ? - unidentifiable packet

The flags are prefaced with either the % or # modifier. The % modifier indicates
a defining flag while the # indicates a non-defining flag. All received packets
with the same set of defining flags will be saved to the same file. Non-defining
flags will be expanded using the values in the first packet received for the
resulting file name.

resulting in hour length files because the minute and second are specified with the non-defining modifier. The minute and second fields are from the first packet in the file.

The stream list file used with the '-l' option is expected to define a data stream
on each line. The format of each line is: ::

The stream list file used with the ‘-l’ option is expected to define a data stream
on each line. The format of each line is:

The selectors are optional. If default selectors are also specified (with the '-s' option),
they they will be used when no selectors are specified for a given stream.

The selectors are optional. If default selectors are also specified (with the ‘-s’ option),

----  Begin example file -----
# Comment lines begin with a '#' or '\*'
# Example stream list file for use with the -l argument of slclient or
# with the sl\_read\_streamlist() libslink function.
GE ISP  BH?.D
NL HGN
MN AQU  BH? HH?
----  End example file -----

All diagnostic output from slinktool is printed to standard error (stderr).
Exceptions are when

* Printing miniSEED packet details with the *-p* option.
* Printing unpacked samples with the *-u* option.
* Printing the raw or formatted responses to INFO requests.

Original source code: https://github.com/iris-edu/slinktool/tree/master/doc

i.e. ':18000' implies 'localhost:18000'. If the port is omitted,
If only ':' is specified, 'localhost:18000' is assumed.

Address ([host][:][port]) is a required argument. It specifies the address
i.e. ‘:18000’ implies ‘localhost:18000’. If the port is omitted,
then 18000 is assumed, i.e. ‘localhost’ implies ‘localhost:18000’.
If only ‘:’ is specified, ‘localhost:18000’ is assumed.

The network reconnect delay for the connection to the SeedLink server.
be attempted.

Interval at which keepalive \(heartbeat\) packets are sent to the server.
Keepalive packets are only sent if nothing is received within the interval.

necessary.

*slmon* collects waveform QC parameters from a configured :ref:`seedlink` Server
and creates static HTML websites for their visualization. :ref:`Station summeries<fig-slmon>` and
:ref:`per-station channels views<fig-slmon-stat>` are available.

 Server
and creates static HTML websites for their visualization. 

Adjust the module configuration parameters of *slmon* to set the seedlink Server,
the output directory for the created webpages and other parameters.

 to set the seedlink Server,

Create and adjust binding profiles and station bindings for *slmon* to activate
the monitoring of the desired networks and stations.

 to activate

Start *slmon*. This step reads the QC parameters and creates the static webpage.
The webpage is not automatically updated.

..  code-block:: sh

    seiscomp update-config
    seiscomp start slmon

. This step reads the QC parameters and creates the static webpage.

Restart *slmon* in order to upate the webpage. The restart can be
performed by a the regular system check scheduled by a crontab entry.

The example below shows a crontab entry to update the webpage
generated by *slmon* every 3 minutes:

    */3 * * * * /home/sysop/seiscomp/bin/seiscomp check slmon >/dev/null 2>&1

.. note::

   The crontab entry can be generated and added automatically
   using the seiscomp script:

   ..  code-block:: sh

      seiscomp print crontab | crontab -

 in order to upate the webpage. The restart can be

generated by 

*/3 * * * * /home/sysop/seiscomp/bin/seiscomp check slmon >/dev/null 2>&1

The crontab entry can be generated and added automatically
using the seiscomp script:

   seiscomp print crontab | crontab -

A comprehensive example for monitoring many stations of a large number of networks
is provided by `GEOFON <http://geofon.gfz-potsdam.de/waveform/status/>`_ at
`GFZ Potsdam <http://www.gfz-potsdam.de>`_, Germany. A simple example of a website
create by *slmon* is given in the :ref:`figures below<fig-slmon>`.

is provided by 

.. figure:: media/slmon.png

   Example of a website with the station summary created by *slmon*.

Example of a website with the station summary created by *slmon*.

.. figure:: media/slmon-stat.png

   Example of a website with a per-station channel view created by *slmon*.

Example of a website with a per-station channel view created by *slmon*.

Example of a website with a per-station channel view created by 

slmon is a :term:`standalone module` and does not inherit :ref:`global options <global-configuration>`.

Refresh interval of the generated web page used by the browser.
The interval should be similar to the interval for starting slmon.
If empty, the web page must be manually refreshed from within
the browser.

URL to live seismograms. %s will be replaced by station name.
Not mandatory.

The tab2inv program is part of the nettab package distributed together with the
|scname| package. The nettab is a text-based format developed inside the
GEOFON data center to describe seismological instruments responses information.
The tab2inv program can generate |scname| inventory files by parsing
´´tab files´´ as described by in the nettab format.

 package. The nettab is a text-based format developed inside the
The tab2inv program can generate 

 inventory files by parsing

This program can read a set of tab files in the nettab format,
verify their contents and generate inventory for the stations
described in them.

Indicate the filter folder. The filter folder is where the program will search for the files indicated by the Ff and If lines.

Indicate a folder containing a set of XML files that contains the SeisComp3 inventory files that will be used to resolve the station groups. Normally this folder is seiscomp\/etc\/inventory.

Don't stop on errors of individual files. Try to perform the requested task even if some files contain formatting errors.

Don’t stop on errors of individual files. Try to perform the requested task even if some files contain formatting errors.

This option instruct the program to generate the XML document in the end of processing. When you don't supply this option the file is just parsed and loaded into objects in the memory.

This option instruct the program to generate the XML document in the end of processing. When you don’t supply this option the file is just parsed and loaded into objects in the memory.

Perform some tests after the files can be loaded. The tests include testing that the instruments all can be resolved and has no unused instruments supplied.

Use this option to indicate a default file. A default file is a file containing normally a set of rules for Network \(Na\), Stations \(Sa\) and Instruments \(Ia\) that are applied for every object created before the attributes specified in the file are applied. This option help sto set parameters that you want to be set on all objects.

Use this option to indicate the output filename for the XML file. If not indicated the program will write the output file to STDOUT.

Allow prefixing of the instrument \(Datalogger or Sensor\) name attribute on the inventory generated by a prefix. This option is normally used when you want to convert many networks that share the same instrumentation in different calls of the program. In each call of the program you can supply the network code and year as padding to guarantee that the instruments generated in both runs of the program will have different name values that are used as Key on the SeisComp3 inventory.

Allow prefixing of the instrument (Datalogger or Sensor) name attribute on the inventory generated by a prefix. This option is normally used when you want to convert many networks that share the same instrumentation in different calls of the program. In each call of the program you can supply the network code and year as padding to guarantee that the instruments generated in both runs of the program will have different name values that are used as Key on the SeisComp3 inventory.

Sometimes small tweaks need to be made to inventory.
The tabinvmodifier program reads a *rules file* (a network tab file without any station lines) and applies network and station attributes to existing inventory. This method can be used to modify attributes in inventory that originate from dataless SEED or other sources. It can change inventory at the network, station, location, and channel level; it can also change sensor and datalogger attributes (Ia lines).
Currently (2016) changes to station groups (virtual networks) aren't supported.

The tabinvmodifier program reads a 

 (a network tab file without any station lines) and applies network and station attributes to existing inventory. This method can be used to modify attributes in inventory that originate from dataless SEED or other sources. It can change inventory at the network, station, location, and channel level; it can also change sensor and datalogger attributes (Ia lines).
Currently (2016) changes to station groups (virtual networks) aren’t supported.

For details of what can go in a tab file, see
`NETTAB File Format Description <http://www.seiscomp.org/wiki/doc/special/nettabv2>`_.

`NETTAB File Format Description <http://www.seiscomp.org/wiki/doc/special/nettabv2>`_

tabinvmodifier can either write directly to the inventory in an SC3 database, or dump its output as an XML file.
If output is as an XML file, typically this would then be moved to ~/seiscomp/etc/inventory, and then loaded into the database with `seiscomp update-config`.

If output is as an XML file, typically this would then be moved to ~/seiscomp/etc/inventory, and then loaded into the database with 

Set network-level attributes. Suppose the file `ge.rules` contains

   Nw: GE 1993/001
   Na: Description="GEOFON Program, GFZ Potsdam, Germany"
   Na: Remark="Access to Libyan stations and Spanish HH streams limited"
   Na: Type=VBB

The first line (Nw:) specifies the network, including its start date, that these rules apply to.
The following lines starting with Na: provide values for the description, remark, and type attributes to be written into the new inventory.
Note the capital letter on the attributes Description, Remark, Type, etc.

We can use this rules file to change attributes of the GE network:

   # Apply changes to database directly
   $ tabinvmodifier -r ge.rules

   # Apply changes to XML file
   $ tabinvmodifier -r ge.rules --inventory-db ge.xml -o ge-mod.xml

The resulting inventory now contains:

.. code-block:: xml

 <network publicID="Network#20130513163612.389203.2" code="GE">
   <start>1993-01-01T00:00:00.0000Z</start>
   <description>GEOFON Program, GFZ Potsdam, Germany</description>
   <institutions>GFZ/partners</institutions>
   <region>euromed global</region>
   <type>VBB</type>
   <netClass>p</netClass>
   <archive>GFZ</archive>
   <restricted>false</restricted>
   <shared>true</shared>
   <remark>access to Libyan stations and Spanish HH streams limited</remark>
   <station publicID="Station#20130620185450.488952.190" code="MSBI" archiveNetworkCode="GE">
     <start>2013-06-16T00:00:00.0000Z</start>

Other attributes present in inventory are left unchanged.

Nw: GE 1993/001
Na: Description="GEOFON Program, GFZ Potsdam, Germany"
Na: Remark="Access to Libyan stations and Spanish HH streams limited"
Na: Type=VBB

# Apply changes to database directly
$ tabinvmodifier -r ge.rules

# Apply changes to XML file
$ tabinvmodifier -r ge.rules --inventory-db ge.xml -o ge-mod.xml

<network publicID="Network#20130513163612.389203.2" code="GE">
  <start>1993-01-01T00:00:00.0000Z</start>
  <description>GEOFON Program, GFZ Potsdam, Germany</description>
  <institutions>GFZ/partners</institutions>
  <region>euromed global</region>
  <type>VBB</type>
  <netClass>p</netClass>
  <archive>GFZ</archive>
  <restricted>false</restricted>
  <shared>true</shared>
  <remark>access to Libyan stations and Spanish HH streams limited</remark>
  <station publicID="Station#20130620185450.488952.190" code="MSBI" archiveNetworkCode="GE">
    <start>2013-06-16T00:00:00.0000Z</start>

Changing location codes. (Thanks to Andres H. for this example.)
To replace an empty location code for station "KP.UPNV" with location code "00", together with its description and place.
The rules file is:

 Nw: KP 1980/001
 Sa: Description="GLISN Station Upernavik, Greenland" UPNV
 Sa: Place="Upernavik, Greenland" UPNV
 Sa: Code="00" UPNV,

 <network publicID="Network#20140603153203.17936.2" code="KP">
   <start>1980-01-01T00:00:00.0000Z</start>
   ...
   <station publicID="Station#20140603153203.179738.3" code="UPNV">
     <start>2013-08-01T00:00:00.0000Z</start>
     <description>GLISN Station Upernavik, Greenland</description>
     <latitude>72.7829</latitude>
     <longitude>-56.1395</longitude>
     <elevation>38</elevation>
     <place>Upernavik, Greenland</place>
     <affiliation>GLISN</affiliation>
     ...
     <sensorLocation publicID="SensorLocation#20140603153203.181119.4" code="00">
       <start>2013-08-01T00:00:00.0000Z</start>
     ...
    </station>
  </network>

To replace an empty location code for station “KP.UPNV” with location code “00”, together with its description and place.

Nw: KP 1980/001
Sa: Description="GLISN Station Upernavik, Greenland" UPNV
Sa: Place="Upernavik, Greenland" UPNV
Sa: Code="00" UPNV,

<network publicID="Network#20140603153203.17936.2" code="KP">
  <start>1980-01-01T00:00:00.0000Z</start>
  ...
  <station publicID="Station#20140603153203.179738.3" code="UPNV">
    <start>2013-08-01T00:00:00.0000Z</start>
    <description>GLISN Station Upernavik, Greenland</description>
    <latitude>72.7829</latitude>
    <longitude>-56.1395</longitude>
    <elevation>38</elevation>
    <place>Upernavik, Greenland</place>
    <affiliation>GLISN</affiliation>
    ...
    <sensorLocation publicID="SensorLocation#20140603153203.181119.4" code="00">
      <start>2013-08-01T00:00:00.0000Z</start>
    ...
   </station>
 </network>

:program:`tabinvmodifier { -r | --rules } {rules file} [options]`

Output XML filename. Without an output file, tabinvmodifier will attempt to write to the local SeisComp3 database.

Input file containing inventory. If this option is given, an output file must be provided with `\-\-output`.

Input file containing inventory. If this option is given, an output file must be provided with 

fdsnxml2inv

* Fix samplerate conversion from double to fraction.

fdsnws

* Fix data availability sort for Python >= 3.13.
* Fix conditional station requests. Requests involving the
  If-Modified-Since header failed since Twisted
  version 24.7. The http.stringToDatetime() now requires a
  byte string.

Fix conditional station requests. Requests involving the
If-Modified-Since header failed since Twisted
version 24.7. The http.stringToDatetime() now requires a
byte string.

trunk

* Fix LOCSAT station correction file lookup if ``SEISCOMP_LOCSAT_TABLE_DIR``
  environment variable is being used.
* Decode tokens when parsing a URL.

Fix LOCSAT station correction file lookup if ``SEISCOMP_LOCSAT_TABLE_DIR``
environment variable is being used.

scevent

* Provide optional REST API to return the target event an origin would be
  associated to.

Provide optional REST API to return the target event an origin would be
associated to.

scevent

* Read ``eventAssociation.minimumScore`` from configuration.

trunk

* Fix crash with empty filter parameter list and newer
  C++ compiler versions.
* Do not call combined:// real-time recordstream with zero
  requests.

Fix crash with empty filter parameter list and newer
C++ compiler versions.

Do not call combined:// real-time recordstream with zero
requests.

requests.

scolv

* Attempt to fix a crash that is indicated by the terminal output:
  .. code-block::

     QThread: Destroyed while thread is still running

Attempt to fix a crash that is indicated by the terminal output:
.. code-block::

   QThread: Destroyed while thread is still running

.. code-block:

scconfig

* Allow parenthesis as profile names, e.g. for amplitude
  profiles.

Allow parenthesis as profile names, e.g. for amplitude
profiles.

profiles.

NonLinLoc locator plugin

* Allow ``SAVE_NLLOC_EXPECTATION`` in NLL configuration
  files.

LocSAT

* Fix bug when a function with only one sample is
  interpolated. That usually lead to location
  errors such as "SVD routine can't decompose matrix".

Fix bug when a function with only one sample is
interpolated. That usually lead to location
errors such as "SVD routine can't decompose matrix".

errors such as “SVD routine can’t decompose matrix”.

trunk

* Fix crash if a transfer function is created from a poles and zeros
  response with either empty poles or empty zeros caused by a certain
  compiler version and configuration.

Fix crash if a transfer function is created from a poles and zeros
response with either empty poles or empty zeros caused by a certain
compiler version and configuration.

trunk

* Fix QuakeML NodalPlanes export: add ``preferredPlane`` attribute.
* Fix crash when serializing empty array as binary streams. This
  crash occurs only on some target builds caused by a certain

Fix QuakeML NodalPlanes export: add ``preferredPlane`` attribute.

Fix crash when serializing empty array as binary streams. This
crash occurs only on some target builds caused by a certain

LocSAT

* Update PKKP table
* Add PKiKP and PKIKP table
* Add following phases to list of supported phases for which
  travel time tables exist (iasp91) or which are assigned by
  scautoloc: PKiKP, PKIKP, PKKP, pPKPab, pPKPbc, pPKPdf,
  ScP, SKKP, SKP, SKSac, SKSdf, sPKPab, sPKPbc,
  sPKPdf, sS

Add following phases to list of supported phases for which
travel time tables exist (iasp91) or which are assigned by
scautoloc: PKiKP, PKIKP, PKKP, pPKPab, pPKPbc, pPKPdf,
ScP, SKKP, SKP, SKSac, SKSdf, sPKPab, sPKPbc,
sPKPdf, sS

sPKPdf, sS

GUI

* Fix segmentation fault if the magnitude table should be sorted and
  station magnitudes could not be found in the database or memory.

Fix segmentation fault if the magnitude table should be sorted and
station magnitudes could not be found in the database or memory.

trunk

* Fix URL parsing to allow empty hosts. This is
  in particular important to allows database
  URIs such as ``sqlite3:///path/to/db``.

Fix URL parsing to allow empty hosts. This is
in particular important to allows database
URIs such as ``sqlite3:///path/to/db``.

URIs such as 

This is a security update. If you are running scmaster exposed to
the public internet then upgrade! Previous versions allowed to
access files outside the configured media directory if a path was
requested like ``http://localhost:18180/../../../../path/to/other/file``.

requested like 

trunk

* Resolve database multithreading access issue which did
  not affect current applications.
* Fix security issue with scmaster: scmaster HTTP interface
  returned files outside its media directory if requested.

Resolve database multithreading access issue which did
not affect current applications.

Fix security issue with scmaster: scmaster HTTP interface
returned files outside its media directory if requested.

packaging

* Add LICENSE and LICENSE.html to the package (again)

This version converts the database schema to version 0.13.2.
The datamodel has not changed only the representations of
datamodel attributes in the database. Specifically we convert
Comment.text and JournalEntry.parameters from blob to text fields
which represents what is actually stored there.
Furthermore PostgreSQL does not accept certain input characters
when dealing with blobs which where actually "misused" as large strings.
There are other places where this statement holds as well but they
will be tackled in future updates.

when dealing with blobs which where actually “misused” as large strings.

trunk

* Add missing migration scripts to database schema 0.13.2

trunk

* ITAPER(): Support time spans with double precision, update filter
  documentation.
* Add locrouter plugin, see
  https://github.com/SeisComP/common/blob/master/plugins/locator/router/descriptions/global_locrouter.rst.
* Add option ``amplitudes.[type].considerUnusedArrivals`` which if enabled
  considers stations with unused (disabled) arrivals for amplitude and
  implicitly magnitude computations. Affects scamp, scmag and scolv.
* Add router locator.

  * The RouterLocator is a meta locator which selects an actual
    locator based on region profiles configured in GeoJSON or BNA
    files.
  * The locator supports both, the initial location based on a pick
    set and the relocation based on an existing origin. In case no
    origin is available an initial solution is calculated by a
    configurable locator followed by a relocation configured through
    region profiles.

ITAPER(): Support time spans with double precision, update filter
documentation.

Add locrouter plugin, see
https://github.com/SeisComP/common/blob/master/plugins/locator/router/descriptions/global_locrouter.rst.

Add option ``amplitudes.[type].considerUnusedArrivals`` which if enabled
considers stations with unused (disabled) arrivals for amplitude and
implicitly magnitude computations. Affects scamp, scmag and scolv.

 which if enabled

Add router locator.

* The RouterLocator is a meta locator which selects an actual
  locator based on region profiles configured in GeoJSON or BNA
  files.
* The locator supports both, the initial location based on a pick
  set and the relocation based on an existing origin. In case no
  origin is available an initial solution is calculated by a
  configurable locator followed by a relocation configured through
  region profiles.

The RouterLocator is a meta locator which selects an actual
locator based on region profiles configured in GeoJSON or BNA
files.

The locator supports both, the initial location based on a pick
set and the relocation based on an existing origin. In case no
origin is available an initial solution is calculated by a
configurable locator followed by a relocation configured through
region profiles.

ql2sc

* Add FocalMechanismReference to event for the preferred focal mechanism to
  force association.

Add FocalMechanismReference to event for the preferred focal mechanism to
force association.

scolv

* Set picker distance spinbox precision to 1 decimal.
* Fix bug in picker when hidden unassociated picks become visible again after
  transferring a solution to the locator window.
* If ``olv.locator.presetFromOrigin = true`` then the locator will be selected
  according to the methodID and earthModelID. If that is not found then
  the default locator will be set again rather than keeping the last selection.
* Set OriginLocatorView depth type to "depth type set by locator" when
  presetFromOrigin is true and the depth type is unset, resetting the state of
  the origin set before.

Fix bug in picker when hidden unassociated picks become visible again after
transferring a solution to the locator window.

If ``olv.locator.presetFromOrigin = true`` then the locator will be selected
according to the methodID and earthModelID. If that is not found then
the default locator will be set again rather than keeping the last selection.

 then the locator will be selected

Set OriginLocatorView depth type to "depth type set by locator" when
presetFromOrigin is true and the depth type is unset, resetting the state of
the origin set before.

Set OriginLocatorView depth type to “depth type set by locator” when

* Set default start date to 1902-01-01 rather than 1980-01-01 if a start
  date is not specified for the StationXML node.

Set default start date to 1902-01-01 rather than 1980-01-01 if a start
date is not specified for the StationXML node.

iLoc

* When reading a local velocity model file, If CONRAD is not specified,
  the index of the Conrad discontinuity was not set properly, therefore iLoc
  assumed the very first depth as the Conrad thus preventing the calculation
  of Pg/Sg phases. The calculation of travel times from a local velocity model
  was restricted to up to 6 degree distance.
  The Conrad discontinuity is no longer set to the surface when CONRAD is not
  specified in the local velocity model. Travel-time calculations from local
  velocity models now extended to 10 degrees.
* Add ``iLoc.usePickUncertainties`` and ``iLoc.defaultTimeError`` to description.

When reading a local velocity model file, If CONRAD is not specified,
the index of the Conrad discontinuity was not set properly, therefore iLoc
assumed the very first depth as the Conrad thus preventing the calculation
of Pg/Sg phases. The calculation of travel times from a local velocity model
was restricted to up to 6 degree distance.
The Conrad discontinuity is no longer set to the surface when CONRAD is not
specified in the local velocity model. Travel-time calculations from local
velocity models now extended to 10 degrees.

Add ``iLoc.usePickUncertainties`` and ``iLoc.defaultTimeError`` to description.

scmaster

* Fix MYSQL utf8mb4 collation: the database setup allows to define
  the database character set.
  The option 'utf8mb4' did not define a collation. The default
  collation for utf8mb4 is typically 'utf8mb4_general_ci' which
  is case insensitive. This results in possible public id
  collisions. This change explicitly set the collation to
  'utf8mb4_bin'.

Fix MYSQL utf8mb4 collation: the database setup allows to define
the database character set.
The option 'utf8mb4' did not define a collation. The default
collation for utf8mb4 is typically 'utf8mb4_general_ci' which
is case insensitive. This results in possible public id
collisions. This change explicitly set the collation to
'utf8mb4_bin'.

The option ‘utf8mb4’ did not define a collation. The default
collation for utf8mb4 is typically ‘utf8mb4_general_ci’ which
‘utf8mb4_bin’.

bindings2cfg

* Fix broken offline mode when ``--module-name`` is not provided.

Fix broken offline mode when ``--module-name`` is not provided.

scolv

* Fix mb magnitude computation in amplitude review window
  which showed magnitudes based on uncorrected amplitude
  values.

Fix mb magnitude computation in amplitude review window
which showed magnitudes based on uncorrected amplitude
values.

values.

seiscomp

* Always remove run- and pid-file upon seiscomp stop.
* Do not resolve and remove configuration variables in ``global.cfg``
  after ``seiscomp setup``, e.g. ``plugins = ${plugins}, abc``.
* Fix PostgreSQL database setup script which caused an error if the
  configured user does not yet exists as database role.
* Fix MYSQL setup script escape warnings.

Do not resolve and remove configuration variables in ``global.cfg``
after ``seiscomp setup``, e.g. ``plugins = ${plugins}, abc``.

Fix PostgreSQL database setup script which caused an error if the
configured user does not yet exists as database role.

trunk

* Allow creating amplitude aliases by configuration of ``amplitudes.aliases``
  in global module configuration and amplitude type profiles in global
  bindings.
* Add filter DURATION().
* Allow to disable SQLite3 disc syncrhronization to decrease time needed to
  save data in an SQLite3 database: ``sqlite3:///path/to/file?sync=false``.
* Add support for all synchronous flags of SQLite3 (``sync=[normal|full|extra]``).

Allow creating amplitude aliases by configuration of ``amplitudes.aliases``
in global module configuration and amplitude type profiles in global
bindings.

bindings.

Allow to disable SQLite3 disc syncrhronization to decrease time needed to
save data in an SQLite3 database: ``sqlite3:///path/to/file?sync=false``.

save data in an SQLite3 database: 

Add support for all synchronous flags of SQLite3 (``sync=[normal|full|extra]``).

scolv

* Replace operator comment input control with a text edit control which
  allows new lines. Furthermore the restriction of 160 characters has been
  removed from the input controls for operator comment and event name.
* Set spin distance precision to 1 decimal place in picker and amplitude
  picker.
* Increase number of visible event types in dropdown to 20 (default=10).
* Ensure all commonEventTypes are visible in event type dropdown.
* Fix initial locator profile parameter setup in locator setup window.
* Fix consistency of OriginLocatorView and PickerView with weight 0 arrivals.

Replace operator comment input control with a text edit control which
allows new lines. Furthermore the restriction of 160 characters has been
removed from the input controls for operator comment and event name.

Set spin distance precision to 1 decimal place in picker and amplitude
picker.

Increase number of visible event types in dropdown to 20 (default=10).

Fix initial locator profile parameter setup in locator setup window.

Fix consistency of OriginLocatorView and PickerView with weight 0 arrivals.

scrttv

* Allow the configuration of ``filters`` with filter names displayed in the
  filter selection menu.
* Change sorting w.r.t. location and channel.

Allow the configuration of ``filters`` with filter names displayed in the
filter selection menu.

* Add inconsistency warning with decimation stages.
* Derive stream sampling rate from decimation stages if not given
  explicitly.

Derive stream sampling rate from decimation stages if not given
explicitly.

scautopick

* Add configuration parameters ``thresholds.minDuration`` and
  ``thresholds.maxDuration`` for constraining pick generation.
* Allow adding custom comments to picks which can be evaluated by other
  modules. Requires the parameters ``comment.ID`` and ``comment.text`` to be
  configured.
* Fix crash in debug output.
* Add duration comment to pick of ``thresholds.maxDuration`` is configured.

Add configuration parameters ``thresholds.minDuration`` and
``thresholds.maxDuration`` for constraining pick generation.

Allow adding custom comments to picks which can be evaluated by other
modules. Requires the parameters ``comment.ID`` and ``comment.text`` to be

modules. Requires the parameters 

Add duration comment to pick of ``thresholds.maxDuration`` is configured.

scevent

* Add new plugin "evType" for setting event types based on comments of
  picks.
* Read and write journals with ``--ep``.

Add new plugin "evType" for setting event types based on comments of
picks.

Add new plugin “evType” for setting event types based on comments of
picks.

scquery

* Fix query in documentation.
* Report if query does not require additional parameters.

scinv

* In check mode report streams without reference to data logger.
* Update table of checked objects in documentation.

scxmlmerge

* Add support for journaling and command-line option ``--journaling``.
* Allow ignoring empty or other bad files by new command-line option
  ``--ignore-bad-files``.

Add support for journaling and command-line option ``--journaling``.

Allow ignoring empty or other bad files by new command-line option
``--ignore-bad-files``.

GUI

* Fix rendering of line styles in map legends.
* Fix rendering of geofeature names when a feature is wrapped on the map.

Fix rendering of geofeature names when a feature is wrapped on the map.

iLoc

* Update documentation.
* Add scripts for installing iLoc auxiliary files with
  ``seiscomp install-deps iloc``.

Add scripts for installing iLoc auxiliary files with
``seiscomp install-deps iloc``.

StdLoc

* Refuse locating with less than 4 picks.
* Improve parameter descriptions.

trunk

* Filter ``INT`` can be used without an argument (default 0).
* Add more filters: SUM, DT and SR.
* Allow negative frequency values for ``BW*`` and ``BPENV`` which
  resolve to ``-freq * fsamp``.
* Remove deprecated module from ``access.py``.
* Read homogeneous travel time configuration from application
  configuration.
* Fix unit conversion for confidenceEllipsoid in QuakeML exporter.
* Improve handling of connection errors in PostgreSQL database plugin.

Allow negative frequency values for ``BW*`` and ``BPENV`` which
resolve to ``-freq * fsamp``.

Read homogeneous travel time configuration from application

Fix unit conversion for confidenceEllipsoid in QuakeML exporter.

Improve handling of connection errors in PostgreSQL database plugin.

amplitudes

* If IASPEI mode is enabled then Ms(BB) checks the period to be in the
  valid range of (3, 60).
* Fix crash in MLh if maxDepth is set greater than DEPTH_MAX.

If IASPEI mode is enabled then Ms(BB) checks the period to be in the
valid range of (3, 60).

GUI

* The commit with options dialog removes the "Fix magnitude type" checkbox
  and replaces it with the magnitude type dropdown. This affects the
  custom commit buttons when activated in combination with SHIFT or if
  the profile asks for confirmation. The configured preferred magnitude
  type will be preselected in the dropdown list.
* Fix background rendering of trace widget under some conditions
* Sychronize XML defaults with event list.
* Do not show tooltips for hidden trace widget markers.
* Add Pick.time.confidenceLevel to pick tooltip of the waveform picker.

The commit with options dialog removes the "Fix magnitude type" checkbox
and replaces it with the magnitude type dropdown. This affects the
custom commit buttons when activated in combination with SHIFT or if
the profile asks for confirmation. The configured preferred magnitude
type will be preselected in the dropdown list.

The commit with options dialog removes the “Fix magnitude type” checkbox

Add Pick.time.confidenceLevel to pick tooltip of the waveform picker.

* Add ``--only-instruments`` switch to ignore networks on output.
* Derive stream sampling rate from decimation stages if not given explicitly
  in the FDSNXML channel.

Derive stream sampling rate from decimation stages if not given explicitly
in the FDSNXML channel.

ql2sc

* Send EvPrefMw if Mw part of a moment tensor has been received as preferred
  magnitude. This fixes the ``syncPreferred`` switch.

Send EvPrefMw if Mw part of a moment tensor has been received as preferred
magnitude. This fixes the ``syncPreferred`` switch.

magnitude. This fixes the 

scxmldump

* Support dumping picks by publicID using ``--pick``.
* Ignore unpreferred magnitudes with ``-p``.

scrttv

* Add option ``--3c`` to show all three components of ``detecStream``.
* Use consistent menu entry names.

Add option ``--3c`` to show all three components of ``detecStream``.

stdloc

* GridSearch.cellSize replaced by GridSearch.numPoints.
* Default method is now LeastSquares.
* Add LeastSquares.depthInit (like LOCSAT locator).

screloc

* Add ``allowAnyStatus`` option to allow origins to be relocated
  without checking their evaluationStatus.

Add ``allowAnyStatus`` option to allow origins to be relocated
without checking their evaluationStatus.

 option to allow origins to be relocated

seedlink

* Fix invalid memory access in caps_plugin which prevented to start up
  correctly.

Fix invalid memory access in caps_plugin which prevented to start up
correctly.

GUI

* The event list preserves the sorting mode and column after a reload.

The event list preserves the sorting mode and column after a reload.

scolv

* Fix network magnitude evaluation status dropdown update. Due
  to different sorting of the dropdown values the evaluation
  status has not been set correctly.

Fix network magnitude evaluation status dropdown update. Due
to different sorting of the dropdown values the evaluation
status has not been set correctly.

scqc

* Fix performance issue which can result in 100% CPU usage so that
  scqc cannot keep up with the input data rate.

Fix performance issue which can result in 100% CPU usage so that
scqc cannot keep up with the input data rate.

scevent

* Fix regression which causes a crash if a magnitude type should be
  fixed.

Fix regression which causes a crash if a magnitude type should be
fixed.

fixed.

trunk

* Add Pipe record filter
* Take sensor location elevation into account when computing
  the hypocentral distance in amplitude time windows.
* Support shortened time formats for SeisComP and ISO time strings in
  function fromString() such as "2024-04-01 01" and 2024-04-01T01.
* Report an error if file recordstream is used without a regular file.
* Set host to localhost if empty in caps recordstream.
* Add CUTOFF() and STALTA2() to documentation of filter grammar.
* Add scripts for installing software dependencies for Ubuntu 24.04 which
  can be installed using seiscomp install-deps ...
* stdloc

  * Reject locations on the grid boundary.
  * Handle missing ttt for certain phases.
  * Arrival distance must be epicentral not hypocentral.
  * OctTree search optimization.
  * Remove overwhelming log messages.
  * Avoid rare but possible crush of eigv/chi2 code.
  * Fix octtree search failures in case of very large cell sizes.

Take sensor location elevation into account when computing
the hypocentral distance in amplitude time windows.

Support shortened time formats for SeisComP and ISO time strings in
function fromString() such as "2024-04-01 01" and 2024-04-01T01.

function fromString() such as “2024-04-01 01” and 2024-04-01T01.

Report an error if file recordstream is used without a regular file.

Add scripts for installing software dependencies for Ubuntu 24.04 which
can be installed using seiscomp install-deps ...

can be installed using seiscomp install-deps …

stdloc

* Reject locations on the grid boundary.
* Handle missing ttt for certain phases.
* Arrival distance must be epicentral not hypocentral.
* OctTree search optimization.
* Remove overwhelming log messages.
* Avoid rare but possible crush of eigv/chi2 code.
* Fix octtree search failures in case of very large cell sizes.

seedlink

* reftek plugin: expand max stream ID length to 5 characters.
* optodas: set gain frequency in inventory channel.
* serial: add maRam Weatherstation V1 support.
* mws: fix dft485 support.

scmaster

* Serve index.html when browsing a directory with HTTP.

scart, scdbstrip, scevtls, scevtstreams, scmssort, scorgls, scart, scsendorigin

* Allow all datetime formats support by Time.FromString.

GUI

* Add preferred magnitude selection to "Commit with options" dialog.
* Populate AmplitudeView minSNR control with currently configured value.

Add preferred magnitude selection to "Commit with options" dialog.

Add preferred magnitude selection to “Commit with options” dialog.

Populate AmplitudeView minSNR control with currently configured value.

scolv

* Add splitter between main view and event summary to be able to adjust the
  width of the event summary panel.
* Make the application content scrollable if the window width is smaller than
  the minimum required content width.
* Plot infrasound phases with inverted triangles.

Add splitter between main view and event summary to be able to adjust the
width of the event summary panel.

Make the application content scrollable if the window width is smaller than
the minimum required content width.

scautoloc

* Prioritize picks over amplitudes when sorting both with identical
  creation times in playbacks using ``--ep``.
* Initialize variables consistently with default configuration and
  description XML.
* Do not use horizontal slowness and backazimuth for relocating if arrival
  is excluded.

Prioritize picks over amplitudes when sorting both with identical
creation times in playbacks using ``--ep``.

creation times in playbacks using 

Initialize variables consistently with default configuration and
description XML.

Do not use horizontal slowness and backazimuth for relocating if arrival
is excluded.

scamp

* Add parameter ``amptool.streamFromBindings`` to measure amplitudes
  on the global bindings channel instead of the picked channel.

Add parameter ``amptool.streamFromBindings`` to measure amplitudes
on the global bindings channel instead of the picked channel.

 to measure amplitudes

scmag

* Sychronize default values with code and cfg.
* Add configuration parameter ``summaryMagnitude.singleton`` controlling
  whether a summary magnitude is computed from a single network magnitude
  or not.

Add configuration parameter ``summaryMagnitude.singleton`` controlling
whether a summary magnitude is computed from a single network magnitude
or not.

or not.

 controlling
or not.

scrttv

* Allow streams with undefined coordinates if region restriction is not used.
* Allow to read files from stdin with ``scrttv -``.

Allow streams with undefined coordinates if region restriction is not used.

* PoleAndZero.number and PolynomialCoefficient.number is optional.
* Add support for more flexible date and time strings.
* Add usage to help output.

PoleAndZero.number and PolynomialCoefficient.number is optional.

scalert

* Add author filter. Thanks to Donavin97 for the contribution.

scevent

* Fix crash under some conditions. This crash was caused by configurations
  where remove and update operations were sent out of sync.
* Do not prefer magnitudes with evaluation status "rejected".

Fix crash under some conditions. This crash was caused by configurations
where remove and update operations were sent out of sync.

msrtsimul

* Add option ``-u, --unlimited`` to allow forwarding non 512 byte miniSEED
  records.

Add option ``-u, --unlimited`` to allow forwarding non 512 byte miniSEED
records.

records.

gfs2fep

* Add new tool to convert BNA or GeoJSON vectors to fep format.

documentation

* Add supported time formats in new section 'Time Formats'.

trunk

* Add new filter BPENV() for approximating envelopes.
* Add new filters RUD() and RND() for generating random signals with
  uniform and normal distribution, respectively. When apply to data, the
  data samples are replaced by the random signal. For adding noise use the
  '+' operator. Example: self+RUD(-10,10)>>BW(3,0.7,2).
* New time grammar operator, OT, for configuring amplitude-time windows.
* Handle negative channel gain: amplitude processors always return
  positive amplitudes.

Add new filters RUD() and RND() for generating random signals with
uniform and normal distribution, respectively. When apply to data, the
data samples are replaced by the random signal. For adding noise use the
'+' operator. Example: self+RUD(-10,10)>>BW(3,0.7,2).

‘+’ operator. Example: self+RUD(-10,10)>>BW(3,0.7,2).

New time grammar operator, OT, for configuring amplitude-time windows.

Handle negative channel gain: amplitude processors always return
positive amplitudes.

scolv

* Add time and publicID to pick tool tip in picker.
* Handle single component positive dip. Traces will be flipped when
  transforming int ZNE.

Handle single component positive dip. Traces will be flipped when
transforming int ZNE.

GUI

* Handle negative gains. Traces will be flipped if values should be shown
  in gain units.

Handle negative gains. Traces will be flipped if values should be shown
in gain units.

scdumpcfg

* The option ``-P`` supports lists, allowing to request the values for
  multiple parameters instead of only one.

The option ``-P`` supports lists, allowing to request the values for
multiple parameters instead of only one.

 supports lists, allowing to request the values for

scevtls

* Include created events in output without modified date using
  ``--modified-after``.

Include created events in output without modified date using
``--modified-after``.

scinv

* Report missing values for channel dip and azimuth,
* Report when both channel dip and gain are negative as this may be
  accomplished by positive values.

Report when both channel dip and gain are negative as this may be
accomplished by positive values.

scevent

* The evrc (RegionCheck) plugin ignores but reports missing polygons
  instead of dropping the region check entirely.

The evrc (RegionCheck) plugin ignores but reports missing polygons
instead of dropping the region check entirely.

doc

* Add more details to amplitude time window configuration grammar.
* Add BPENV, RND and RUD filter.
* More details on magnitude average methods.

Add more details to amplitude time window configuration grammar.

system

* Add libqt5printsupport5 dependency to Debian bases distributions.

Add libqt5printsupport5 dependency to Debian bases distributions.

scalert

* Fix crash on exit.
* Fix handling of ``agencyIDs``: an empty string in the configuration file
  will allow any agency ID.

Fix handling of ``agencyIDs``: an empty string in the configuration file
will allow any agency ID.

: an empty string in the configuration file

trunk

* Fix ML/MLc amplitude time window computation to raise an error if one
  component fails.

Fix ML/MLc amplitude time window computation to raise an error if one
component fails.

scolv

* Fix crash if an MT solution does not contain a derived origin.

hypo71

* Fix writing the correct number of stations and phases to new origins.

Fix writing the correct number of stations and phases to new origins.

trunk

* Fix magnitude aliases for ML's in combination with different amplitude
  types. E.g. ``MLderived:MLc:MLv`` should work now.
* 3C component detection by checking mutual perpendicular sensor
  orientations increased the tolerance from 1 degree to 5 degrees.

Fix magnitude aliases for ML's in combination with different amplitude
types. E.g. ``MLderived:MLc:MLv`` should work now.

Fix magnitude aliases for ML’s in combination with different amplitude
types. E.g. 

3C component detection by checking mutual perpendicular sensor
orientations increased the tolerance from 1 degree to 5 degrees.

scconfig

* Allow checking individual inventory files in Inventory panel.
* Fix white space rendering in tooltips.

scolv

* Fix crash in amplitude review window under CentOS7
  caused by the measure type preselection introduced
  in 6.1.2.

Fix crash in amplitude review window under CentOS7
caused by the measure type preselection introduced
in 6.1.2.

in 6.1.2.

scrttv

* Disable "Show picks/arrivals" actions if ``showPicks``
  is set to ``false``.

Disable "Show picks/arrivals" actions if ``showPicks``
is set to ``false``.

scardac

* Fix segfault triggered by stream filter.
* Use value of ``0`` in ``maxSegment`` parameter to disable segment limits.

Use value of ``0`` in ``maxSegment`` parameter to disable segment limits.

scinv

* Fix reporting stream groups with other than 1 or 3 channels.

fdsnws

* Output full precision in event text format.
* Fix exception in availability access test.
* Fix authorization error.
* Add configuration option ``inventoryCoordinatePrecision`` allowing
  to obfuscate inventory geo coordinates.

Add configuration option ``inventoryCoordinatePrecision`` allowing
to obfuscate inventory geo coordinates.

trunk

* Populate SNR value of ML and MLc amplitudes.
* Fix reading amplitude regionalization regions, use
  ``magnitudes.[type].regionFile`` instead of ``magnitudes.[type].regions`` as
  in v4.

Fix reading amplitude regionalization regions, use
``magnitudes.[type].regionFile`` instead of ``magnitudes.[type].regions`` as
in v4.

in v4.

scolv

* Preselect measure type and combiner dropdown based on station bindings.

Preselect measure type and combiner dropdown based on station bindings.

scesv

* Fix regression which prevented showing the current magnitudes when
  ``showLastAutomaticSolution = true``.

Fix regression which prevented showing the current magnitudes when
``showLastAutomaticSolution = true``.

scolv

* Fix station count update of Mw magnitude if a magnitudes has been
  recalculated in the magnitude view. Furthermore the Mw tab header
  updates correctly and shows the number of stations.

Fix station count update of Mw magnitude if a magnitudes has been
recalculated in the magnitude view. Furthermore the Mw tab header
updates correctly and shows the number of stations.

ql2sc

* Add configurable event synchronization delay parameter to avoid
  race conditions in cross connected setups.

Add configurable event synchronization delay parameter to avoid
race conditions in cross connected setups.

scautoloc

* Consider configuration of LOCSAT locator interface, supporting
  deactivation of slowness, backazimuth parameters which may be obtained
  during phase picking.

Consider configuration of LOCSAT locator interface, supporting
deactivation of slowness, backazimuth parameters which may be obtained
during phase picking.

seedlink

* Fix crash in chain plugin if mseed records with invalid header data are
  transmitted.
* Fix network code mapping in ``sock_plugin``.
* Fix fifo path resolve in ``mseedfifo_plugin``.

Fix crash in chain plugin if mseed records with invalid header data are
transmitted.

scesv

* Fix crash in combination with latest automatic
  origin display.

scdispatch

* Log if an object already exists in database so that a user can
  understand why nothing was dispatched.
* Remove all event objects from the list of objects when applying
  ``--no-events`` instead of removing the routing.

Log if an object already exists in database so that a user can
understand why nothing was dispatched.

Remove all event objects from the list of objects when applying
``--no-events`` instead of removing the routing.

scardac

* Add ``--nslc`` option allowing to skip initial archive scan for
  available waveform stream IDs.

Add ``--nslc`` option allowing to skip initial archive scan for
available waveform stream IDs.

 option allowing to skip initial archive scan for

scinv

* Add test for stream orthogonality to the check command:

  * The test is limited to streams with sensor type code G, H, L or N
    (second letter of channel code).
  * Any 3-component stream group of the same epoch stream code being not
    orthogonal is reported. Deviations of up to 1 degree are tolerated.
    The test is diagnostic since data processing made on horizontal or 3
    components, e.g., for picking S phases or measuring ML amplitudes
    will rely on orthogonality and will deny any streams groups
    violating orthogonality.
  * If 3-component streams exist for a sensor location, any epoch
    having 2 or more than 3 components for the same sensor location will
    be reported.

Add test for stream orthogonality to the check command:

* The test is limited to streams with sensor type code G, H, L or N
  (second letter of channel code).
* Any 3-component stream group of the same epoch stream code being not
  orthogonal is reported. Deviations of up to 1 degree are tolerated.
  The test is diagnostic since data processing made on horizontal or 3
  components, e.g., for picking S phases or measuring ML amplitudes
  will rely on orthogonality and will deny any streams groups
  violating orthogonality.
* If 3-component streams exist for a sensor location, any epoch
  having 2 or more than 3 components for the same sensor location will
  be reported.

The test is limited to streams with sensor type code G, H, L or N
(second letter of channel code).

Any 3-component stream group of the same epoch stream code being not
orthogonal is reported. Deviations of up to 1 degree are tolerated.
The test is diagnostic since data processing made on horizontal or 3
components, e.g., for picking S phases or measuring ML amplitudes
will rely on orthogonality and will deny any streams groups
violating orthogonality.

If 3-component streams exist for a sensor location, any epoch
having 2 or more than 3 components for the same sensor location will
be reported.

trunk

* Prevent RMHP() from crashing when time span is below sample interval.
* Magnitude regionalization for profile "world" can work without
  specifying a region file.
* Magnitude region check also includes minimum and maximum depth,
  transforming the 2D region test into a 3D region test.
* Expose parameter ``amplitudes.iaspei`` in global module configuration of
  scconfig.

Prevent RMHP() from crashing when time span is below sample interval.

Magnitude regionalization for profile "world" can work without
specifying a region file.

Magnitude regionalization for profile “world” can work without

Magnitude region check also includes minimum and maximum depth,
transforming the 2D region test into a 3D region test.

Expose parameter ``amplitudes.iaspei`` in global module configuration of
scconfig.

scconfig.

magnitudes

* Add depth check to regionalization.
* Update documentation of concepts and tutorial.
* Update MLc documentation.
* MLv, ML, MLc: Test regionalized ``logA0`` parameters for old-style values.

MLv, ML, MLc: Test regionalized ``logA0`` parameters for old-style values.

seiscomp

* Remove support for Ubuntu 18.04 with ``install-deps``.
* Switch ``install-deps`` to Qt5 with RHEL7.
* Resolve fifo path in ``mseedfifo`` plugin configuration to support
  ``@ROOTDIR@`` and other SeisComP directories.

Resolve fifo path in ``mseedfifo`` plugin configuration to support
``@ROOTDIR@`` and other SeisComP directories.

seedlink

* Revert previous fix as it fixes one configuration but breaks another.
  Future versions will address this issue.
* Fix mseedfifo plugin setup that it can be used as regular plugin.

Revert previous fix as it fixes one configuration but breaks another.
Future versions will address this issue.

Fix mseedfifo plugin setup that it can be used as regular plugin.

seiscomp

* Fix an issue with special characters in db password, etc.

scconfig

* Set red background also for checkboxes if the parameter is overridden.

Set red background also for checkboxes if the parameter is overridden.

trunk

* Fix internal timer exceptions in combination with OSX.
* Remove duplicate CLI parameter ``--shutdown-master-username``.

seedlink

* Add more channels and increase sample rate to 1Hz for vaisala protocol.
* Fix plugin update-config if global parameters are modified, e.g.,
  mseeedfifo plugin.

Add more channels and increase sample rate to 1Hz for vaisala protocol.

Fix plugin update-config if global parameters are modified, e.g.,
mseeedfifo plugin.

GUI

* Fix spectrogram update rendering w.r.t. time normalization.
* Fix zoom record time range display in amplitude view. When a new time
  range has been selected, e.g. via the time scale, then not the full time
  range has been set but only < 100% depending on the window size and
  screen resolution.

Fix zoom record time range display in amplitude view. When a new time
range has been selected, e.g. via the time scale, then not the full time
range has been set but only < 100% depending on the window size and
screen resolution.

trunk

* Remove logging of database connection to not expose user accounts in log
  files.

Remove logging of database connection to not expose user accounts in log
files.

files.

scmaster

* Remove logging of of database connection in dbstore plugin to not expose
  user accounts in log files.

Remove logging of of database connection in dbstore plugin to not expose
user accounts in log files.

With this version we drop Qt 4 support for all GUI applications.

The database schema receives a small update and will increase the schema version
to 0.13. In particular some new event types have been introduced:

SeisComP3 API support is deprecated and will be removed in the next major
version of SeisComP. This affects C++ includes like

trunk

*
  Configuration schema files
  (``@SYSTEMCONFIGDIR@/descriptions/[module].xml``) support extending
  available structures with plugins including selective name matching:

  .. code-block:: xml

     <extend-struct type="Amplitude">
         <parameter name="param1" type="string"/>
     </extent-struct>

  or with matching structure names (here ML* including regular expressions):

     <extend-struct type="Amplitude" match-name="ML.*">

*
  Artificial origins: Allow pasting of hypocenter coordinates with high
  precision.

*
  Changed KM_OF_DEGREE constant according to WGS84 mean radius definition.

*
  Changed default values of Wood-Anderson instrument filter to
  recommendations by IASPEI magnitude group, 2011 and Uhrhammer et al.,
  1990. The change systematically reduces magnitudes by 0.13 when making
  use of amplitudes measured on waveforms corrected for Wood-Anderson
  seismometers with default.

*
  Remove ``MYSQL_OPT_RECONNECT`` option from MYSQL database driver to get
  rid of the deprecation warning by newer MYSQL client library versions.
  The automatic reconnect has been added to the driver code instead.

*
  Update ``cities.xml``.

Configuration schema files
(``@SYSTEMCONFIGDIR@/descriptions/[module].xml``) support extending
available structures with plugins including selective name matching:

   <extend-struct type="Amplitude">
       <parameter name="param1" type="string"/>
   </extent-struct>

or with matching structure names (here ML* including regular expressions):

   <extend-struct type="Amplitude" match-name="ML.*">

) support extending

<extend-struct type="Amplitude">
    <parameter name="param1" type="string"/>
</extent-struct>

<extend-struct type="Amplitude" match-name="ML.*">

Artificial origins: Allow pasting of hypocenter coordinates with high
precision.

Changed KM_OF_DEGREE constant according to WGS84 mean radius definition.

Changed default values of Wood-Anderson instrument filter to
recommendations by IASPEI magnitude group, 2011 and Uhrhammer et al.,
1990. The change systematically reduces magnitudes by 0.13 when making
use of amplitudes measured on waveforms corrected for Wood-Anderson
seismometers with default.

Remove ``MYSQL_OPT_RECONNECT`` option from MYSQL database driver to get
rid of the deprecation warning by newer MYSQL client library versions.
The automatic reconnect has been added to the driver code instead.

 option from MYSQL database driver to get

* Compute ML peak-to-trough and mb amplitudes according to IASPEI
  recommendations if configured with ``amplitudes.iaspei = true``.
* Allow configuration of time windows based on time grammar.

Compute ML peak-to-trough and mb amplitudes according to IASPEI
recommendations if configured with ``amplitudes.iaspei = true``.

recommendations if configured with 

* Simplify configuration of magnitude regionalization by global
  module configuration in scconfig.
* Allow creating magnitude aliases by configuration of ``magnitudes.aliases``
  in global module configuration and magnitude type profiles in global
  bindings.
* Add a Magnitudes section to the documentation of concepts.

Simplify configuration of magnitude regionalization by global
module configuration in scconfig.

Allow creating magnitude aliases by configuration of ``magnitudes.aliases``
in global module configuration and magnitude type profiles in global
bindings.

bindings.

* Add subsection on locators to Concepts section.
* Add a tutorial on regionalization of magnitudes and aliases.
* Add section on time grammar for configuring time windows, e.g. for
  measuring amplitudes for magnitudes.

Add section on time grammar for configuring time windows, e.g. for
measuring amplitudes for magnitudes.

scdumpcfg

* Fix reading bindings from database without requiring a messaging system.

Fix reading bindings from database without requiring a messaging system.

scevtstreams

* Add option ``--nslc`` for filtering the read phase picks by stream IDs.

Add option ``--nslc`` for filtering the read phase picks by stream IDs.

Hypo71

* Add file rotator for log file defined by global parameter
  ``hypo71.logFile``.
* Use ``hypo71.logFile`` consistently with @LOGDIR@/HYPO71.LOG.

Add file rotator for log file defined by global parameter
``hypo71.logFile``.

seiscomp tool

* Add command ``print variables`` for printing internal SeisComP variables.
* Add documentation in section Utilities.

Add command ``print variables`` for printing internal SeisComP variables.

scolv

* Add restoring default amplitude-time windows in amplitude picker
  (Shift + W).
* Add resetting the length of the zoom window to the trace overview in
  amplitude picker.
* Preserve arrival definition flags (backazimuth, h-slowness) when committing
  from picker if a pick is not enabled.

Add restoring default amplitude-time windows in amplitude picker
(Shift + W).

Add resetting the length of the zoom window to the trace overview in
amplitude picker.

Preserve arrival definition flags (backazimuth, h-slowness) when committing
from picker if a pick is not enabled.

scart

* Fix reading miniSEED from stdin without -I as default.

scconfig

* Fix rendering of parameter tooltips and evaluation info boxes. This bug
  prevented special strings, e.g. "A < 12", to be displayed correctly.

Fix rendering of parameter tooltips and evaluation info boxes. This bug
prevented special strings, e.g. "A < 12", to be displayed correctly.

prevented special strings, e.g. “A < 12”, to be displayed correctly.

scdbstrip

* Add option ``--time-window``.
* Do not delete anything by default.
* Add daterange option ``--daterange``.

GUI

* Fix removal of map legend
* Reset legends if geo feature layer is reloaded
* Add additional legend alignment options
* Support rendering of geo feature name next to symbols
* Drop Qt4 support

scevtls

* Add option ``--input`` loading XML and printing IDs of contained events.

Add option ``--input`` loading XML and printing IDs of contained events.

scorgls

* Add option ``--input`` loading XML and printing IDs of contained origins.

Add option ``--input`` loading XML and printing IDs of contained origins.

scardac

* Rescan only those chunks modified since last scan.
* Add ``--deep-scan`` paramater to force rescan.
* Add ``--to`` and ``--from`` parameter to limit scan by record time.
* Add ``--modified-since`` and ``--modified-until`` parameter to rescan
  chunks modified in particular time window.
* Add options ``--include`` and ``--exclude`` for filtering waveforms by ID.
* Modernize code.
* Add test cases.
* Increase collector API version to 2.

Add ``--to`` and ``--from`` parameter to limit scan by record time.

Add ``--modified-since`` and ``--modified-until`` parameter to rescan
chunks modified in particular time window.

Add options ``--include`` and ``--exclude`` for filtering waveforms by ID.

scesv

* Fix regression which prevented showing the current
  magnitudes when ``showLastAutomaticSolution = true``.

Fix regression which prevented showing the current
magnitudes when ``showLastAutomaticSolution = true``.

magnitudes when 

scolv

* Fix station count update of Mw magnitude if a magnitudes
  has been recalculated in the magnitude view. Furthermore
  the Mw tab header updates correctly and shows the number
  of stations.

Fix station count update of Mw magnitude if a magnitudes
has been recalculated in the magnitude view. Furthermore
the Mw tab header updates correctly and shows the number
of stations.

seedlink

* Fix crash in chain plugin if mseed records with
  invalid header data are transmitted.

Fix crash in chain plugin if mseed records with
invalid header data are transmitted.

seedlink

* Revert previous fix as it fixes one configuration but breaks
  another.

Revert previous fix as it fixes one configuration but breaks
another.

seedlink

* Fix plugin update-config if global parameters are modified,
  e.g. mseeedfifo plugin.

Fix plugin update-config if global parameters are modified,
e.g. mseeedfifo plugin.

trunk

scrttv

* Fix associator locator solution update with Qt4 if either locator profile
  or depth has changed. This mainly affects RHEL7 builds. All other builds
  which are using Qt4 are affected as well.

Fix associator locator solution update with Qt4 if either locator profile
or depth has changed. This mainly affects RHEL7 builds. All other builds
which are using Qt4 are affected as well.

scconfig

* Fix evaluated parameter value rendering if it contains characters
  like < or >.

Fix evaluated parameter value rendering if it contains characters
like < or >.

like < or >.

scolv

* Fix setting the preferred magnitude from the magnitude view by selecting
  the magnitude tab and committing. Fix / release / fix did not work as
  expected with some database backends.

Fix setting the preferred magnitude from the magnitude view by selecting
the magnitude tab and committing. Fix / release / fix did not work as
expected with some database backends.

GUI

* Fix setting first enabled event in event list. This has caused application,
  e.g. scesv, to not update the current event if the type has changed to
  "not existing" or "other".

Fix setting first enabled event in event list. This has caused application,
e.g. scesv, to not update the current event if the type has changed to
"not existing" or "other".

“not existing” or “other”.

scolv

scolv

* Fix width of calculate amplitude window in combination with
  large recordstream URIs.

Fix width of calculate amplitude window in combination with
large recordstream URIs.

trunk

* Fix deadlock in concurrent recordstream which affected
  ``balanced://`` and ``routing://``.

Fix deadlock in concurrent recordstream which affected
``balanced://`` and ``routing://``.

* Fix KML output which did not produce complete XML documents.

**IMPORTANT**: This fixes a regression of scamp introduced with version 5.5.0 which
caused scamp to always compute new amplitudes for origin and their
arrivals.

: This fixes a regression of scamp introduced with version 5.5.0 which
arrivals.

doc

*
  Update templates to build with latest Sphinx version. We tested against
  Sphinx 7.2.2 and required the following packages installed with pip:

  * sphinx
  * m2r2
  * sphinxcontrib.bibtex

  The doctulils package must be installed in  version 0.20 or later in order
  to render the bib index correctly.

Update templates to build with latest Sphinx version. We tested against
Sphinx 7.2.2 and required the following packages installed with pip:

* sphinx
* m2r2
* sphinxcontrib.bibtex

The doctulils package must be installed in  version 0.20 or later in order
to render the bib index correctly.

scamp

* Fix re-computation of amplitudes anytime a new origin is received. This restores
  the behaviour of version < 5.5.0.

Fix re-computation of amplitudes anytime a new origin is received. This restores
the behaviour of version < 5.5.0.

scevtls

* Support date format %F, e.g. ``scevtls --begin 2023-09-13``.

scmapcut

* Plot all events from a given XML and not just the first one unless filtered
  with ``--event-id``.
* Add ``--without-arrivals`` to plot only the origin symbol without stations.

Plot all events from a given XML and not just the first one unless filtered
with ``--event-id``.

with 

Add ``--without-arrivals`` to plot only the origin symbol without stations.

trunk

* Fix computation of stdloc residuals.
* Allow stdloc LeastSquares to locate even with less iterations.
* Fix regression in MLc magnitude to correctly compute the hypocentral
  distance taking the sensor location elevation into account and also
  supporting negative source depths. In versions < 5.5.3 the source
  depth was clipped to 0 and the sensor location elevation did not
  contribute. In version 5.5.3 and 5.5.4 all depths were considered
  but without the sensor location elevation.

Fix regression in MLc magnitude to correctly compute the hypocentral
distance taking the sensor location elevation into account and also
supporting negative source depths. In versions < 5.5.3 the source
depth was clipped to 0 and the sensor location elevation did not
contribute. In version 5.5.3 and 5.5.4 all depths were considered
but without the sensor location elevation.

scamp

* Fix bug which prevented passing the origin information to
  the amplitude computation.

Fix bug which prevented passing the origin information to
the amplitude computation.

MYSQL

* Fix deprecation warning of the libmysqlclient w.r.t. ``MYSQL_OPT_RECONNECT``.

Fix deprecation warning of the libmysqlclient w.r.t. ``MYSQL_OPT_RECONNECT``.

trunk

* Output full database schema version including patch version
* Fix logging memory leak when the application class is initialized multiple
  times, usually in code implementing tests.
* Minor documentation fixes for stdloc.

Fix logging memory leak when the application class is initialized multiple
times, usually in code implementing tests.

trunk

* Add more debug output to magnitudes ML, MLv and MLc.
* Fix crash if distance for MLv.logA0 is out of range.
* Fix reading of MLc magnitude correction factors of
  regionalization profiles.
* Fix messaging re-connection deadlock that causes applications
  to hang forever after the messaging connection has been
  re-established.

Fix reading of MLc magnitude correction factors of
regionalization profiles.

Fix messaging re-connection deadlock that causes applications
to hang forever after the messaging connection has been
re-established.

scmag

* Fix description of ``minimumArrivalWeight`` for scconfig.

scdumpcfg

* Fix loading of shadowed application plugins, e.g. scqc, which
  caused issues when loading application specific plugins.

Fix loading of shadowed application plugins, e.g. scqc, which
caused issues when loading application specific plugins.

* Fix help text.
* Add commandline option ``--create-notifier``. The notifiers can be added
  to the database using scdb allowing to import bindings while bypassing
  the messaging system.

Add commandline option ``--create-notifier``. The notifiers can be added
to the database using scdb allowing to import bindings while bypassing

. The notifiers can be added

* Add a concepts section on magnitudes.

trunk

* Fix concurrent recordstream termination when data still available.
* Fix invalid ResourceUri for QuakeML arrival export.

Fix concurrent recordstream termination when data still available.

scolv

* Announced feature of auxiliary channels from version 5.5.0 has been
  added which was left out accidentally.
* Select previous and next event buttons now consider only visible events
  in the event list. This is now similar to switching to the event list
  and selecting the event previous or next to the current event.

Announced feature of auxiliary channels from version 5.5.0 has been
added which was left out accidentally.

Select previous and next event buttons now consider only visible events
in the event list. This is now similar to switching to the event list
and selecting the event previous or next to the current event.

screloc

* Be more informative at INFO log level (``--ep`` option).

scxmldump

* Stop warning about empty amplitude ID in station magnitude.

scrttv

* Fix ``--start-at-now`` and disable time window load actions with ``--rt``.
* Fix crash if removed picks are associated with incoming origins.

Fix ``--start-at-now`` and disable time window load actions with ``--rt``.

Fix crash if removed picks are associated with incoming origins.

seedlink

* Fix bug of win plugin which caused log entries 'invalid time' and did
  not forward data.
* Update libq330 for the q330 plugin.

Fix bug of win plugin which caused log entries 'invalid time' and did
not forward data.

Fix bug of win plugin which caused log entries ‘invalid time’ and did

trunk

* Add ML(IDC) and mb(IDC) magnitude implementation (ported from SeisComP3).
* Fix deadlock in messaging reconnect (scmp + scmps).
* Limit alias names to 20 characters if the module provides bindings.

Add ML(IDC) and mb(IDC) magnitude implementation (ported from SeisComP3).

Limit alias names to 20 characters if the module provides bindings.

GUI

* Fix bad performance of reading events into the event list in combination
  with Qt4.

Fix bad performance of reading events into the event list in combination
with Qt4.

with Qt4.

scautoloc

* Do not consider picks with evaluationMode = rejected. Can be overruled
  by ``--allow-rejected-picks``.

Do not consider picks with evaluationMode = rejected. Can be overruled
by ``--allow-rejected-picks``.

by 

scamp

* Add option ``--picks`` for processing picks in playbacks with ``--ep`` while
  ignoring origins.

Add option ``--picks`` for processing picks in playbacks with ``--ep`` while
ignoring origins.

* Fix output of event type used in fdsnws format.
* Add option ``--kml`` for output in KML format.
* Add option ``-o`` for direct output to file.

scart

* Do not require an output archive when executing with ``--test``.

Do not require an output archive when executing with ``--test``.

scolv

* Add notion of auxilliary channels (configurable). Auxilliary channels can
  be skipped while adding stations in range because a minimum or maximum
  distance has not been reached.

     picker.auxilliary.channels = AB.*.*.*
     picker.auxilliary.minimumDistance = 0 # Optional, default 0
     picker.auxilliary.maximumDistance = 1 # Optional, default 1000

* Read journal entries also from offline XML files
* Fix regression in 5.4 which prevents the picker from resetting the
  amplitude scaling of the zoom trace when scaling to visible amplitudes
  with, e.g. 's'.

Add notion of auxilliary channels (configurable). Auxilliary channels can
be skipped while adding stations in range because a minimum or maximum
distance has not been reached.

   picker.auxilliary.channels = AB.*.*.*
   picker.auxilliary.minimumDistance = 0 # Optional, default 0
   picker.auxilliary.maximumDistance = 1 # Optional, default 1000

picker.auxilliary.channels = AB.*.*.*
picker.auxilliary.minimumDistance = 0 # Optional, default 0
picker.auxilliary.maximumDistance = 1 # Optional, default 1000

Fix regression in 5.4 which prevents the picker from resetting the
amplitude scaling of the zoom trace when scaling to visible amplitudes
with, e.g. 's'.

with, e.g. ‘s’.

scrttv

* Add command-line option ``--channels`` for selecting channels to load
* Fix restoring the default display when loading files or reloading a
  new time range. Only the initially configured buffer size (e.g. 30 minutes)
  was used.

Add command-line option ``--channels`` for selecting channels to load

Fix restoring the default display when loading files or reloading a
new time range. Only the initially configured buffer size (e.g. 30 minutes)
was used.

was used.

scqcv

* Remove unused parameters from descriptions, hence scconfig.
* Allow sorting by stream ID.
* Rename menu "Options" to "Settings".

scconfig

* Preserve escaped characters when writing the configuration
* Fix reading variables when using includes

trunk

* Fix crash of SDSArchive in combination with e.g. ``routing`` recordstream,
  thanks to Luca Scarabello (SED/ETHZ).
* Fix fdsnws:// recordstream which caused the connection to hang and to
  not terminate.
* Improve GeoJSON parsing:

  * Fix GeoJSON Point and MultiPoint parsing,
  * Fix parsing of rank,
  * Support for GeometryCollection,
  * Support empty geometry definitions according to standard.

* Compute dtdd/dtdh values in LOCSAT travel time table implementation (Luca
  Scarabello (SED/ETHZ))
* Revert resolving all path variables with configuration files introduced
  with version 5.3. It caused to much conflicts and inconsistencies that we
  have decided to revert the "feature".
* Simplify the configuration of the travel-time interface homogeneous:
  Deprecated global configuration parameter -> new parameter, dropped
  '.profile':

     ttt.homogeneous.profile.[profile].[parameters]  -> ttt.homogeneous.[profile].[parameters]

* Add stdloc locator plugin which implements a new locator called StdLoc.
  It has been contributed by Luca Scarabello / ETH. The algorithms
  implemented in StdLoc are standard methods described in
  "Routine Data Processing in Earthquake Seismology" by Jens Havskov
  and Lars Ottemoller.

Fix crash of SDSArchive in combination with e.g. ``routing`` recordstream,
thanks to Luca Scarabello (SED/ETHZ).

Fix fdsnws:// recordstream which caused the connection to hang and to
not terminate.

Improve GeoJSON parsing:

* Fix GeoJSON Point and MultiPoint parsing,
* Fix parsing of rank,
* Support for GeometryCollection,
* Support empty geometry definitions according to standard.

Compute dtdd/dtdh values in LOCSAT travel time table implementation (Luca
Scarabello (SED/ETHZ))

Revert resolving all path variables with configuration files introduced
with version 5.3. It caused to much conflicts and inconsistencies that we
have decided to revert the "feature".

have decided to revert the “feature”.

Simplify the configuration of the travel-time interface homogeneous:
Deprecated global configuration parameter -> new parameter, dropped
'.profile':

   ttt.homogeneous.profile.[profile].[parameters]  -> ttt.homogeneous.[profile].[parameters]

‘.profile’:

ttt.homogeneous.profile.[profile].[parameters]  -> ttt.homogeneous.[profile].[parameters]

Add stdloc locator plugin which implements a new locator called StdLoc.
It has been contributed by Luca Scarabello / ETH. The algorithms
implemented in StdLoc are standard methods described in
"Routine Data Processing in Earthquake Seismology" by Jens Havskov
and Lars Ottemoller.

“Routine Data Processing in Earthquake Seismology” by Jens Havskov

* Allow configuration of Wood-Anderson instrument parameters in amplitudes
  global section of module configuration.

     amplitudes.WoodAnderson.gain = ...
     amplitudes.WoodAnderson.T0 = ...
     amplitudes.WoodAnderson.h = ...

Allow configuration of Wood-Anderson instrument parameters in amplitudes
global section of module configuration.

   amplitudes.WoodAnderson.gain = ...
   amplitudes.WoodAnderson.T0 = ...
   amplitudes.WoodAnderson.h = ...

amplitudes.WoodAnderson.gain = ...
amplitudes.WoodAnderson.T0 = ...
amplitudes.WoodAnderson.h = ...

GUI

* Fix tooltip display of MapWidget under some circumstances
* Add View and Settings menus consistently to all GUIs.

scolv

* Show Pick.onset attribute (impulsive, emergent, ...) in the arrival table
  and in picker window. Allow editing/setting it in the picker.
* Preserve used attribute states when committing from picker
* Load associated picks of temporary origins
* Support small values in diagram widget
* Add residual to pick tooltip of arrival plot
* Add option to define origin comment profiles to populate
  arbitrary comments when committing an origin.
* Add option to define magnitude comment profiles to populate
  arbitrary comments when reviewing a network magnitude
* Make ``olv.arrivalPlot.showUncertainties`` configurable in scconfig
* Change picker behaviour when hovering another component when pick mode
  is active: only the component of the zoom trace is changed and not the
  overall component. The old behaviour can be restored with
  ``picker.componentFollowsMouse = true``.

Show Pick.onset attribute (impulsive, emergent, ...) in the arrival table
and in picker window. Allow editing/setting it in the picker.

Show Pick.onset attribute (impulsive, emergent, …) in the arrival table

Add option to define origin comment profiles to populate
arbitrary comments when committing an origin.

Add option to define magnitude comment profiles to populate
arbitrary comments when reviewing a network magnitude

Make ``olv.arrivalPlot.showUncertainties`` configurable in scconfig

Change picker behaviour when hovering another component when pick mode
is active: only the component of the zoom trace is changed and not the
overall component. The old behaviour can be restored with
``picker.componentFollowsMouse = true``.

scart

* Allow to rename net, sta, loc, ch codes in dump and import modes,
* Unify ``-t``, ``-n``, ``-c``, ``--list``, ``--nscl`` options for Dump and Import
  mode, thanks to Luca Scarabello (SED/ETHZ).
* Add command-line option ``--ignore`` for ignoring empty records.
* Add command-line option ``-o`` for writing miniSEED records to file in
  import mode.
* Allow filtering records from files by time (``-t``) in import mode.
* Allow filtering records from files by stream lists (``--nslc``) in import
  mode.
* Report empty records whenever found.
* Print stream information whenever requested by ``--print-streams``.
* Report errors even without verbose option (Luca Scarabello (SED/ETHZ))
* When using ``--print-streams`` option in import mode the data
  is written instead of just printing information. This has
  been fixed (Luca Scarabello (SED/ETHZ)) and can be deactivated with
  ``--test``.
* Add summary for ``--print-streams``.

Allow to rename net, sta, loc, ch codes in dump and import modes,

Unify ``-t``, ``-n``, ``-c``, ``--list``, ``--nscl`` options for Dump and Import
mode, thanks to Luca Scarabello (SED/ETHZ).

 options for Dump and Import

Add command-line option ``--ignore`` for ignoring empty records.

Add command-line option ``-o`` for writing miniSEED records to file in
import mode.

Allow filtering records from files by time (``-t``) in import mode.

Allow filtering records from files by stream lists (``--nslc``) in import
mode.

Print stream information whenever requested by ``--print-streams``.

Report errors even without verbose option (Luca Scarabello (SED/ETHZ))

When using ``--print-streams`` option in import mode the data
is written instead of just printing information. This has
been fixed (Luca Scarabello (SED/ETHZ)) and can be deactivated with
``--test``.

 option in import mode the data

scmssort

* Fix reading miniSEED from stdin which was not the default anymore due to
  recent code changes.
* Support verbosity at different levels using ``-v``, ``-vv``, ``-vvv``.
* Add command-line option ``-o`` for explicitely writing miniSEED records to
  file instead of stdout.

Fix reading miniSEED from stdin which was not the default anymore due to
recent code changes.

Support verbosity at different levels using ``-v``, ``-vv``, ``-vvv``.

Add command-line option ``-o`` for explicitely writing miniSEED records to
file instead of stdout.

 for explicitely writing miniSEED records to

scsendjournal

* Add ``-i`` to read journal parameter data from file.

* Do not crash when reading origins with magnitudes but without
  corresponding picks.
* Guess missing arrival weight from use of measurements.

Do not crash when reading origins with magnitudes but without
corresponding picks.

* Fix segmentation fault if being used in playback mode without
  inventory
* Remove fixed noise margin of 60s for any picker which is optionally
  created for each detection, e.g., if configured with ``picker = AIC``.

Fix segmentation fault if being used in playback mode without
inventory

Remove fixed noise margin of 60s for any picker which is optionally
created for each detection, e.g., if configured with ``picker = AIC``.

created for each detection, e.g., if configured with 

scrttv

* Show different colour scheme for picks and arrivals (associated with a
  non-rejected origin).
* Allow to collect picks to create a preliminary location which can be
  sent to the messaging as regular origin object.
* Add reload action which reloads data and picks at the current visible
  time range.
* Add action to switch to real-time with configured buffer size.
* Re-organize menus and actions.
* New option ``--map-picks`` allows to show picks on visible streams even
  when they were created on invisible streams, e.g., S picks created on
  horizontal components are shown verticals.
* Add ``--input-file`` to load an XML pick file at startup.

Show different colour scheme for picks and arrivals (associated with a
non-rejected origin).

Allow to collect picks to create a preliminary location which can be
sent to the messaging as regular origin object.

Add reload action which reloads data and picks at the current visible
time range.

New option ``--map-picks`` allows to show picks on visible streams even
when they were created on invisible streams, e.g., S picks created on
horizontal components are shown verticals.

 allows to show picks on visible streams even

scmapcut

* Fix segmentation fault at exit if a tilestore plugin is used.

scqc

* Fix default configuration timeout value for Rms plugin from 60 back to 0
  reflecting the documented default value. A value greater than 0 results
  in warning messages such as "TimeOut specified, but no timeoutTask was
  defined for this QcPlugin".

Fix default configuration timeout value for Rms plugin from 60 back to 0
reflecting the documented default value. A value greater than 0 results
in warning messages such as "TimeOut specified, but no timeoutTask was
defined for this QcPlugin".

in warning messages such as “TimeOut specified, but no timeoutTask was
defined for this QcPlugin”.

scwfparam

* Use organization configuration parameter for ShakeMap version >= 4
* Populate ShakeMap commtype attribute from bindings
* Allow to output any spectral values with ShakeMap version >= 4

Use organization configuration parameter for ShakeMap version >= 4

LOCSAT

* Add Iw phase.
* Apply strict limit of 210 distance samples to travel time tables.
* Reduce memory consumption to the bare minimum required by the
  provided travel-time tables.

Apply strict limit of 210 distance samples to travel time tables.

Reduce memory consumption to the bare minimum required by the
provided travel-time tables.

iLoc

* Fix crash in local travel-time computation and if local model is enabled
  but not configured.
* Make parameter ``auxDir`` and ``MaxLocalTTDelta`` configurable in scconfig.
* Fix reading ``LocalVModel`` and ``DoNotRenamePhases`` from configuration.

Fix crash in local travel-time computation and if local model is enabled
but not configured.

Make parameter ``auxDir`` and ``MaxLocalTTDelta`` configurable in scconfig.

Fix reading ``LocalVModel`` and ``DoNotRenamePhases`` from configuration.

FDSN StationXML

* Fix generating of -nan values for clock drift caused by sample rates
  of 0.

Fix generating of -nan values for clock drift caused by sample rates
of 0.

of 0.

trunk

* Fix reading ``logging.syslog`` from configuration file in any application.
* Fix JSON archive with respect to serialization of polymorphic objects
* Resolve all path variables defined with @ when reading configuration
  strings. This affects in particular the author configuration which now
  needs 6 @ characters for correct escaping, e.g. ``@appname@@@@@@hostname``.
* Figuring out the three components of a sensor location or the vertical
  component of the sensor location from the inventory does not require the
  Stream.azimuth to be set if the dip is defined -90 or 90 degrees. This
  relaxes the requirement of a well defined inventory for vertical channels.

Fix reading ``logging.syslog`` from configuration file in any application.

Fix JSON archive with respect to serialization of polymorphic objects

Resolve all path variables defined with @ when reading configuration
strings. This affects in particular the author configuration which now
needs 6 @ characters for correct escaping, e.g. ``@appname@@@@@@hostname``.

needs 6 @ characters for correct escaping, e.g. 

Figuring out the three components of a sensor location or the vertical
component of the sensor location from the inventory does not require the
Stream.azimuth to be set if the dip is defined -90 or 90 degrees. This
relaxes the requirement of a well defined inventory for vertical channels.

scrttv

* Allow configuration of stream decorations using scconfig.
* Allow ``streams.codes`` to contain stream group profiles, e.g.
  ``streams.codes = GE.UGM..*, MyStreamsProfile``

Allow ``streams.codes`` to contain stream group profiles, e.g.
``streams.codes = GE.UGM..*, MyStreamsProfile``

GUI

* Add tooltips to all column headers of event list.
* Fix filter issue with transformed 3C traces
* Fix event and origin count in EventList if objects are removed

XML

* Improve performance in scml to quakeml XSLT parser (thanks to Anthony Carapetis)

Improve performance in scml to quakeml XSLT parser (thanks to Anthony Carapetis)

apps

* Remove author settings from default configuration files.

scmssort

* Remove listed streams from input
* Update documentation

scinv

* Add nslc option for more compact output which is also compatible
  with e.g. scmssort or scart.

Add nslc option for more compact output which is also compatible
with e.g. scmssort or scart.

scconfig

* Allow renaming files in Inventory panel by right-click on module.
* Allow opening module log files in system panel by right-click on module.

Allow renaming files in Inventory panel by right-click on module.

Allow opening module log files in system panel by right-click on module.

scolv

* Add ``-i`` to load an XML file on start up
* Make ID column selectable in arrival table of Location tab for showing
  the pick ID.
* Allow copying cells in arrival table of Location tab.

Make ID column selectable in arrival table of Location tab for showing
the pick ID.

Amplitudes ML*

* Fix bug which prevented ``signalEnd``, ``minSNR`` and ``maxDist`` from being
  configurable

Fix bug which prevented ``signalEnd``, ``minSNR`` and ``maxDist`` from being
configurable

* Add support for "subject" attribute in FDSNXML::Comment
* Add support for instrument identifiers

GUI

* Allow theoretical arrivals with negative depth in picker/amplitude view
* Add support for GeoJSON to export of map drawings
* Fix FM event list loading with filters
* Fix segmentation fault in trace widget in combination with empty
  records

Allow theoretical arrivals with negative depth in picker/amplitude view

Fix segmentation fault in trace widget in combination with empty
records

records

scalert

* Add more configurable constraints to scripts started up reception of
  picks (thanks to Luca Scarabello, ETH Zurich, for this contribution).

Add more configurable constraints to scripts started up reception of
picks (thanks to Luca Scarabello, ETH Zurich, for this contribution).

scautoloc

* Fix a bug occasionally resulting in two associated picks of the same
  station and phase.

Fix a bug occasionally resulting in two associated picks of the same
station and phase.

scardac

* Support plugins for scanning other than miniSEED SDS archives.

* Add support for event and origin lists with options ``-E`` and ``-O``.

Add support for event and origin lists with options ``-E`` and ``-O``.

scevent

* Make eventID slot margin configurable (``eventIDLookupMargin``). The default
  value was 5 which meant that only 5 event slots in the future and 5 event
  slots in the past were checked for availability in case of eventID conflicts.
  This could lead to allocation errors in case of earthquake swarms. Now the
  number of slots to look back and to look ahead is determined based on the
  event association time window (+/- 30 minutes) by default.

Make eventID slot margin configurable (``eventIDLookupMargin``). The default
value was 5 which meant that only 5 event slots in the future and 5 event
slots in the past were checked for availability in case of eventID conflicts.
This could lead to allocation errors in case of earthquake swarms. Now the
number of slots to look back and to look ahead is determined based on the
event association time window (+/- 30 minutes) by default.

). The default

scevtls

* Add option ``--hours`` for searching the database within given hours before
  now.

Add option ``--hours`` for searching the database within given hours before
now.

now.

scolv

* Fix mapping of map station symbols and arrival table rows. This mapping
  was unfortunately out of sync in previous 5.x versions.
* Preset fixed depth and depth type if ``olv.locator.presetFromOrigin`` is enabled

Fix mapping of map station symbols and arrival table rows. This mapping
was unfortunately out of sync in previous 5.x versions.

Preset fixed depth and depth type if ``olv.locator.presetFromOrigin`` is enabled

scorgls

* Add command-line option ``-D`` for a custom delimiter.

scqcv

* Update default configuration parameters and description for evaluating
  score in QcOverview.

Update default configuration parameters and description for evaluating
score in QcOverview.

scqueryqc

* Use 1970-01-01 for default begin if begin is not set.
* Fix option ``-i``.

travel-time interface

* Add interface 'homogeneous' for velocity models with just one P- and one
  S-wave velocity (thanks to Luca Scarabello, ETH Zurich, for this
  contribution).

Add interface 'homogeneous' for velocity models with just one P- and one
S-wave velocity (thanks to Luca Scarabello, ETH Zurich, for this
contribution).

Add interface ‘homogeneous’ for velocity models with just one P- and one

The release did not contain the latest advertised changes of the main
repository. This version does not introduce any new features or bugfixes.

* Add option ``--fdsnws`` for printing event parameters on just one line in
  FDSN event text format supporting to generate catalogs from event XML
  files.
* Correct output string of creation time from first origin time to event.

Add option ``--fdsnws`` for printing event parameters on just one line in
FDSN event text format supporting to generate catalogs from event XML
files.

 for printing event parameters on just one line in
files.

Correct output string of creation time from first origin time to event.

scdbstrip

* Fix reading ``--days``.
* Add options ``-E`` and ``-Q`` as well as module configuration for limiting
  stripping to event parameters and waveforms quality control parameters,

Add options ``-E`` and ``-Q`` as well as module configuration for limiting
stripping to event parameters and waveforms quality control parameters,

 as well as module configuration for limiting

scquery

* Do not require a database when using ``--showqueries``.

ql2sc

* Add publicID prefix white- and blacklist configuration as alternative
  to the already available agencyID filter.
* Add option to ignore object removals during import.
* Add more stable algorithm to synchronize the imported event with the
  target system. This reduces the likelihood of infinite loops (re-imports)
  on cross connected systems tremendously (note: it does not prevent that!).

Add publicID prefix white- and blacklist configuration as alternative
to the already available agencyID filter.

Add more stable algorithm to synchronize the imported event with the
target system. This reduces the likelihood of infinite loops (re-imports)
on cross connected systems tremendously (note: it does not prevent that!).

scinv

* Add more tests to inventory check.
* Add command-line options for tolerances: ``max-elevation-difference`` and
  ``max-sensor-depth`` and corresponding module configuration parameters.
* Add a test matrix to documentation reporting tests and consequences.

Add command-line options for tolerances: ``max-elevation-difference`` and
``max-sensor-depth`` and corresponding module configuration parameters.

Add a test matrix to documentation reporting tests and consequences.

FixedHypocenter

* Set uncertainties in location to 0 km if entered manually.

trunk

* Fix bug in application which causes ``processing.blacklist.agencies``
  and ``processing.whitelist.agencies`` to be switched.

Fix bug in application which causes ``processing.blacklist.agencies``
and ``processing.whitelist.agencies`` to be switched.

With this version we drop Python 2 support for the maintained Python wrappers
as well as for all modules. Most of the modules are still Python 2 compatible
but we won't maintain that compatibility over the next versions and will only
support Python versions >= 3.3.

but we won’t maintain that compatibility over the next versions and will only

Furthermore the detection of the installed Linux distribution
(``seiscomp install-deps``) does not require ``lsb_release`` anymore. Instead we
check ``/etc/os-release``. All RHEL based dependencies are now located in the
folder ``rhel`` instead of ``centos``.

The database schema receives an update and will increase the schema version
to 0.12.

VS(SC), Virtual Seismologist for SeisComP has been removed from the SeisComP
and is now available from a separate repository as an addon module. Read
the section "Addon Modules" of the seiscomp documentation for the details.

the section “Addon Modules” of the seiscomp documentation for the details.

fdsnws

* Fix broken unicode XML responses.
* Fix invalid request logging when HUP signal received.

scart

* New command-line parameter ``--check`` for new check mode checking
  miniSEED files in directories for out-of-order records.
* New command-line parameter ``--with-filecheck`` for checking generated
  miniSEED files for out-of-order records after writing them.
* New command-line parameter ``--nslc`` for filtering streams in dump mode
  by a list of streams.

New command-line parameter ``--check`` for new check mode checking
miniSEED files in directories for out-of-order records.

 for new check mode checking

New command-line parameter ``--with-filecheck`` for checking generated
miniSEED files for out-of-order records after writing them.

 for checking generated

New command-line parameter ``--nslc`` for filtering streams in dump mode
by a list of streams.

*
  When configuring ``sendDetections = true`` and ``picker``, initial picks
  made by the trigger receive the evaluation status ``rejected`` allowing
  discrimination from picks by the re-picker. Use evaluation mode
  ``automatic`` for both.

*
  Add support for an additional processing stage called FX which means
  feature extraction and is applied on top of an existing pick. A
  first implementation ported from CTBTO/IDC's DFX code has been added
  to extract back azimuth and slowness for three-component stations.

     fx = DFX

When configuring ``sendDetections = true`` and ``picker``, initial picks
made by the trigger receive the evaluation status ``rejected`` allowing
discrimination from picks by the re-picker. Use evaluation mode
``automatic`` for both.

, initial picks
made by the trigger receive the evaluation status 

 allowing

Add support for an additional processing stage called FX which means
feature extraction and is applied on top of an existing pick. A
first implementation ported from CTBTO/IDC's DFX code has been added
to extract back azimuth and slowness for three-component stations.

   fx = DFX

first implementation ported from CTBTO/IDC’s DFX code has been added

* Filter events in XML files by event ID if provided with option ``-E``.

Filter events in XML files by event ID if provided with option ``-E``.

scdbstrip

* Do no add a default number of days to time span if any other time value
  is given.

Do no add a default number of days to time span if any other time value
is given.

is given.

scevent

* evrc plugin provides more control options for setting and overwriting
  event types.
* Add option to populate Flinn-Engdahl region name event description.

evrc plugin provides more control options for setting and overwriting
event types.

Add option to populate Flinn-Engdahl region name event description.

scevtls

* Add option ``-p`` allowing to print the ID of the preferred origin along
  with the event ID.

Add option ``-p`` allowing to print the ID of the preferred origin along
with the event ID.

 allowing to print the ID of the preferred origin along

* New command-line parameter ``--net-sta`` for filtering streams by network
  and station codes.

New command-line parameter ``--net-sta`` for filtering streams by network
and station codes.

scqcquery

* Removed module. It is replaced by new module scqueryqc.

scqueryqc

* Added as new module including HTML documentation for querying the data
  base for waveform quality control (QC) parameters.
* Allows filtering by QC parameter, stream and time.

Added as new module including HTML documentation for querying the data
base for waveform quality control (QC) parameters.

scesv

* Add number of listed / loaded events in title of Events tab.

scolv

* Add pick uncertainty bars to residual plots in Location tab
* Add number of shown / loaded events in title of Events tab
* Allow showing station annotations in maps of Location tab
* Show time window of re-picker on traces after re-picking
* Add "Fix FM + Mw" button to fix the focal mechanism and the Mw
  with one click
* Show predicted phase arrival times in amplitude picker.

Add "Fix FM + Mw" button to fix the focal mechanism and the Mw
with one click

Add “Fix FM + Mw” button to fix the focal mechanism and the Mw

Magnitudes

* Add new magnitude type MLc - like ML with customization:

  * Amplitude pre-filtering
  * Optional Wood-Anderson instrument simulation
  * Configurable scaling for input unit conversion
  * Parametric calibration, optional non-parametric
  * Optional regionalization of calibration
  * Configurable distance measure.

* ML, MLv, MLc: logA0 parameters take the new value format:
  dist1:correction1,dist2:correction2,...
* Add ability to configure magnitudes with region-dependent
  parameters in global module configuration.
* Add amplitude pre-filtering to ML, MLv and MLc

Add new magnitude type MLc - like ML with customization:

* Amplitude pre-filtering
* Optional Wood-Anderson instrument simulation
* Configurable scaling for input unit conversion
* Parametric calibration, optional non-parametric
* Optional regionalization of calibration
* Configurable distance measure.

ML, MLv, MLc: logA0 parameters take the new value format:
dist1:correction1,dist2:correction2,...

dist1:correction1,dist2:correction2,…

Add ability to configure magnitudes with region-dependent
parameters in global module configuration.

LOCSAT

* Add global configuration parameters for using backazimuth and slowness,
  ``LOCSAT.usePickBackazimuth`` and ``LOCSAT.usePickSlowness``.

Add global configuration parameters for using backazimuth and slowness,
``LOCSAT.usePickBackazimuth`` and ``LOCSAT.usePickSlowness``.

* Allow adjusting the hypocenter coordinates interactively in the locator
  settings of scolv.

Allow adjusting the hypocenter coordinates interactively in the locator
settings of scolv.

hypo71

* Do not crash when Hypo71 cannot compute the arrival time for a given
  phaseHint.

Do not crash when Hypo71 cannot compute the arrival time for a given
phaseHint.

GUI

*
  Use triangles as station symbols on all maps.

*
  Allow configuration of precision of origin time.

*
  Add to events list interactive filtering of events inside or outside
  defined regions.

*
  Clean up event list and event edit parameters in global configuration.
  A warning is printed when using deprecated parameters.
  Deprecated global configuration parameter -> new parameter:

     eventlist.customColumn                 -> eventlist.customColumn.name
     eventlist.regions                      -> eventlist.filter.regions.profiles
     eventlist.region.$name.name            -> eventlist.filter.regions.region.$name.name
     eventlist.region.$name.rect            -> eventlist.filter.regions.region.$name.rect

     eventedit.customColumn                 -> eventedit.origin.customColumn.name
     eventedit.customColumn.default         -> eventedit.origin.customColumn.default
     eventedit.customColumn.originCommentID -> eventedit.origin.customColumn.originCommentID
     eventedit.customColumn.pos             -> eventedit.origin.customColumn.pos
     eventedit.customColumn.colors          -> eventedit.origin.customColumn.colors

*
  Add support for event list filters based on polygons defined in either
  the fep or bna/geojson directories.

     eventlist.filter.regions.region.Test.poly = "my polygon"

Add to events list interactive filtering of events inside or outside
defined regions.

Clean up event list and event edit parameters in global configuration.
A warning is printed when using deprecated parameters.
Deprecated global configuration parameter -> new parameter:

   eventlist.customColumn                 -> eventlist.customColumn.name
   eventlist.regions                      -> eventlist.filter.regions.profiles
   eventlist.region.$name.name            -> eventlist.filter.regions.region.$name.name
   eventlist.region.$name.rect            -> eventlist.filter.regions.region.$name.rect

   eventedit.customColumn                 -> eventedit.origin.customColumn.name
   eventedit.customColumn.default         -> eventedit.origin.customColumn.default
   eventedit.customColumn.originCommentID -> eventedit.origin.customColumn.originCommentID
   eventedit.customColumn.pos             -> eventedit.origin.customColumn.pos
   eventedit.customColumn.colors          -> eventedit.origin.customColumn.colors

eventlist.customColumn                 -> eventlist.customColumn.name
eventlist.regions                      -> eventlist.filter.regions.profiles
eventlist.region.$name.name            -> eventlist.filter.regions.region.$name.name
eventlist.region.$name.rect            -> eventlist.filter.regions.region.$name.rect

eventedit.customColumn                 -> eventedit.origin.customColumn.name
eventedit.customColumn.default         -> eventedit.origin.customColumn.default
eventedit.customColumn.originCommentID -> eventedit.origin.customColumn.originCommentID
eventedit.customColumn.pos             -> eventedit.origin.customColumn.pos
eventedit.customColumn.colors          -> eventedit.origin.customColumn.colors

Add support for event list filters based on polygons defined in either
the fep or bna/geojson directories.

   eventlist.filter.regions.region.Test.poly = "my polygon"

trunk

* Remove application configuration support for ``recordstream.service`` and
  ``recordstream.source`` which has been completely replaced with
  ``recordstream``.
* Remove application configuration support for ``database.type`` and
  ``database.parameters`` which has been completely replaced with
  ``database``.
* Add event certainties "felt", "damaging" in line with IASPEI event type
  leading character.
* Add non-QuakeML event types "calving", "frost quake", "tremor pulse",
  "submarine landslide", "rocket launch", "rocket", "rocket impact",
  "artillery strike", "bomb detonation", "moving aircraft",
  "atmospheric meteor explosion".
* Add new routing RecordStream which allows to route specific network,
  station, location or channel codes to fixed proxy streams (thanks to
  Luca Scarabello / ETH for this contribution)
* Add usage and examples to command-line help for many Python utilities.
* Update Flinn-Engdahl region names to match Wikipedia.

Remove application configuration support for ``recordstream.service`` and
``recordstream.source`` which has been completely replaced with
``recordstream``.

Remove application configuration support for ``database.type`` and
``database.parameters`` which has been completely replaced with
``database``.

Add event certainties "felt", "damaging" in line with IASPEI event type
leading character.

Add event certainties “felt”, “damaging” in line with IASPEI event type

Add non-QuakeML event types "calving", "frost quake", "tremor pulse",
"submarine landslide", "rocket launch", "rocket", "rocket impact",
"artillery strike", "bomb detonation", "moving aircraft",
"atmospheric meteor explosion".

Add non-QuakeML event types “calving”, “frost quake”, “tremor pulse”,
“submarine landslide”, “rocket launch”, “rocket”, “rocket impact”,
“artillery strike”, “bomb detonation”, “moving aircraft”,
“atmospheric meteor explosion”.

Add new routing RecordStream which allows to route specific network,
station, location or channel codes to fixed proxy streams (thanks to
Luca Scarabello / ETH for this contribution)

Add usage and examples to command-line help for many Python utilities.

seedlink

* Add GFZ meteo protocol support (serial_plugin).
* Add GDRT (GFZ Displacement Real-Time) protocol support (gdrt_plugin).
* Fix using invalid memory with script arguments (serial_plugin, miscScript).
* Check for invalid message (serial_plugin, Vaisala ASCII protocol).
* Improve seisplotjs compatibility by adding Sec-WebSocket-Protocol header.

Add GDRT (GFZ Displacement Real-Time) protocol support (gdrt_plugin).

Fix using invalid memory with script arguments (serial_plugin, miscScript).

Check for invalid message (serial_plugin, Vaisala ASCII protocol).

Improve seisplotjs compatibility by adding Sec-WebSocket-Protocol header.

trunk

  This is a backport from version 5 and is not fixed in version <= 5.2.2.

This is a backport from version 5 and is not fixed in version <= 5.2.2.

 from configuration file in any application.

**IMPORTANT**: Please check if your are affected by the bug concerning the scmaster
configuration (see below).

: Please check if your are affected by the bug concerning the scmaster

system

* Change Linux distribution detection which does not require the presence
  of ``lsb_release`` anymore. Instead it looks in ``/etc/os-release`` which is
  way more portable. Furthermore the RHEL based distribution directories
  have been renamed from ``centos`` to ``rhel``.
* Count started/stopped modules correctly.

Change Linux distribution detection which does not require the presence
of ``lsb_release`` anymore. Instead it looks in ``/etc/os-release`` which is
way more portable. Furthermore the RHEL based distribution directories
have been renamed from ``centos`` to ``rhel``.

of 

 which is
have been renamed from 

scolv

* Fix lat/lon order of modify origin dialog opened from zoomtrace of
  the picker.

Fix lat/lon order of modify origin dialog opened from zoomtrace of
the picker.

scmaster

* Fix saving location of the generated configuration file with
  ``seiscomp setup``. Due to a bug the file was generated in
  ``~/.seiscomp/scmaster.cfg`` whereas it should have been generated in
  ``etc/scmaster.cfg``. As this is fixed now, please remove
  ``~/.seiscomp/scmaster.cfg`` if you were affected by the bug otherwise
  this old configuration will take precedence and new configurations will
  not have any effect. This bug has been introduced with version 4.9.0.

Fix saving location of the generated configuration file with
``seiscomp setup``. Due to a bug the file was generated in
``~/.seiscomp/scmaster.cfg`` whereas it should have been generated in
``etc/scmaster.cfg``. As this is fixed now, please remove
``~/.seiscomp/scmaster.cfg`` if you were affected by the bug otherwise
this old configuration will take precedence and new configurations will
not have any effect. This bug has been introduced with version 4.9.0.

 if you were affected by the bug otherwise

trunk

* Fix default messaging URL from ``localhost/productive`` to
  ``localhost/production``.

Fix default messaging URL from ``localhost/productive`` to
``localhost/production``.

scolv

* Fix magnitude tab header update if the represented magnitude updates.
  It prints the current station magnitude counts rather than "0/0".

Fix magnitude tab header update if the represented magnitude updates.
It prints the current station magnitude counts rather than "0/0".

It prints the current station magnitude counts rather than “0/0”.

screloc

* Optionally keep track of the triggering origin ID of a relocation storing
  it as comment in the relocated origin.

Optionally keep track of the triggering origin ID of a relocation storing
it as comment in the relocated origin.

scmaster

* Fix setup stage if a database port has been specified explicitly

Fix setup stage if a database port has been specified explicitly

Documentation

* Use a single BibTex file and a References section for most external
  references

Use a single BibTex file and a References section for most external
references

* Mwp: Fix correction for radiation pattern. The change systematically
  reduces Mwp by 0.28

Mwp: Fix correction for radiation pattern. The change systematically
reduces Mwp by 0.28

scquery

* Add command-line option ``--print-column-name`` for printing column names
  as a header of the output
* Add option ``--delimiter`` for defining the field delimiter

Add command-line option ``--print-column-name`` for printing column names
as a header of the output

scolv

* Select locator type and profile from loaded origin if possible and if
  enabled with option ``olv.locator.presetFromOrigin`` (default: false)

Select locator type and profile from loaded origin if possible and if
enabled with option ``olv.locator.presetFromOrigin`` (default: false)

enabled with option 

scdbstrip

* Fix compatibility with latest PostgreSQL versions. Thanks to
  Luca Scarabello for the fix.

Fix compatibility with latest PostgreSQL versions. Thanks to
Luca Scarabello for the fix.

trunk

* Fix crash if a spatial map layer has no configured legend items but
  wants to show a legend

Fix crash if a spatial map layer has no configured legend items but
wants to show a legend

* Remove unimplemented "add" and "edit" commands

seiscomp setup

* In newer versions (at least >=13) of PostgreSQL, some of the commands
  that are run to initiate the seiscomp database need to be run as the
  database owner. Thanks to Morten Sickel for fixing it.

In newer versions (at least >=13) of PostgreSQL, some of the commands
that are run to initiate the seiscomp database need to be run as the
database owner. Thanks to Morten Sickel for fixing it.

* Fix Datamodel diagrams
* Add object cross references

trunk

* Fix XML encoding issue with text in CDATA, e.g. ``Pick.phaseHint``. This
  only affects strings which contain special XML characters such as
  ampersand.
* Report correct module name with messaging for Python applications.
  Previous versions only reported ``python`` or ``python3.8``.

Fix XML encoding issue with text in CDATA, e.g. ``Pick.phaseHint``. This
only affects strings which contain special XML characters such as
ampersand.

. This

Report correct module name with messaging for Python applications.
Previous versions only reported ``python`` or ``python3.8``.

Previous versions only reported 

fdsnws

* Fix return of empty event publicID in event service when a
  PostgreSQL database is being used.

Fix return of empty event publicID in event service when a
PostgreSQL database is being used.

scolv

* Change text "(Un)fix" buttons to be more explicit

  * Unfix -> Unfix type
  * Fix -> Fix FM
  * Fix Mw -> Fix Mw type

* Use configured magnitude digits to display Mw magnitude value.
* Only enable creation of artificial origin in zoom trace if picking
  is disabled.
* Fix committing of manual amplitudes in the amplitude picker.

Change text "(Un)fix" buttons to be more explicit

* Unfix -> Unfix type
* Fix -> Fix FM
* Fix Mw -> Fix Mw type

Only enable creation of artificial origin in zoom trace if picking

scmag

* Fix bug that caused multiple occurrences of magnitudes of the same type
  when a new set of manually computed amplitudes has been received.

Fix bug that caused multiple occurrences of magnitudes of the same type
when a new set of manually computed amplitudes has been received.

trunk

* Fix segmentation fault when reading malformed GeoJSON features.

Fix segmentation fault when reading malformed GeoJSON features.

scorgls

* Add option to filter for author (thanks to Fred Massin / ETHZ).

Add option to filter for author (thanks to Fred Massin / ETHZ).

trunk

* Fix MYSQL database setup script to create ro and rw user accounts

Fix MYSQL database setup script to create ro and rw user accounts

trunk

* Update changelog.
* Fix ``seiscomp setup trunk`` with respect to database initialization.

Fix ``seiscomp setup trunk`` with respect to database initialization.

scart

* Do not require archive directory when writing records to stdout.

Do not require archive directory when writing records to stdout.

iLoc

* Allow configuration of local models.
* Add comprehensive documentation on iLoc and integration / configuration
  in SeisComP.

Add comprehensive documentation on iLoc and integration / configuration
in SeisComP.

trunk

* Fix test compilation for some distributions.

seiscomp

* Add ``--wait`` parameter to set the timeout when acquiring
  the seiscomp lock.
* Add dialog for removing obsolete configuration after
  removing alias modules.
* Add support for additional host environment which is sourced from
  ``$SEISCOMP_ROOT/etc/env/$(hostname)`` if present.

Add ``--wait`` parameter to set the timeout when acquiring
the seiscomp lock.

Add dialog for removing obsolete configuration after
removing alias modules.

Add support for additional host environment which is sourced from
``$SEISCOMP_ROOT/etc/env/$(hostname)`` if present.

trunk

* Add HTTP proxy support for FDSNWS recordstream. ``http_proxy``,
  ``https_proxy`` and ``no_proxy`` environment are being read and
  evaluated. Only proxy servers available with http are supported
  currently.
* Add new geo feature directory  ``@DATADIR@/spatial/vector`` or
  ``@CONFIGDIR@/spatial/vector``. Load  BNA files from new geo
  feature directory. The old BNA directories are still
  supported but cause a warning which is logged.
* Add support for GeoJSON files (*.geojson) in the new geo
  feature directory.
* Add data scheme version information to output when starting
  a module with the option ``-V``.
* Add MEDIAN() filter.

Add HTTP proxy support for FDSNWS recordstream. ``http_proxy``,
``https_proxy`` and ``no_proxy`` environment are being read and
evaluated. Only proxy servers available with http are supported
currently.

 environment are being read and

Add new geo feature directory  ``@DATADIR@/spatial/vector`` or
``@CONFIGDIR@/spatial/vector``. Load  BNA files from new geo
feature directory. The old BNA directories are still
supported but cause a warning which is logged.

. Load  BNA files from new geo

Add support for GeoJSON files (*.geojson) in the new geo
feature directory.

Add data scheme version information to output when starting
a module with the option ``-V``.

a module with the option 

scolv

* Fix display of tooltips in origin map and magnitude map.
* Fix loading configured streams from either scolv or global
  bindings instead of the first bindings found.
* Allow modifying origins and creating artificial origins on zoom trace
  in picker window.

Fix loading configured streams from either scolv or global
bindings instead of the first bindings found.

Allow modifying origins and creating artificial origins on zoom trace
in picker window.

scquery

* Add ``--print-header`` option for generating information on the query as a
  header of the output.
* Add examples for PostgreSQL.

Add ``--print-header`` option for generating information on the query as a
header of the output.

 option for generating information on the query as a

GUI

* Add azimuthal gap column to event list which is initially hidden. To
  activate it, add ``AzGap"`` to ``eventlist.visibleColumns``.
* Add units to columns of tables: Events, Events, Magnitudes
* Remove number of origins column in event list if origins should not be
  listed.
* Correct issue with magnitude view map which does not show symbols
  for stations which have a magnitude but no arrival.

Add azimuthal gap column to event list which is initially hidden. To
activate it, add ``AzGap"`` to ``eventlist.visibleColumns``.

activate it, add 

Remove number of origins column in event list if origins should not be
listed.

Correct issue with magnitude view map which does not show symbols
for stations which have a magnitude but no arrival.

scqcv

* Make many configuration parameters available in scconfig and

Make many configuration parameters available in scconfig and

scautoloc

* Disable pick logging by default to optimize disk space consumption.
  Can be enabled by new option ``autoloc.pickLogEnable``.
* Added documentation of parameters.
* Send a journal message when setting the origin evaluation status.
* Add IM network to default ``station.conf``.

Disable pick logging by default to optimize disk space consumption.
Can be enabled by new option ``autoloc.pickLogEnable``.

Can be enabled by new option 

Send a journal message when setting the origin evaluation status.

* Add command-line option ``-e`` as a wrapper for removing the EVENT group
  from routing table.

Add command-line option ``-e`` as a wrapper for removing the EVENT group
from routing table.

scolv

* Add number of used / unused station magnitudes to Magnitudes tab
  (missing from 4.6.0).

Add number of used / unused station magnitudes to Magnitudes tab
(missing from 4.6.0).

Dependencies

* Change Debian 10 dependencies to Python3 and Qt5.

scevent

* Use application name for processing-info log.
* Add new journal action EvRefresh: Select the preferred origin, the preferred
  magnitude, update the region, call processors loaded with plugins.

Add new journal action EvRefresh: Select the preferred origin, the preferred
magnitude, update the region, call processors loaded with plugins.

scmssort

* Add new ``--list`` option to filter miniSEED data by stream lists.
* Add some statistics to stderr output in verbosity mode.

Add new ``--list`` option to filter miniSEED data by stream lists.

scart

* Do not crash when requesting data for non-existing networks from SDS
  archive.
* Add error output when attempting retrieve non-existing data from SDS
  archive.

Do not crash when requesting data for non-existing networks from SDS
archive.

Add error output when attempting retrieve non-existing data from SDS
archive.

archive.

GUI

* Add number of origins per event to event list.
* Add copy cell operation to context menu to all tables in event editor.

Add copy cell operation to context menu to all tables in event editor.

scmv

* Report erroneous configuration of ``stations.groundMotionFilter`` and stop
  smoothly.

Report erroneous configuration of ``stations.groundMotionFilter`` and stop
smoothly.

smoothly.

scolv

* Add number of used / unused station magnitudes to Magnitudes tab.

Add number of used / unused station magnitudes to Magnitudes tab.

trunk

* Add support for permanent redirects to fdsnws RecordStream.
* Fix MiniSEED reader for records without blockette 1000 and
  for records with blockette 1000 at an offset beyond the
  first 128 bytes.

Fix MiniSEED reader for records without blockette 1000 and
for records with blockette 1000 at an offset beyond the
first 128 bytes.

seiscomp

* Create aliases even if some links already exist.
* List remaining configuration files after removing aliases.
* Support requesting status of enabled and of started modules.
* Support requesting list of started modules.

scconfig

* Add search for parameters in bindings panel: Ctrl + f

sccnv

* Include moment tensor derived origins into output document for
  QuakeML 1.2

Include moment tensor derived origins into output document for
QuakeML 1.2

scxmldump

* Add ``-J``, ``--journal`` option allowing to export the journal

Add ``-J``, ``--journal`` option allowing to export the journal

*
  mb and mB: add configurable distance ranges in global bindings

*
  ML, MLv, MLh, md, MLr, Ms_20: unify the configuration in the magnitudes and
  amplitudes sections of global bindings. The number of magnitude types has
  grown over time and each magnitude had its own flavor of configuration.
  This made configurations increasingly difficult. By this change the
  configuration becomes homogeneous and easier. The corresponding parameters
  are deprecated and must be replaced by new ones either pre-pending
  ``magnitudes.`` or ``amplitudes.`` to the respective parameter.
  Warnings will be written to module logs if deprecated values are found.

*
  deprecated bindings parameter values -> new values:

     MLh.maxavg            -> amplitudes.MLh.params
     MLh.ClippingThreshold -> amplitudes.MLh.ClippingThreshold
     MLh.params            -> magnitudes.MLh.params

     md.maxavg             -> magnitudes.md.seismo
     md.taper              -> magnitudes.md.taper
     md.signal_length      -> magnitudes.md.signal_length
     md.butterworth        -> magnitudes.md.butterworth
     md.depthmax           -> magnitudes.md.depthmax
     md.deltamax           -> magnitudes.md.deltamax
     md.snrmin             -> magnitudes.md.snrmin
     md.mdmax              -> magnitudes.md.mdmax
     md.fma                -> magnitudes.md.fma
     md.fmb                -> magnitudes.md.fmb
     md.fmd                -> magnitudes.md.fmd
     md.fmf                -> magnitudes.md.fmf
     md.fmz                -> magnitudes.md.fmz
     md.linearcorrection   -> magnitudes.md.linearcorrection
     md.offset             -> magnitudes.md.offset
     md.stacor             -> magnitudes.md.stacor

     MLr.maxavg            ->  magnitudes.MLr.params

     Ms_20.lowerPeriod     ->  magnitudes.Ms_20.lowerPeriod
     Ms_20.upperPeriod     ->  magnitudes.Ms_20.upperPeriod
     Ms_20.minDist         ->  magnitudes.Ms_20.minDist
     Ms_20.maxDist         ->  magnitudes.Ms_20.maxDist
     Ms_20.maxDepth        ->  magnitudes.Ms_20.maxDepth

     MLv.logA0             ->  magnitudes.MLv.logA0
     MLv.maxDistanceKm     ->  magnitudes.MLv.maxDistanceKm

     ML.logA0              ->  magnitudes.ML.logA0
     ML.maxDistanceKm      ->  magnitudes.ML.maxDistanceKm

ML, MLv, MLh, md, MLr, Ms_20: unify the configuration in the magnitudes and
amplitudes sections of global bindings. The number of magnitude types has
grown over time and each magnitude had its own flavor of configuration.
This made configurations increasingly difficult. By this change the
configuration becomes homogeneous and easier. The corresponding parameters
are deprecated and must be replaced by new ones either pre-pending
``magnitudes.`` or ``amplitudes.`` to the respective parameter.
Warnings will be written to module logs if deprecated values are found.

 to the respective parameter.

deprecated bindings parameter values -> new values:

   MLh.maxavg            -> amplitudes.MLh.params
   MLh.ClippingThreshold -> amplitudes.MLh.ClippingThreshold
   MLh.params            -> magnitudes.MLh.params

   md.maxavg             -> magnitudes.md.seismo
   md.taper              -> magnitudes.md.taper
   md.signal_length      -> magnitudes.md.signal_length
   md.butterworth        -> magnitudes.md.butterworth
   md.depthmax           -> magnitudes.md.depthmax
   md.deltamax           -> magnitudes.md.deltamax
   md.snrmin             -> magnitudes.md.snrmin
   md.mdmax              -> magnitudes.md.mdmax
   md.fma                -> magnitudes.md.fma
   md.fmb                -> magnitudes.md.fmb
   md.fmd                -> magnitudes.md.fmd
   md.fmf                -> magnitudes.md.fmf
   md.fmz                -> magnitudes.md.fmz
   md.linearcorrection   -> magnitudes.md.linearcorrection
   md.offset             -> magnitudes.md.offset
   md.stacor             -> magnitudes.md.stacor

   MLr.maxavg            ->  magnitudes.MLr.params

   Ms_20.lowerPeriod     ->  magnitudes.Ms_20.lowerPeriod
   Ms_20.upperPeriod     ->  magnitudes.Ms_20.upperPeriod
   Ms_20.minDist         ->  magnitudes.Ms_20.minDist
   Ms_20.maxDist         ->  magnitudes.Ms_20.maxDist
   Ms_20.maxDepth        ->  magnitudes.Ms_20.maxDepth

   MLv.logA0             ->  magnitudes.MLv.logA0
   MLv.maxDistanceKm     ->  magnitudes.MLv.maxDistanceKm

   ML.logA0              ->  magnitudes.ML.logA0
   ML.maxDistanceKm      ->  magnitudes.ML.maxDistanceKm

MLh.maxavg            -> amplitudes.MLh.params
MLh.ClippingThreshold -> amplitudes.MLh.ClippingThreshold
MLh.params            -> magnitudes.MLh.params

md.maxavg             -> magnitudes.md.seismo
md.taper              -> magnitudes.md.taper
md.signal_length      -> magnitudes.md.signal_length
md.butterworth        -> magnitudes.md.butterworth
md.depthmax           -> magnitudes.md.depthmax
md.deltamax           -> magnitudes.md.deltamax
md.snrmin             -> magnitudes.md.snrmin
md.mdmax              -> magnitudes.md.mdmax
md.fma                -> magnitudes.md.fma
md.fmb                -> magnitudes.md.fmb
md.fmd                -> magnitudes.md.fmd
md.fmf                -> magnitudes.md.fmf
md.fmz                -> magnitudes.md.fmz
md.linearcorrection   -> magnitudes.md.linearcorrection
md.offset             -> magnitudes.md.offset
md.stacor             -> magnitudes.md.stacor

MLr.maxavg            ->  magnitudes.MLr.params

Ms_20.lowerPeriod     ->  magnitudes.Ms_20.lowerPeriod
Ms_20.upperPeriod     ->  magnitudes.Ms_20.upperPeriod
Ms_20.minDist         ->  magnitudes.Ms_20.minDist
Ms_20.maxDist         ->  magnitudes.Ms_20.maxDist
Ms_20.maxDepth        ->  magnitudes.Ms_20.maxDepth

MLv.logA0             ->  magnitudes.MLv.logA0
MLv.maxDistanceKm     ->  magnitudes.MLv.maxDistanceKm

ML.logA0              ->  magnitudes.ML.logA0
ML.maxDistanceKm      ->  magnitudes.ML.maxDistanceKm

scinv

* Allow a configurable distance between station and location coordinate
  when calling scinv check
* Test existence of stations, locations and streams when calling scinv check

Allow a configurable distance between station and location coordinate
when calling scinv check

Test existence of stations, locations and streams when calling scinv check

trunk

* Add CAPS RecordStream implementation with service "caps" and "capss".
  The later establishes an SSL connection.
* Fix crash of distance computation if distance is close to zero
* Add RecordStream to retrieve data from a CAPS server, e.g. ``caps://localhost``
* Set Ms_20 minimum distance to 20 degree
* Fix SQLite3 database schema

Add CAPS RecordStream implementation with service "caps" and "capss".
The later establishes an SSL connection.

Add CAPS RecordStream implementation with service “caps” and “capss”.

Add RecordStream to retrieve data from a CAPS server, e.g. ``caps://localhost``

GUI

*
  Make eventedit columns of origin and fm tables configurable

     eventedit.origin.visibleColumns = Phases, Lat, Lon, Depth, DType, RMS,\
                                       Stat, Method, Agency, Author, Region
     eventedit.fm.visibleColumns = Depth, M, Count, Misfit, STDR, Azi.\
                                   Gap(°), Stat, DC(%), CLVD(%), ISO(%),\
                                   S1(°), D1(°), R1(°), S2(°), D2(°), R2(°),\
                                   Agency, Author

Make eventedit columns of origin and fm tables configurable

   eventedit.origin.visibleColumns = Phases, Lat, Lon, Depth, DType, RMS,\
                                     Stat, Method, Agency, Author, Region
   eventedit.fm.visibleColumns = Depth, M, Count, Misfit, STDR, Azi.\
                                 Gap(°), Stat, DC(%), CLVD(%), ISO(%),\
                                 S1(°), D1(°), R1(°), S2(°), D2(°), R2(°),\
                                 Agency, Author

eventedit.origin.visibleColumns = Phases, Lat, Lon, Depth, DType, RMS,\
                                  Stat, Method, Agency, Author, Region
eventedit.fm.visibleColumns = Depth, M, Count, Misfit, STDR, Azi.\
                              Gap(°), Stat, DC(%), CLVD(%), ISO(%),\
                              S1(°), D1(°), R1(°), S2(°), D2(°), R2(°),\
                              Agency, Author

* Allow to flag depth as fixed (thanks to Anthony Carapetis)

hypo71

* Redirect locator output to SeisComP info output instead of stdout

Redirect locator output to SeisComP info output instead of stdout

seiscomp

* Fix inventory, trunk and access setup file to get the
  configured local scmaster connection correctly especially
  with encrypted connections.

Fix inventory, trunk and access setup file to get the
configured local scmaster connection correctly especially
with encrypted connections.

GUI

* Add config support for color names according to
  `https://www.w3.org/TR/SVG11/types.html#ColorKeywords <https://www.w3.org/TR/SVG11/types.html#ColorKeywords>`_, e.g.
  ``scheme.colors.records.foreground = blue``

Add config support for color names according to
`https://www.w3.org/TR/SVG11/types.html#ColorKeywords <https://www.w3.org/TR/SVG11/types.html#ColorKeywords>`_, e.g.
``scheme.colors.records.foreground = blue``

scrttv

* Add ``streams.sort.mode`` to set up the initial sort mode
* Add grouping of streams for sorting and coloring

scheli

* Add configuration parameters to description XML allowing configuration in
  scconfig

Add configuration parameters to description XML allowing configuration in
scconfig

scconfig

scrttv

* Adjust default filter to filter below the Nyquist frequency of most BH?
  streams
* Add default values for streams configurations

Adjust default filter to filter below the Nyquist frequency of most BH?
streams

scautoloc

* Adjust configuration and parameters. The legacy parameters can still be used
  but an error message will be printed:

  *
    Added parameters to description:

    .. code-block::

       buffer.originKeep
       autoloc.useManualPicks
       autoloc.adoptManualDepth
       autoloc.tryDefaultDepth
       autoloc.stationLocations

  *
    Renamed parameters (old -> new):

       autoloc.maxAge          -> buffer.pickKeep
       autoloc.cleanupInterval -> buffer.cleanupInterval
       autoloc.locator.profile -> locator.profile

  *
    Removed parameters from description:

       autoloc.wakeupInterval

Adjust configuration and parameters. The legacy parameters can still be used
but an error message will be printed:

*
  Added parameters to description:

     buffer.originKeep
     autoloc.useManualPicks
     autoloc.adoptManualDepth
     autoloc.tryDefaultDepth
     autoloc.stationLocations

*
  Renamed parameters (old -> new):

     autoloc.maxAge          -> buffer.pickKeep
     autoloc.cleanupInterval -> buffer.cleanupInterval
     autoloc.locator.profile -> locator.profile

*
  Removed parameters from description:

     autoloc.wakeupInterval

Added parameters to description:

   buffer.originKeep
   autoloc.useManualPicks
   autoloc.adoptManualDepth
   autoloc.tryDefaultDepth
   autoloc.stationLocations

buffer.originKeep
autoloc.useManualPicks
autoloc.adoptManualDepth
autoloc.tryDefaultDepth
autoloc.stationLocations

Renamed parameters (old -> new):

   autoloc.maxAge          -> buffer.pickKeep
   autoloc.cleanupInterval -> buffer.cleanupInterval
   autoloc.locator.profile -> locator.profile

autoloc.maxAge          -> buffer.pickKeep
autoloc.cleanupInterval -> buffer.cleanupInterval
autoloc.locator.profile -> locator.profile

Removed parameters from description:

   autoloc.wakeupInterval

scmag

* Add medianTrimmedMean average method
* Remove internally cached objects if an objects has been removed via
  messaging.

Remove internally cached objects if an objects has been removed via
messaging.

scolv

* Add median trimmed mean to magnitude average method
* Sort event types alphabetically and status by priority

scolv

* Relabel strike/dip/rake columns in focal mechanism table
  and resize content after loading

Relabel strike/dip/rake columns in focal mechanism table
and resize content after loading

evrc plugin

* Fix reading origin which have no depth
* Fix setting no event type for region ``world``

scalert

* Add option to listen to picks
* Fix configuration of agency filter

scevent

* Sort configuration of event association parameters by topic

scolv

* Expose picker phase profiles to scconfig
* Adjust description of uncertainty profiles

* Fix conversion of polynomial responses with respect to
  ``approximationType``.

Fix conversion of polynomial responses with respect to
``approximationType``.

scolv

* Reorder FM tab columns and allow switching visibility state

Processing

* Fix crashing of processing modules such as scautopick if filter
  parameters are out of range

Fix crashing of processing modules such as scautopick if filter
parameters are out of range

scmaster

* Fix reading the default configuration file in update-config

ew2sc

* Correct module name in description. E.g. scconfig has still displayed it
  as ``ew2sc3``.

Correct module name in description. E.g. scconfig has still displayed it
as ``ew2sc3``.

as 

GUI

* Add nodal planes and some more quality parameters to event edit focal
  mechanism table
* Fix setting the depth type in the origin locator panel

Add nodal planes and some more quality parameters to event edit focal
mechanism table

screloc

* Add option to allow processing of origins with mode MANUAL in daemon mode
* When using ``--ep`` playbacks with origins defined by ``-O``, then the
  processing is limited to the defined origins.

Add option to allow processing of origins with mode MANUAL in daemon mode

When using ``--ep`` playbacks with origins defined by ``-O``, then the
processing is limited to the defined origins.

scevent

* Update event agencyID and author on event update if it has
  changed. This is important if scevent has been reconfigured
  with a different agencyID or author.

Update event agencyID and author on event update if it has
changed. This is important if scevent has been reconfigured
with a different agencyID or author.

trunk

* The application class resets its locale to the initial
  state at exit. Not doing so could have caused encoding
  errors with init scripts
* Add fixed hypocenter locator
* Add external locator plugin (locext)
* Fix combined RecordStream for slinkMax|rtMax|1stMax units ``s`` and ``h``
* Fix LOCSAT travel time computation for phases which do not provide
  a table file or with zero depth layers. Sometimes LOCSAT produced
  fake travel times for non existing phases after switching tables.

The application class resets its locale to the initial
state at exit. Not doing so could have caused encoding
errors with init scripts

Fix combined RecordStream for slinkMax|rtMax|1stMax units ``s`` and ``h``

Fix LOCSAT travel time computation for phases which do not provide
a table file or with zero depth layers. Sometimes LOCSAT produced
fake travel times for non existing phases after switching tables.

* Add ``--fdsnws`` command line option to export list of
  channels in FDSNWS dataselect POST format

Add ``--fdsnws`` command line option to export list of
channels in FDSNWS dataselect POST format

 command line option to export list of

GUI

* Add option to define symbol images for layer points defined in
  either BNA or FEP

Add option to define symbol images for layer points defined in
either BNA or FEP

seedlink

* Fix parsing of global ``backfill_buffer`` variable. Up to this
  fix the variable was always considered out of bounds and apart from using
  backfill buffer settings in the bindings the global value had no effect.

Fix parsing of global ``backfill_buffer`` variable. Up to this
fix the variable was always considered out of bounds and apart from using
backfill buffer settings in the bindings the global value had no effect.

 variable. Up to this

scolv

* Fixed several segmentation faults in combination with offline
  mode
* Add origin location method column to event origin table
* Add shortcuts (Ctrl+pgdown, Ctrl+pgup) to select the previous and
  next event of the event list from within the locator view

Fixed several segmentation faults in combination with offline
mode

Add shortcuts (Ctrl+pgdown, Ctrl+pgup) to select the previous and
next event of the event list from within the locator view

GUI

* Quit application if an error occurred during initialization
  and if the setup dialog is cancelled or closed by hitting
  the X icon
* Also accept ``TP`` for parameter ``eventlist.visibleColumns``
  but print a warning

Quit application if an error occurred during initialization
and if the setup dialog is cancelled or closed by hitting
the X icon

Also accept ``TP`` for parameter ``eventlist.visibleColumns``
but print a warning

scimport

* Log error message if parameter ``msggroups`` is not defined

base

* Fix bug with decimation record stream which caused that
  just a subset of input data was forwarded to the client
* Populate SNR values of Ms(BB) and ML amplitudes

Fix bug with decimation record stream which caused that
just a subset of input data was forwarded to the client

GUI

* Replace splash screen with latest logo and render text flat
* Rename item ``TP`` to ``MType`` of parameter
  ``eventlist.visibleColumns``

Rename item ``TP`` to ``MType`` of parameter
``eventlist.visibleColumns``

dlsv2inv

* Fix crash for debug builds if a token is empty,
  e.g. empty end time

Fix crash for debug builds if a token is empty,
e.g. empty end time

LOCSAT

* Allow to override the tables directory with the environment
  variable ``SEISCOMP_LOCSAT_TABLE_DIR``

Allow to override the tables directory with the environment
variable ``SEISCOMP_LOCSAT_TABLE_DIR``

variable 

scolv

* Fix bug when a magnitude is recalculated with a subset of
  station magnitudes

Fix bug when a magnitude is recalculated with a subset of
station magnitudes

fdsnws

* Parse query filter parameters strictly. Thanks to Daniel
  Armbruster for providing the patch.

Parse query filter parameters strictly. Thanks to Daniel
Armbruster for providing the patch.

This is the initial release of SeisComP under a new license and with a new
versioning scheme. Instead of using a release name and a time based version
tag semantic versioning is now being used with a sequence of three digits:
Major.Minor.Patch. The following rules apply for assigning a new digit:

Major: Libraries introduce binary incompatible changes or there are very
significant application changes which justify a major version bump.

Minor: Libraries add new functionality and methods but binary
compatibility within the same major release is still maintained
with application built against a lower minor version. Significant
application changes can also justify a minor version bump.

Patch: No changes in functionality but error corrections of existing
codes.

codes.

Spread has been replaced as messaging system with our own implementation
of a messaging broker. That means that connections between SeisComP3 and
SeisComP >= 4.0.0 are not possible until a driver has been developed
which implements Spread in SeisComP or scmp in SeisComP3.

The SeisComP Python packages have been renamed to ``seiscomp`` but a
compatibility layer for ``seiscomp3`` has been added.

arclinkproxy has been removed as well and is superseded by scwfas.

The installation directory is now ``seiscomp`` and not ``seiscomp3``.

The user configuration directory is now ``.seiscomp`` and not ``.seiscomp3``.

C++ compilation requires a compiler that supports at least the C++11
standard.

Addon modules make use of the |scname| framework but do not ship with the
|scname| package. Instead they are provided in separate packages. These packages
can be downloaded and deployed or
:ref:`compiled from source code <compiling_source>` separately. How these
modules eventually integrate into the default |scname| installation depends on
these addon modules themselves.

 package. Instead they are provided in separate packages. These packages

 separately. How these
modules eventually integrate into the default 

Real-time earthquake detection based on waveform cross-correlation by ETHZ/SED.

Source code :
`GitHub <https://github.com/swiss-seismological-service/scdetect>`_.

Documentation: Included within the software package or
`online <https://scdetect.readthedocs.io/en/stable/>`_.

`GitHub <https://github.com/swiss-seismological-service/scrtdd>`_.

`online <https://docs.gempa.de/scrtdd/current/>`_.

`GitHub <https://github.com/SED-EEW/SED-EEW-SeisComP-contributions>`_.

`online <https://docs.gempa.de/sed-eew/current/>`_.

digraph "EventParameters hierarchy" {
   node [fontname=Verdana fontsize=8 shape=plaintext penwidth=0.5 style="rounded,filled" fillcolor="#fcf2e3" color="#000000"]
   edge [color="#000000"]
   layout="dot"
   Pick [label="Pick", href="../base/api-python.html#api-python-datamodel-pick", target="_top"]
   Comment [label="Comment", href="../base/api-python.html#api-python-datamodel-comment", target="_top"]
   Amplitude [label="Amplitude", href="../base/api-python.html#api-python-datamodel-amplitude", target="_top"]
   Reading [label="Reading", href="../base/api-python.html#api-python-datamodel-reading", target="_top"]
   PickReference [label="PickReference", href="../base/api-python.html#api-python-datamodel-pickreference", target="_top"]
   AmplitudeReference [label="AmplitudeReference", href="../base/api-python.html#api-python-datamodel-amplitudereference", target="_top"]
   Origin [label="Origin", href="../base/api-python.html#api-python-datamodel-origin", target="_top"]
   CompositeTime [label="CompositeTime", href="../base/api-python.html#api-python-datamodel-compositetime", target="_top"]
   Arrival [label="Arrival", href="../base/api-python.html#api-python-datamodel-arrival", target="_top"]
   StationMagnitude [label="StationMagnitude", href="../base/api-python.html#api-python-datamodel-stationmagnitude", target="_top"]
   Magnitude [label="Magnitude", href="../base/api-python.html#api-python-datamodel-magnitude", target="_top"]
   StationMagnitudeContribution [label="StationMagnitudeContribution", href="../base/api-python.html#api-python-datamodel-stationmagnitudecontribution", target="_top"]
   FocalMechanism [label="FocalMechanism", href="../base/api-python.html#api-python-datamodel-focalmechanism", target="_top"]
   MomentTensor [label="MomentTensor", href="../base/api-python.html#api-python-datamodel-momenttensor", target="_top"]
   DataUsed [label="DataUsed", href="../base/api-python.html#api-python-datamodel-dataused", target="_top"]
   MomentTensorPhaseSetting [label="MomentTensorPhaseSetting", href="../base/api-python.html#api-python-datamodel-momenttensorphasesetting", target="_top"]
   MomentTensorStationContribution [label="MomentTensorStationContribution", href="../base/api-python.html#api-python-datamodel-momenttensorstationcontribution", target="_top"]
   MomentTensorComponentContribution [label="MomentTensorComponentContribution", href="../base/api-python.html#api-python-datamodel-momenttensorcomponentcontribution", target="_top"]
   Event [label="Event", href="../base/api-python.html#api-python-datamodel-event", target="_top"]
   EventDescription [label="EventDescription", href="../base/api-python.html#api-python-datamodel-eventdescription", target="_top"]
   OriginReference [label="OriginReference", href="../base/api-python.html#api-python-datamodel-originreference", target="_top"]
   FocalMechanismReference [label="FocalMechanismReference", href="../base/api-python.html#api-python-datamodel-focalmechanismreference", target="_top"]
   EventParameters [label="EventParameters", href="../base/api-python.html#api-python-datamodel-eventparameters", target="_top"]
   EventParameters -> Pick [dir=back arrowtail=diamond]
   MomentTensor -> Comment [dir=back arrowtail=diamond]
   FocalMechanism -> Comment [dir=back arrowtail=diamond]
   Amplitude -> Comment [dir=back arrowtail=diamond]
   Magnitude -> Comment [dir=back arrowtail=diamond]
   StationMagnitude -> Comment [dir=back arrowtail=diamond]
   Pick -> Comment [dir=back arrowtail=diamond]
   Event -> Comment [dir=back arrowtail=diamond]
   Origin -> Comment [dir=back arrowtail=diamond]
   EventParameters -> Amplitude [dir=back arrowtail=diamond]
   EventParameters -> Reading [dir=back arrowtail=diamond]
   Reading -> PickReference [dir=back arrowtail=diamond]
   Reading -> AmplitudeReference [dir=back arrowtail=diamond]
   EventParameters -> Origin [dir=back arrowtail=diamond]
   Origin -> CompositeTime [dir=back arrowtail=diamond]
   Origin -> Arrival [dir=back arrowtail=diamond]
   Origin -> StationMagnitude [dir=back arrowtail=diamond]
   Origin -> Magnitude [dir=back arrowtail=diamond]
   Magnitude -> StationMagnitudeContribution [dir=back arrowtail=diamond]
   EventParameters -> FocalMechanism [dir=back arrowtail=diamond]
   FocalMechanism -> MomentTensor [dir=back arrowtail=diamond]
   MomentTensor -> DataUsed [dir=back arrowtail=diamond]
   MomentTensor -> MomentTensorPhaseSetting [dir=back arrowtail=diamond]
   MomentTensor -> MomentTensorStationContribution [dir=back arrowtail=diamond]
   MomentTensorStationContribution -> MomentTensorComponentContribution [dir=back arrowtail=diamond]
   EventParameters -> Event [dir=back arrowtail=diamond]
   Event -> EventDescription [dir=back arrowtail=diamond]
   Event -> OriginReference [dir=back arrowtail=diamond]
   Event -> FocalMechanismReference [dir=back arrowtail=diamond]
}

   layout = "dot"
   Pick [
       labeltooltip = "Pick"
       label = <
           <table border="0" cellpadding="0" cellspacing="2">
               <tr><td>Pick</td></tr>
               <hr/>
               <tr><td> </td></tr>
               <tr><td align="left" port="publicID"><font color="#8b0000">+ publicID: string</font></td></tr>
               <tr><td align="left" port="time"><font color="#8b0000">+ time: TimeQuantity</font></td></tr>
               <tr><td align="left" port="waveformID"><font color="#8b0000">+ waveformID: WaveformStreamID</font></td></tr>
               <tr><td align="left" port="filterID"><font color="#8b0000">+ filterID: string</font></td></tr>
               <tr><td align="left" port="methodID"><font color="#8b0000">+ methodID: string</font></td></tr>
               <tr><td align="left" port="horizontalSlowness"><font color="#8b0000">+ horizontalSlowness: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="backazimuth"><font color="#8b0000">+ backazimuth: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="slownessMethodID"><font color="#8b0000">+ slownessMethodID: string</font></td></tr>
               <tr><td align="left" port="onset"><font color="#8b0000">+ onset: PickOnset  [0..1]</font></td></tr>
               <tr><td align="left" port="phaseHint"><font color="#8b0000">+ phaseHint: Phase  [0..1]</font></td></tr>
               <tr><td align="left" port="polarity"><font color="#8b0000">+ polarity: PickPolarity  [0..1]</font></td></tr>
               <tr><td align="left" port="evaluationMode"><font color="#8b0000">+ evaluationMode: EvaluationMode  [0..1]</font></td></tr>
               <tr><td align="left" port="evaluationStatus"><font color="#8b0000">+ evaluationStatus: EvaluationStatus  [0..1]</font></td></tr>
               <tr><td align="left" port="creationInfo"><font color="#8b0000">+ creationInfo: CreationInfo  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ comment: Comment [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-pick"
       target = "_top"
   ]
   Comment [
       labeltooltip = "Comment"
       label = <
               <tr><td>Comment</td></tr>
               <hr/>
               <tr><td align="left" port="text"><font color="#8b0000">+ text: string</font></td></tr>
               <tr><td align="left" port="id"><font color="#8b0000">+ id: string</font></td></tr>
               <tr><td align="left" port="start"><font color="#8b0000">+ start: datetime  [0..1]</font></td></tr>
               <tr><td align="left" port="end"><font color="#8b0000">+ end: datetime  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-comment"
   ]
   Amplitude [
       labeltooltip = "Amplitude"
       label = <
               <tr><td>Amplitude</td></tr>
               <hr/>
               <tr><td align="left" port="type"><font color="#8b0000">+ type: string</font></td></tr>
               <tr><td align="left" port="amplitude"><font color="#8b0000">+ amplitude: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="timeWindow"><font color="#8b0000">+ timeWindow: TimeWindow  [0..1]</font></td></tr>
               <tr><td align="left" port="period"><font color="#8b0000">+ period: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="snr"><font color="#8b0000">+ snr: float  [0..1]</font></td></tr>
               <tr><td align="left" port="unit"><font color="#8b0000">+ unit: string</font></td></tr>
               <tr><td align="left" port="pickID"><font color="#8b0000">+ pickID: string</font></td></tr>
               <tr><td align="left" port="waveformID"><font color="#8b0000">+ waveformID: WaveformStreamID  [0..1]</font></td></tr>
               <tr><td align="left" port="scalingTime"><font color="#8b0000">+ scalingTime: TimeQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="magnitudeHint"><font color="#8b0000">+ magnitudeHint: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-amplitude"
   ]
   Reading [
       labeltooltip = "Reading"
       label = <
               <tr><td>Reading</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ pickReference: PickReference [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ amplitudeReference: AmplitudeReference [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-reading"
   ]
   PickReference [
       labeltooltip = "PickReference"
       label = <
               <tr><td>PickReference</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-pickreference"
   ]
   AmplitudeReference [
       labeltooltip = "AmplitudeReference"
       label = <
               <tr><td>AmplitudeReference</td></tr>
               <hr/>
               <tr><td align="left" port="amplitudeID"><font color="#8b0000">+ amplitudeID: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-amplitudereference"
   ]
   Origin [
       labeltooltip = "Origin"
       label = <
               <tr><td>Origin</td></tr>
               <hr/>
               <tr><td align="left" port="latitude"><font color="#8b0000">+ latitude: RealQuantity</font></td></tr>
               <tr><td align="left" port="longitude"><font color="#8b0000">+ longitude: RealQuantity</font></td></tr>
               <tr><td align="left" port="depth"><font color="#8b0000">+ depth: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="depthType"><font color="#8b0000">+ depthType: OriginDepthType  [0..1]</font></td></tr>
               <tr><td align="left" port="timeFixed"><font color="#8b0000">+ timeFixed: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="epicenterFixed"><font color="#8b0000">+ epicenterFixed: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="referenceSystemID"><font color="#8b0000">+ referenceSystemID: string</font></td></tr>
               <tr><td align="left" port="earthModelID"><font color="#8b0000">+ earthModelID: string</font></td></tr>
               <tr><td align="left" port="quality"><font color="#8b0000">+ quality: OriginQuality  [0..1]</font></td></tr>
               <tr><td align="left" port="uncertainty"><font color="#8b0000">+ uncertainty: OriginUncertainty  [0..1]</font></td></tr>
               <tr><td align="left" port="type"><font color="#8b0000">+ type: OriginType  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ compositeTime: CompositeTime [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ arrival: Arrival [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ stationMagnitude: StationMagnitude [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ magnitude: Magnitude [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-origin"
   ]
   CompositeTime [
       labeltooltip = "CompositeTime"
       label = <
               <tr><td>CompositeTime</td></tr>
               <hr/>
               <tr><td align="left" port="year"><font color="#8b0000">+ year: IntegerQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="month"><font color="#8b0000">+ month: IntegerQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="day"><font color="#8b0000">+ day: IntegerQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="hour"><font color="#8b0000">+ hour: IntegerQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="minute"><font color="#8b0000">+ minute: IntegerQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="second"><font color="#8b0000">+ second: RealQuantity  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-compositetime"
   ]
   Arrival [
       labeltooltip = "Arrival"
       label = <
               <tr><td>Arrival</td></tr>
               <hr/>
               <tr><td align="left" port="phase"><font color="#8b0000">+ phase: Phase</font></td></tr>
               <tr><td align="left" port="timeCorrection"><font color="#8b0000">+ timeCorrection: float  [0..1]</font></td></tr>
               <tr><td align="left" port="azimuth"><font color="#8b0000">+ azimuth: float  [0..1]</font></td></tr>
               <tr><td align="left" port="distance"><font color="#8b0000">+ distance: float  [0..1]</font></td></tr>
               <tr><td align="left" port="takeOffAngle"><font color="#8b0000">+ takeOffAngle: float  [0..1]</font></td></tr>
               <tr><td align="left" port="timeResidual"><font color="#8b0000">+ timeResidual: float  [0..1]</font></td></tr>
               <tr><td align="left" port="horizontalSlownessResidual"><font color="#8b0000">+ horizontalSlownessResidual: float  [0..1]</font></td></tr>
               <tr><td align="left" port="backazimuthResidual"><font color="#8b0000">+ backazimuthResidual: float  [0..1]</font></td></tr>
               <tr><td align="left" port="timeUsed"><font color="#8b0000">+ timeUsed: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="horizontalSlownessUsed"><font color="#8b0000">+ horizontalSlownessUsed: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="backazimuthUsed"><font color="#8b0000">+ backazimuthUsed: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="weight"><font color="#8b0000">+ weight: float  [0..1]</font></td></tr>
               <tr><td align="left" port="preliminary"><font color="#8b0000">+ preliminary: boolean  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arrival"
   ]
   StationMagnitude [
       labeltooltip = "StationMagnitude"
       label = <
               <tr><td>StationMagnitude</td></tr>
               <hr/>
               <tr><td align="left" port="originID"><font color="#8b0000">+ originID: string</font></td></tr>
               <tr><td align="left" port="magnitude"><font color="#8b0000">+ magnitude: RealQuantity</font></td></tr>
               <tr><td align="left" port="passedQC"><font color="#8b0000">+ passedQC: boolean  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-stationmagnitude"
   ]
   Magnitude [
       labeltooltip = "Magnitude"
       label = <
               <tr><td>Magnitude</td></tr>
               <hr/>
               <tr><td align="left" port="stationCount"><font color="#8b0000">+ stationCount: int  [0..1]</font></td></tr>
               <tr><td align="left" port="azimuthalGap"><font color="#8b0000">+ azimuthalGap: float  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ stationMagnitudeContribution: StationMagnitudeContribution [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-magnitude"
   ]
   StationMagnitudeContribution [
       labeltooltip = "StationMagnitudeContribution"
       label = <
               <tr><td>StationMagnitudeContribution</td></tr>
               <hr/>
               <tr><td align="left" port="stationMagnitudeID"><font color="#8b0000">+ stationMagnitudeID: string</font></td></tr>
               <tr><td align="left" port="residual"><font color="#8b0000">+ residual: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-stationmagnitudecontribution"
   ]
   FocalMechanism [
       labeltooltip = "FocalMechanism"
       label = <
               <tr><td>FocalMechanism</td></tr>
               <hr/>
               <tr><td align="left" port="triggeringOriginID"><font color="#8b0000">+ triggeringOriginID: string</font></td></tr>
               <tr><td align="left" port="nodalPlanes"><font color="#8b0000">+ nodalPlanes: NodalPlanes  [0..1]</font></td></tr>
               <tr><td align="left" port="principalAxes"><font color="#8b0000">+ principalAxes: PrincipalAxes  [0..1]</font></td></tr>
               <tr><td align="left" port="stationPolarityCount"><font color="#8b0000">+ stationPolarityCount: int  [0..1]</font></td></tr>
               <tr><td align="left" port="misfit"><font color="#8b0000">+ misfit: float  [0..1]</font></td></tr>
               <tr><td align="left" port="stationDistributionRatio"><font color="#8b0000">+ stationDistributionRatio: float  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ momentTensor: MomentTensor [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-focalmechanism"
   ]
   MomentTensor [
       labeltooltip = "MomentTensor"
       label = <
               <tr><td>MomentTensor</td></tr>
               <hr/>
               <tr><td align="left" port="derivedOriginID"><font color="#8b0000">+ derivedOriginID: string</font></td></tr>
               <tr><td align="left" port="momentMagnitudeID"><font color="#8b0000">+ momentMagnitudeID: string</font></td></tr>
               <tr><td align="left" port="scalarMoment"><font color="#8b0000">+ scalarMoment: RealQuantity  [0..1]</font></td></tr>
               <tr><td align="left" port="tensor"><font color="#8b0000">+ tensor: Tensor  [0..1]</font></td></tr>
               <tr><td align="left" port="variance"><font color="#8b0000">+ variance: float  [0..1]</font></td></tr>
               <tr><td align="left" port="varianceReduction"><font color="#8b0000">+ varianceReduction: float  [0..1]</font></td></tr>
               <tr><td align="left" port="doubleCouple"><font color="#8b0000">+ doubleCouple: float  [0..1]</font></td></tr>
               <tr><td align="left" port="clvd"><font color="#8b0000">+ clvd: float  [0..1]</font></td></tr>
               <tr><td align="left" port="iso"><font color="#8b0000">+ iso: float  [0..1]</font></td></tr>
               <tr><td align="left" port="greensFunctionID"><font color="#8b0000">+ greensFunctionID: string</font></td></tr>
               <tr><td align="left" port="sourceTimeFunction"><font color="#8b0000">+ sourceTimeFunction: SourceTimeFunction  [0..1]</font></td></tr>
               <tr><td align="left" port="method"><font color="#8b0000">+ method: MomentTensorMethod  [0..1]</font></td></tr>
               <tr><td align="left" port="status"><font color="#8b0000">+ status: MomentTensorStatus  [0..1]</font></td></tr>
               <tr><td align="left" port="cmtName"><font color="#8b0000">+ cmtName: string</font></td></tr>
               <tr><td align="left" port="cmtVersion"><font color="#8b0000">+ cmtVersion: string</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ dataUsed: DataUsed [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ momentTensorPhaseSetting: MomentTensorPhaseSetting [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ momentTensorStationContribution: MomentTensorStationContribution [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-momenttensor"
   ]
   DataUsed [
       labeltooltip = "DataUsed"
       label = <
               <tr><td>DataUsed</td></tr>
               <hr/>
               <tr><td align="left" port="waveType"><font color="#8b0000">+ waveType: DataUsedWaveType</font></td></tr>
               <tr><td align="left" port="stationCount"><font color="#8b0000">+ stationCount: int</font></td></tr>
               <tr><td align="left" port="componentCount"><font color="#8b0000">+ componentCount: int</font></td></tr>
               <tr><td align="left" port="shortestPeriod"><font color="#8b0000">+ shortestPeriod: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-dataused"
   ]
   MomentTensorPhaseSetting [
       labeltooltip = "MomentTensorPhaseSetting"
       label = <
               <tr><td>MomentTensorPhaseSetting</td></tr>
               <hr/>
               <tr><td align="left" port="code"><font color="#8b0000">+ code: string</font></td></tr>
               <tr><td align="left" port="lowerPeriod"><font color="#8b0000">+ lowerPeriod: float</font></td></tr>
               <tr><td align="left" port="upperPeriod"><font color="#8b0000">+ upperPeriod: float</font></td></tr>
               <tr><td align="left" port="minimumSNR"><font color="#8b0000">+ minimumSNR: float  [0..1]</font></td></tr>
               <tr><td align="left" port="maximumTimeShift"><font color="#8b0000">+ maximumTimeShift: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-momenttensorphasesetting"
   ]
   MomentTensorStationContribution [
       labeltooltip = "MomentTensorStationContribution"
       label = <
               <tr><td>MomentTensorStationContribution</td></tr>
               <hr/>
               <tr><td align="left" port="active"><font color="#8b0000">+ active: boolean</font></td></tr>
               <tr><td align="left" port="timeShift"><font color="#8b0000">+ timeShift: float  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ momentTensorComponentContribution: MomentTensorComponentContribution [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-momenttensorstationcontribution"
   ]
   MomentTensorComponentContribution [
       labeltooltip = "MomentTensorComponentContribution"
       label = <
               <tr><td>MomentTensorComponentContribution</td></tr>
               <hr/>
               <tr><td align="left" port="phaseCode"><font color="#8b0000">+ phaseCode: string</font></td></tr>
               <tr><td align="left" port="component"><font color="#8b0000">+ component: int</font></td></tr>
               <tr><td align="left" port="weight"><font color="#8b0000">+ weight: float</font></td></tr>
               <tr><td align="left" port="timeShift"><font color="#8b0000">+ timeShift: float</font></td></tr>
               <tr><td align="left" port="dataTimeWindow"><font color="#8b0000">+ dataTimeWindow: float</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-momenttensorcomponentcontribution"
   ]
   Event [
       labeltooltip = "Event"
       label = <
               <tr><td>Event</td></tr>
               <hr/>
               <tr><td align="left" port="preferredOriginID"><font color="#8b0000">+ preferredOriginID: string</font></td></tr>
               <tr><td align="left" port="preferredMagnitudeID"><font color="#8b0000">+ preferredMagnitudeID: string</font></td></tr>
               <tr><td align="left" port="preferredFocalMechanismID"><font color="#8b0000">+ preferredFocalMechanismID: string</font></td></tr>
               <tr><td align="left" port="type"><font color="#8b0000">+ type: EventType  [0..1]</font></td></tr>
               <tr><td align="left" port="typeCertainty"><font color="#8b0000">+ typeCertainty: EventTypeCertainty  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ eventDescription: EventDescription [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ originReference: OriginReference [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ focalMechanismReference: FocalMechanismReference [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-event"
   ]
   EventDescription [
       labeltooltip = "EventDescription"
       label = <
               <tr><td>EventDescription</td></tr>
               <hr/>
               <tr><td align="left" port="type"><font color="#8b0000">+ type: EventDescriptionType</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-eventdescription"
   ]
   OriginReference [
       labeltooltip = "OriginReference"
       label = <
               <tr><td>OriginReference</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-originreference"
   ]
   FocalMechanismReference [
       labeltooltip = "FocalMechanismReference"
       label = <
               <tr><td>FocalMechanismReference</td></tr>
               <hr/>
               <tr><td align="left" port="focalMechanismID"><font color="#8b0000">+ focalMechanismID: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-focalmechanismreference"
   ]
   EventParameters [
       labeltooltip = "EventParameters"
       label = <
               <tr><td>EventParameters</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ pick: Pick [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ amplitude: Amplitude [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ reading: Reading [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ origin: Origin [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ focalMechanism: FocalMechanism [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ event: Event [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-eventparameters"
   ]
}

EventParameters object connections from parent to child including attributes and elements.

digraph "Config hierarchy" {
   ParameterSet [
       labeltooltip = "ParameterSet"
       label = <
               <tr><td>ParameterSet</td></tr>
               <hr/>
               <tr><td align="left" port="baseID"><font color="#8b0000">+ baseID: string</font></td></tr>
               <tr><td align="left" port="moduleID"><font color="#8b0000">+ moduleID: string</font></td></tr>
               <tr><td align="left" port="created"><font color="#8b0000">+ created: datetime  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ parameter: Parameter [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-parameterset"
   ]
   Parameter [
       labeltooltip = "Parameter"
       label = <
               <tr><td>Parameter</td></tr>
               <hr/>
               <tr><td align="left" port="name"><font color="#8b0000">+ name: string</font></td></tr>
               <tr><td align="left" port="value"><font color="#8b0000">+ value: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-parameter"
   ]
   Comment [
       label = <
               <hr/>
           </table>
       >
   ]
   ConfigModule [
       labeltooltip = "ConfigModule"
       label = <
               <tr><td>ConfigModule</td></tr>
               <hr/>
               <tr><td align="left" port="parameterSetID"><font color="#8b0000">+ parameterSetID: string</font></td></tr>
               <tr><td align="left" port="enabled"><font color="#8b0000">+ enabled: boolean</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ configStation: ConfigStation [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-configmodule"
   ]
   ConfigStation [
       labeltooltip = "ConfigStation"
       label = <
               <tr><td>ConfigStation</td></tr>
               <hr/>
               <tr><td align="left" port="networkCode"><font color="#8b0000">+ networkCode: string</font></td></tr>
               <tr><td align="left" port="stationCode"><font color="#8b0000">+ stationCode: string</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ setup: Setup [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-configstation"
   ]
   Setup [
       labeltooltip = "Setup"
       label = <
               <tr><td>Setup</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-setup"
   ]
   Config [
       labeltooltip = "Config"
       label = <
               <tr><td>Config</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ parameterSet: ParameterSet [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ configModule: ConfigModule [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-config"
   ]
   Config -> ParameterSet [dir=back arrowtail=diamond]
   ParameterSet -> Parameter [dir=back arrowtail=diamond]
   Parameter -> Comment [dir=back arrowtail=diamond]
   ParameterSet -> Comment [dir=back arrowtail=diamond]
   Config -> ConfigModule [dir=back arrowtail=diamond]
   ConfigModule -> ConfigStation [dir=back arrowtail=diamond]
   ConfigStation -> Setup [dir=back arrowtail=diamond]
}

Config object connections from parent to child including attributes and elements.

digraph "QualityControl hierarchy" {
   QCLog [
       labeltooltip = "QCLog"
       label = <
               <tr><td>QCLog</td></tr>
               <hr/>
               <tr><td align="left" port="creatorID"><font color="#8b0000">+ creatorID: string</font></td></tr>
               <tr><td align="left" port="created"><font color="#8b0000">+ created: datetime</font></td></tr>
               <tr><td align="left" port="start"><font color="#8b0000">+ start: datetime</font></td></tr>
               <tr><td align="left" port="end"><font color="#8b0000">+ end: datetime</font></td></tr>
               <tr><td align="left" port="message"><font color="#8b0000">+ message: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-qclog"
   ]
   WaveformQuality [
       labeltooltip = "WaveformQuality"
       label = <
               <tr><td>WaveformQuality</td></tr>
               <hr/>
               <tr><td align="left" port="parameter"><font color="#8b0000">+ parameter: string</font></td></tr>
               <tr><td align="left" port="value"><font color="#8b0000">+ value: float</font></td></tr>
               <tr><td align="left" port="lowerUncertainty"><font color="#8b0000">+ lowerUncertainty: float  [0..1]</font></td></tr>
               <tr><td align="left" port="upperUncertainty"><font color="#8b0000">+ upperUncertainty: float  [0..1]</font></td></tr>
               <tr><td align="left" port="windowLength"><font color="#8b0000">+ windowLength: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-waveformquality"
   ]
   Outage [
       labeltooltip = "Outage"
       label = <
               <tr><td>Outage</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-outage"
   ]
   QualityControl [
       labeltooltip = "QualityControl"
       label = <
               <tr><td>QualityControl</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ qCLog: QCLog [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ waveformQuality: WaveformQuality [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ outage: Outage [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-qualitycontrol"
   ]
   QualityControl -> QCLog [dir=back arrowtail=diamond]
   QualityControl -> WaveformQuality [dir=back arrowtail=diamond]
   QualityControl -> Outage [dir=back arrowtail=diamond]
}

QualityControl object connections from parent to child including attributes and elements.

digraph "Inventory hierarchy" {
   StationGroup [label="StationGroup", href="../base/api-python.html#api-python-datamodel-stationgroup", target="_top"]
   StationReference [label="StationReference", href="../base/api-python.html#api-python-datamodel-stationreference", target="_top"]
   AuxDevice [label="AuxDevice", href="../base/api-python.html#api-python-datamodel-auxdevice", target="_top"]
   AuxSource [label="AuxSource", href="../base/api-python.html#api-python-datamodel-auxsource", target="_top"]
   Sensor [label="Sensor", href="../base/api-python.html#api-python-datamodel-sensor", target="_top"]
   SensorCalibration [label="SensorCalibration", href="../base/api-python.html#api-python-datamodel-sensorcalibration", target="_top"]
   Datalogger [label="Datalogger", href="../base/api-python.html#api-python-datamodel-datalogger", target="_top"]
   DataloggerCalibration [label="DataloggerCalibration", href="../base/api-python.html#api-python-datamodel-dataloggercalibration", target="_top"]
   Decimation [label="Decimation", href="../base/api-python.html#api-python-datamodel-decimation", target="_top"]
   ResponsePAZ [label="ResponsePAZ", href="../base/api-python.html#api-python-datamodel-responsepaz", target="_top"]
   ResponseFIR [label="ResponseFIR", href="../base/api-python.html#api-python-datamodel-responsefir", target="_top"]
   ResponseIIR [label="ResponseIIR", href="../base/api-python.html#api-python-datamodel-responseiir", target="_top"]
   ResponsePolynomial [label="ResponsePolynomial", href="../base/api-python.html#api-python-datamodel-responsepolynomial", target="_top"]
   ResponseFAP [label="ResponseFAP", href="../base/api-python.html#api-python-datamodel-responsefap", target="_top"]
   Network [label="Network", href="../base/api-python.html#api-python-datamodel-network", target="_top"]
   Station [label="Station", href="../base/api-python.html#api-python-datamodel-station", target="_top"]
   SensorLocation [label="SensorLocation", href="../base/api-python.html#api-python-datamodel-sensorlocation", target="_top"]
   AuxStream [label="AuxStream", href="../base/api-python.html#api-python-datamodel-auxstream", target="_top"]
   Stream [label="Stream", href="../base/api-python.html#api-python-datamodel-stream", target="_top"]
   Inventory [label="Inventory", href="../base/api-python.html#api-python-datamodel-inventory", target="_top"]
   Inventory -> StationGroup [dir=back arrowtail=diamond]
   StationGroup -> StationReference [dir=back arrowtail=diamond]
   Inventory -> AuxDevice [dir=back arrowtail=diamond]
   AuxDevice -> AuxSource [dir=back arrowtail=diamond]
   Inventory -> Sensor [dir=back arrowtail=diamond]
   Sensor -> SensorCalibration [dir=back arrowtail=diamond]
   Inventory -> Datalogger [dir=back arrowtail=diamond]
   Datalogger -> DataloggerCalibration [dir=back arrowtail=diamond]
   Datalogger -> Decimation [dir=back arrowtail=diamond]
   Inventory -> ResponsePAZ [dir=back arrowtail=diamond]
   Inventory -> ResponseFIR [dir=back arrowtail=diamond]
   Inventory -> ResponseIIR [dir=back arrowtail=diamond]
   Inventory -> ResponsePolynomial [dir=back arrowtail=diamond]
   Inventory -> ResponseFAP [dir=back arrowtail=diamond]
   Inventory -> Network [dir=back arrowtail=diamond]
   Stream -> Comment [dir=back arrowtail=diamond]
   SensorLocation -> Comment [dir=back arrowtail=diamond]
   Station -> Comment [dir=back arrowtail=diamond]
   Network -> Comment [dir=back arrowtail=diamond]
   Network -> Station [dir=back arrowtail=diamond]
   Station -> SensorLocation [dir=back arrowtail=diamond]
   SensorLocation -> AuxStream [dir=back arrowtail=diamond]
   SensorLocation -> Stream [dir=back arrowtail=diamond]
}

   StationGroup [
       labeltooltip = "StationGroup"
       label = <
               <tr><td>StationGroup</td></tr>
               <hr/>
               <tr><td align="left" port="type"><font color="#8b0000">+ type: StationGroupType  [0..1]</font></td></tr>
               <tr><td align="left" port="description"><font color="#8b0000">+ description: string</font></td></tr>
               <tr><td align="left" port="latitude"><font color="#8b0000">+ latitude: float  [0..1]</font></td></tr>
               <tr><td align="left" port="longitude"><font color="#8b0000">+ longitude: float  [0..1]</font></td></tr>
               <tr><td align="left" port="elevation"><font color="#8b0000">+ elevation: float  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ stationReference: StationReference [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-stationgroup"
   ]
   StationReference [
       labeltooltip = "StationReference"
       label = <
               <tr><td>StationReference</td></tr>
               <hr/>
               <tr><td align="left" port="stationID"><font color="#8b0000">+ stationID: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-stationreference"
   ]
   AuxDevice [
       labeltooltip = "AuxDevice"
       label = <
               <tr><td>AuxDevice</td></tr>
               <hr/>
               <tr><td align="left" port="model"><font color="#8b0000">+ model: string</font></td></tr>
               <tr><td align="left" port="manufacturer"><font color="#8b0000">+ manufacturer: string</font></td></tr>
               <tr><td align="left" port="remark"><font color="#8b0000">+ remark: Blob  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ auxSource: AuxSource [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-auxdevice"
   ]
   AuxSource [
       labeltooltip = "AuxSource"
       label = <
               <tr><td>AuxSource</td></tr>
               <hr/>
               <tr><td align="left" port="conversion"><font color="#8b0000">+ conversion: string</font></td></tr>
               <tr><td align="left" port="sampleRateNumerator"><font color="#8b0000">+ sampleRateNumerator: int  [0..1]</font></td></tr>
               <tr><td align="left" port="sampleRateDenominator"><font color="#8b0000">+ sampleRateDenominator: int  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-auxsource"
   ]
   Sensor [
       labeltooltip = "Sensor"
       label = <
               <tr><td>Sensor</td></tr>
               <hr/>
               <tr><td align="left" port="lowFrequency"><font color="#8b0000">+ lowFrequency: float  [0..1]</font></td></tr>
               <tr><td align="left" port="highFrequency"><font color="#8b0000">+ highFrequency: float  [0..1]</font></td></tr>
               <tr><td align="left" port="response"><font color="#8b0000">+ response: string</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ sensorCalibration: SensorCalibration [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-sensor"
   ]
   SensorCalibration [
       labeltooltip = "SensorCalibration"
       label = <
               <tr><td>SensorCalibration</td></tr>
               <hr/>
               <tr><td align="left" port="serialNumber"><font color="#8b0000">+ serialNumber: string</font></td></tr>
               <tr><td align="left" port="channel"><font color="#8b0000">+ channel: int</font></td></tr>
               <tr><td align="left" port="gain"><font color="#8b0000">+ gain: float  [0..1]</font></td></tr>
               <tr><td align="left" port="gainFrequency"><font color="#8b0000">+ gainFrequency: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-sensorcalibration"
   ]
   Datalogger [
       labeltooltip = "Datalogger"
       label = <
               <tr><td>Datalogger</td></tr>
               <hr/>
               <tr><td align="left" port="digitizerModel"><font color="#8b0000">+ digitizerModel: string</font></td></tr>
               <tr><td align="left" port="digitizerManufacturer"><font color="#8b0000">+ digitizerManufacturer: string</font></td></tr>
               <tr><td align="left" port="recorderModel"><font color="#8b0000">+ recorderModel: string</font></td></tr>
               <tr><td align="left" port="recorderManufacturer"><font color="#8b0000">+ recorderManufacturer: string</font></td></tr>
               <tr><td align="left" port="clockModel"><font color="#8b0000">+ clockModel: string</font></td></tr>
               <tr><td align="left" port="clockManufacturer"><font color="#8b0000">+ clockManufacturer: string</font></td></tr>
               <tr><td align="left" port="clockType"><font color="#8b0000">+ clockType: string</font></td></tr>
               <tr><td align="left" port="maxClockDrift"><font color="#8b0000">+ maxClockDrift: float  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ dataloggerCalibration: DataloggerCalibration [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ decimation: Decimation [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-datalogger"
   ]
   DataloggerCalibration [
       labeltooltip = "DataloggerCalibration"
       label = <
               <tr><td>DataloggerCalibration</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-dataloggercalibration"
   ]
   Decimation [
       labeltooltip = "Decimation"
       label = <
               <tr><td>Decimation</td></tr>
               <hr/>
               <tr><td align="left" port="sampleRateNumerator"><font color="#8b0000">+ sampleRateNumerator: int</font></td></tr>
               <tr><td align="left" port="sampleRateDenominator"><font color="#8b0000">+ sampleRateDenominator: int</font></td></tr>
               <tr><td align="left" port="analogueFilterChain"><font color="#8b0000">+ analogueFilterChain: Blob  [0..1]</font></td></tr>
               <tr><td align="left" port="digitalFilterChain"><font color="#8b0000">+ digitalFilterChain: Blob  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-decimation"
   ]
   ResponsePAZ [
       labeltooltip = "ResponsePAZ"
       label = <
               <tr><td>ResponsePAZ</td></tr>
               <hr/>
               <tr><td align="left" port="normalizationFactor"><font color="#8b0000">+ normalizationFactor: float  [0..1]</font></td></tr>
               <tr><td align="left" port="normalizationFrequency"><font color="#8b0000">+ normalizationFrequency: float  [0..1]</font></td></tr>
               <tr><td align="left" port="numberOfZeros"><font color="#8b0000">+ numberOfZeros: int  [0..1]</font></td></tr>
               <tr><td align="left" port="numberOfPoles"><font color="#8b0000">+ numberOfPoles: int  [0..1]</font></td></tr>
               <tr><td align="left" port="zeros"><font color="#8b0000">+ zeros: ComplexArray  [0..1]</font></td></tr>
               <tr><td align="left" port="poles"><font color="#8b0000">+ poles: ComplexArray  [0..1]</font></td></tr>
               <tr><td align="left" port="decimationFactor"><font color="#8b0000">+ decimationFactor: int  [0..1]</font></td></tr>
               <tr><td align="left" port="delay"><font color="#8b0000">+ delay: float  [0..1]</font></td></tr>
               <tr><td align="left" port="correction"><font color="#8b0000">+ correction: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-responsepaz"
   ]
   ResponseFIR [
       labeltooltip = "ResponseFIR"
       label = <
               <tr><td>ResponseFIR</td></tr>
               <hr/>
               <tr><td align="left" port="numberOfCoefficients"><font color="#8b0000">+ numberOfCoefficients: int  [0..1]</font></td></tr>
               <tr><td align="left" port="symmetry"><font color="#8b0000">+ symmetry: string</font></td></tr>
               <tr><td align="left" port="coefficients"><font color="#8b0000">+ coefficients: RealArray  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-responsefir"
   ]
   ResponseIIR [
       labeltooltip = "ResponseIIR"
       label = <
               <tr><td>ResponseIIR</td></tr>
               <hr/>
               <tr><td align="left" port="numberOfNumerators"><font color="#8b0000">+ numberOfNumerators: int  [0..1]</font></td></tr>
               <tr><td align="left" port="numberOfDenominators"><font color="#8b0000">+ numberOfDenominators: int  [0..1]</font></td></tr>
               <tr><td align="left" port="numerators"><font color="#8b0000">+ numerators: RealArray  [0..1]</font></td></tr>
               <tr><td align="left" port="denominators"><font color="#8b0000">+ denominators: RealArray  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-responseiir"
   ]
   ResponsePolynomial [
       labeltooltip = "ResponsePolynomial"
       label = <
               <tr><td>ResponsePolynomial</td></tr>
               <hr/>
               <tr><td align="left" port="frequencyUnit"><font color="#8b0000">+ frequencyUnit: string</font></td></tr>
               <tr><td align="left" port="approximationType"><font color="#8b0000">+ approximationType: string</font></td></tr>
               <tr><td align="left" port="approximationLowerBound"><font color="#8b0000">+ approximationLowerBound: float  [0..1]</font></td></tr>
               <tr><td align="left" port="approximationUpperBound"><font color="#8b0000">+ approximationUpperBound: float  [0..1]</font></td></tr>
               <tr><td align="left" port="approximationError"><font color="#8b0000">+ approximationError: float  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-responsepolynomial"
   ]
   ResponseFAP [
       labeltooltip = "ResponseFAP"
       label = <
               <tr><td>ResponseFAP</td></tr>
               <hr/>
               <tr><td align="left" port="numberOfTuples"><font color="#8b0000">+ numberOfTuples: int  [0..1]</font></td></tr>
               <tr><td align="left" port="tuples"><font color="#8b0000">+ tuples: RealArray  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-responsefap"
   ]
   Network [
       labeltooltip = "Network"
       label = <
               <tr><td>Network</td></tr>
               <hr/>
               <tr><td align="left" port="institutions"><font color="#8b0000">+ institutions: string</font></td></tr>
               <tr><td align="left" port="region"><font color="#8b0000">+ region: string</font></td></tr>
               <tr><td align="left" port="netClass"><font color="#8b0000">+ netClass: string</font></td></tr>
               <tr><td align="left" port="archive"><font color="#8b0000">+ archive: string</font></td></tr>
               <tr><td align="left" port="restricted"><font color="#8b0000">+ restricted: boolean  [0..1]</font></td></tr>
               <tr><td align="left" port="shared"><font color="#8b0000">+ shared: boolean  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ station: Station [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-network"
   ]
   Comment [
       label = <
               <hr/>
           </table>
       >
   ]
   Station [
       labeltooltip = "Station"
       label = <
               <tr><td>Station</td></tr>
               <hr/>
               <tr><td align="left" port="place"><font color="#8b0000">+ place: string</font></td></tr>
               <tr><td align="left" port="country"><font color="#8b0000">+ country: string</font></td></tr>
               <tr><td align="left" port="affiliation"><font color="#8b0000">+ affiliation: string</font></td></tr>
               <tr><td align="left" port="archiveNetworkCode"><font color="#8b0000">+ archiveNetworkCode: string</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ sensorLocation: SensorLocation [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-station"
   ]
   SensorLocation [
       labeltooltip = "SensorLocation"
       label = <
               <tr><td>SensorLocation</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ auxStream: AuxStream [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ stream: Stream [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-sensorlocation"
   ]
   AuxStream [
       labeltooltip = "AuxStream"
       label = <
               <tr><td>AuxStream</td></tr>
               <hr/>
               <tr><td align="left" port="device"><font color="#8b0000">+ device: string</font></td></tr>
               <tr><td align="left" port="deviceSerialNumber"><font color="#8b0000">+ deviceSerialNumber: string</font></td></tr>
               <tr><td align="left" port="source"><font color="#8b0000">+ source: string</font></td></tr>
               <tr><td align="left" port="format"><font color="#8b0000">+ format: string</font></td></tr>
               <tr><td align="left" port="flags"><font color="#8b0000">+ flags: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-auxstream"
   ]
   Stream [
       labeltooltip = "Stream"
       label = <
               <tr><td>Stream</td></tr>
               <hr/>
               <tr><td align="left" port="datalogger"><font color="#8b0000">+ datalogger: string</font></td></tr>
               <tr><td align="left" port="dataloggerSerialNumber"><font color="#8b0000">+ dataloggerSerialNumber: string</font></td></tr>
               <tr><td align="left" port="dataloggerChannel"><font color="#8b0000">+ dataloggerChannel: int  [0..1]</font></td></tr>
               <tr><td align="left" port="sensor"><font color="#8b0000">+ sensor: string</font></td></tr>
               <tr><td align="left" port="sensorSerialNumber"><font color="#8b0000">+ sensorSerialNumber: string</font></td></tr>
               <tr><td align="left" port="sensorChannel"><font color="#8b0000">+ sensorChannel: int  [0..1]</font></td></tr>
               <tr><td align="left" port="clockSerialNumber"><font color="#8b0000">+ clockSerialNumber: string</font></td></tr>
               <tr><td align="left" port="depth"><font color="#8b0000">+ depth: float  [0..1]</font></td></tr>
               <tr><td align="left" port="dip"><font color="#8b0000">+ dip: float  [0..1]</font></td></tr>
               <tr><td align="left" port="gainUnit"><font color="#8b0000">+ gainUnit: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-stream"
   ]
   Inventory [
       labeltooltip = "Inventory"
       label = <
               <tr><td>Inventory</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ stationGroup: StationGroup [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ auxDevice: AuxDevice [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ sensor: Sensor [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ datalogger: Datalogger [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ responsePAZ: ResponsePAZ [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ responseFIR: ResponseFIR [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ responseIIR: ResponseIIR [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ responsePolynomial: ResponsePolynomial [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ responseFAP: ResponseFAP [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ network: Network [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-inventory"
   ]
}

Inventory object connections from parent to child including attributes and elements.

digraph "Routing hierarchy" {
   Route [
       labeltooltip = "Route"
       label = <
               <tr><td>Route</td></tr>
               <hr/>
               <tr><td align="left" port="locationCode"><font color="#8b0000">+ locationCode: string</font></td></tr>
               <tr><td align="left" port="streamCode"><font color="#8b0000">+ streamCode: string</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ routeArclink: RouteArclink [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ routeSeedlink: RouteSeedlink [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-route"
   ]
   RouteArclink [
       labeltooltip = "RouteArclink"
       label = <
               <tr><td>RouteArclink</td></tr>
               <hr/>
               <tr><td align="left" port="address"><font color="#8b0000">+ address: string</font></td></tr>
               <tr><td align="left" port="priority"><font color="#8b0000">+ priority: int  [0..1]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-routearclink"
   ]
   RouteSeedlink [
       labeltooltip = "RouteSeedlink"
       label = <
               <tr><td>RouteSeedlink</td></tr>
               <hr/>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-routeseedlink"
   ]
   Access [
       labeltooltip = "Access"
       label = <
               <tr><td>Access</td></tr>
               <hr/>
               <tr><td align="left" port="user"><font color="#8b0000">+ user: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-access"
   ]
   Routing [
       labeltooltip = "Routing"
       label = <
               <tr><td>Routing</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ route: Route [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ access: Access [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-routing"
   ]
   Routing -> Route [dir=back arrowtail=diamond]
   Route -> RouteArclink [dir=back arrowtail=diamond]
   Route -> RouteSeedlink [dir=back arrowtail=diamond]
   Routing -> Access [dir=back arrowtail=diamond]
}

Routing object connections from parent to child including attributes and elements.

digraph "Journaling hierarchy" {
   JournalEntry [
       labeltooltip = "JournalEntry"
       label = <
               <tr><td>JournalEntry</td></tr>
               <hr/>
               <tr><td align="left" port="objectID"><font color="#8b0000">+ objectID: string</font></td></tr>
               <tr><td align="left" port="sender"><font color="#8b0000">+ sender: string</font></td></tr>
               <tr><td align="left" port="action"><font color="#8b0000">+ action: string</font></td></tr>
               <tr><td align="left" port="parameters"><font color="#8b0000">+ parameters: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-journalentry"
   ]
   Journaling [
       labeltooltip = "Journaling"
       label = <
               <tr><td>Journaling</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ journalEntry: JournalEntry [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-journaling"
   ]
   Journaling -> JournalEntry [dir=back arrowtail=diamond]
}

Journaling object connections from parent to child including attributes and elements.

digraph "ArclinkLog hierarchy" {
   ArclinkRequest [
       labeltooltip = "ArclinkRequest"
       label = <
               <tr><td>ArclinkRequest</td></tr>
               <hr/>
               <tr><td align="left" port="requestID"><font color="#8b0000">+ requestID: string</font></td></tr>
               <tr><td align="left" port="userID"><font color="#8b0000">+ userID: string</font></td></tr>
               <tr><td align="left" port="userIP"><font color="#8b0000">+ userIP: string</font></td></tr>
               <tr><td align="left" port="clientID"><font color="#8b0000">+ clientID: string</font></td></tr>
               <tr><td align="left" port="clientIP"><font color="#8b0000">+ clientIP: string</font></td></tr>
               <tr><td align="left" port="status"><font color="#8b0000">+ status: string</font></td></tr>
               <tr><td align="left" port="label"><font color="#8b0000">+ label: string</font></td></tr>
               <tr><td align="left" port="header"><font color="#8b0000">+ header: string</font></td></tr>
               <tr><td align="left" port="summary"><font color="#8b0000">+ summary: ArclinkRequestSummary  [0..1]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ arclinkStatusLine: ArclinkStatusLine [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ arclinkRequestLine: ArclinkRequestLine [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arclinkrequest"
   ]
   ArclinkStatusLine [
       labeltooltip = "ArclinkStatusLine"
       label = <
               <tr><td>ArclinkStatusLine</td></tr>
               <hr/>
               <tr><td align="left" port="size"><font color="#8b0000">+ size: int  [0..1]</font></td></tr>
               <tr><td align="left" port="volumeID"><font color="#8b0000">+ volumeID: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arclinkstatusline"
   ]
   ArclinkRequestLine [
       labeltooltip = "ArclinkRequestLine"
       label = <
               <tr><td>ArclinkRequestLine</td></tr>
               <hr/>
               <tr><td align="left" port="streamID"><font color="#8b0000">+ streamID: WaveformStreamID</font></td></tr>
               <tr><td align="left" port="constraints"><font color="#8b0000">+ constraints: string</font></td></tr>
               <tr><td align="left" port="status"><font color="#8b0000">+ status: ArclinkStatusLine</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arclinkrequestline"
   ]
   ArclinkUser [
       labeltooltip = "ArclinkUser"
       label = <
               <tr><td>ArclinkUser</td></tr>
               <hr/>
               <tr><td align="left" port="email"><font color="#8b0000">+ email: string</font></td></tr>
               <tr><td align="left" port="password"><font color="#8b0000">+ password: string</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arclinkuser"
   ]
   ArclinkLog [
       labeltooltip = "ArclinkLog"
       label = <
               <tr><td>ArclinkLog</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ arclinkRequest: ArclinkRequest [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ arclinkUser: ArclinkUser [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-arclinklog"
   ]
   ArclinkLog -> ArclinkRequest [dir=back arrowtail=diamond]
   ArclinkRequest -> ArclinkStatusLine [dir=back arrowtail=diamond]
   ArclinkRequest -> ArclinkRequestLine [dir=back arrowtail=diamond]
   ArclinkLog -> ArclinkUser [dir=back arrowtail=diamond]
}

ArclinkLog object connections from parent to child including attributes and elements.

digraph "DataAvailability hierarchy" {
   DataExtent [
       labeltooltip = "DataExtent"
       label = <
               <tr><td>DataExtent</td></tr>
               <hr/>
               <tr><td align="left" port="updated"><font color="#8b0000">+ updated: datetime</font></td></tr>
               <tr><td align="left" port="lastScan"><font color="#8b0000">+ lastScan: datetime</font></td></tr>
               <tr><td align="left" port="segmentOverflow"><font color="#8b0000">+ segmentOverflow: boolean</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ dataSegment: DataSegment [0..*]</font></td></tr>
               <tr><td align="left"><font color="#8b0000">+ dataAttributeExtent: DataAttributeExtent [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-dataextent"
   ]
   DataSegment [
       labeltooltip = "DataSegment"
       label = <
               <tr><td>DataSegment</td></tr>
               <hr/>
               <tr><td align="left" port="sampleRate"><font color="#8b0000">+ sampleRate: double</font></td></tr>
               <tr><td align="left" port="quality"><font color="#8b0000">+ quality: string</font></td></tr>
               <tr><td align="left" port="outOfOrder"><font color="#8b0000">+ outOfOrder: boolean</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-datasegment"
   ]
   DataAttributeExtent [
       labeltooltip = "DataAttributeExtent"
       label = <
               <tr><td>DataAttributeExtent</td></tr>
               <hr/>
               <tr><td align="left" port="segmentCount"><font color="#8b0000">+ segmentCount: int</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-dataattributeextent"
   ]
   DataAvailability [
       labeltooltip = "DataAvailability"
       label = <
               <tr><td>DataAvailability</td></tr>
               <hr/>
               <tr><td align="left"><font color="#8b0000">+ dataExtent: DataExtent [0..*]</font></td></tr>
           </table>
       >
       href = "../base/api-python.html#api-python-datamodel-dataavailability"
   ]
   DataAvailability -> DataExtent [dir=back arrowtail=diamond]
   DataExtent -> DataSegment [dir=back arrowtail=diamond]
   DataExtent -> DataAttributeExtent [dir=back arrowtail=diamond]
}

DataAvailability object connections from parent to child including attributes and elements.

:ref:`StationGroupType <api-python-datamodel-stationgrouptype>`

Returns the :ref:`PublicObject <api-python-datamodel-publicobject>`
parent object is available, None otherwise.

Sets the parent to :ref:`PublicObject <api-python-datamodel-publicobject>`.
This is an internal method and should not be called from applications.
Instead a class should be derived from Object which calls
this method internally when children are being added or removed.

.

Creates an update notifier for this object ignoring its children. If an
attribute of an object is changed this methods needs to be called
manually since attribute changes are not tracked automatically by the
notifier framework. Only hierarchy modifications such as add and remove
child objects.

Assign the metadata of 'other' to 'this' without others children.
Returns True, if 'this' and 'other' are of same type, False otherwise.

Assign the metadata of ‘other’ to ‘this’ without others children.
Returns True, if ‘this’ and ‘other’ are of same type, False otherwise.

Clones an object. If the clonee is a
:ref:`PublicObject <api-python-datamodel-publicobject>`
it is not registered in the global instance pool but receives exactly the
same publicID like 'this'.

same publicID like ‘this’.

Adds the object to a parent. If it has already a parent or is of
wrong type, False is returned.

Removes the object from a parent. If it has another or no parent,
False is returned.

Class to represent a change in the object tree. A notifier takes a parentID,
an operation to apply and a child object. The child object is without children.

Enables the notifier pool. If enabled, notifiers are automatically created
if the object tree is being changed.

Enables/disables checking previous inserted notifiers
when a new notifiers is about to be queued. When
enabled, and OP_ADD and OP_UPDATE of the same object
results in only one OP_ADD notifier.

allNotifier -- Defines whether to return one message including all
notifiers or one message including one notifier.

Defines whether to return one message including all

A NotifierMessage object if there is one. If each notifier is
being send by its own message, this method should be called
until it returns None.

being send by its own message

Returns a message holding all notifications since the
last call. All stored notifications will be removed from
the notification pool.

parentID -- The publicID of the parent object that is target of the operation.

The publicID of the parent object that is target of the operation.

Creates a notifier object managed by the global notifier pool.
If the notifier pool is disabled no notifier instance will
be created and None is being returned.

:param parent The parent object that is target of the operation.
:param operation: The operation applied to the parent object.
:param object: The object that is the operation's "operand".
:rtype: The Notifier object.

:param object: The object that is the operation’s “operand”.

An object of type Access if the cast was successful,
None otherwise.

Cast an arbitrary object to Access if the internal wrapped
representation is an Access object. The cast is important if
instances of type :ref:`Object <api-python-datamodel-object>`
are passed to methods which need access to the real type.

instances of type 

other -- Another object of type Access to compare this
instance to

A Boolean value indicating True if both objects are equal or
False otherwise.

Compares two objects without its child objects. Both objects are compared
by value.

The object's index of type AccessIndex.Returns the objects index which is also used for the database as unique
constraint.

Returns the objects index which is also used for the database as unique

A Boolean value indicating True if both indexes are equal or

As this attribute is optional, this method throws a ValueError if
the value of the attribute is not set.

Returns the parent Routing if available. Returns None
if the parent is not a Routing. This is a convenience wrapper
for parent().

This method implements the :ref:`Object <api-python-datamodel-object>` interface.

Returns a new instance that is a clone of the current instance. Child
objects are being ignored.

This method implements the :ref:`PublicObject <api-python-datamodel-publicobject>` interface.

Inherits :ref:`PublicObject <api-python-datamodel-publicobject>`.

This class represents a quantification of the waveform anomaly, usually
a single amplitude measurement or a measurement of the visible signal
duration for duration magnitudes.

``eventParameters`` -- :ref:`EventParameters <api-python-datamodel-eventparameters>`

``amplitude`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``timeWindow`` -- :ref:`TimeWindow <api-python-datamodel-timewindow>` (optional)

``period`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``waveformID`` -- :ref:`WaveformStreamID <api-python-datamodel-waveformstreamid>` (optional)

``scalingTime`` -- :ref:`TimeQuantity <api-python-datamodel-timequantity>` (optional)

``evaluationMode`` -- :ref:`EvaluationMode <api-python-datamodel-evaluationmode>` (optional)

``creationInfo`` -- :ref:`CreationInfo <api-python-datamodel-creationinfo>` (optional)

An object of type Amplitude if the cast was successful,

Cast an arbitrary object to Amplitude if the internal wrapped
representation is an Amplitude object. The cast is important if

Creates and registers (if enabled) a Amplitude instance. The
publicID is auto-generated.

Creates and registers (if enabled) a Amplitude instance with
passed publicID.

other -- Another object of type Amplitude to compare this

String that describes the type of amplitude using the nomenclature
from Storchak et al. \(2003\). Possible values include unspecified
amplitude reading \(A\), amplitude reading for local magnitude \(ML\),
amplitude reading for body wave magnitude \(MB\), amplitude reading
for surface wave magnitude \(MS\), and time of visible end of record
for duration magnitude \(MD\). It has a maximum length of 16 characters.

Measured amplitude value for the given waveformID. Note that this
attribute can describe different physical quantities, depending on
the type of the amplitude. These can be, e.g., displacement, velocity,
or a period. If the only amplitude information is a period, it has
to specified here, not in the period attribute. The latter can be used
if the amplitude measurement contains information on, e.g.,
displacement and an additional period. Since the physical quantity
described by this attribute is not fixed, the unit of measurement
cannot be defined in advance. However, the quantity has to be
specified in SI base units. The enumeration given in attribute unit
provides the most likely units that could be needed here.
For clarity, using the optional unit attribute is highly encouraged.

Description of the time window used for amplitude measurement.
Recommended for duration magnitudes.

Dominant period in the timeWindow in case of amplitude measurements.
Not used for duration magnitude. The unit is seconds.

Signal\-to\-noise ratio of the spectrogram at the location the amplitude was
measured.

This attribute provides the most likely measurement units for the
physical quantity described in the amplitude attribute.
Possible values are specified as combinations of SI base units.

Identifies the waveform stream on which the amplitude was measured.

Identifies the filter or filter setup used for filtering the waveform stream
referenced by waveformID.

Type of magnitude the amplitude measurement is used for. For valid
values see class Magnitude. String value with a maximum length of
16 characters.

Adds a Comment object to Amplitude. The object is not
copied but managed by this instance. Any change to the passed object
will also change the child.

commentIndex -- The index of the object to be removed of type CommentIndex.

Returns the Comment at given index. The indexes of all child objects
are compared by value which makes this function slower than the direct
integer index look-up.

Returns the parent EventParameters if available. Returns None
if the parent is not a EventParameters. This is a convenience wrapper

This method takes the passed reference object and searches for a child
with the same publicID (if derived from :ref:`PublicObject <api-python-datamodel-publicobject>`)
or the same index (if derived from :ref:`Object <api-python-datamodel-object>`).
The the child was found the reference objects attributes are copied to
the child object. Children of child are being ignored during this operation.

with the same publicID (if derived from 

).
This method implements the 

An object of type AmplitudeReference if the cast was successful,

Cast an arbitrary object to AmplitudeReference if the internal wrapped
representation is an AmplitudeReference object. The cast is important if

other -- Another object of type AmplitudeReference to compare this

Another object of type AmplitudeReference to compare this

The object's index of type AmplitudeReferenceIndex.Returns the objects index which is also used for the database as unique

Returns the parent Reading if available. Returns None
if the parent is not a Reading. This is a convenience wrapper

``arclinkRequest`` -- :ref:`ArclinkRequest <api-python-datamodel-arclinkrequest>`

``arclinkUser`` -- :ref:`ArclinkUser <api-python-datamodel-arclinkuser>`

An object of type ArclinkLog if the cast was successful,

Cast an arbitrary object to ArclinkLog if the internal wrapped
representation is an ArclinkLog object. The cast is important if

other -- Another object of type ArclinkLog to compare this

Adds a ArclinkRequest object to ArclinkLog. The object is not

Adds a ArclinkUser object to ArclinkLog. The object is not

Removes a previously added ArclinkRequest object from ArclinkLog.

arclinkRequestIndex -- The index of the object to be removed of type ArclinkRequestIndex.

The index of the object to be removed of type ArclinkRequestIndex.

arclinkUserIndex -- The index of the object to be removed of type ArclinkUserIndex.

Returns the ArclinkRequest at given index. The indexes of all child objects

Returns the ArclinkUser at given index. The indexes of all child objects

Returns the child object with a certain publicID, None otherwise.

``arclinkLog`` -- :ref:`ArclinkLog <api-python-datamodel-arclinklog>`

``arclinkStatusLine`` -- :ref:`ArclinkStatusLine <api-python-datamodel-arclinkstatusline>`

``arclinkRequestLine`` -- :ref:`ArclinkRequestLine <api-python-datamodel-arclinkrequestline>`

``summary`` -- :ref:`ArclinkRequestSummary <api-python-datamodel-arclinkrequestsummary>` (optional)

An object of type ArclinkRequest if the cast was successful,

Cast an arbitrary object to ArclinkRequest if the internal wrapped
representation is an ArclinkRequest object. The cast is important if

Creates and registers (if enabled) a ArclinkRequest instance. The

Creates and registers (if enabled) a ArclinkRequest instance with

other -- Another object of type ArclinkRequest to compare this

Another object of type ArclinkRequest to compare this

The object's index of type ArclinkRequestIndex.Returns the objects index which is also used for the database as unique

Adds a ArclinkStatusLine object to ArclinkRequest. The object is not

Adds a ArclinkRequestLine object to ArclinkRequest. The object is not

Removes a previously added ArclinkStatusLine object from ArclinkRequest.

Removes a previously added ArclinkRequestLine object from ArclinkRequest.

removeArclinkStatusLine() (seiscomp.datamodel.ArclinkRequest method)

arclinkStatusLineIndex -- The index of the object to be removed of type ArclinkStatusLineIndex.

The index of the object to be removed of type ArclinkStatusLineIndex.

removeArclinkRequestLine() (seiscomp.datamodel.ArclinkRequest method)

arclinkRequestLineIndex -- The index of the object to be removed of type ArclinkRequestLineIndex.

The index of the object to be removed of type ArclinkRequestLineIndex.

arclinkStatusLineCount() (seiscomp.datamodel.ArclinkRequest method)

arclinkRequestLineCount() (seiscomp.datamodel.ArclinkRequest method)

Returns the ArclinkStatusLine at given index. The indexes of all child objects

Returns the ArclinkRequestLine at given index. The indexes of all child objects

Returns the parent ArclinkLog if available. Returns None
if the parent is not a ArclinkLog. This is a convenience wrapper

``streamID`` -- :ref:`WaveformStreamID <api-python-datamodel-waveformstreamid>`

``status`` -- :ref:`ArclinkStatusLine <api-python-datamodel-arclinkstatusline>`

An object of type ArclinkRequestLine if the cast was successful,

Cast an arbitrary object to ArclinkRequestLine if the internal wrapped
representation is an ArclinkRequestLine object. The cast is important if

other -- Another object of type ArclinkRequestLine to compare this

Another object of type ArclinkRequestLine to compare this

The object's index of type ArclinkRequestLineIndex.Returns the objects index which is also used for the database as unique

Returns the parent ArclinkRequest if available. Returns None
if the parent is not a ArclinkRequest. This is a convenience wrapper

An object of type ArclinkRequestSummary if the cast was successful,

Cast an arbitrary object to ArclinkRequestSummary if the internal wrapped
representation is an ArclinkRequestSummary object. The cast is important if

other -- Another object of type ArclinkRequestSummary to compare this

Another object of type ArclinkRequestSummary to compare this

setOkLineCount() (seiscomp.datamodel.ArclinkRequestSummary method)

setTotalLineCount() (seiscomp.datamodel.ArclinkRequestSummary method)

totalLineCount() (seiscomp.datamodel.ArclinkRequestSummary method)

setAverageTimeWindow() (seiscomp.datamodel.ArclinkRequestSummary method)

averageTimeWindow() (seiscomp.datamodel.ArclinkRequestSummary method)

An object of type ArclinkStatusLine if the cast was successful,

Cast an arbitrary object to ArclinkStatusLine if the internal wrapped
representation is an ArclinkStatusLine object. The cast is important if

other -- Another object of type ArclinkStatusLine to compare this

Another object of type ArclinkStatusLine to compare this

The object's index of type ArclinkStatusLineIndex.Returns the objects index which is also used for the database as unique

An object of type ArclinkUser if the cast was successful,

Cast an arbitrary object to ArclinkUser if the internal wrapped
representation is an ArclinkUser object. The cast is important if

Creates and registers (if enabled) a ArclinkUser instance. The

Creates and registers (if enabled) a ArclinkUser instance with

other -- Another object of type ArclinkUser to compare this

The object's index of type ArclinkUserIndex.Returns the objects index which is also used for the database as unique

Successful association of a pick with an origin qualifies this pick as
an arrival. An arrival thus connects a pick with an origin and provides
additional attributes that describe this relationship. Usually qualification
of a pick as an arrival for a given origin is a hypothesis, which is
based on assumptions about the type of arrival \(phase\) as well as
observed and \(on the basis of an earth model\) computed arrival times,
or the residual, respectively. Additional pick attributes like the
horizontal slowness and backazimuth of the observed wave\-especially if
derived from array data\-may further constrain the nature of the arrival.

An object of type Arrival if the cast was successful,

Cast an arbitrary object to Arrival if the internal wrapped
representation is an Arrival object. The cast is important if

other -- Another object of type Arrival to compare this

The object's index of type ArrivalIndex.Returns the objects index which is also used for the database as unique

Phase identification. For possible values, please refer to the description
of the Phase type.

Time correction value. Usually, a value characteristic for the station
at which the pick was detected, sometimes also characteristic for the
phase type or the slowness in seconds.

Angle of emerging ray at the source, measured against the downward
normal direction in degrees.

Residual between observed and expected arrival time assuming proper
phase identification and given the earthModelID of the Origin,
taking into account the timeCorrection in seconds.

setHorizontalSlownessResidual() (seiscomp.datamodel.Arrival method)

Residual of horizontal slowness and the expected slowness given the
current origin \(refers to attribute horizontalSlowness of class Pick\)
in s\/deg.

horizontalSlownessResidual() (seiscomp.datamodel.Arrival method)

Residual of backazimuth and the backazimuth computed for the current
origin \(refers to attribute backazimuth of class Pick\) in degrees.

Weight of the horizontal slowness for computation of the associated Origin.
Note that the sum of all weights is not required to be unity.

Weight of the arrival time for computation of the associated Origin.

Earth model which is used for the association of Arrival to Pick and
computation of the
residuals.

Returns the parent Origin if available. Returns None
if the parent is not a Origin. This is a convenience wrapper

``inventory`` -- :ref:`Inventory <api-python-datamodel-inventory>`

``auxSource`` -- :ref:`AuxSource <api-python-datamodel-auxsource>`

``remark`` -- :ref:`Blob <api-python-datamodel-blob>` (optional)

An object of type AuxDevice if the cast was successful,

Cast an arbitrary object to AuxDevice if the internal wrapped
representation is an AuxDevice object. The cast is important if

Creates and registers (if enabled) a AuxDevice instance. The

Creates and registers (if enabled) a AuxDevice instance with

other -- Another object of type AuxDevice to compare this

The object's index of type AuxDeviceIndex.Returns the objects index which is also used for the database as unique

Adds a AuxSource object to AuxDevice. The object is not

auxSourceIndex -- The index of the object to be removed of type AuxSourceIndex.

Returns the AuxSource at given index. The indexes of all child objects

Returns the parent Inventory if available. Returns None
if the parent is not a Inventory. This is a convenience wrapper

``auxDevice`` -- :ref:`AuxDevice <api-python-datamodel-auxdevice>`

An object of type AuxSource if the cast was successful,

Cast an arbitrary object to AuxSource if the internal wrapped
representation is an AuxSource object. The cast is important if

other -- Another object of type AuxSource to compare this

The object's index of type AuxSourceIndex.Returns the objects index which is also used for the database as unique

Output sample rate \(numerator\); referred from
network\/station\/AuxStream\/\@sampleRateNumerator

setSampleRateDenominator() (seiscomp.datamodel.AuxSource method)

Output sample rate \(denominator\); referred from
network\/station\/AuxStream\/\@sampleRateDenominator

Returns the parent AuxDevice if available. Returns None
if the parent is not a AuxDevice. This is a convenience wrapper

This type describes a stream \(channel\) without defined frequency response

``sensorLocation`` -- :ref:`SensorLocation <api-python-datamodel-sensorlocation>`

An object of type AuxStream if the cast was successful,

Cast an arbitrary object to AuxStream if the internal wrapped
representation is an AuxStream object. The cast is important if

other -- Another object of type AuxStream to compare this

The object's index of type AuxStreamIndex.Returns the objects index which is also used for the database as unique

Data format, eg.: \"steim1\", \"steim2\", \"mseedN\" \(N \= encoding format
in blockette 1000\)

Returns the parent SensorLocation if available. Returns None
if the parent is not a SensorLocation. This is a convenience wrapper

This class describes an eigenvector of a moment tensor expressed in its
principal\-axes system. It uses the angles azimuth, plunge, and the
eigenvalue length.

``azimuth`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``plunge`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``length`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

An object of type Axis if the cast was successful,

Cast an arbitrary object to Axis if the internal wrapped
representation is an Axis object. The cast is important if

other -- Another object of type Axis to compare this

Azimuth of eigenvector of moment tensor expressed in principal\-axes system.
Measured clockwise
from South\-North direction at epicenter in degrees.

Plunge of eigenvector of moment tensor expressed in principal\-axes system.
Measured against downward
vertical direction at epicenter in degrees.

Eigenvalue of moment tensor expressed in principal\-axes system in Nm.

An object of type Blob if the cast was successful,

Cast an arbitrary object to Blob if the internal wrapped
representation is an Blob object. The cast is important if

other -- Another object of type Blob to compare this

Comment holds information on comments to a resource as well as author and
creation time information.

``momentTensor`` -- :ref:`MomentTensor <api-python-datamodel-momenttensor>`

``focalMechanism`` -- :ref:`FocalMechanism <api-python-datamodel-focalmechanism>`

``amplitude`` -- :ref:`Amplitude <api-python-datamodel-amplitude>`

``magnitude`` -- :ref:`Magnitude <api-python-datamodel-magnitude>`

``stationMagnitude`` -- :ref:`StationMagnitude <api-python-datamodel-stationmagnitude>`

``parameter`` -- :ref:`Parameter <api-python-datamodel-parameter>`

``parameterSet`` -- :ref:`ParameterSet <api-python-datamodel-parameterset>`

An object of type Comment if the cast was successful,

Cast an arbitrary object to Comment if the internal wrapped
representation is an Comment object. The cast is important if

other -- Another object of type Comment to compare this

The object's index of type CommentIndex.Returns the objects index which is also used for the database as unique

Returns the parent MomentTensor if available. Returns None
if the parent is not a MomentTensor. This is a convenience wrapper

Returns the parent FocalMechanism if available. Returns None
if the parent is not a FocalMechanism. This is a convenience wrapper

Returns the parent Amplitude if available. Returns None
if the parent is not a Amplitude. This is a convenience wrapper

Returns the parent Magnitude if available. Returns None
if the parent is not a Magnitude. This is a convenience wrapper

Returns the parent StationMagnitude if available. Returns None
if the parent is not a StationMagnitude. This is a convenience wrapper

Returns the parent Pick if available. Returns None
if the parent is not a Pick. This is a convenience wrapper

Returns the parent Event if available. Returns None
if the parent is not a Event. This is a convenience wrapper

Returns the parent Parameter if available. Returns None
if the parent is not a Parameter. This is a convenience wrapper

Returns the parent ParameterSet if available. Returns None
if the parent is not a ParameterSet. This is a convenience wrapper

Returns the parent Stream if available. Returns None
if the parent is not a Stream. This is a convenience wrapper

Returns the parent Station if available. Returns None
if the parent is not a Station. This is a convenience wrapper

Returns the parent Network if available. Returns None
if the parent is not a Network. This is a convenience wrapper

An object of type ComplexArray if the cast was successful,

Cast an arbitrary object to ComplexArray if the internal wrapped
representation is an ComplexArray object. The cast is important if

other -- Another object of type ComplexArray to compare this

Focal times differ significantly in their precision. While focal times
of instrumentally located earthquakes are estimated precisely down to
seconds, historic events have only incomplete time descriptions. Sometimes,
even contradictory information about the rupture time exist. The
CompositeTime type allows for such complex descriptions. If the specification
is given with no greater accuracy than days \(i.e., no time components are
given\), the date refers to local time. However, if time components are
given, they have to refer to UTC. As an example, consider a historic
earthquake in California, e.g., on 28 February 1730, with no time information
given. Expressed in UTC, this day extends from 1730\-02\-28T08:00:00Z
until 1730\-03\-01T08:00:00Z. Such a specification would be against intuition.
Therefore, for date\-time specifications without time components, local
time is used. In the example, the CompositeTime attributes are simply
year 1730, month 2, and day 28. In the corresponding time attribute of
the origin, however, UTC has to be used. If the unknown time components
are assumed to be zero, the value is 1730\-02\-28T08:00:00Z.

``year`` -- :ref:`IntegerQuantity <api-python-datamodel-integerquantity>` (optional)

``month`` -- :ref:`IntegerQuantity <api-python-datamodel-integerquantity>` (optional)

``day`` -- :ref:`IntegerQuantity <api-python-datamodel-integerquantity>` (optional)

``hour`` -- :ref:`IntegerQuantity <api-python-datamodel-integerquantity>` (optional)

``minute`` -- :ref:`IntegerQuantity <api-python-datamodel-integerquantity>` (optional)

``second`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

An object of type CompositeTime if the cast was successful,

Cast an arbitrary object to CompositeTime if the internal wrapped
representation is an CompositeTime object. The cast is important if

other -- Another object of type CompositeTime to compare this

Another object of type CompositeTime to compare this

Second and fraction of seconds or range of seconds with fraction of the
event's focal time.

event’s focal time.

This class represents a description of the location uncertainty as a confidence
ellipsoid with arbitrary orientation in space. The orientation of a rigid
body in three\-dimensional Euclidean space can be described by three
parameters. We use the convention of Euler angles, which can be interpreted
as a composition of three elemental rotations \(i.e., rotations around a single
axis\).
In the special case of Euler angles we use here, the angles are referred
to as Tait\-Bryan \(or Cardan\) angles. These angles may be familiar to
the reader from their application in flight dynamics, and are referred
to as heading \(yaw, psi\), elevation \(attitude, pitch, phi\), and bank
\(roll, theta\).
For a definition of the angles, see Figure 4. Through the three elemental
rotations, a Cartesian system \(x, y, z\) centered at the epicenter, with
the South\-North direction x, the West\-East direction y, and the downward
vertical direction z, is transferred into a different Cartesian system
\(X, Y , Z\) centered on the confidence ellipsoid. Here, X denotes the direction
of the major axis, and Y denotes the direction of the minor axis of the
ellipsoid. Note that Figure 4 can be interpreted as a hypothetical view
from the interior of the Earth to the inner face of a shell representing
Earth's surface. The three Tait\-Bryan rotations are performed as follows:
\(i\) a rotation about the Z axis with angle psi \(heading, or azimuth\);
\(ii\) a rotation about the Y axis with angle phi \(elevation, or plunge\);
and \(iii\) a rotation about the X axis with angle theta \(bank\). Note that in
the case of Tait\-Bryan angles, the rotations are performed about the
ellipsoid's axes, not about the axes of the fixed \(x, y, z\) Cartesian system.
In the following list the correspondence of the attributes of class
ConfidenceEllipsoid to the respective Tait\-Bryan angles is listed:
majorAxisPlunge: elevation \(pitch, phi\), majorAxisAzimuth: heading \(yaw,
psi\), majorAxisRotation: bank \(roll, theta\)

An object of type ConfidenceEllipsoid if the cast was successful,

Cast an arbitrary object to ConfidenceEllipsoid if the internal wrapped
representation is an ConfidenceEllipsoid object. The cast is important if

other -- Another object of type ConfidenceEllipsoid to compare this

Another object of type ConfidenceEllipsoid to compare this

setSemiMajorAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

Largest uncertainty, corresponding to the semi\-major axis of the confidence
ellipsoid in meter.

semiMajorAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

setSemiMinorAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

Smallest uncertainty, corresponding to the semi\-minor axis of the
confidence ellipsoid in meter.

semiMinorAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

setSemiIntermediateAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

Uncertainty in direction orthogonal to major and minor axes of the

semiIntermediateAxisLength() (seiscomp.datamodel.ConfidenceEllipsoid method)

setMajorAxisPlunge() (seiscomp.datamodel.ConfidenceEllipsoid method)

Plunge angle of major axis of confidence ellipsoid. Corresponds to
Tait\-Bryan angle phi
in degrees.

majorAxisPlunge() (seiscomp.datamodel.ConfidenceEllipsoid method)

setMajorAxisAzimuth() (seiscomp.datamodel.ConfidenceEllipsoid method)

Azimuth angle of major axis of confidence ellipsoid. Corresponds to
Tait\-Bryan angle psi

majorAxisAzimuth() (seiscomp.datamodel.ConfidenceEllipsoid method)

setMajorAxisRotation() (seiscomp.datamodel.ConfidenceEllipsoid method)

This angle describes a rotation about the confidence ellipsoid's major axis
which is required
to define the direction of the ellipsoid's minor axis. Corresponds to
Tait\-Bryan angle theta

majorAxisRotation() (seiscomp.datamodel.ConfidenceEllipsoid method)

``configModule`` -- :ref:`ConfigModule <api-python-datamodel-configmodule>`

An object of type Config if the cast was successful,

Cast an arbitrary object to Config if the internal wrapped
representation is an Config object. The cast is important if

other -- Another object of type Config to compare this

Adds a ParameterSet object to Config. The object is not

Adds a ConfigModule object to Config. The object is not

``configStation`` -- :ref:`ConfigStation <api-python-datamodel-configstation>`

An object of type ConfigModule if the cast was successful,

Cast an arbitrary object to ConfigModule if the internal wrapped
representation is an ConfigModule object. The cast is important if

Creates and registers (if enabled) a ConfigModule instance. The

Creates and registers (if enabled) a ConfigModule instance with

other -- Another object of type ConfigModule to compare this

Adds a ConfigStation object to ConfigModule. The object is not

Removes a previously added ConfigStation object from ConfigModule.

configStationIndex -- The index of the object to be removed of type ConfigStationIndex.

The index of the object to be removed of type ConfigStationIndex.

Returns the ConfigStation at given index. The indexes of all child objects

Returns the parent Config if available. Returns None
if the parent is not a Config. This is a convenience wrapper

An object of type ConfigStation if the cast was successful,

Cast an arbitrary object to ConfigStation if the internal wrapped
representation is an ConfigStation object. The cast is important if

Creates and registers (if enabled) a ConfigStation instance. The

Creates and registers (if enabled) a ConfigStation instance with

other -- Another object of type ConfigStation to compare this

Another object of type ConfigStation to compare this

The object's index of type ConfigStationIndex.Returns the objects index which is also used for the database as unique

Adds a Setup object to ConfigStation. The object is not

setupIndex -- The index of the object to be removed of type SetupIndex.

Returns the Setup at given index. The indexes of all child objects

Returns the parent ConfigModule if available. Returns None
if the parent is not a ConfigModule. This is a convenience wrapper

CreationInfo is used to describe creation metadata \(author, version, and
creation time\) of a resource.

An object of type CreationInfo if the cast was successful,

Cast an arbitrary object to CreationInfo if the internal wrapped
representation is an CreationInfo object. The cast is important if

other -- Another object of type CreationInfo to compare this

Designation of agency that published a resource. The string has a maximum
length of 64 characters.

Name describing the author of a resource. The string has a maximum length of
128 characters.

Time of creation of a resource, in ISO 8601 format. It has to be given in
UTC.

Time of last modification of a resource, in ISO 8601 format. It has to be
given in UTC.

``dataExtent`` -- :ref:`DataExtent <api-python-datamodel-dataextent>`

An object of type DataAttributeExtent if the cast was successful,

Cast an arbitrary object to DataAttributeExtent if the internal wrapped
representation is an DataAttributeExtent object. The cast is important if

other -- Another object of type DataAttributeExtent to compare this

Another object of type DataAttributeExtent to compare this

The object's index of type DataAttributeExtentIndex.Returns the objects index which is also used for the database as unique

The time of the last update or creation of this data attribute extent.

setSegmentCount() (seiscomp.datamodel.DataAttributeExtent method)

Returns the parent DataExtent if available. Returns None
if the parent is not a DataExtent. This is a convenience wrapper

This type can hold data availability related objects \(extent and segment\).

An object of type DataAvailability if the cast was successful,

Cast an arbitrary object to DataAvailability if the internal wrapped
representation is an DataAvailability object. The cast is important if

other -- Another object of type DataAvailability to compare this

Another object of type DataAvailability to compare this

Adds a DataExtent object to DataAvailability. The object is not

Removes a previously added DataExtent object from DataAvailability.

dataExtentIndex -- The index of the object to be removed of type DataExtentIndex.

Returns the DataExtent at given index. The indexes of all child objects

``dataAvailability`` -- :ref:`DataAvailability <api-python-datamodel-dataavailability>`

``dataSegment`` -- :ref:`DataSegment <api-python-datamodel-datasegment>`

``dataAttributeExtent`` -- :ref:`DataAttributeExtent <api-python-datamodel-dataattributeextent>`

``waveformID`` -- :ref:`WaveformStreamID <api-python-datamodel-waveformstreamid>`

An object of type DataExtent if the cast was successful,

Cast an arbitrary object to DataExtent if the internal wrapped
representation is an DataExtent object. The cast is important if

Creates and registers (if enabled) a DataExtent instance. The

Creates and registers (if enabled) a DataExtent instance with

other -- Another object of type DataExtent to compare this

The object's index of type DataExtentIndex.Returns the objects index which is also used for the database as unique

Adds a DataSegment object to DataExtent. The object is not

Adds a DataAttributeExtent object to DataExtent. The object is not

Removes a previously added DataAttributeExtent object from DataExtent.

dataSegmentIndex -- The index of the object to be removed of type DataSegmentIndex.

removeDataAttributeExtent() (seiscomp.datamodel.DataExtent method)

dataAttributeExtentIndex -- The index of the object to be removed of type DataAttributeExtentIndex.

The index of the object to be removed of type DataAttributeExtentIndex.

dataAttributeExtentCount() (seiscomp.datamodel.DataExtent method)

Returns the DataSegment at given index. The indexes of all child objects

Returns the DataAttributeExtent at given index. The indexes of all child objects

Returns the parent DataAvailability if available. Returns None
if the parent is not a DataAvailability. This is a convenience wrapper

An object of type DataSegment if the cast was successful,

Cast an arbitrary object to DataSegment if the internal wrapped
representation is an DataSegment object. The cast is important if

other -- Another object of type DataSegment to compare this

The object's index of type DataSegmentIndex.Returns the objects index which is also used for the database as unique

The DataUsed class describes the type of data that has been used for a
moment\-tensor inversion.

``waveType`` -- :ref:`DataUsedWaveType <api-python-datamodel-datausedwavetype>`

An object of type DataUsed if the cast was successful,

Cast an arbitrary object to DataUsed if the internal wrapped
representation is an DataUsed object. The cast is important if

other -- Another object of type DataUsed to compare this

Number of stations that have contributed data of the type given in waveType.

``dataloggerCalibration`` -- :ref:`DataloggerCalibration <api-python-datamodel-dataloggercalibration>`

``decimation`` -- :ref:`Decimation <api-python-datamodel-decimation>`

An object of type Datalogger if the cast was successful,

Cast an arbitrary object to Datalogger if the internal wrapped
representation is an Datalogger object. The cast is important if

Creates and registers (if enabled) a Datalogger instance. The

Creates and registers (if enabled) a Datalogger instance with

other -- Another object of type Datalogger to compare this

The object's index of type DataloggerIndex.Returns the objects index which is also used for the database as unique

setDigitizerManufacturer() (seiscomp.datamodel.Datalogger method)

setRecorderManufacturer() (seiscomp.datamodel.Datalogger method)

Max clock drift, seconds\/second \(not identical to 52.19, which is
seconds\/sample\)

Adds a DataloggerCalibration object to Datalogger. The object is not

Adds a Decimation object to Datalogger. The object is not

Removes a previously added DataloggerCalibration object from Datalogger.

removeDataloggerCalibration() (seiscomp.datamodel.Datalogger method)

dataloggerCalibrationIndex -- The index of the object to be removed of type DataloggerCalibrationIndex.

The index of the object to be removed of type DataloggerCalibrationIndex.

decimationIndex -- The index of the object to be removed of type DecimationIndex.

dataloggerCalibrationCount() (seiscomp.datamodel.Datalogger method)

Returns the DataloggerCalibration at given index. The indexes of all child objects

Returns the Decimation at given index. The indexes of all child objects

``datalogger`` -- :ref:`Datalogger <api-python-datamodel-datalogger>`

An object of type DataloggerCalibration if the cast was successful,

Cast an arbitrary object to DataloggerCalibration if the internal wrapped
representation is an DataloggerCalibration object. The cast is important if

other -- Another object of type DataloggerCalibration to compare this

Another object of type DataloggerCalibration to compare this

The object's index of type DataloggerCalibrationIndex.Returns the objects index which is also used for the database as unique

setSerialNumber() (seiscomp.datamodel.DataloggerCalibration method)

Referred from network\/station\/Stream\/\@dataloggerSerialNumber

serialNumber() (seiscomp.datamodel.DataloggerCalibration method)

Overrides nominal gain of calibrated datalogger \(48.05\/58.04\)

setGainFrequency() (seiscomp.datamodel.DataloggerCalibration method)

gainFrequency() (seiscomp.datamodel.DataloggerCalibration method)

Returns the parent Datalogger if available. Returns None
if the parent is not a Datalogger. This is a convenience wrapper

``analogueFilterChain`` -- :ref:`Blob <api-python-datamodel-blob>` (optional)

``digitalFilterChain`` -- :ref:`Blob <api-python-datamodel-blob>` (optional)

An object of type Decimation if the cast was successful,

Cast an arbitrary object to Decimation if the internal wrapped
representation is an Decimation object. The cast is important if

other -- Another object of type Decimation to compare this

The object's index of type DecimationIndex.Returns the objects index which is also used for the database as unique

network\/station\/Stream\/\@sampleRateNumerator

setSampleRateDenominator() (seiscomp.datamodel.Decimation method)

network\/station\/Stream\/\@sampleRateDenominator

Specifies analogue filters between seismometer and digitizer. Each element
\(separated by space\) references responsePAZ\/\@publicID

Specifies digital filters \(decimation, gain removal\). Each element
\(separated by space\) references responsePAZ\@publicID or
responseFIR\/\@publicID

The class Event describes a seismic event which does not necessarily need
to be a tectonic earthquake. An event is usually associated with one or
more origins, which contain information about focal time and geographical
location of the event. Multiple origins can cover automatic and manual
locations, a set of location from different agencies, locations generated
with different location programs and earth models, etc. Furthermore, an event
is usually associated with one or more magnitudes, and with one or more focal
mechanism determinations.

``eventDescription`` -- :ref:`EventDescription <api-python-datamodel-eventdescription>`

``originReference`` -- :ref:`OriginReference <api-python-datamodel-originreference>`

``focalMechanismReference`` -- :ref:`FocalMechanismReference <api-python-datamodel-focalmechanismreference>`

``type`` -- :ref:`EventType <api-python-datamodel-eventtype>` (optional)

``typeCertainty`` -- :ref:`EventTypeCertainty <api-python-datamodel-eventtypecertainty>` (optional)

An object of type Event if the cast was successful,

Cast an arbitrary object to Event if the internal wrapped
representation is an Event object. The cast is important if

Creates and registers (if enabled) a Event instance. The

Creates and registers (if enabled) a Event instance with

other -- Another object of type Event to compare this

setPreferredFocalMechanismID() (seiscomp.datamodel.Event method)

Denotes how certain the information on event type is \(Storchak et al.
2012\).

Adds a EventDescription object to Event. The object is not

Adds a Comment object to Event. The object is not

Adds a OriginReference object to Event. The object is not

focalMechanismReference -- Object of type FocalMechanismReference

Adds a FocalMechanismReference object to Event. The object is not

Removes a previously added FocalMechanismReference object from Event.

eventDescriptionIndex -- The index of the object to be removed of type EventDescriptionIndex.

The index of the object to be removed of type EventDescriptionIndex.

originReferenceIndex -- The index of the object to be removed of type OriginReferenceIndex.

The index of the object to be removed of type OriginReferenceIndex.

removeFocalMechanismReference() (seiscomp.datamodel.Event method)

focalMechanismReferenceIndex -- The index of the object to be removed of type FocalMechanismReferenceIndex.

The index of the object to be removed of type FocalMechanismReferenceIndex.

focalMechanismReferenceCount() (seiscomp.datamodel.Event method)

Returns the EventDescription at given index. The indexes of all child objects

Returns the OriginReference at given index. The indexes of all child objects

Returns the FocalMechanismReference at given index. The indexes of all child objects

Free\-form string with additional event description. This can be a
well\-known name, like 1906 San Francisco Earthquake. A number of
categories can be given in type.

``type`` -- :ref:`EventDescriptionType <api-python-datamodel-eventdescriptiontype>`

An object of type EventDescription if the cast was successful,

Cast an arbitrary object to EventDescription if the internal wrapped
representation is an EventDescription object. The cast is important if

other -- Another object of type EventDescription to compare this

Another object of type EventDescription to compare this

The object's index of type EventDescriptionIndex.Returns the objects index which is also used for the database as unique

This type can hold objects of type Event, Origin, Magnitude, StationMagnitude,
FocalMechanism, Reading, Amplitude, and Pick.

An object of type EventParameters if the cast was successful,

Cast an arbitrary object to EventParameters if the internal wrapped
representation is an EventParameters object. The cast is important if

other -- Another object of type EventParameters to compare this

Another object of type EventParameters to compare this

Adds a Pick object to EventParameters. The object is not

Adds a Amplitude object to EventParameters. The object is not

Adds a Reading object to EventParameters. The object is not

Adds a Origin object to EventParameters. The object is not

Adds a FocalMechanism object to EventParameters. The object is not

Adds a Event object to EventParameters. The object is not

Removes a previously added Amplitude object from EventParameters.

Removes a previously added FocalMechanism object from EventParameters.

removeFocalMechanism() (seiscomp.datamodel.EventParameters method)

focalMechanismCount() (seiscomp.datamodel.EventParameters method)

findFocalMechanism() (seiscomp.datamodel.EventParameters method)

This class describes the focal mechanism of an event. It includes different
descriptions like nodal planes, principal axes, and a moment tensor.
The moment tensor description is provided by objects of the class
MomentTensor which can be specified as child elements of FocalMechanism.

``nodalPlanes`` -- :ref:`NodalPlanes <api-python-datamodel-nodalplanes>` (optional)

``principalAxes`` -- :ref:`PrincipalAxes <api-python-datamodel-principalaxes>` (optional)

``evaluationStatus`` -- :ref:`EvaluationStatus <api-python-datamodel-evaluationstatus>` (optional)

An object of type FocalMechanism if the cast was successful,

Cast an arbitrary object to FocalMechanism if the internal wrapped
representation is an FocalMechanism object. The cast is important if

Creates and registers (if enabled) a FocalMechanism instance. The

Creates and registers (if enabled) a FocalMechanism instance with

other -- Another object of type FocalMechanism to compare this

Another object of type FocalMechanism to compare this

setTriggeringOriginID() (seiscomp.datamodel.FocalMechanism method)

Largest azimuthal gap in distribution of stations used for determination
of focal mechanism in degrees.

setStationPolarityCount() (seiscomp.datamodel.FocalMechanism method)

Number of station polarities used for determination of focal mechanism.

stationPolarityCount() (seiscomp.datamodel.FocalMechanism method)

Fraction of misfit polarities in a first\-motion focal mechanism
determination.
Decimal fraction between 0 and 1.

setStationDistributionRatio() (seiscomp.datamodel.FocalMechanism method)

Station distribution ratio \(STDR\) parameter. Indicates how the stations
are distributed about the focal sphere \(Reasenberg and Oppenheimer 1985\).

stationDistributionRatio() (seiscomp.datamodel.FocalMechanism method)

Resource identifier of the method used for determination of the focal
mechanism.

setEvaluationStatus() (seiscomp.datamodel.FocalMechanism method)

Adds a Comment object to FocalMechanism. The object is not

Adds a MomentTensor object to FocalMechanism. The object is not

Removes a previously added MomentTensor object from FocalMechanism.

Cast() (seiscomp.datamodel.FocalMechanismReference static method)

An object of type FocalMechanismReference if the cast was successful,

Cast an arbitrary object to FocalMechanismReference if the internal wrapped
representation is an FocalMechanismReference object. The cast is important if

other -- Another object of type FocalMechanismReference to compare this

Another object of type FocalMechanismReference to compare this

The object's index of type FocalMechanismReferenceIndex.Returns the objects index which is also used for the database as unique

equalIndex() (seiscomp.datamodel.FocalMechanismReference method)

setFocalMechanismID() (seiscomp.datamodel.FocalMechanismReference method)

focalMechanismID() (seiscomp.datamodel.FocalMechanismReference method)

detachFrom() (seiscomp.datamodel.FocalMechanismReference method)

Physical quantities expressed as integers are represented by their
measured or computed values and optional values for symmetric or upper
and lower uncertainties. The interpretation of these uncertainties is
not defined in the standard. They can contain statistically well\-defined
error measures, but the mechanism can also be used to simply describe a
possible value range. If the confidence level of the uncertainty is known,
it can be listed in the optional attribute confidenceLevel.
Note that uncertainty, upperUncertainty, and lowerUncertainty are given as
absolute values of the deviation
from the main value.

not defined in the standard. They can contain statistically well-defined

An object of type IntegerQuantity if the cast was successful,

Cast an arbitrary object to IntegerQuantity if the internal wrapped
representation is an IntegerQuantity object. The cast is important if

other -- Another object of type IntegerQuantity to compare this

Another object of type IntegerQuantity to compare this

Value of the quantity. The unit is implicitly defined and depends on the
context.

Uncertainty as the absolute value of symmetric deviation from the main value.

setLowerUncertainty() (seiscomp.datamodel.IntegerQuantity method)

Uncertainty as the absolute value of deviation from the main value towards
smaller values.

setUpperUncertainty() (seiscomp.datamodel.IntegerQuantity method)

larger values.

setConfidenceLevel() (seiscomp.datamodel.IntegerQuantity method)

``stationGroup`` -- :ref:`StationGroup <api-python-datamodel-stationgroup>`

``responsePAZ`` -- :ref:`ResponsePAZ <api-python-datamodel-responsepaz>`

``responseFIR`` -- :ref:`ResponseFIR <api-python-datamodel-responsefir>`

``responseIIR`` -- :ref:`ResponseIIR <api-python-datamodel-responseiir>`

``responsePolynomial`` -- :ref:`ResponsePolynomial <api-python-datamodel-responsepolynomial>`

``responseFAP`` -- :ref:`ResponseFAP <api-python-datamodel-responsefap>`

An object of type Inventory if the cast was successful,

Cast an arbitrary object to Inventory if the internal wrapped
representation is an Inventory object. The cast is important if

other -- Another object of type Inventory to compare this

Adds a StationGroup object to Inventory. The object is not

Adds a AuxDevice object to Inventory. The object is not

Adds a Sensor object to Inventory. The object is not

Adds a Datalogger object to Inventory. The object is not

Adds a ResponsePAZ object to Inventory. The object is not

Adds a ResponseFIR object to Inventory. The object is not

Adds a ResponseIIR object to Inventory. The object is not

Adds a ResponsePolynomial object to Inventory. The object is not

Adds a ResponseFAP object to Inventory. The object is not

Adds a Network object to Inventory. The object is not

Removes a previously added ResponsePolynomial object from Inventory.

stationGroupIndex -- The index of the object to be removed of type StationGroupIndex.

The index of the object to be removed of type StationGroupIndex.

auxDeviceIndex -- The index of the object to be removed of type AuxDeviceIndex.

sensorIndex -- The index of the object to be removed of type SensorIndex.

dataloggerIndex -- The index of the object to be removed of type DataloggerIndex.

responsePAZIndex -- The index of the object to be removed of type ResponsePAZIndex.

responseFIRIndex -- The index of the object to be removed of type ResponseFIRIndex.

responseIIRIndex -- The index of the object to be removed of type ResponseIIRIndex.

removeResponsePolynomial() (seiscomp.datamodel.Inventory method)

responsePolynomialIndex -- The index of the object to be removed of type ResponsePolynomialIndex.

The index of the object to be removed of type ResponsePolynomialIndex.

responseFAPIndex -- The index of the object to be removed of type ResponseFAPIndex.

networkIndex -- The index of the object to be removed of type NetworkIndex.

Returns the StationGroup at given index. The indexes of all child objects

Returns the AuxDevice at given index. The indexes of all child objects

Returns the Sensor at given index. The indexes of all child objects

Returns the Datalogger at given index. The indexes of all child objects

Returns the ResponsePAZ at given index. The indexes of all child objects

Returns the ResponseFIR at given index. The indexes of all child objects

Returns the ResponseIIR at given index. The indexes of all child objects

Returns the ResponsePolynomial at given index. The indexes of all child objects

Returns the ResponseFAP at given index. The indexes of all child objects

Returns the Network at given index. The indexes of all child objects

``journaling`` -- :ref:`Journaling <api-python-datamodel-journaling>`

An object of type JournalEntry if the cast was successful,

Cast an arbitrary object to JournalEntry if the internal wrapped
representation is an JournalEntry object. The cast is important if

other -- Another object of type JournalEntry to compare this

Returns the parent Journaling if available. Returns None
if the parent is not a Journaling. This is a convenience wrapper

``journalEntry`` -- :ref:`JournalEntry <api-python-datamodel-journalentry>`

An object of type Journaling if the cast was successful,

Cast an arbitrary object to Journaling if the internal wrapped
representation is an Journaling object. The cast is important if

other -- Another object of type Journaling to compare this

Adds a JournalEntry object to Journaling. The object is not

Returns the child object with equals the passed object, None otherwise.

Describes a magnitude which can, but does not need to be associated with
an origin. Association with an origin is expressed with the optional
attribute originID. It is either a combination of different magnitude
estimations, or it represents the reported magnitude for the given event.

``stationMagnitudeContribution`` -- :ref:`StationMagnitudeContribution <api-python-datamodel-stationmagnitudecontribution>`

``magnitude`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

An object of type Magnitude if the cast was successful,

Cast an arbitrary object to Magnitude if the internal wrapped
representation is an Magnitude object. The cast is important if

Creates and registers (if enabled) a Magnitude instance. The

Creates and registers (if enabled) a Magnitude instance with

other -- Another object of type Magnitude to compare this

Resulting magnitude value from combining values of type StationMagnitude.
If no estimations are available, this value can represent the reported

Describes the type of magnitude. This is a free\-text field because
it is impossible to cover all existing magnitude type designations
with an enumeration. Possible values are unspecified magnitude \(M\),
local magnitude \(ML\), body wave magnitude \(Mb\),
surface wave magnitude \(MS\), moment magnitude \(Mw\),
duration magnitude \(Md\), coda magnitude \(Mc\), MH, Mwp, M50, M100, etc.

Reference to an origin's publicID if the magnitude has an associated Origin.

Reference to an origin’s publicID if the magnitude has an associated Origin.

Identifies the method of magnitude estimation. Users should avoid to
give contradictory information in methodID and type.

Adds a Comment object to Magnitude. The object is not

stationMagnitudeContribution -- Object of type StationMagnitudeContribution

Adds a StationMagnitudeContribution object to Magnitude. The object is not

Removes a previously added StationMagnitudeContribution object from Magnitude.

removeStationMagnitudeContribution() (seiscomp.datamodel.Magnitude method)

stationMagnitudeContributionIndex -- The index of the object to be removed of type StationMagnitudeContributionIndex.

The index of the object to be removed of type StationMagnitudeContributionIndex.

stationMagnitudeContributionCount() (seiscomp.datamodel.Magnitude method)

Returns the number of StationMagnitudeContribution child objects.

stationMagnitudeContribution() (seiscomp.datamodel.Magnitude method)

Returns the StationMagnitudeContribution at given index. The indexes of all child objects

This class represents a moment tensor solution for an event. It is an
optional part of a FocalMechanism description.

``momentTensorPhaseSetting`` -- :ref:`MomentTensorPhaseSetting <api-python-datamodel-momenttensorphasesetting>`

``momentTensorStationContribution`` -- :ref:`MomentTensorStationContribution <api-python-datamodel-momenttensorstationcontribution>`

``scalarMoment`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``tensor`` -- :ref:`Tensor <api-python-datamodel-tensor>` (optional)

``sourceTimeFunction`` -- :ref:`SourceTimeFunction <api-python-datamodel-sourcetimefunction>` (optional)

``method`` -- :ref:`MomentTensorMethod <api-python-datamodel-momenttensormethod>` (optional)

``status`` -- :ref:`MomentTensorStatus <api-python-datamodel-momenttensorstatus>` (optional)

An object of type MomentTensor if the cast was successful,

Cast an arbitrary object to MomentTensor if the internal wrapped
representation is an MomentTensor object. The cast is important if

Creates and registers (if enabled) a MomentTensor instance. The

Creates and registers (if enabled) a MomentTensor instance with

other -- Another object of type MomentTensor to compare this

Refers to the publicID of the Origin derived in the moment tensor inversion.

Refers to the publicID of the Magnitude object which represents the derived
moment

Variance reduction of moment tensor inversion, given in percent \(Dreger
2003\). This is a
goodness\-of\-fit measure.

Double couple parameter obtained from moment tensor inversion \(decimal
fraction between 0
and 1\).

CLVD \(compensated linear vector dipole\) parameter obtained from moment
tensor inversion \(decimal
fraction between 0 and 1\).

Isotropic part obtained from moment tensor inversion \(decimal fraction
between 0 and 1\).

Resource identifier of the Green's function used in moment tensor inversion.

Resource identifier of the Green’s function used in moment tensor inversion.

Resource identifier of the filter setup used in moment tensor inversion.

setSourceTimeFunction() (seiscomp.datamodel.MomentTensor method)

Resource identifier of the method used for moment\-tensor inversion.

Adds a Comment object to MomentTensor. The object is not

Adds a DataUsed object to MomentTensor. The object is not

momentTensorPhaseSetting -- Object of type MomentTensorPhaseSetting

Adds a MomentTensorPhaseSetting object to MomentTensor. The object is not

momentTensorStationContribution -- Object of type MomentTensorStationContribution

Adds a MomentTensorStationContribution object to MomentTensor. The object is not

Removes a previously added MomentTensorPhaseSetting object from MomentTensor.

Removes a previously added MomentTensorStationContribution object from MomentTensor.

removeMomentTensorPhaseSetting() (seiscomp.datamodel.MomentTensor method)

momentTensorPhaseSettingIndex -- The index of the object to be removed of type MomentTensorPhaseSettingIndex.

The index of the object to be removed of type MomentTensorPhaseSettingIndex.

removeMomentTensorStationContribution() (seiscomp.datamodel.MomentTensor method)

momentTensorPhaseSettingCount() (seiscomp.datamodel.MomentTensor method)

momentTensorStationContributionCount() (seiscomp.datamodel.MomentTensor method)

Returns the number of MomentTensorStationContribution child objects.

momentTensorPhaseSetting() (seiscomp.datamodel.MomentTensor method)

Returns the MomentTensorPhaseSetting at given index. The indexes of all child objects

momentTensorStationContribution() (seiscomp.datamodel.MomentTensor method)

findMomentTensorStationContribution() (seiscomp.datamodel.MomentTensor method)

Cast() (seiscomp.datamodel.MomentTensorComponentContribution static method)

An object of type MomentTensorComponentContribution if the cast was successful,

type MomentTensorComponentContribution if the cast was successful

Cast an arbitrary object to MomentTensorComponentContribution if the internal wrapped
representation is an MomentTensorComponentContribution object. The cast is important if

equal() (seiscomp.datamodel.MomentTensorComponentContribution method)

other -- Another object of type MomentTensorComponentContribution to compare this

Another object of type MomentTensorComponentContribution to compare this

index() (seiscomp.datamodel.MomentTensorComponentContribution method)

The object's index of type MomentTensorComponentContributionIndex.Returns the objects index which is also used for the database as unique

The object's index of type MomentTensorComponentContributionIndex.

The object’s index of type MomentTensorComponentContributionIndex.

equalIndex() (seiscomp.datamodel.MomentTensorComponentContribution method)

setPhaseCode() (seiscomp.datamodel.MomentTensorComponentContribution method)

phaseCode() (seiscomp.datamodel.MomentTensorComponentContribution method)

setComponent() (seiscomp.datamodel.MomentTensorComponentContribution method)

component() (seiscomp.datamodel.MomentTensorComponentContribution method)

setActive() (seiscomp.datamodel.MomentTensorComponentContribution method)

active() (seiscomp.datamodel.MomentTensorComponentContribution method)

setWeight() (seiscomp.datamodel.MomentTensorComponentContribution method)

weight() (seiscomp.datamodel.MomentTensorComponentContribution method)

setTimeShift() (seiscomp.datamodel.MomentTensorComponentContribution method)

timeShift() (seiscomp.datamodel.MomentTensorComponentContribution method)

dataTimeWindow() (seiscomp.datamodel.MomentTensorComponentContribution method)

setMisfit() (seiscomp.datamodel.MomentTensorComponentContribution method)

misfit() (seiscomp.datamodel.MomentTensorComponentContribution method)

setSnr() (seiscomp.datamodel.MomentTensorComponentContribution method)

snr() (seiscomp.datamodel.MomentTensorComponentContribution method)

Returns the parent MomentTensorStationContribution if available. Returns None
if the parent is not a MomentTensorStationContribution. This is a convenience wrapper

assign() (seiscomp.datamodel.MomentTensorComponentContribution method)

attachTo() (seiscomp.datamodel.MomentTensorComponentContribution method)

detachFrom() (seiscomp.datamodel.MomentTensorComponentContribution method)

detach() (seiscomp.datamodel.MomentTensorComponentContribution method)

clone() (seiscomp.datamodel.MomentTensorComponentContribution method)

accept() (seiscomp.datamodel.MomentTensorComponentContribution method)

Cast() (seiscomp.datamodel.MomentTensorPhaseSetting static method)

An object of type MomentTensorPhaseSetting if the cast was successful,

Cast an arbitrary object to MomentTensorPhaseSetting if the internal wrapped
representation is an MomentTensorPhaseSetting object. The cast is important if

other -- Another object of type MomentTensorPhaseSetting to compare this

Another object of type MomentTensorPhaseSetting to compare this

The object's index of type MomentTensorPhaseSettingIndex.Returns the objects index which is also used for the database as unique

equalIndex() (seiscomp.datamodel.MomentTensorPhaseSetting method)

setLowerPeriod() (seiscomp.datamodel.MomentTensorPhaseSetting method)

lowerPeriod() (seiscomp.datamodel.MomentTensorPhaseSetting method)

setUpperPeriod() (seiscomp.datamodel.MomentTensorPhaseSetting method)

upperPeriod() (seiscomp.datamodel.MomentTensorPhaseSetting method)

setMinimumSNR() (seiscomp.datamodel.MomentTensorPhaseSetting method)

minimumSNR() (seiscomp.datamodel.MomentTensorPhaseSetting method)

setMaximumTimeShift() (seiscomp.datamodel.MomentTensorPhaseSetting method)

maximumTimeShift() (seiscomp.datamodel.MomentTensorPhaseSetting method)

momentTensor() (seiscomp.datamodel.MomentTensorPhaseSetting method)

detachFrom() (seiscomp.datamodel.MomentTensorPhaseSetting method)

``momentTensorComponentContribution`` -- :ref:`MomentTensorComponentContribution <api-python-datamodel-momenttensorcomponentcontribution>`

Cast() (seiscomp.datamodel.MomentTensorStationContribution static method)

An object of type MomentTensorStationContribution if the cast was successful,

Cast an arbitrary object to MomentTensorStationContribution if the internal wrapped
representation is an MomentTensorStationContribution object. The cast is important if

Create() (seiscomp.datamodel.MomentTensorStationContribution static method)

Creates and registers (if enabled) a MomentTensorStationContribution instance. The

Creates and registers (if enabled) a MomentTensorStationContribution instance with

equal() (seiscomp.datamodel.MomentTensorStationContribution method)

other -- Another object of type MomentTensorStationContribution to compare this

Another object of type MomentTensorStationContribution to compare this

setActive() (seiscomp.datamodel.MomentTensorStationContribution method)

active() (seiscomp.datamodel.MomentTensorStationContribution method)

setWaveformID() (seiscomp.datamodel.MomentTensorStationContribution method)

waveformID() (seiscomp.datamodel.MomentTensorStationContribution method)

setWeight() (seiscomp.datamodel.MomentTensorStationContribution method)

weight() (seiscomp.datamodel.MomentTensorStationContribution method)

setTimeShift() (seiscomp.datamodel.MomentTensorStationContribution method)

timeShift() (seiscomp.datamodel.MomentTensorStationContribution method)

add() (seiscomp.datamodel.MomentTensorStationContribution method)

momentTensorComponentContribution -- Object of type MomentTensorComponentContribution

Adds a MomentTensorComponentContribution object to MomentTensorStationContribution. The object is not

remove() (seiscomp.datamodel.MomentTensorStationContribution method)

Removes a previously added MomentTensorComponentContribution object from MomentTensorStationContribution.

momentTensorComponentContributionIndex -- The index of the object to be removed of type MomentTensorComponentContributionIndex.

The index of the object to be removed of type MomentTensorComponentContributionIndex.

Returns the number of MomentTensorComponentContribution child objects.

Returns the MomentTensorComponentContribution at given index. The indexes of all child objects

momentTensor() (seiscomp.datamodel.MomentTensorStationContribution method)

assign() (seiscomp.datamodel.MomentTensorStationContribution method)

attachTo() (seiscomp.datamodel.MomentTensorStationContribution method)

detachFrom() (seiscomp.datamodel.MomentTensorStationContribution method)

detach() (seiscomp.datamodel.MomentTensorStationContribution method)

clone() (seiscomp.datamodel.MomentTensorStationContribution method)

updateChild() (seiscomp.datamodel.MomentTensorStationContribution method)

accept() (seiscomp.datamodel.MomentTensorStationContribution method)

An object of type Network if the cast was successful,

Cast an arbitrary object to Network if the internal wrapped
representation is an Network object. The cast is important if

Creates and registers (if enabled) a Network instance. The

Creates and registers (if enabled) a Network instance with

other -- Another object of type Network to compare this

The object's index of type NetworkIndex.Returns the objects index which is also used for the database as unique

Start of network epoch in ISO datetime format. Needed primarily to
identifytemorary networks that re\-use network codes

Adds a Comment object to Network. The object is not

Adds a Station object to Network. The object is not

stationIndex -- The index of the object to be removed of type StationIndex.

Returns the Station at given index. The indexes of all child objects

This class describes a nodal plane using the attributes strike, dip, and
rake. For a definition of the angles see Aki and Richards \(1980\).

``strike`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``dip`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``rake`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

An object of type NodalPlane if the cast was successful,

Cast an arbitrary object to NodalPlane if the internal wrapped
representation is an NodalPlane object. The cast is important if

other -- Another object of type NodalPlane to compare this

This class describes the nodal planes of a double\-couple moment\-tensor
solution. The attribute preferredPlane
can be used to define which plane is the preferred one.

``nodalPlane1`` -- :ref:`NodalPlane <api-python-datamodel-nodalplane>` (optional)

``nodalPlane2`` -- :ref:`NodalPlane <api-python-datamodel-nodalplane>` (optional)

An object of type NodalPlanes if the cast was successful,

Cast an arbitrary object to NodalPlanes if the internal wrapped
representation is an NodalPlanes object. The cast is important if

other -- Another object of type NodalPlanes to compare this

Indicator for preferred nodal plane of moment tensor solution. It can take
integer values 1 or 2.

This class represents the focal time and geographical location of an
earthquake hypocenter, as well as additional meta\-information. Origin
can have objects of type OriginUncertainty and Arrival as child elements.

earthquake hypocenter, as well as additional meta-information. Origin

``compositeTime`` -- :ref:`CompositeTime <api-python-datamodel-compositetime>`

``time`` -- :ref:`TimeQuantity <api-python-datamodel-timequantity>`

``latitude`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``longitude`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``depth`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``depthType`` -- :ref:`OriginDepthType <api-python-datamodel-origindepthtype>` (optional)

``quality`` -- :ref:`OriginQuality <api-python-datamodel-originquality>` (optional)

``uncertainty`` -- :ref:`OriginUncertainty <api-python-datamodel-originuncertainty>` (optional)

``type`` -- :ref:`OriginType <api-python-datamodel-origintype>` (optional)

An object of type Origin if the cast was successful,

Cast an arbitrary object to Origin if the internal wrapped
representation is an Origin object. The cast is important if

Creates and registers (if enabled) a Origin instance. The

Creates and registers (if enabled) a Origin instance with

other -- Another object of type Origin to compare this

Hypocenter latitude with respect to the World Geodetic System 1984
\(WGS84\) reference system \(National Imagery and Mapping Agency 2000\)
in degrees. Uncertainties are given in kilometers.

Hypocenter longitude with respect to the World Geodetic System 1984

Depth of hypocenter with respect to the nominal sea level given by the
WGS84 geoid \(Earth Gravitational Model, EGM96, Lemoine et al. 1998\).
Positive values indicate hypocenters below sea level. For shallow
hypocenters, the depth value can be negative. The depth is defined
in km.

Boolean flag. True if focal time was kept fixed for computation of the
Origin.

Boolean flag. True if epicenter was kept fixed for computation of Origin.

Identifies the reference system used for hypocenter determination. This is
only necessary if
a modified version of the standard \(with local extensions\) is used that
provides a non\-standard coordinate
system.

Additional parameters describing the quality of an Origin determination.

Additional parameters describing the uncertainty of an Origin determination.

Adds a Comment object to Origin. The object is not

Adds a CompositeTime object to Origin. The object is not

Adds a Arrival object to Origin. The object is not

Adds a StationMagnitude object to Origin. The object is not

Adds a Magnitude object to Origin. The object is not

arrivalIndex -- The index of the object to be removed of type ArrivalIndex.

Returns the Arrival at given index. The indexes of all child objects

This type contains various attributes commonly used to describe the quality of
an origin, e. g., errors, azimuthal
coverage, etc. Origin objects have an optional attribute of the type
OriginQuality.

An object of type OriginQuality if the cast was successful,

Cast an arbitrary object to OriginQuality if the internal wrapped
representation is an OriginQuality object. The cast is important if

other -- Another object of type OriginQuality to compare this

Another object of type OriginQuality to compare this

setAssociatedPhaseCount() (seiscomp.datamodel.OriginQuality method)

Number of associated phases, regardless of their use for origin computation.

associatedPhaseCount() (seiscomp.datamodel.OriginQuality method)

Number of defining phases, i. e., phase observations that were actually used
for computing
the origin. Note that there may be more than one defining phase per station.

setAssociatedStationCount() (seiscomp.datamodel.OriginQuality method)

associatedStationCount() (seiscomp.datamodel.OriginQuality method)

Number of stations from which data was used for origin computation.

Number of depth phases \(typically pP, sometimes sP\) used in depth
computation.

RMS of the travel time residuals of the arrivals used for the origin
computation

Largest azimuthal gap in station distribution as seen from epicenter

setSecondaryAzimuthalGap() (seiscomp.datamodel.OriginQuality method)

Secondary azimuthal gap in station distribution, i. e., the largest
azimuthal gap a station closes in degrees.

secondaryAzimuthalGap() (seiscomp.datamodel.OriginQuality method)

String describing ground\-truth level, e. g. GT0, GT5, etc. It has a maximum
length of 16
characters.

Epicentral distance of station farthest from the epicenter in degrees.

Epicentral distance of station closest to the epicenter in degrees.

An object of type OriginReference if the cast was successful,

Cast an arbitrary object to OriginReference if the internal wrapped
representation is an OriginReference object. The cast is important if

other -- Another object of type OriginReference to compare this

Another object of type OriginReference to compare this

The object's index of type OriginReferenceIndex.Returns the objects index which is also used for the database as unique

This class describes the location uncertainties of an origin. The uncertainty
can be described either as a simple circular horizontal uncertainty, an
uncertainty ellipse according to IMS1.0, or a confidence ellipsoid. If
multiple uncertainty models are given, the preferred variant can be
specified in the attribute preferredDescription.

``confidenceEllipsoid`` -- :ref:`ConfidenceEllipsoid <api-python-datamodel-confidenceellipsoid>` (optional)

``preferredDescription`` -- :ref:`OriginUncertaintyDescription <api-python-datamodel-originuncertaintydescription>` (optional)

An object of type OriginUncertainty if the cast was successful,

Cast an arbitrary object to OriginUncertainty if the internal wrapped
representation is an OriginUncertainty object. The cast is important if

other -- Another object of type OriginUncertainty to compare this

Another object of type OriginUncertainty to compare this

setHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

Circular confidence region, given by single value of horizontal uncertainty
in km.

horizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

setMinHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

minHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

setMaxHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

maxHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

Azimuth of major axis of confidence ellipse. Measured clockwise from
South\-North direction at epicenter in degrees.

azimuthMaxHorizontalUncertainty() (seiscomp.datamodel.OriginUncertainty method)

setConfidenceEllipsoid() (seiscomp.datamodel.OriginUncertainty method)

confidenceEllipsoid() (seiscomp.datamodel.OriginUncertainty method)

setPreferredDescription() (seiscomp.datamodel.OriginUncertainty method)

preferredDescription() (seiscomp.datamodel.OriginUncertainty method)

setConfidenceLevel() (seiscomp.datamodel.OriginUncertainty method)

``qualityControl`` -- :ref:`QualityControl <api-python-datamodel-qualitycontrol>`

An object of type Outage if the cast was successful,

Cast an arbitrary object to Outage if the internal wrapped
representation is an Outage object. The cast is important if

other -- Another object of type Outage to compare this

The object's index of type OutageIndex.Returns the objects index which is also used for the database as unique

Returns the parent QualityControl if available. Returns None
if the parent is not a QualityControl. This is a convenience wrapper

An object of type Parameter if the cast was successful,

Cast an arbitrary object to Parameter if the internal wrapped
representation is an Parameter object. The cast is important if

Creates and registers (if enabled) a Parameter instance. The

Creates and registers (if enabled) a Parameter instance with

other -- Another object of type Parameter to compare this

Adds a Comment object to Parameter. The object is not

An object of type ParameterSet if the cast was successful,

Cast an arbitrary object to ParameterSet if the internal wrapped
representation is an ParameterSet object. The cast is important if

Creates and registers (if enabled) a ParameterSet instance. The

Creates and registers (if enabled) a ParameterSet instance with

other -- Another object of type ParameterSet to compare this

Adds a Parameter object to ParameterSet. The object is not

Adds a Comment object to ParameterSet. The object is not

Generic and extensible phase description that currently contains the phase code
only.

An object of type Phase if the cast was successful,

Cast an arbitrary object to Phase if the internal wrapped
representation is an Phase object. The cast is important if

other -- Another object of type Phase to compare this

Phase code as given in the IASPEI Standard Seismic Phase List
\(Storchak et al. 2003\). String with a maximum length of 32 characters.

A pick is the observation of an amplitude anomaly in a seismogram at a
specific point in time. It is not necessarily related to a seismic event.

``horizontalSlowness`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``backazimuth`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>` (optional)

``onset`` -- :ref:`PickOnset <api-python-datamodel-pickonset>` (optional)

``phaseHint`` -- :ref:`Phase <api-python-datamodel-phase>` (optional)

``polarity`` -- :ref:`PickPolarity <api-python-datamodel-pickpolarity>` (optional)

An object of type Pick if the cast was successful,

Cast an arbitrary object to Pick if the internal wrapped
representation is an Pick object. The cast is important if

Creates and registers (if enabled) a Pick instance. The

Creates and registers (if enabled) a Pick instance with

other -- Another object of type Pick to compare this

Identifies the filter or filter setup used for filtering the waveform
stream referenced by waveformID.

Identifies the picker that produced the pick. This can be either a
detection software program or a person.

Observed horizontal slowness of the signal. Most relevant in array
measurements
in s\/deg.

Observed backazimuth of the signal. Most relevant in array measurements

Indicates the polarity of first motion, usually from impulsive onsets.

Adds a Comment object to Pick. The object is not

An object of type PickReference if the cast was successful,

Cast an arbitrary object to PickReference if the internal wrapped
representation is an PickReference object. The cast is important if

other -- Another object of type PickReference to compare this

Another object of type PickReference to compare this

The object's index of type PickReferenceIndex.Returns the objects index which is also used for the database as unique

This class describes the principal axes of a double\-couple moment tensor
solution. tAxis and pAxis are required,
while nAxis is optional.

``nAxis`` -- :ref:`Axis <api-python-datamodel-axis>` (optional)

An object of type PrincipalAxes if the cast was successful,

Cast an arbitrary object to PrincipalAxes if the internal wrapped
representation is an PrincipalAxes object. The cast is important if

other -- Another object of type PrincipalAxes to compare this

Another object of type PrincipalAxes to compare this

An object of type QCLog if the cast was successful,

Cast an arbitrary object to QCLog if the internal wrapped
representation is an QCLog object. The cast is important if

Creates and registers (if enabled) a QCLog instance. The

Creates and registers (if enabled) a QCLog instance with

other -- Another object of type QCLog to compare this

The object's index of type QCLogIndex.Returns the objects index which is also used for the database as unique

``waveformQuality`` -- :ref:`WaveformQuality <api-python-datamodel-waveformquality>`

An object of type QualityControl if the cast was successful,

Cast an arbitrary object to QualityControl if the internal wrapped
representation is an QualityControl object. The cast is important if

other -- Another object of type QualityControl to compare this

Another object of type QualityControl to compare this

Adds a QCLog object to QualityControl. The object is not

Adds a WaveformQuality object to QualityControl. The object is not

Adds a Outage object to QualityControl. The object is not

Removes a previously added WaveformQuality object from QualityControl.

qCLogIndex -- The index of the object to be removed of type QCLogIndex.

removeWaveformQuality() (seiscomp.datamodel.QualityControl method)

waveformQualityIndex -- The index of the object to be removed of type WaveformQualityIndex.

The index of the object to be removed of type WaveformQualityIndex.

outageIndex -- The index of the object to be removed of type OutageIndex.

waveformQualityCount() (seiscomp.datamodel.QualityControl method)

Returns the QCLog at given index. The indexes of all child objects

Returns the WaveformQuality at given index. The indexes of all child objects

Returns the Outage at given index. The indexes of all child objects

This class groups Pick and Amplitude elements which are thought to belong
to the same event, but for which the event identification is not known.

``pickReference`` -- :ref:`PickReference <api-python-datamodel-pickreference>`

``amplitudeReference`` -- :ref:`AmplitudeReference <api-python-datamodel-amplitudereference>`

An object of type Reading if the cast was successful,

Cast an arbitrary object to Reading if the internal wrapped
representation is an Reading object. The cast is important if

Creates and registers (if enabled) a Reading instance. The

Creates and registers (if enabled) a Reading instance with

other -- Another object of type Reading to compare this

Adds a PickReference object to Reading. The object is not

Adds a AmplitudeReference object to Reading. The object is not

Removes a previously added AmplitudeReference object from Reading.

pickReferenceIndex -- The index of the object to be removed of type PickReferenceIndex.

The index of the object to be removed of type PickReferenceIndex.

amplitudeReferenceIndex -- The index of the object to be removed of type AmplitudeReferenceIndex.

The index of the object to be removed of type AmplitudeReferenceIndex.

Returns the PickReference at given index. The indexes of all child objects

Returns the AmplitudeReference at given index. The indexes of all child objects

An object of type RealArray if the cast was successful,

Cast an arbitrary object to RealArray if the internal wrapped
representation is an RealArray object. The cast is important if

other -- Another object of type RealArray to compare this

A probability density function description. It can be used in three
different modes:

variable is a list of M values, no probability. The values represent
samples, no binning\/probabilities made.

variable and probabilty arrays have length N. variable values to be
interpreted as \"bin centers\" \(or representative values\),
no bin edges given.

variable has length N+1, probability has length N. variable values
describe bin edges \(upper bin edge is lower edge of next bin\).

``variable`` -- :ref:`RealArray <api-python-datamodel-realarray>`

``probability`` -- :ref:`RealArray <api-python-datamodel-realarray>`

An object of type RealPDF1D if the cast was successful,

Cast an arbitrary object to RealPDF1D if the internal wrapped
representation is an RealPDF1D object. The cast is important if

other -- Another object of type RealPDF1D to compare this

Physical quantities expressed as floating point numbers are represented by their

``pdf`` -- :ref:`RealPDF1D <api-python-datamodel-realpdf1d>` (optional)

An object of type RealQuantity if the cast was successful,

Cast an arbitrary object to RealQuantity if the internal wrapped
representation is an RealQuantity object. The cast is important if

other -- Another object of type RealQuantity to compare this

This type describes a sensor response composed of frequency\/amplitude\/phase
angle tuples. According to the SEED manual \(blockette 55\) this description
alone is not an acceptable response description.

``tuples`` -- :ref:`RealArray <api-python-datamodel-realarray>` (optional)

An object of type ResponseFAP if the cast was successful,

Cast an arbitrary object to ResponseFAP if the internal wrapped
representation is an ResponseFAP object. The cast is important if

Creates and registers (if enabled) a ResponseFAP instance. The

Creates and registers (if enabled) a ResponseFAP instance with

other -- Another object of type ResponseFAP to compare this

The object's index of type ResponseFAPIndex.Returns the objects index which is also used for the database as unique

The tuples organized as linear array. The array size must be numberOfTuples
* 3. Each tuple consists of frequency \(in Hz\), amplitude and phase angle
\(in degree\).

``coefficients`` -- :ref:`RealArray <api-python-datamodel-realarray>` (optional)

An object of type ResponseFIR if the cast was successful,

Cast an arbitrary object to ResponseFIR if the internal wrapped
representation is an ResponseFIR object. The cast is important if

Creates and registers (if enabled) a ResponseFIR instance. The

Creates and registers (if enabled) a ResponseFIR instance with

other -- Another object of type ResponseFIR to compare this

The object's index of type ResponseFIRIndex.Returns the objects index which is also used for the database as unique

setNumberOfCoefficients() (seiscomp.datamodel.ResponseFIR method)

``numerators`` -- :ref:`RealArray <api-python-datamodel-realarray>` (optional)

``denominators`` -- :ref:`RealArray <api-python-datamodel-realarray>` (optional)

An object of type ResponseIIR if the cast was successful,

Cast an arbitrary object to ResponseIIR if the internal wrapped
representation is an ResponseIIR object. The cast is important if

Creates and registers (if enabled) a ResponseIIR instance. The

Creates and registers (if enabled) a ResponseIIR instance with

other -- Another object of type ResponseIIR to compare this

The object's index of type ResponseIIRIndex.Returns the objects index which is also used for the database as unique

Response type \(43.05\/53.03\/54.03\): A \- Laplace transform analog
response in rad\/sec, B \- Analog response in Hz, C \- Composite \(currently
undefined\), D \- Digital \(Z \- transform\)

setNumberOfDenominators() (seiscomp.datamodel.ResponseIIR method)

``zeros`` -- :ref:`ComplexArray <api-python-datamodel-complexarray>` (optional)

``poles`` -- :ref:`ComplexArray <api-python-datamodel-complexarray>` (optional)

An object of type ResponsePAZ if the cast was successful,

Cast an arbitrary object to ResponsePAZ if the internal wrapped
representation is an ResponsePAZ object. The cast is important if

Creates and registers (if enabled) a ResponsePAZ instance. The

Creates and registers (if enabled) a ResponsePAZ instance with

other -- Another object of type ResponsePAZ to compare this

The object's index of type ResponsePAZIndex.Returns the objects index which is also used for the database as unique

Response type \(43.05\/53.03\): A \- Laplace transform analog response in
rad\/sec, B \- Analog response in Hz, C \- Composite \(currently

setNormalizationFactor() (seiscomp.datamodel.ResponsePAZ method)

setNormalizationFrequency() (seiscomp.datamodel.ResponsePAZ method)

normalizationFrequency() (seiscomp.datamodel.ResponsePAZ method)

An object of type ResponsePolynomial if the cast was successful,

Cast an arbitrary object to ResponsePolynomial if the internal wrapped
representation is an ResponsePolynomial object. The cast is important if

Creates and registers (if enabled) a ResponsePolynomial instance. The

Creates and registers (if enabled) a ResponsePolynomial instance with

other -- Another object of type ResponsePolynomial to compare this

Another object of type ResponsePolynomial to compare this

The object's index of type ResponsePolynomialIndex.Returns the objects index which is also used for the database as unique

setGainFrequency() (seiscomp.datamodel.ResponsePolynomial method)

setFrequencyUnit() (seiscomp.datamodel.ResponsePolynomial method)

A single character describing valid frequency units \(42.09\/62.08\): A \-
rad\/s, B \- Hz

setApproximationType() (seiscomp.datamodel.ResponsePolynomial method)

A single character describing the type of polynomial approximation
\(42.08\/62.07\): M \- MacLaurin

approximationType() (seiscomp.datamodel.ResponsePolynomial method)

setApproximationLowerBound() (seiscomp.datamodel.ResponsePolynomial method)

approximationLowerBound() (seiscomp.datamodel.ResponsePolynomial method)

setApproximationUpperBound() (seiscomp.datamodel.ResponsePolynomial method)

approximationUpperBound() (seiscomp.datamodel.ResponsePolynomial method)

setApproximationError() (seiscomp.datamodel.ResponsePolynomial method)

The maximum absolute error of the polynomial approximation \(42.14\/62.13;
Put 0.0 if the value is unknown or actually zero\)

approximationError() (seiscomp.datamodel.ResponsePolynomial method)

setNumberOfCoefficients() (seiscomp.datamodel.ResponsePolynomial method)

The number of coefficients in the polynomial approximation \(42.15\/62.14;
one more than the degree of the polynomial

numberOfCoefficients() (seiscomp.datamodel.ResponsePolynomial method)

setCoefficients() (seiscomp.datamodel.ResponsePolynomial method)

The polynomial coefficients, lowest order first \(42.16\/62.15\)

This type describes an ArcLink route \(collection of servers that provide
specific datastreams\)

``routeArclink`` -- :ref:`RouteArclink <api-python-datamodel-routearclink>`

``routeSeedlink`` -- :ref:`RouteSeedlink <api-python-datamodel-routeseedlink>`

An object of type Route if the cast was successful,

Cast an arbitrary object to Route if the internal wrapped
representation is an Route object. The cast is important if

Creates and registers (if enabled) a Route instance. The

Creates and registers (if enabled) a Route instance with

other -- Another object of type Route to compare this

The object's index of type RouteIndex.Returns the objects index which is also used for the database as unique

Adds a RouteArclink object to Route. The object is not

Adds a RouteSeedlink object to Route. The object is not

routeArclinkIndex -- The index of the object to be removed of type RouteArclinkIndex.

The index of the object to be removed of type RouteArclinkIndex.

routeSeedlinkIndex -- The index of the object to be removed of type RouteSeedlinkIndex.

The index of the object to be removed of type RouteSeedlinkIndex.

Returns the RouteArclink at given index. The indexes of all child objects

Returns the RouteSeedlink at given index. The indexes of all child objects

An object of type RouteArclink if the cast was successful,

Cast an arbitrary object to RouteArclink if the internal wrapped
representation is an RouteArclink object. The cast is important if

other -- Another object of type RouteArclink to compare this

The object's index of type RouteArclinkIndex.Returns the objects index which is also used for the database as unique

Returns the parent Route if available. Returns None
if the parent is not a Route. This is a convenience wrapper

An object of type RouteSeedlink if the cast was successful,

Cast an arbitrary object to RouteSeedlink if the internal wrapped
representation is an RouteSeedlink object. The cast is important if

other -- Another object of type RouteSeedlink to compare this

Another object of type RouteSeedlink to compare this

The object's index of type RouteSeedlinkIndex.Returns the objects index which is also used for the database as unique

An object of type Routing if the cast was successful,

Cast an arbitrary object to Routing if the internal wrapped
representation is an Routing object. The cast is important if

other -- Another object of type Routing to compare this

Adds a Route object to Routing. The object is not

Adds a Access object to Routing. The object is not

routeIndex -- The index of the object to be removed of type RouteIndex.

accessIndex -- The index of the object to be removed of type AccessIndex.

Returns the Route at given index. The indexes of all child objects

Returns the Access at given index. The indexes of all child objects

``sensorCalibration`` -- :ref:`SensorCalibration <api-python-datamodel-sensorcalibration>`

An object of type Sensor if the cast was successful,

Cast an arbitrary object to Sensor if the internal wrapped
representation is an Sensor object. The cast is important if

Creates and registers (if enabled) a Sensor instance. The

Creates and registers (if enabled) a Sensor instance with

other -- Another object of type Sensor to compare this

The object's index of type SensorIndex.Returns the objects index which is also used for the database as unique

Reference to responsePAZ\/\@publicID or responsePolynomial\/\@publicID or
responseFAP\/\@publicID

Adds a SensorCalibration object to Sensor. The object is not

Removes a previously added SensorCalibration object from Sensor.

sensorCalibrationIndex -- The index of the object to be removed of type SensorCalibrationIndex.

The index of the object to be removed of type SensorCalibrationIndex.

Returns the SensorCalibration at given index. The indexes of all child objects

An object of type SensorCalibration if the cast was successful,

Cast an arbitrary object to SensorCalibration if the internal wrapped
representation is an SensorCalibration object. The cast is important if

other -- Another object of type SensorCalibration to compare this

Another object of type SensorCalibration to compare this

The object's index of type SensorCalibrationIndex.Returns the objects index which is also used for the database as unique

setGainFrequency() (seiscomp.datamodel.SensorCalibration method)

Returns the parent Sensor if available. Returns None
if the parent is not a Sensor. This is a convenience wrapper

``auxStream`` -- :ref:`AuxStream <api-python-datamodel-auxstream>`

An object of type SensorLocation if the cast was successful,

Cast an arbitrary object to SensorLocation if the internal wrapped
representation is an SensorLocation object. The cast is important if

Creates and registers (if enabled) a SensorLocation instance. The

Creates and registers (if enabled) a SensorLocation instance with

other -- Another object of type SensorLocation to compare this

Another object of type SensorLocation to compare this

The object's index of type SensorLocationIndex.Returns the objects index which is also used for the database as unique

Sensor latitude \(52.10\) with respect to the World Geodetic System
1984 \(WGS84\) reference system \(National Imagery and Mapping Agency
2000\) in degrees.

Sensor longitude \(52.11\) with respect to the World Geodetic System

Sensor elevation \(52.12\) with respect to the World Geodetic System
2000\) in meters.

Adds a Comment object to SensorLocation. The object is not

Adds a AuxStream object to SensorLocation. The object is not

Adds a Stream object to SensorLocation. The object is not

Removes a previously added AuxStream object from SensorLocation.

auxStreamIndex -- The index of the object to be removed of type AuxStreamIndex.

streamIndex -- The index of the object to be removed of type StreamIndex.

Returns the AuxStream at given index. The indexes of all child objects

Returns the Stream at given index. The indexes of all child objects

An object of type Setup if the cast was successful,

Cast an arbitrary object to Setup if the internal wrapped
representation is an Setup object. The cast is important if

other -- Another object of type Setup to compare this

The object's index of type SetupIndex.Returns the objects index which is also used for the database as unique

Returns the parent ConfigStation if available. Returns None
if the parent is not a ConfigStation. This is a convenience wrapper

``type`` -- :ref:`SourceTimeFunctionType <api-python-datamodel-sourcetimefunctiontype>`

An object of type SourceTimeFunction if the cast was successful,

Cast an arbitrary object to SourceTimeFunction if the internal wrapped
representation is an SourceTimeFunction object. The cast is important if

other -- Another object of type SourceTimeFunction to compare this

Another object of type SourceTimeFunction to compare this

Type of source time function. Values can be taken from the following:
BOX_CAR, TRIANGLE, TRAPEZOID, UNKNOWN_FUNCTION.

An object of type Station if the cast was successful,

Cast an arbitrary object to Station if the internal wrapped
representation is an Station object. The cast is important if

Creates and registers (if enabled) a Station instance. The

Creates and registers (if enabled) a Station instance with

other -- Another object of type Station to compare this

The object's index of type StationIndex.Returns the objects index which is also used for the database as unique

Station latitude \(50.04\) with respect to the World Geodetic System

Station longitude \(50.05\) with respect to the World Geodetic System

Station elevation \(50.06\) with respect to the World Geodetic System

Adds a Comment object to Station. The object is not

Adds a SensorLocation object to Station. The object is not

sensorLocationIndex -- The index of the object to be removed of type SensorLocationIndex.

The index of the object to be removed of type SensorLocationIndex.

Returns the SensorLocation at given index. The indexes of all child objects

This type describes a group of stations, an array or a virtual network

``stationReference`` -- :ref:`StationReference <api-python-datamodel-stationreference>`

``type`` -- :ref:`StationGroupType <api-python-datamodel-stationgrouptype>` (optional)

An object of type StationGroup if the cast was successful,

Cast an arbitrary object to StationGroup if the internal wrapped
representation is an StationGroup object. The cast is important if

Creates and registers (if enabled) a StationGroup instance. The

Creates and registers (if enabled) a StationGroup instance with

other -- Another object of type StationGroup to compare this

The object's index of type StationGroupIndex.Returns the objects index which is also used for the database as unique

Optional latitude \(eg., of the central station\) with respect to the
World Geodetic System 1984 \(WGS84\) reference system \(National
Imagery and Mapping Agency 2000\) in degrees. The uncertainties are
given in kilometers.

Optional longitude \(eg., of the central station\) with respect to the
Imagery and Mapping Agency 2000\) in degrees.

Optional elevation \(eg., of the central station\) with respect to the
World Geodetic System 1984 \(WGS84\) reference system \(National Imagery
and Mapping Agency 2000\) in meters.

Adds a StationReference object to StationGroup. The object is not

Removes a previously added StationReference object from StationGroup.

removeStationReference() (seiscomp.datamodel.StationGroup method)

stationReferenceIndex -- The index of the object to be removed of type StationReferenceIndex.

The index of the object to be removed of type StationReferenceIndex.

stationReferenceCount() (seiscomp.datamodel.StationGroup method)

Returns the StationReference at given index. The indexes of all child objects

This class describes the magnitude derived from a single waveform stream.

An object of type StationMagnitude if the cast was successful,

Cast an arbitrary object to StationMagnitude if the internal wrapped
representation is an StationMagnitude object. The cast is important if

Creates and registers (if enabled) a StationMagnitude instance. The

Creates and registers (if enabled) a StationMagnitude instance with

other -- Another object of type StationMagnitude to compare this

Another object of type StationMagnitude to compare this

Reference to an origin's publicID if the StationMagnitude has an associated
Origin.

Reference to an origin’s publicID if the StationMagnitude has an associated
Origin.

Identifies the data source of the StationMagnitude. For magnitudes derived
from amplitudes in
waveforms \(e. g., local magnitude ML \), amplitudeID points to publicID in
class Amplitude.

Identifies the waveform stream. This element can be helpful if no
amplitude is referenced, or the amplitude is not available in the
context. Otherwise, it would duplicate the waveformID provided there
and can be omitted.

An optional flag that indicates whether a station magnitude has passed
the quality control or not. For example, if a station magnitude is
out of the defined distance range but should be associated to a network
magnitude for further analysis then this flag can be set to false.
If the flag is not set, it defaults to true.

Adds a Comment object to StationMagnitude. The object is not

Removes a previously added Comment object from StationMagnitude.

This class describes the weighting of magnitude values from several
StationMagnitude objects for computing a
network magnitude estimation.

Cast() (seiscomp.datamodel.StationMagnitudeContribution static method)

An object of type StationMagnitudeContribution if the cast was successful,

Cast an arbitrary object to StationMagnitudeContribution if the internal wrapped
representation is an StationMagnitudeContribution object. The cast is important if

equal() (seiscomp.datamodel.StationMagnitudeContribution method)

other -- Another object of type StationMagnitudeContribution to compare this

Another object of type StationMagnitudeContribution to compare this

index() (seiscomp.datamodel.StationMagnitudeContribution method)

The object's index of type StationMagnitudeContributionIndex.Returns the objects index which is also used for the database as unique

equalIndex() (seiscomp.datamodel.StationMagnitudeContribution method)

setStationMagnitudeID() (seiscomp.datamodel.StationMagnitudeContribution method)

stationMagnitudeID() (seiscomp.datamodel.StationMagnitudeContribution method)

setResidual() (seiscomp.datamodel.StationMagnitudeContribution method)

residual() (seiscomp.datamodel.StationMagnitudeContribution method)

setWeight() (seiscomp.datamodel.StationMagnitudeContribution method)

Weight of the magnitude value from class StationMagnitude for computing
the magnitude value in class Magnitude. Note that there is no rule
for the sum of the weights of all station magnitude contributions
to a specific network magnitude. In particular, the weights are not
required to sum up to unity.

weight() (seiscomp.datamodel.StationMagnitudeContribution method)

magnitude() (seiscomp.datamodel.StationMagnitudeContribution method)

assign() (seiscomp.datamodel.StationMagnitudeContribution method)

attachTo() (seiscomp.datamodel.StationMagnitudeContribution method)

detachFrom() (seiscomp.datamodel.StationMagnitudeContribution method)

detach() (seiscomp.datamodel.StationMagnitudeContribution method)

clone() (seiscomp.datamodel.StationMagnitudeContribution method)

accept() (seiscomp.datamodel.StationMagnitudeContribution method)

An object of type StationReference if the cast was successful,

Cast an arbitrary object to StationReference if the internal wrapped
representation is an StationReference object. The cast is important if

other -- Another object of type StationReference to compare this

Another object of type StationReference to compare this

The object's index of type StationReferenceIndex.Returns the objects index which is also used for the database as unique

Returns the parent StationGroup if available. Returns None
if the parent is not a StationGroup. This is a convenience wrapper

This type describes a stream \(channel\) with defined frequency response

An object of type Stream if the cast was successful,

Cast an arbitrary object to Stream if the internal wrapped
representation is an Stream object. The cast is important if

Creates and registers (if enabled) a Stream instance. The

Creates and registers (if enabled) a Stream instance with

other -- Another object of type Stream to compare this

The object's index of type StreamIndex.Returns the objects index which is also used for the database as unique

Sample rate numerator \(always >0, eg., not identical to 52.18\)

Sample rate denominator \(always >0, eg., not identical to 52.19\)

Adds a Comment object to Stream. The object is not

The Tensor class represents the six moment\-tensor elements Mrr , Mtt ,
Mpp , Mrt , Mrp , Mtp in the spherical coordinate system defined by local
upward vertical \(r\), North\-South \(t\), and West\-East \(p\) directions. See
Aki and Richards \(1980\) for conversions to other coordinate systems.

``Mrr`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``Mtt`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``Mpp`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``Mrt`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``Mrp`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

``Mtp`` -- :ref:`RealQuantity <api-python-datamodel-realquantity>`

An object of type Tensor if the cast was successful,

Cast an arbitrary object to Tensor if the internal wrapped
representation is an Tensor object. The cast is important if

other -- Another object of type Tensor to compare this

An object of type TimeArray if the cast was successful,

Cast an arbitrary object to TimeArray if the internal wrapped
representation is an TimeArray object. The cast is important if

other -- Another object of type TimeArray to compare this

``variable`` -- :ref:`TimeArray <api-python-datamodel-timearray>`

An object of type TimePDF1D if the cast was successful,

Cast an arbitrary object to TimePDF1D if the internal wrapped
representation is an TimePDF1D object. The cast is important if

other -- Another object of type TimePDF1D to compare this

This type describes a point in time, given in ISO 8601 format, with
optional symmetric or asymmetric uncertainties given in seconds. The
time has to be specified in UTC.

``pdf`` -- :ref:`TimePDF1D <api-python-datamodel-timepdf1d>` (optional)

An object of type TimeQuantity if the cast was successful,

Cast an arbitrary object to TimeQuantity if the internal wrapped
representation is an TimeQuantity object. The cast is important if

other -- Another object of type TimeQuantity to compare this

Describes a time window for amplitude measurements, given by a central point in
time, and points in time
before and after this central point. Both points before and after may coincide
with the central point.

An object of type TimeWindow if the cast was successful,

Cast an arbitrary object to TimeWindow if the internal wrapped
representation is an TimeWindow object. The cast is important if

other -- Another object of type TimeWindow to compare this

Reference point in time \(\"central\" point\), in ISO 8601 format. It
has to be given in UTC.

Absolute value of duration of time interval before reference point
in time window. The value may be zero, but not negative in seconds.

Absolute value of duration of time interval after reference point in
time window. The value may be zero, but not negative in seconds.

An object of type WaveformQuality if the cast was successful,

Cast an arbitrary object to WaveformQuality if the internal wrapped
representation is an WaveformQuality object. The cast is important if

other -- Another object of type WaveformQuality to compare this

Another object of type WaveformQuality to compare this

The object's index of type WaveformQualityIndex.Returns the objects index which is also used for the database as unique

setLowerUncertainty() (seiscomp.datamodel.WaveformQuality method)

setUpperUncertainty() (seiscomp.datamodel.WaveformQuality method)

Reference to a stream description in an inventory. This is mostly
equivalent to the combination of networkCode, stationCode, locationCode
and channelCode. However, additional information, e. g., sampling rate,
can be referenced by the resourceURI. It is recommended to use
resourceURI as a flexible, abstract, and unique stream ID that allows to
describe different processing levels, or resampled\/filtered products of
the same initial stream, without violating the intrinsic meaning of the
legacy identifiers \(network, station, channel, and location codes\).
However, for operation in the context of legacy systems, the classical
identifier components are supported.

describe different processing levels, or resampled/filtered products of
legacy identifiers (network, station, channel, and location codes).

An object of type WaveformStreamID if the cast was successful,

Cast an arbitrary object to WaveformStreamID if the internal wrapped
representation is an WaveformStreamID object. The cast is important if

other -- Another object of type WaveformStreamID to compare this

Another object of type WaveformStreamID to compare this

Optional resource identifier for the waveform stream. QuakeML adopts
in many places resource descriptors with a well\-defined syntax for
unambiguous resource identification. Resource identifiers are designed
to be backward compatible with existing descriptors. In SeisComP this
identifier is not used at all.

in many places resource descriptors with a well-defined syntax for

<script>
window.onload = function() {
    let graphvizs = document.getElementsByClassName("graphviz");
    for ( let graphviz of graphvizs ) {
        obj = graphviz.firstElementChild;
        if ( obj === undefined || obj.tagName !== "OBJECT" ) {
            continue;
        }
        let url = obj.data;
        let div = obj.parentElement;
        console.log(div.tagName);
        if ( url === undefined || div === undefined || div.tagName !== "DIV" ) {
            continue;
        }

        let caption = div.nextElementSibling;
        if ( caption === undefined ) {
            continue;
        }

        let svg = document.createElement("a");
        svg.appendChild(document.createTextNode("[SVG]"));
        svg.setAttribute("href", "#")
        svg.onclick = function() { window.open(url); };
        caption.appendChild(svg);
    }
}
</script>

Hyperlink target "api-python-datamodel-datausedwavetype" is not referenced.

Hyperlink target "api-python-datamodel-evaluationmode" is not referenced.

Hyperlink target "api-python-datamodel-evaluationstatus" is not referenced.

Hyperlink target "api-python-datamodel-eventdescriptiontype" is not referenced.

Hyperlink target "api-python-datamodel-eventtype" is not referenced.

Hyperlink target "api-python-datamodel-eventtypecertainty" is not referenced.

Hyperlink target "api-python-datamodel-momenttensormethod" is not referenced.

Hyperlink target "api-python-datamodel-momenttensorstatus" is not referenced.

Hyperlink target "api-python-datamodel-origindepthtype" is not referenced.

Hyperlink target "api-python-datamodel-origintype" is not referenced.

Hyperlink target "api-python-datamodel-originuncertaintydescription" is not referenced.

Hyperlink target "api-python-datamodel-pickonset" is not referenced.

Hyperlink target "api-python-datamodel-pickpolarity" is not referenced.

Hyperlink target "api-python-datamodel-sourcetimefunctiontype" is not referenced.

Hyperlink target "api-python-datamodel-stationgrouptype" is not referenced.

Hyperlink target "api-python-datamodel-object" is not referenced.

Hyperlink target "api-python-datamodel-publicobject" is not referenced.

Hyperlink target "api-python-datamodel-notifier" is not referenced.

Hyperlink target "api-python-datamodel-access" is not referenced.

Hyperlink target "api-python-datamodel-amplitude" is not referenced.

Hyperlink target "api-python-datamodel-amplitudereference" is not referenced.

Hyperlink target "api-python-datamodel-arclinklog" is not referenced.

Hyperlink target "api-python-datamodel-arclinkrequest" is not referenced.

Hyperlink target "api-python-datamodel-arclinkrequestline" is not referenced.

Hyperlink target "api-python-datamodel-arclinkrequestsummary" is not referenced.

Hyperlink target "api-python-datamodel-arclinkstatusline" is not referenced.

Hyperlink target "api-python-datamodel-arclinkuser" is not referenced.

Hyperlink target "api-python-datamodel-arrival" is not referenced.

Hyperlink target "api-python-datamodel-auxdevice" is not referenced.

Hyperlink target "api-python-datamodel-auxsource" is not referenced.

Hyperlink target "api-python-datamodel-auxstream" is not referenced.

Hyperlink target "api-python-datamodel-comment" is not referenced.

Hyperlink target "api-python-datamodel-complexarray" is not referenced.

Hyperlink target "api-python-datamodel-compositetime" is not referenced.

Hyperlink target "api-python-datamodel-confidenceellipsoid" is not referenced.

Hyperlink target "api-python-datamodel-config" is not referenced.

Hyperlink target "api-python-datamodel-configmodule" is not referenced.

Hyperlink target "api-python-datamodel-configstation" is not referenced.

Hyperlink target "api-python-datamodel-creationinfo" is not referenced.

Hyperlink target "api-python-datamodel-dataattributeextent" is not referenced.

Hyperlink target "api-python-datamodel-dataavailability" is not referenced.

Hyperlink target "api-python-datamodel-dataextent" is not referenced.

Hyperlink target "api-python-datamodel-datasegment" is not referenced.

Hyperlink target "api-python-datamodel-dataused" is not referenced.

Hyperlink target "api-python-datamodel-datalogger" is not referenced.

Hyperlink target "api-python-datamodel-dataloggercalibration" is not referenced.

Hyperlink target "api-python-datamodel-decimation" is not referenced.

Hyperlink target "api-python-datamodel-event" is not referenced.

Hyperlink target "api-python-datamodel-eventdescription" is not referenced.

Hyperlink target "api-python-datamodel-eventparameters" is not referenced.

Hyperlink target "api-python-datamodel-focalmechanism" is not referenced.

Hyperlink target "api-python-datamodel-focalmechanismreference" is not referenced.

Hyperlink target "api-python-datamodel-integerquantity" is not referenced.

Hyperlink target "api-python-datamodel-inventory" is not referenced.

Hyperlink target "api-python-datamodel-journalentry" is not referenced.

Hyperlink target "api-python-datamodel-journaling" is not referenced.

Hyperlink target "api-python-datamodel-magnitude" is not referenced.

Hyperlink target "api-python-datamodel-momenttensor" is not referenced.

Hyperlink target "api-python-datamodel-momenttensorcomponentcontribution" is not referenced.

Hyperlink target "api-python-datamodel-momenttensorphasesetting" is not referenced.

Hyperlink target "api-python-datamodel-momenttensorstationcontribution" is not referenced.

Hyperlink target "api-python-datamodel-network" is not referenced.

Hyperlink target "api-python-datamodel-nodalplane" is not referenced.

Hyperlink target "api-python-datamodel-nodalplanes" is not referenced.

Hyperlink target "api-python-datamodel-origin" is not referenced.

Hyperlink target "api-python-datamodel-originquality" is not referenced.

Hyperlink target "api-python-datamodel-originreference" is not referenced.

Hyperlink target "api-python-datamodel-originuncertainty" is not referenced.

Hyperlink target "api-python-datamodel-outage" is not referenced.

Hyperlink target "api-python-datamodel-parameter" is not referenced.

Hyperlink target "api-python-datamodel-parameterset" is not referenced.

Hyperlink target "api-python-datamodel-phase" is not referenced.

Hyperlink target "api-python-datamodel-pickreference" is not referenced.

Hyperlink target "api-python-datamodel-principalaxes" is not referenced.

Hyperlink target "api-python-datamodel-qclog" is not referenced.

Hyperlink target "api-python-datamodel-qualitycontrol" is not referenced.

Hyperlink target "api-python-datamodel-reading" is not referenced.

Hyperlink target "api-python-datamodel-realarray" is not referenced.

Hyperlink target "api-python-datamodel-realpdf1d" is not referenced.

Hyperlink target "api-python-datamodel-realquantity" is not referenced.

Hyperlink target "api-python-datamodel-responsefap" is not referenced.

Hyperlink target "api-python-datamodel-responsefir" is not referenced.

Hyperlink target "api-python-datamodel-responseiir" is not referenced.

Hyperlink target "api-python-datamodel-responsepaz" is not referenced.

Hyperlink target "api-python-datamodel-responsepolynomial" is not referenced.

Hyperlink target "api-python-datamodel-route" is not referenced.

Hyperlink target "api-python-datamodel-routearclink" is not referenced.

Hyperlink target "api-python-datamodel-routeseedlink" is not referenced.

Hyperlink target "api-python-datamodel-routing" is not referenced.

Hyperlink target "api-python-datamodel-sensor" is not referenced.

Hyperlink target "api-python-datamodel-sensorcalibration" is not referenced.

Hyperlink target "api-python-datamodel-sensorlocation" is not referenced.

Hyperlink target "api-python-datamodel-setup" is not referenced.

Hyperlink target "api-python-datamodel-sourcetimefunction" is not referenced.

Hyperlink target "api-python-datamodel-station" is not referenced.

Hyperlink target "api-python-datamodel-stationgroup" is not referenced.

Hyperlink target "api-python-datamodel-stationmagnitude" is not referenced.

Hyperlink target "api-python-datamodel-stationmagnitudecontribution" is not referenced.

Hyperlink target "api-python-datamodel-stationreference" is not referenced.

Hyperlink target "api-python-datamodel-stream" is not referenced.

Hyperlink target "api-python-datamodel-tensor" is not referenced.

Hyperlink target "api-python-datamodel-timearray" is not referenced.

Hyperlink target "api-python-datamodel-timepdf1d" is not referenced.

Hyperlink target "api-python-datamodel-timequantity" is not referenced.

Hyperlink target "api-python-datamodel-timewindow" is not referenced.

Hyperlink target "api-python-datamodel-waveformquality" is not referenced.

Hyperlink target "api-python-datamodel-waveformstreamid" is not referenced.

Modules are meant to be standalone programs doing a particular job. The
seiscomp.client package focuses on three main aspects:

Therefore a client package has been developed combining these concepts in an
easy way with only a couple of API calls. Since |scname| has been developed in
C++ and uses the object oriented paradigm forcefully, modules build on the
Application (C++: :class:`Seiscomp::Client::Application`, Python:
:class:`seiscomp.client.Application`) class. It manages the messaging connection
and waveform sources in a transparent way.

easy way with only a couple of API calls. Since 

 has been developed in
Application (C++: 

) class. It manages the messaging connection

The class :class:`Seiscomp::Client::Application` is the base class for
all |scname| applications. It manages messaging and database
connections, provides access to command line options and configuration
parameters and also handles and interprets notifier messages.

 applications. It manages messaging and database

Blocking network operations like reading messages are moved into threads that
are synchronized in a single blocking message queue. This queue allows pushing
elements from different threads and unblocks when a new element is ready to be
popped. If the queue is full (currently 10 elements are allowed) the pushing
threads also block until an element can be pushed again.

This way applications do not have to poll and thus do not burn CPU cycles.

The application class is event driven. It runs the event loop which pops the
message queue and dispatches events with their handlers. Handler methods are
prefixed with *handle*, e.g. :func:`handleMessage`.

prefixed with 

When overriding handlers it is always good practise to call the base
handlers before running custom code.

The application class is part of the seiscomp.client package. It needs to
be imported first.

A common strategy to write a module with that class is to derive from it and
run it in a Python main method.

import sys
import seiscomp.client

# Class definition
class MyApp(seiscomp.client.Application):
    def __init__(self, argc, argv):
        seiscomp.client.Application.__init__(self, argc, argv)

# Main method to call the app
def main(argc, argv):
    app = MyApp(argc, argv)
    return app()

# Call the main method if run as script
    sys.exit(main(len(sys.argv), sys.argv))

An application can be called with the parenthesis operator :func:`()` which
returns the applications result code and serves as input to :func:`sys.exit`.
Operator() is a wrapper for :func:`Application.exec`.

 which
returns the applications result code and serves as input to 

def exec(self):
    self.returnCode = 1

    if self.init() and self.run():
        self.returnCode = 0

    self.done()

    return self.returnCode

:func:`init`, :func:`run` and :func:`done` are explained in more detail in
the next sections.

To create an application, derive from the seiscomp.client.Application class
and configure it in the constructor.

    # MyApp constructor
        # IMPORTANT: call the base class constructor
        # Default is TRUE
        self.setMessagingEnabled(False)
        # Default is TRUE, TRUE
        self.setDatabaseEnabled(False, False)
        self.setDaemonEnabled(False)

As marked in line 4, the call of the constructor of the base class is very
important. It takes the command line parameters and sets up internal
application variables. Without this call the application will either not run
at all or show undefined/unexpected behaviour.

The constructor takes also the initial parameters of the application such as
enabling a messaging connection and enabling database access.

Messaging, database and daemon mode is enabled by default. The daemon mode is
important if the application should be started as service and therefore should
support the option ``-D, --daemon``. Utilities and non daemon applications
should disable that mode.

support the option 

. Utilities and non daemon applications

Example calls to this options are shown in the highlighted lines of the above
code block.

If messaging is enabled, the messaging username is derived from the binary
called (*not the class name*). If the script is called test.py then the username
selected is **test**. The username can be overridden either in the configuration
file (:ref:`global`) or using the API.

called (

). If the script is called test.py then the username
selected is 

. The username can be overridden either in the configuration
file (

Setting the username to an empty string results in a random username selected
by the messaging server.

All application methods are defined in the C++ header file
:file:`src/trunk/libs/seiscomp/client/application.h`.

init (virtual)
    initConfiguration (virtual)
    initCommandLine (virtual)
        createCommandLineDescription (virtual)
    parseCommandLine (virtual)
        printUsage (virtual)
    validateParameters (virtual)
    loadPlugins
    forkDaemon
    initMessaging
    initDatabase
    loadInventory or loadStations
    loadDBConfigModule
    loadCities

Methods marked with virtual can be overridden. :func:`init` itself calls
a lot of handlers that can be customized. Typical handlers are
:func:`initConfiguration`, :func:`createCommandLineDescription`
and :func:`validateParameters`.

 itself calls

:func:`initConfiguration` is used to read parameters of the configuration files
and to populate the internal state. If something fails or if configured values
are out of bounds, False can be returned which causes :func:`init` to return
False and to exit the application with a non-zero result code.

 is used to read parameters of the configuration files
are out of bounds, False can be returned which causes 

 to return

def initConfiguration(self):
    if not seiscomp.client.Application.initConfiguration(self):
        return False

    try:
        self._directory = self.configGetString("directory")
    except:
        pass

    return True

This method reads the directory parameter from the configuration file(s) and
sets it internally. If the directory is not given in any of the modules
configuration files, it logs an error and aborts the application by returning
False.

:func:`createCommandLineDescription` is used to add custom command line options.
This is a void function and does not return any value. It is also not necessary
to call the base class method although it does not hurt.

 is used to add custom command line options.

def createCommandLineDescription(self):
    self.commandline().addGroup("Storage")
    self.commandline().addStringOption("Storage", "directory,o", "Specify the storage directory")

A new command line option group is added with :func:`addGroup` and then a new
option is added to this group which is a string option.
Four types can be added
as options: string, int, double and bool: :func:`addStringOption`, :func:`addIntOption`,
:func:`addDoubleOption` and :func:`addBoolOption`.

 and then a new
as options: string, int, double and bool: 

:func:`validateParameters` can be used to fetch the values of previously added
command line options and to validate each parameter. If False is returned, the
application is aborted with a non-zero result code.

 can be used to fetch the values of previously added

def validateParameters(self):
    try:
        self._directory = self.commandline().optionString("directory")
    except:
        pass

    # The directory validity is checked to avoid duplicate checks in
    # initConfiguration.
    if not self._directory:
        seiscomp.logging.error("directory not set")

    if not exists(self._directory):
        seiscomp.logging.error(
            "directory {} does not exist".format(self._directory))

Custom initialization code after checking all parameters can be placed in the
overridden method :func:`init`.

overridden method 

code-block: python

def init(self):
    if not seiscomp.client.Application.init(self):

    # Custom initialization code runs here.
    setupCustomConnections()
    readMyDataFiles()

But be aware that the process forked already if started as daemon. To run before
the fork, it needs to be put into :func:`validateParameters`.

the fork, it needs to be put into 

run (virtual)
    startMessageThread
    messageLoop
        readMessage
        dispatchMessage (virtual)
            handleMessage (virtual)
                addObject (virtual)
                updateObject (virtual)
                removeObject (virtual)
            handleReconnect (virtual)
            handleDisconnect (virtual)
            handleTimeout (virtual)
            handleAutoShutdown (virtual)

The run method starts the event loop and waits for new events in the queue.
In case of messaging a thread is started that sits and waits for messages
and feeds them to the queue and to the event loop in :func:`run`. Without
messaging the run loop would do nothing but waiting for SIGTERM or
a timer event enabled with :func:`enableTimer`. If the event loop is not needed
because no timer and messages are needed, it should be overridden and the
code should be placed there. This will disable the event loop.

and feeds them to the queue and to the event loop in 

. Without
a timer event enabled with 

. If the event loop is not needed

:func:`run` is expected to return True on success and False otherwise. If False
is returned the application exists with a non-zero return code. Custom return
codes can always be set with :func:`Application.exit`.

 is expected to return True on success and False otherwise. If False
codes can always be set with 

If the scmaster sends a message to the client it is received in the applications
message thread and pushed to the queue. The event loop pops the message from
the queue and calls :func:`handleMessage`. The default implementation uses two
settings when handling a messages that can be controlled with
:func:`enableInterpretNotifier` and :func:`enableAutoApplyNotifier`.

the queue and calls 

. The default implementation uses two

:func:`enableInterpretNotifier` controls whether the Application queries the
message type and extracts notifier objects. For each notifier it parses the
operation and dispatches the parentID and the object either to
:func:`addObject`, :func:`updateObject` or :func:`removeObject` handler. This
behaviour is enabled by default. If disabled, a clients needs to parse the
messages by itself and implement this method.

 controls whether the Application queries the

 handler. This

:func:`enableAutoApplyNotifier` controls whether incoming notifier objects are
applied automatically to objects in local memory. If the client has already
an object in memory and an update notifier for this object is received, the object
in the notifier is copied to the local object. This behaviour is enabled by default.

 controls whether incoming notifier objects are

done (virtual)
    closeTimer
    closeMessaging
    closeDatabase

:func:`done` is usually not overridden. If custom code and clean up procedures
need to be placed in :func:`done`, the base class **must** be called. :func:`done` is a
void function.

 is usually not overridden. If custom code and clean up procedures
need to be placed in 

def done(self):
    seiscomp.client.Application.done()

    # Custom clean ups
    closeMyDataFiles()
    closeCustomConnections()

The application class has another occurrence: :class:`seiscomp.client.StreamApplication`.

The class :class:`StreamApplication` extends the :class:`Application`
in terms of record acquisition. It spawns another thread that reads the records
from a configurable source and adds a new handler method
:func:`StreamApplication.handleRecord` to handle these records.

    +initRecordStream
    +startAcquisitionThread
        +storeRecord
    Application.messageLoop
            +handleRecord (virtual)
 done (virtual)
     +closeRecordStream

The stream subscription should be done in :func:`init`. :func:`recordStream`
returns the RecordStream instance which can be used to add stream requests.

    if not seiscomp.client.StreamApplication.init(self):

    # Subscribe to some streams
    self.recordStream().addStream("GE", "MORC", "", "BHZ")

The record stream service is configured either with configuration files
(:confval:`recordstream`) or
via command-line options ``-I`, ``--record-url``.

(

The application finishes if the record stream read EOF. Running a :class:`StreamApplication`
with :ref:`Seedlink<seedlink>` would probably never terminate since it is a
real time connection and handles reconnects automatically.

The application finishes if the record stream read EOF. Running a 

 would probably never terminate since it is a

For production systems only
:ref:`install the officially released packages <installation-packages>`
from :cite:t:`seiscomp`, :cite:t:`gempa` or compile from the corresponding
release tags in this repository.

 or compile from the corresponding

The |scname| software collection is distributed among several repositories.
For more information about compilation and build configuration head over to
:cite:t:`seiscomp-github`.

 software collection is distributed among several repositories.

For building a complete |scname| distribution checkout all repositories using
the following script:

 distribution checkout all repositories using

if [ $# -eq 0 ]
then
    echo "$0 <target-directory>"
    exit 1
fi

target_dir=$1
repo_path=https://github.com/SeisComP

echo "Cloning base repository into $1"
git clone $repo_path/seiscomp.git $1

echo "Cloning base components"
cd $1/src/base
git clone $repo_path/seedlink.git
git clone $repo_path/common.git
git clone $repo_path/main.git
git clone $repo_path/extras.git

echo "Cloning external base components"
git clone $repo_path/contrib-gns.git
git clone $repo_path/contrib-ipgp.git
git clone https://github.com/swiss-seismological-service/sed-SeisComP-contributions.git contrib-sed

echo "Done"

cd ../../

echo "If you want to use 'mu', call 'mu register --recursive'"
echo "To initialize the build, run 'make'."

To build from source you will need to clone from one or more repositories as
described in :ref:`build`.

described in 

Before building, **install all the dependencies**,
as described below in :ref:`build_dependencies`.

The easiest way to compile |scname| is to use the :file:`Makefile` file
provided which creates a build directory inside the source tree.

 file

By default all files are installed under :file:`$HOME/seiscomp`.
This location can be changed with `cmake` or with its front end `ccmake`.

Basically the build directory can live anywhere. The following steps create
a build directory, configure the build and start it:

$ mkdir sc-build
$ cd sc-build
$ ccmake /path/to/sc-src
# Configure with ccmake
$ make install

For compiling the |scname| sources the following development software packages
are required (Debian/Ubuntu package names):

 sources the following development software packages

python3-numpy (optional, required if Numpy support is enabled which is also the default configuration)

As of |scname| in version 5.0.0 support for Python 2 is dropped and Python 3 has
become the default.
The Python development libraries are required if Python wrappers should be
compiled which is the default configuration. The development files must
match the used Python interpreter of the system.

 in version 5.0.0 support for Python 2 is dropped and Python 3 has

Although |scname| has been developed, compiled and tested on Linux systems,
users have compiled |scname| on MacOS.
The procedures are given online by external sources :cite:p:`macos-compile`.
Please contact the managers of these sources for any requests.

 has been developed, compiled and tested on Linux systems,
users have compiled 

.

standard.

Please give appropriate reference to |scname| :cite:p:`seiscomp` when publishing your work.
You may cite the |scname| software as:

Helmholtz-Centre Potsdam - GFZ German Research Centre for Geosciences and gempa GmbH (2008).
The SeisComP seismological software package. GFZ Data Services.
doi: `10.5880/GFZ.2.4.2020.003 <http://dx.doi.org/10.5880/GFZ.2.4.2020.003>`_.

doi: 

@Misc{seiscomp,
  Title                    = {{The SeisComP seismological software package. GFZ Data Services.}},
  Author                   = {{Helmholtz-Centre Potsdam - GFZ German Research Centre for Geosciences and gempa GmbH}},
  Year                     = {2008},
  Doi                      = {10.5880/GFZ.2.4.2020.003},
  Url                      = {https://www.seiscomp.de}
}

For C++ always use tab indentation. In case of line break white spaces have to be
used to fill the space. The recommended tab width is 4 characters.

// Tabs are visualized with '>' and spaces with '.'
int myFunction() {
>   int a = 5;
>   if ( a > 5 ) {
>   >   SEISCOMP_DEBUG("A is greater than 5. Its current value is %d",
>   >   ...............a);
>   return a;
}

C++ code is (or should be) written with the following code style:

/***************************************************************************
 * Copyright (C) ...                                                       *
 *                                                                         *
 * All rights reserved.                                                    *
 * Contact: <contact>                                                      *
 *                                                                         *
 * Author: <name>                                                          *
 * Email: <email>                                                          *
 *                                                                         *
 * GNU Affero General Public License Usage                                 *
 * This file may be used under the terms of the GNU Affero                 *
 * Public License version 3.0 as published by the Free Software Foundation *
 * and appearing in the file LICENSE included in the packaging of this     *
 * file. Please review the following information to ensure the GNU Affero  *
 * Public License version 3.0 requirements will be met:                    *
 * https://www.gnu.org/licenses/agpl-3.0.html.                             *
 *                                                                         *
 * Other Usage                                                             *
 * Alternatively, this file may be used in accordance with the terms and   *
 * conditions contained in a signed written agreement between you and      *
 * gempa GmbH.                                                             *
 ***************************************************************************/

#ifndef NAMESPACE_LIB_FILENAME_H
#define NAMESPACE_LIB_FILENAME_H

#include <math.h>

class Complex {
   public:
      Complex(double re, double im)
      : _re(re), _im(im) {}

      double modulus() const {
          return sqrt(_re * _re + _im * _im);
      }

      <template typename T>
      void set(T r, T i) {
          _re = r;
          _im = i;
      }

    private:
        double _re;
        double _im;
};

void bar(int i) {
    static int counter = 0;
    counter += i;
}

namespace Foo {
namespace Bar {

void foo(int a, int b) {
    for ( int i = 0; i < a; ++i ) {
        if (  i < b )
            bar(i);
        else {
            bar(i);
            bar(b);
        }
    }
}

} // namespace Bar
} // namespace Foo

#endif

**Trailing newline**: use a newline at the end of each source file.

**Include guards**: Use include guards in your header files instead of #pragma once:

.. code-block:: c++

   #ifndef NAMESPACE_LIB_FILENAME_H
   #define NAMESPACE_LIB_FILENAME_H
   ...
   #endif

: Use include guards in your header files instead of #pragma once:

...
#endif

Use descriptive names and camel capping. That means the name of the element
starts with the case given in the following table. Every concatenated word
starts with an uppercase letter (e.g. myDescriptiveElementName).

For straight enumerations where values start with 0 a quantity name should be
defined that describes the upper bound for all valid enumeration values. Its
name should be prepended by two letters describing the enumeration name and an
underscore.

sourced out into separate .ipp file
with same name as the header file

All source and header files are named with lowercase letters. The suffix of a
source file is ".cpp" while for a header file it is ".h". The name of files
that contain a class has to correspond with the class name. For other files,
a descriptive name has to be provided (e.g. protocol.h instead of pro.h).

source file is “.cpp” while for a header file it is “.h”. The name of files

While designing methods or functions these rules about return values should be kept in mind:

Functions returning an int or related types as status: 0 means success;
everything else is an error [1]_

everything else is an error 

Functions returning a pointer:
0 (or :code:`nullptr`) means an error and of course an
invalid pointer [1]_

Functions returning a class object can throw an exception in case of an error.
This is not obligatory and should be used with care.

**Example**: std::string myMethod();

According to [2]_ dynamic exception specifications are considered or proposed
as deprecated feature and not recommended [3]_. Don't use them in declaring a function prototype.

 dynamic exception specifications are considered or proposed
as deprecated feature and not recommended 

// Don't use that
int foo() throw(ValueException);

// Just declare it without an exception specification
int foo();

Use either 0 or the :code:`nullptr` keyword of C++11.
Check a null pointer with implicit boolean conversion.

 keyword of C++11.

Virtual functions are a fundamental concept of polymorphic classes. Virtual
functions will be overwritten in derived classes to implement specific
behaviour. It can happen that the signature of the virtual function in the
base class changes but derived classes do not follow this change.

This causes in erroneous behaviour as the derived virtual function will not
be called as desired. What is even worse is that this mismatch of signatures
is hard to find and to debug.

Fortunately C++11 introduces the long awaited override keyword which declares
that a virtual function of a derived class intends to override the virtual
function with the same name of the base class. If both signatures do not match,
the compiler will throw an error.

class Base {
    virtual void print() {
        cout << "Base class" << endl;
    }
}

class Derived : public Base {
        cout << "Derived class" << endl;
    }
}

If we change the signature of print to take an additional parameter then
the derived method will not be called anymore.

    virtual void print(ostream &os) {
        os << "Base class" << endl;
    }
}

Adding the override keyword will force the compiler to check both signatures
for equality.

    void print() override {
        os << "Derived class" << endl;
    }
}

This code above will throw an error during compilation and one has to adapt
the signature of the function.

Use the override keyword whenever you implement a virtual function in derived
classes.

This chapter refers to concepts shared between any applications of
the :term:`trunk` package.

the 

This chapter describes the configuration of a processing system and how all
the pieces gear into each other. It will cover module specific
configuration, inventory (station metadata) and module station bindings.

The |scname| framework defines a common schema to read configuration parameters.
This schema is used by all :ref:`SeisComP modules <concepts_modules>` with names
starting with **sc**, e.g. `scautopick`. Other modules might be available
as well such as third party modules which use other naming conventions.

 framework defines a common schema to read configuration parameters.
This schema is used by all 

. Other modules might be available

A way to discover a module that uses the |scname| configuration schema
is to call it with ``--help``. The first lines of a typical output look like
this:

Generic:
  -h [ --help ]                         Produce help message
  -V [ --version ]                      Show version information
  --config-file arg                     Use alternative configuration file

The reason for that is that there are also other modules which do not
use the |scname| core and client libraries such Seedlink plugins, Seedlink
itself and some others which are not part of the trunk source package. Those
modules need translators to generate their native configuration when
the configuration is updated (``seiscomp update-config``).

use the 

 core and client libraries such Seedlink plugins, Seedlink
the configuration is updated (

Again, the two indicators that a module uses the following configuration
schema are:

Generation and import of an inventory (station meta data): Read the concept
section :ref:`concepts_inventory`,

section 

:ref:`Standalone modules <concepts_modules>` can also run without inventory.

:ref:`Module configurations <global_modules_config>` define module control
parameters which are equally applied to all operations on waveforms, event
parameters, graphical user interfaces, etc.

**All** :ref:`daemon modules <concepts_modules_daemon>` and **some**
:ref:`command-line tools <concepts_modules_commandline>` provide module
configurations. *Module configurations are overridden by bindings
configurations.*

 define module control

*Module configurations are overridden by bindings

Module configurations are overridden by bindings
configurations.

:ref:`Binding configurations <global_bindings_config>` define control
parameters per station and even stream. They are used for station- and even
stream-specific definitions, e.g. the data acquisition from a particular
station or server using :ref:`seedlink` or the phase detection by
:ref:`scautopick`.

In contrast to module configuration, **only some**
:ref:`daemon modules <concepts_modules>` and a very few
:term:`GUI modules <GUI>` provide bindings. *Binding configurations override
module configurations.*

 define control
station or server using 

Whether or not a module considers bindings configurations can be read in the
module configuration panel of :ref:`scconfig`.

module configuration panel of 

.. figure:: ../media/scconfig_no_bindings.png
   :alt: scconfig: no bindings configurations

   scconfig modules panel indicating that no bindings can be configured.

scconfig modules panel indicating that no bindings can be configured.

.. figure:: ../media/scconfig_has_bindings.png

   scconfig modules panel indicating that bindings can be configured.

scconfig modules panel indicating that bindings can be configured.

Configurations for modules are saved as :file:`*.cfg` files. There are three
directories involved where configuration files can be stored:

 files. There are three

:file:`$SEISCOMP_ROOT/etc/defaults/`: This directory ships with the distribution
of |scname| and should never be touched. All contained files might be
overwritten with the next software update.

 and should never be touched. All contained files might be

:file:`$SEISCOMP_ROOT/etc/`: This directory will never be populated by a software
update and it is save to store global module configuration files there.
Depending on the system setup this directory might be read-only to users.
It is called the system configuration directory.

: This directory will never be populated by a software

:file:`$HOME/.seiscomp/`: This directory is in the user's home directory and
it is meant to provide configurations which override default and system
It is called the user configuration directory.

: This directory is in the user’s home directory and

Furthermore there are two file names involved in each directory:
:file:`global.cfg` and :file:`[module].cfg`. The file :file:`global.cfg`
will be loaded by all modules and it is a good place to store common
parameters such as messaging connections or logging configurations.

The three directories and two files result in 6 locations to read all of a
module's configuration parameters:

module’s configuration parameters:

The order of the configuration files above also represents the order of loading.
Parameters can be available in any of these files. The last occurrence of a
parameter takes priority such as  configurations in :file:`$HOME/.seiscomp/`.

parameter takes priority such as  configurations in 

:ref:`scconfig` provides a user-friendly graphical interface to adjust the
global and the module configuration parameters.

 provides a user-friendly graphical interface to adjust the

.. figure:: ../media/scconfig_config_modules.png
   :alt: scconfig: module configuration

   scconfig modules module configuration panel.

Alternatively, you may adjust the module configuration files corresponding to
a module. An easy way of getting started is to copy the default configuration
file in :file:`$SEISCOMP_ROOT/etc/defaults/` to :file:`$SEISCOMP_ROOT/etc/` and
adjust it there.

file in 

Do not adjust any parameter in the default configuration files located in
:file:`$SEISCOMP_ROOT/etc/defaults/` as they will be overwritten by future
software updates.

Module configurations are usually read when starting a module and cannot be
changed during runtime. For applying any change on module configuration

In addition to a permanent configuration you may temporally override any
configuration parameter when executing a module. Provide the full structure of
the configuration parameter on the command line along with "=" between parameter
and value. This will identify the parameter as a configuration parameter
overridden on the command line. E.g. refer to the codes parameter of
:ref:`scrttv` in the streams section as `codes.streams`:

the configuration parameter on the command line along with “=” between parameter

Bindings configure parameters specific to stations and for a certain module.
A station might require a custom set of parameters for e.g. data acquisition from
a remote data logger or server, for processing or
displaying. |scname| design is that bindings will be stored
in the database. All modules requiring this information read them from the
database. In this way consistent inventory and its bindings will be distributed
to all modules running locally or on remote computers.

displaying. 

 design is that bindings will be stored

Bindings can be conveniently configured in the Bindings panel of :ref:`scconfig`.
Read the section :ref:`scconfig-bindings` for instructions.

Bindings can be conveniently configured in the Bindings panel of 

.. figure:: ../media/binding.*

   Binding

   A binding holds the configuration how a station is used in a module.

A binding holds the configuration how a station is used in a module.

Parameters defined in bindings override parameters in module configurations.
Bindings configurations are saved as stations bindings or as bindings profiles with
given names:

**Station binding parameters:** :file:`$SEISCOMP_ROOT/etc/key/[module]/station_NET_STA`
is used only be one station NET.STA.

**Binding profile parameters:** :file:`$SEISCOMP_ROOT/etc/key/[module]/profile_[name]`
can be used by many stations. Then any update of this file applies to all stations
bound to this profile.

Like in this list, the actual binding parameters for each module are
expected in either :file:`etc/key/$MODULE/station_$NET_$STA` or
:file:`etc/key/$MODULE/profile_$PROFILE`. That depends if a profile should
be used or not. If the station key file registers a module with a colon
following a name then this name is the profile name. If just a module is given
then the station binding file will be read.

expected in either 

. That depends if a profile should

The bindings themselves are links from the module to the station. They are written
into key files, e.g.

# Binding references
global:__HH
scautopick:default
seedlink:geofon

Example of bindings profiles and a station binding for slarchive:

slarchive

The key files are named like :file:`station_$NET_$STA`, e.g. :file:`station_GE_MORC`.
The names within the key files define for which modules the station registers. In the
above example it is the **global**, **scautopick**, **seedlink** and slarchive.

.
above example it is the 

To list all modules a particular station is configured for is very simple by printing the content
of the station key file:

$ cat etc/key/station_GE_MORC
global:BH

Another way is a bit more complicated but at least all information is
there. To show all stations configured for SeedLink could be done this way:

$ for i in `find etc/key -type f -maxdepth 1 -name "station_*_*"`; do
> egrep -q '^seedlink(:.*){0,1}$' $i && echo $i;
> done
etc/key/station_GE_MORC
etc/key/station_GE_UGM

Modules usually read the bindings configuration from the database but not from files.
Therefore,  the bindings are stored in the database when executing

The database tables involved are ``ConfigModule``, ``ConfigStation``, ``Setup``,
``ParameterSet`` and ``Parameter``.

.. figure:: ../media/configdb-schema.png

   Configuration database schema

To illustrate the contents of the objects, the XML representation
is used below.

<Config>
  <module publicID="Config/trunk" name="trunk" enabled="true">
    ...
  </module>
</Config>

A ConfigModule with publicID *Config/trunk* is created with name *trunk*. This
ConfigModule is managed by the global initialization script (:file:`etc/init/trunk.py`)
and will be synchronized with configured bindings of all trunk modules. The
ConfigModule trunk is the one that is actually used by all configurations unless
configured otherwise with:

. This
ConfigModule is managed by the global initialization script (

)

Here :program:`scapp` would read ConfigModule *test*. Because a ConfigModule *test*
is not managed by :program:`seiscomp update-config` it is up to the user to create
it.

For each station that has at least one binding, a ConfigStation object is
attached to the ConfigModule:

<Config>
    <station publicID="Config/trunk/GE/UGM"
             networkCode="GE" stationCode="UGM" enabled="true">
      ...
  </module>
</Config>

<Config>
      <setup name="default" enabled="true">
        <parameterSetID>
          ParameterSet/trunk/Station/GE/UGM/default
        </parameterSetID>
      </setup>
      <setup name="scautopick" enabled="true">
          ParameterSet/trunk/Station/GE/UGM/scautopick
      </setup>
  </module>
</Config>

Here two setups have been created: *default* (which is a special case for
module *global* to be backwards compatible) and *scautopick* where each
refers to a ParameterSet by its publicID. The next XML fragment shows
the ParameterSet referred by the scautopick setup of station GE.UGM:

 where each

<Config>
  <parameterSet publicID="ParameterSet/trunk/Station/GE/UGM/scautopick"
                created="...">
    <baseID>ParameterSet/trunk/Station/GE/UGM/default</baseID>
    <moduleID>Config/trunk</moduleID>
    <parameter publicID="...">
      <name>timeCorr</name>
      <value>-0.8</value>
    </parameter>
      <name>detecFilter</name>
      <value>
        RMHP(10)&gt;&gt;ITAPER(30)&gt;&gt;BW(4,0.7,2)&gt;&gt;STALTA(2,80)
      </value>
      <name>trigOff</name>
      <value>1.5</value>
      <name>trigOn</name>
      <value>3</value>
  </parameterSet>
</Config>

The mapping to the binding configuration files is 1:1. Each parameter in
the configuration file is exactly one parameter in the database and their
names are matching exactly.

The concept of global bindings which are specialized for each module is
reflected by the *baseID* of the ParameterSet which points to setup *default*
of station GE.UGM:

reflected by the 

<Config>
  <parameterSet publicID="ParameterSet/trunk/Station/GE/UGM/default"
      <name>detecStream</name>
      <value>BH</value>
</Config>

This ends up with a final configuration for scautopick and station GE.UGM:

which is the concatenation of the two files :file:`etc/key/global/station_GE_UGM`
and :file:`etc/key/scautopick/station_GE_UGM`. The filter grammar is explained in
:ref:`filter grammar section <filter-grammar>`.

The :file:`etc/key` directory is only used to ease the configuration of bindings.
They are finally transferred to the database or converted to other
representations a module might require to access them. The  directory :file:`etc/key` is meant
for backup and used for copying bindings from one computer to another.

 directory is only used to ease the configuration of bindings.
representations a module might require to access them. The  directory 

 is meant

:ref:`scconfig` provides a graphical interface to adjust the global and the module
bindings parameters and to create the bindings. It populates the :file:`etc/key`
directory and it takes care that they synchronize with the database when processing
*Update configuration* in the *System* panel.

 provides a graphical interface to adjust the global and the module
bindings parameters and to create the bindings. It populates the 

.. figure:: ../media/scconfig_config_bindings.png
   :alt: scconfig: bindings configuration

   scconfig modules bindings configuration panel.

Alternatively, you may manually generate the binding parameter file
:file:`etc/key/global/station_GE_UGM` and
:file:`etc/key/scautopick/station_GE_UGM` and add the binding to the key file
corresponding to the station, e.g.,
:file:`$SEISCOMP_ROOT/etc/key/station_GE_UGM`.´

 and add the binding to the key file

Instead of creating bindings in :ref:`scconfig` or by adjusting key files
manually you may assign binding profiles to stations or networks or remove them
using the |scname| shell which is a specific shell:

 or by adjusting key files
using the 

Start the |scname| shell:

   seiscomp shell

Issue a shell command. Examples:

* Read the help of the new shell:

     ================================================================================
     SeisComP shell

     Welcome to the SeisComP interactive shell. You can get help about
     available commands with 'help'. 'exit' leaves the shell.

     $ help

* add the existing scautopick binding profile, *default*, to the station
  *GE.UGM*:

     $ set profile scautopick default GE.UGM

  or to all stations of the network *GE*:

* remove the scautopick binding profile, *default*, from the station *GE.UGM*:

     $ remove profile scautopick default GE.UGM

* exit the shell and get back to the Linux shell:

     $ exit

Read the help of the new shell:

   ================================================================================
   SeisComP shell

   Welcome to the SeisComP interactive shell. You can get help about
   available commands with 'help'. 'exit' leaves the shell.

   $ help

$ help

add the existing scautopick binding profile, *default*, to the station
*GE.UGM*:

   $ set profile scautopick default GE.UGM

or to all stations of the network *GE*:

*GE.UGM*:

remove the scautopick binding profile, *default*, from the station *GE.UGM*:

   $ remove profile scautopick default GE.UGM

exit the shell and get back to the Linux shell:

   $ exit

A binding is a set of name value pairs just like a configuration file but for
a station. In the file system a binding looks like this:

Simple. These are actually two parameters from the global binding and it solves
a common issue elegantly: a station might provide a couple of channels, often
data in various sampling rates, e.g. LH, BH, SH and HH. Co-located stations
with velocity and acceleration sensors also provide at least two channel groups,
e.g. HL and HH. Those groups are also provided with different location code,
e.g. 00 and 10. To process a station a module needs to know which channel
it should process. To display a representative data channel a viewer needs to
know which channel to show. Global bindings solve that issue by defining the
"preferred" location code and channel code with the two parameters `detecLocid`
and `detecStream`. The TraceView, :ref:`scrttv` can read all available station
bindings, compose a fully qualified channel name from network code (part of the
binding), station code, detecLocid and detecStream. It will then lookup the
inventory information for that channel and display it.

“preferred” location code and channel code with the two parameters 

 can read all available station

Binding configuration parameters are read during a module start after the module
configuration parameters.
They override the module configuration.
Like module configurations, parameters defined in the global bindings can be
overridden in module bindings. The order of loading is:

:file:`$SEISCOMP_ROOT/etc/key/global/`: Global bindings configurations

:file:`$SEISCOMP_ROOT/etc/key/[module]`:  Bindings configurations for a particular module.

If the module connects to a messaging server then it will receive the database parameters,
connect to it and read the bindings. Otherwise the user has to provide the
database address. A module never reads the key directory. It only
gets the bindings from the configuration tables.

As with inventory information there might are cases when a module should
not connect to a database and work offline, in particular when ``--ep`` is being
used.

not connect to a database and work offline, in particular when 

In order to
read the bindings configuration from XML files (again in SCML format),
use :ref:`scxmldump` to dump the configuration XML file and let
the module use this XML file, ``--config-db`` must be used:

In order to
use 

 to dump the configuration XML file and let
the module use this XML file, 

That will completely bypass the database (even if used for event information or
inventory) for reading station bindings.

To extract a configuration XML file from the database, :ref:`scxmldump` can be used:

One can also create a config XML file straight from the ``etc/key`` directory
with ``bindings2cfg``:

To create an XML file from a temporary key directory, an alternative directory
can be specified with ``--key-dir``:

can be specified with 

Binding configurations are read when starting a module and cannot be
changed during runtime. For applying any change on binding configurations

Update the configuration

   $ seiscomp update-config

Key files are another human readable representation of bindings,

``seiscomp update-config`` or ``seiscomp update-config trunk`` writes the
information from :file:`etc/key` to the database,

After changing configuration the affected modules should be tested, e.g. by
running with informative debug logging output. You may use :ref:`scdumpcfg` for
dumping the module an binding parameters into a summary file.

running with informative debug logging output. You may use 

 for

The :term:`trunk` configuration files are simple text files where each line
is a name-value pair containing the parameter name and its value.

 configuration files are simple text files where each line

plain values or comma-separated lists on single or multiple lines
(read sections below) or as

:ref:`variables <concepts_configuration_variables>`, allowing to refer to
previously defined parameters, e.g., in :file:`global.cfg` or to define relative
directories related to the |scname| installation or the Linux system.

In contrast to previous versions of |scname| the parameter names are now
case-sensitive. Use :ref`scchkcfg` to check configurations from previous
versions regarding case-sensitivity.

 the parameter names are now

Module and binding configuration files are simple text file where each line is a
name-value pair for one parameter. The parameter names are case-sensitive. The
format is a simple as:

Parameter groups are indicated by a separating dot ("."). The dot separates the
group from the parameter name or other groups. The item after the last dot is
the parameter.

Parameter groups are indicated by a separating dot (“.”). The dot separates the

Later assignments of parameters override previous ones so the order of lines in the
configuration file is important. The file is parsed top-down.

Values are not type-checked. Type checking is part of the module
logic and will be handled there. The configuration file parser will not raise
an error if a string is assigned to a parameter that is expected to be an
integer.

Everything following an unescaped **#** (hash) is a comment and is going to
be ignored. Blank lines and white spaces are ignored by the parser as well
unless quoted or escaped. Escaping is done by prepending a backslash (**\\\\**)
to the character that needs escaping. It backslash should be part of the
string, two backslashes should be used (**\\\\\\\\**).

 (hash) is a comment and is going to
unless quoted or escaped. Escaping is done by prepending a backslash (

)
string, two backslashes should be used (

agencyID = gempa  # This is a comment

# The preceding empty line is ignored. Now the value of skyColor is replaced
# with 'blue'.
# The final value of a parameter is the result of the last assignment parsed
# from top to bottom.
agencyID = gempa

Values can be either scalar values or lists. List items are separated by commas.

# This is a list definition
rainbowColors = red, orange, yellow, green, blue, indigo, violet

If a value needs to include a comma, white space or any other special
character it can either be escaped with backslash ('\\') or quoted with double
quotes ("). Whitespaces are removed in unquoted and unescaped values.

character it can either be escaped with backslash (’\’) or quoted with double
quotes (“). Whitespaces are removed in unquoted and unescaped values.

# This is a comment

# The following list definitions have 2 items: 1,2 and 3,4
# quoted values
tuples = "1,2", "3,4"
# escaped values
tuples = 1\,2, 3\,4

Values can extend over multiple lines if a backslash is appended to each line

# Multi-line string
text = "Hello world. "\
       "This text spawns 3 lines in the configuration file "\
       "but only one line in the final value."

# Multiline list definition
rainbowColors = red,\
                orange,\
                yellow,\
                green, blue,\
                indigo, violet

The control characters must be outside of double quotes. Everything **within**
double quotes will **not** be decoded. Hence, "\n" will end up as the string
"\n" and not a new line character.

The control characters must be outside of double quotes. Everything 

A basic usage of variable names is to organize them in namespaces. A common
habit is to separate namespaces and variable names with a period character:

Here a namespace called ``colors`` is used. The configuration file parser does
not care about namespaces at all. The final name (including the periods) is what
counts. But to avoid repeating namespaces again and again, declarations can
be wrapped in a namespace block. See the following example:

 is used. The configuration file parser does

Application code will still access ``colors.sky`` and ``colors.grass``.
Namespaces can be arbitrarily nested and even survive includes.

.

A {
   B1 {
      var1 = 123
   }

   B2 {
      var1 = 456
   }
}

Environment or preceding configuration variables (configuration parameters) can
be used as values for :ref:`parameters <concepts_configuration_parameters>` in
the configuration of SeisComP modules with `${var}`, e.g.

be used as values for 

plugins = ${plugins}, hypo71

homeDir = ${HOME}
myPath = ${homeDir}/test
myseiscomp = ${SEISCOMP_ROOT}

|scname| knows internal variables defining the it environment. The can be used
with `@var@`, e.g.

 knows internal variables defining the it environment. The can be used
with 

The list of internal |scname| variables can also be read in the information
panel of :ref:`scconfig`.

.. figure:: ../media/scconfig_information.png
   :alt: scconfig: information panel

   scconfig information panel indicating the internal |scname| variables.

scconfig information panel indicating the internal |scname| variables.

The internal |scname| variable CONFIGDIR can be re-defined by the SHELL
environment variable SEISCOMP_LOCAL_CONFIG. Setting SEISCOMP_LOCAL_CONFIG will
also effect LOGDIR which is automatically set to
:file:`$SEISCOMP_LOCAL_CONFIG/log`.
Example:

 variable CONFIGDIR can be re-defined by the SHELL

Hyperlink target "concepts-configuration-configs" is not referenced.

Hyperlink target "config-fig-configdb-schema" is not referenced.

Hyperlink target "concepts-configuration-parameters" is not referenced.

Hyperlink target "concepts-configuration-variables" is not referenced.

This chapter provides an overview over databases supported by |scname|.

|scname| can store and read information from a relational database management
system (RDBMS). Supported are basically all existing RDBMS for which a plugin
can be written. Currently, :ref:`database plugins <concepts_plugins>` are
provided for

 can store and read information from a relational database management
can be written. Currently, 

Typically, the database is accessed by the messaging (:ref:`scmaster`) for
reading and writing.
Most other modules can only read from the database but do not write into it.
Among the few exceptions which can also directly write to the database are
:ref:`scdb` and :ref:`scardac`.

) for

The database connection provided by the messaging is configured by the
:ref:`scmaster module configuration <scmaster>`. :ref:`Modules <concepts_modules>`
connected to the messaging receive the read connection parameters through the
messaging connection. However, the default read connection by these and all
other modules may be set with :confval:`database` in
:ref:`global configuration <global-configuration>` or set on the command line
using :option:`--database` or simply :option:`-d`.
Read the sections :ref:`installation` and :ref:`getting-started` on the
installation and the configuration of the database backend and the initial setup
of the database itself, respectively.

other modules may be set with 

 on the

The database connection may be used together with the *debug* option to print
the database commands along with debug log output. Example for using
:ref:`scolv` in offline mode with database debug output:

 option to print

The used database schema is well defined and respected by all modules which
access the database. It is similar to the SeisComML schema (:term:`SCML`,
a version of XML) and the C++ / Python class hierarchy of the datamodel
namespace / package.

access the database. It is similar to the SeisComML schema (

,

Information of the following objects can be stored in the database as set out in
the :ref:`documentation of the data model <api-datamodel-python>`.

the 

derived objects like picks, amplitudes, magnitudes origins, events, etc.

information on commands and actions, e.g., by :ref:`scevent <scevent-journals>`

The Config parameters just cover station bindings. Application/module specific
configurations (all .cfg files) are not stored in the database and only kept
in files.

The currently supported version of the database schema can be queried by any
module connecting to the data base using the option :option:`-V`. Example:

module connecting to the data base using the option 

$ scm -V

  scm
  Framework: 6.0.0 Development
  API version: 16.0.0
  Data schema version: 0.12
  GIT HEAD: 5e16580cc
  Compiler: c++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
  Build system: Linux 6.2.0-26-generic
  OS: Ubuntu 22.04.3 LTS / Linux

In |scname| the term :term:`inventory` refers to the meta data of data recording
stations.
Many |scname| :ref:`modules <concepts_modules>` require inventory information to
operate correctly and a correct inventory is therefore fundamental to |scname|.

 require inventory information to
operate correctly and a correct inventory is therefore fundamental to 

The inventory will be read from the :ref:`database <concepts_database>`
by default. To insert or update the inventory in the database, this information
needs to be created or downloaded and converted. The following sections will
describe the process of populating the database and how applications get access
to it.

to it.

The format used for inventory is known as :term:`SCML`. Correct inventory in
:term:`SCML` format can be generated by :cite:t:`smp`. Some modules for
**converting from other formats** are listed in section
:ref:`concepts_inventory_format`. Tools for **processing inventory** are
listed in section :ref:`concepts_inventory_tools`.

The inventory shall contain all meta data describing the full recording system
and the
pre-processing of the raw data stream provided to the data processing modules
using the :ref:`RecordStream <concepts_recordstream>`. Inventories should be
always complete w.r.t the
processed data streams, correct and up-to-date. Beside network, station, location
and stream information they must include the full sensor and datalogger responses.

and the
using the 

. Inventories should be

Older version used key files to configure available networks and stations.
Because the support of response meta-data was very limited, tools were build to
add this functionality. Since the release of Seattle the concept of key files
for station meta-data has been completely removed from the system. Now |scname|
only handles station meta-data in its own XML format called :term:`SCML`.
The task of supporting old key files, dataless SEED and other formats has been
out-sourced to external applications. The inventory synchronization is a
:ref:`two-stage process <config-fig-inventory-sync>`:

for station meta-data has been completely removed from the system. Now 

.

Convert :ref:`external formats <concepts_inventory_format>` into :term:`SCML`

Synchronize inventory pool with the database: merged all inventory files and
synchronize with the database using :program:`scinv snyc`.

synchronize with the database using 

.. figure:: ../media/inventory-sync.png
   :width: 12cm

   Inventory synchronization as a two-stage process

All station meta-data are stored in :file:`etc/inventory`
and can be organized as needed. Either one file per network, a file containing the
complete inventory or one file for all instruments and one file per station.
The update script

loads the existing inventory from the database and merges each file in :file:`etc/inventory`.
Finally it removes all unreferenced objects and sends all updates to the database.

loads the existing inventory from the database and merges each file in 

.

The |scname| :ref:`configuration <concepts_modules>` does not deal with station
meta-data anymore.
It only configures parameters for modules and module-station associations.
The management of the inventory can and should be handled by external tools
e.g. :cite:t:`smp`.

 does not deal with station
e.g. 

The |scname| documentation describes the
:ref:`data model including the inventory <api-datamodel-python>`.

:ref:`data model including the inventory <api-datamodel-python>`

<seiscomp xmlns="http://geofon.gfz-potsdam.de/ns/seiscomp-schema/0.11" version="0.11">
  <Inventory>
    <sensor>...
    <datalogger>...
    <network>...
  </Inventory>

The version attribute of the ``seiscomp`` tag represents the schema version of
the |scname| data model which is consistent with the database schema version
and the version of all other representations.

 data model which is consistent with the database schema version

All geographic coordinates (latitudes, longitudes, elevation) are assumed in the
World Geodetic System 1984 (WGS84) reference system (National Imagery and
Mapping Agency 2000). Latitudes, longitudes are provided in degrees but
elevations are given in meters.

Inventories must be provided to |scname| in XML files in :term:`SCML` format. A
convenient way to generate clean and correct inventory files in :term:`SCML`
format is :cite:t:`smp`. Tools are provided to convert between other formats:

 format. A
convenient way to generate clean and correct inventory files in 

To add inventory information to the |scname| database one either has to write directly
to the database with custom script (not recommended) or place :term:`SCML` files
in :file:`@SYSTEMCONFIGDIR@/inventory`. The service to import all data in that
directory can be called with

 database one either has to write directly
to the database with custom script (not recommended) or place 

. The service to import all data in that

This command runs :ref:`scinv` finally. :ref:`scinv` merges all XML files and
synchronizes the merged local inventory tree with the database. That is a
rather complex process and for more information it is recommended to study
the source code of :ref:`scinv`. The bottom line is that inventory data is created
from :term:`SCML` files.

 merges all XML files and
the source code of 

Because nobody will ever create such XML files by hand, tools are necessary.
A quite popular tools is the online station management portal (SMP)
:cite:p:`smp`. SMP will output XML in version of :term:`SCML` directly.

Another source is the FDSN station webservice (FDSNWS). If the |scname|
implementation of FDSNWS is used, the SeisComP XML format can be requested
directly as an extension. Otherwise FDSN StationXML will be provided. Inventory
in FDSN StationXML needs to be converted with either :ref:`fdsnxml2inv` or
:ref:`import_inv`. The latter is a more versatile application that also supports
several import formats.

in FDSN StationXML needs to be converted with either 

. The latter is a more versatile application that also supports

This will automatically place the output XML file in
:file:`@SYSTEMCONFIGDIR@/inventory`. Afterwards call

to synchronize the changes with the database. If :program:`scconfig` is used,
then either the ``Sync`` button of the `Inventory` panel or the
``Update configuration`` button of the ``System`` panel must pressed.

In order to populate the database with inventory information, the following
steps have to be performed:

Place all :term:`SCML` files at :file:`@SYSTEMCONFIGDIR@/inventory`

Synchronize the inventory files and write the meta data to the database. Run

   $ scinv sync

or

   $ seiscomp update-config inventory

Applications usually connect to the database and read the necessary inventory
information. An application can decide whether it requires full response
information including sensor and data logger response functions or just channel
information without instrument descriptions. The latter performs faster and
some applications do not require full instrument information.

An application usually does not require special configuration to read inventory
information. A database connection is enough and it comes usually along with the
handshake message of the messaging server.

If the messaging is not involved, the database can be specified by the
command-line option ``-d``:

command-line option 

There are cases when an application should be run without a database connection
but requires inventory information, particularly in combination with the
``--ep`` command line argument. To direct an application to an inventory XML file
(again in :term:`SCML` format), ``--inventory-db`` must be used:

 command line argument. To direct an application to an inventory XML file
(again in 

The option ``--inventory-db`` will cause the module to completely bypass
the database for reading inventory information even if used for event
information. The file :file:`inventory.xml` can be created from the database
using :ref:`scxmldump`.

 will cause the module to completely bypass
information. The file 

Locators receive :term:`phase picks <pick>` from modules such as :ref:`scautoloc`,
:ref:`screloc` or :ref:`scolv` for locating seismic or non-seismic sources. The
solutions may include source time and location with or without uncertainties.
They are used to form new :term:`origins <origin>` which can be treated
further.

 for locating seismic or non-seismic sources. The
They are used to form new 

:ref:`LOCSAT <global_locsat>`, the default locator in :ref:`scautoloc` and :ref:`scolv`

While the built-in locators are well defined and documented, any other external
locator routine can be added to |scname| by configuration of the locator
:ref:`LocExt <global_locext>` and custom scripts.
LOCSAT and FixedHypocenter are native to |scname|. All other locators are
implemented as :term:`plugins <plugin>`. A :term:`plugin`
needs to be added to the list of loaded plugins by configuration of the global
parameter :confval:`plugins` for making the corresponding locator available to
|scname| applications.

locator routine can be added to 

parameter 

The specifications given below may depend on the configuration of the
respective locator. Please carefully read the documentation of the locators
for optimizing their performance.

intended for ground-truth tests / single-station location / any travel-time interface

currently the fastest locator in |scname| and the only one available to :ref:`scautoloc`

Magnitudes are computed based on amplitudes measured from waveforms. Different
types of amplitudes and magnitudes are available which are listed in
:ref:`scamp` and :ref:`scmag`.

During phase picking by :ref:`scautopick` with generally fixed time windows
due to the absence of knowledge about source parameters or by,

 with generally fixed time windows

:ref:`scamp` as soon as :term:`origins <origin>` are available. Depending
on the magnitude type, fixed or distance-dependent time windows apply.

 are available. Depending

Amplitude measurements for some magnitude types require or allow the simulation
of instruments such as :py:func:`Wood-Anderson torsion seismometers <WA>`
(:cite:t:`richter-1935,uhrhammer-1990`), :py:func:`WWSSN_SP` or :py:func:`WWSSN_LP`.
The calibration parameters describing the Wood-Anderson seismometer are
configurable in global bindings or global module configuration:
:confval:`amplitudes.WoodAnderson.gain`, :confval:`amplitudes.WoodAnderson.T0`,
:confval:`amplitudes.WoodAnderson.h`. Specifically, the difference in magnitude
due to configuration using original values listed in
:cite:t:`richter-1935` and updated ones given in :cite:t:`uhrhammer-1990`
result in a constant offset of 0.13 in those magnitudes which apply
Wood-Anderson simulation, e.g. :term:`ML <magnitude, local (ML)>`,
:term:`MLv <magnitude, local vertical (MLv)>`, :term:`MLc <magnitude, local custom (MLc)>`.

of instruments such as 

.

. Specifically, the difference in magnitude

Wood-Anderson simulation, e.g. 

Station magnitudes are computed automatically by :ref:`scmag` or interactively
by :ref:`scolv` from measured amplitudes based on distance-dependent
calibration curves which depend on magnitude type. When computing a set of
magnitudes in :ref:`scolv` which is different from the set configured in
:ref:`scmag`, then scmag may later add the missing magnitudes automatically.
Magnitude types for which the evaluation status is set to "rejected", e.g., in
scolv, will not be recomputed by scmag.

 from measured amplitudes based on distance-dependent
magnitudes in 

, then scmag may later add the missing magnitudes automatically.
Magnitude types for which the evaluation status is set to “rejected”, e.g., in

Linear station corrections applied to station magnitudes can be configured by
global :ref:`binding parameters <global_bindings_config>`:

global 

Add a magnitude type profile where the name of the profile is the name of the
magnitude itself,

When using binding profiles, all referencing stations will be affected equally
which is typically not intended. In contrast, applying station bindings requires
to set up many bindings which may not be intended either.

Therefore, you may add lines to the global module configuration in
:file:`global.cfg` where one line corresponds to one station with one magnitude
and the corresponding correction parameter. The groups and the name of the
parameters are identical to the global bindings parameters. All lines start with
"*module.trunk*". Example for an offset correction of
:term:`MLv <magnitude, local vertical (MLv)>` measured station GE.UGM:

 where one line corresponds to one station with one magnitude
“

The configuration of parameters starting with *module.trunk.* is not
supported by :ref:`scconfig`. All corresponding configurations must be done
by direclty editing the configuration file, e.g.,
:file:`seiscomp/etc/global.cfg`.

. All corresponding configurations must be done

Network magnitudes are computed automatically by :ref:`scmag` or interactively
by :ref:`scolv` from station magnitudes based on averaging station magnitudes.
The averaging methods applied by :ref:`scmag` are configurable by
:confval:`magnitudes.average`. Available are (:cite:t:`rosenberger-1983`):

 from station magnitudes based on averaging station magnitudes.
The averaging methods applied by 

*trimmedMean(X)*: gnores outlier station magnitudes by first removing the
largest and the smallest *X* % of the observed values (percentiles). The mean is
formed from the remaining station magnitudes.

: gnores outlier station magnitudes by first removing the
largest and the smallest 

 % of the observed values (percentiles). The mean is

*trimmedMedian(X)*: forms the median from all station magnitudes but returns
the uncertainty by ignoring the largest and the smallest *X* % station

: forms the median from all station magnitudes but returns
the uncertainty by ignoring the largest and the smallest 

*medianTrimmedMean(X)*: returns the mean magnitude from all station magnitudes
differing less than *X* magnitudes from the median.

: returns the mean magnitude from all station magnitudes
differing less than 

New magnitude types (aliases) can be created based on existing magnitude and
amplitude types but configured specifically.
The setup procedure is outlined in the
:ref:`tutorial on magnitude aliases <tutorials_magnitude-aliases>`.

:ref:`tutorial on magnitude aliases <tutorials_magnitude-aliases>`

The computation of station magnitudes can be regionalized. This means that for
a specific region specific conditions apply when computing magnitudes. The
conditions include any parameter available for configuring a magnitude
including global binding parameters such as magnitude calibration, distance
and depth ranges, etc. As an example you may wish to apply different
attenuation curves for computing MLv magnitudes to earthquakes in Eastern and
in Western Canada.

Regionalization is achieved by adding magnitude-type profiles in the magnitudes
section of global module configuration parameters. Regionalization assumes
defaults from global bindings but overrides the values when configured. The
setup procedure including
:ref:`station corrections <concepts-magnitudes-correction>` is outlined in the
:ref:`tutorial on regionalization <tutorials_magnitude-region-aliases>`.

:ref:`tutorial on regionalization <tutorials_magnitude-region-aliases>`

Moment magnitudes can be derived from all other network magnitudes by mapping of
the original network magnitude, e.g., *Mx*, to a new moment magnitude *Mw(Mx)*.

the original network magnitude, e.g., 

The mapping function can be configured for all original magnitude types except
:term:`mB <magnitude, derived mB (Mw(mB))>` and
:term:`Mwp <magnitude, derived Mwp (Mw(Mwp))>` where the mapping is hardcoded.
Read the :ref:`tutorial on moment magnitudes <tutorials_mags_moment>` for the

In order to account for different phenomena related to magnitude computation
including magnitude saturation and application of different magnitude types at
specific distance and depth ranges of the sources a summary magnitude can be
computed from network magnitudes by :ref:`scmag`. The summary magnitude is
usually referred to as *M*. The name is configurable.

computed from network magnitudes by 

Station, network and summary magnitudes are contained uniquely in one
:term:`origin`.

From the list of computed network magnitudes and the summary magnitude,
:ref:`scevent` can automatically determine the preferred magnitude of the
:term:`event`. This may also be done interactively by operators in the
:ref:`Event tab of scolv <scolv-sec-event-tab>` or by
:ref:`custom commit buttons in scolv <sec-scolv-custom-commit>`.

Hyperlink target "concepts-magnitudes-correction" is not referenced.

Hyperlink target "concepts-magnitudes-regionalization" is not referenced.

Hyperlink target "concepts-magnitudes-summary" is not referenced.

This chapter describes the messaging system used for exchanging parameter messages between
different :ref:`SeisComP modules <concepts_modules>` during runtime.

different 

A typical real-time |scname| system consists of data processing and other
modules (clients) and a messaging bus. The messaging bus connects all the
clients letting them exchange information by messages through this bus.
The messaging system is a fundamental concept of SeisComP following the
publish-subscribe pattern :cite:p:`wppubsub`. It is provided by the |scname|
module :ref:`scmaster`.

 system consists of data processing and other
publish-subscribe pattern 

Clients can be producers (sending messages) and/or consumers (receiving
messages). The basic concept is really simple: A producer sends a message
(some event parameter, arbitrary content) and a consumer read that message and tries to
process it. That's it. That is a very generic approach which requires clients
to understand the message content of each other.

process it. That’s it. That is a very generic approach which requires clients

In |scname| this common messaging language consists of well defined message
types and contents. The vast majority of messages sent around are so called
**notifiers**.

 this common messaging language consists of well defined message

Notifiers inform about changes on the data model. They carry just three

  <Notifier parentID="EventParameters" operation="add">
    <Pick publicID="Pick/....">
      <!-- All pick attributes will be placed here -->
    </Pick>
  </Notifier>

Each client that receives such a notifier will take further actions if the
information meets its interest. A simple example is :ref:`scautoloc`. It
receives Pick objects in the form as written above. It stores the pick to its
internal data structures and when there are enough picks to form an Origin,
it does its processing and probably sends an Origin as a result (again as
notifier).

information meets its interest. A simple example is 

. It

.. figure:: ../media/concepts/messaging/system.*
   :alt: sketch of a distributed system

   Schematic view on a distributed SeisComP system.

The messaging server (:ref:`scmaster`) manages a set of queues. Each queue is
independent and clients can only connect to *one* queue at a time within one
connection. Messages sent to a queue are sorted by their arrival time and
forwarded to clients in exactly that order. That is called a FIFO (first in
first out) queue.

) manages a set of queues. Each queue is
independent and clients can only connect to 

 queue at a time within one

For each queue a set of processors can be added where each message is
piped through. One example is the dbstore processor which applies notifiers to
a configured relational database management system (RDBMS).

One could configure scmaster with two queues, one for production which
populates a database and one for playbacks which does not populate a database.

Groups are like topic filters for a message. A message is always being sent to
a specific group or a specific client (peer-to-peer). A client can subscribe
to one or many groups and it will only receive messages tagged with a group it
has subscribed to.

For example :ref:`scautopick` processes waveforms sending detections or
picks as pick notifiers to the PICK group. All clients subscribed to that group
would also receive this information. If the queue is configured with the
dbstore processor then it is guaranteed that the pick has been stored already
in the database at the time of message arrival at the clients.

 processes waveforms sending detections or

A consumer of the PICK group messages is :ref:`scautoloc`. Whenever it receives
a new pick it will try to associate it or to locate a seismic event. After it
succeeded it will send an origin to the LOCATION group and so on.

. Whenever it receives

The messaging allows unencrypted or encrypted connections which are specified by
the scheme parameter of the connection:

Scheme, host, port and :ref:`queue <messaging-scheme>` together form the
connection URL of the messaging system which is configurable in
:confval:`connection.server` or set by the command-line option ``-H``.

 together form the

Connect to the production queue of the messaging on localhost with default port.
Not using encryption `scmp` can be assumed implicitly in global configuration ::

   connection.server = localhost/production

On the command line use, e.g. ::

   $ scolv -H localhost

Not using encryption 

Using non-default secure encryption and port the scheme and the port must be
provided explicitly  in global configuration ::

   connection.server = scmps://localhost18181/production

   $ scolv -H scmps://localhost:18181/production

provided explicitly  in global configuration

The :ref:`database <concepts_database>` is populated by :ref:`scmaster` with all
kind of information which might depend on
each other. It is crucial for operations that write operations are well
synchronized. Part of the messaging contract is that clients get read-only
database access from :ref:`scmaster` and that they will never attempt to write
into the database. In a fully-fledged |scname| system the only instance that is
allowed to populate the database is the dbstore plugin of :ref:`scmaster`.

 with all
database access from 

 and that they will never attempt to write
into the database. In a fully-fledged 

 system the only instance that is
allowed to populate the database is the dbstore plugin of 

When connecting from a client to the messaging, the database connection parameters
are reported by :ref:`scmaster`. They can be overridden by the global configuration
or command-line option ``-d``.

are reported by 

. They can be overridden by the global configuration
or command-line option 

scolv -H localhost -d mysql://sysop:sysop@localhost/seiscomp-test

The messaging server accepts TCP/IP connections enabling a module actually
running anywhere in the network. It happens that this concept is not understood
and users run on each computer another :ref:`scmaster` instance to offload
processing to more computers. Unfortunately each scmaster instance is
configured with the same database connection which will most likely cause data
inconsistencies because each group of modules which is connected to an scmaster
instance does not know about the other scmaster clients and therefore ignore
the sent updates.

and users run on each computer another 

 instance to offload

The correct approach is to run **one** scmaster on computer A which populates
database X. Modules running on computer A, use

 scmaster on computer A which populates

The database connection which is used by :ref:`scmaster` will be reported to the
clients when they connect so no explicit database configuration is necessary.

 will be reported to the

The messaging connection can be explicitly provided on the command line using
the option ``-H`` considering the comments on the
:ref:`scheme <messaging-scheme>` and :ref:`queue <messaging-queue>`, e.g.

the option 

When running :ref:`scmaster` a web frontend is available which can be adjusted to
provide system information. The default port to access the web frontend is 18180:

 a web frontend is available which can be adjusted to

.. figure:: ../media/concepts/messaging/scmaster_web.png
   :alt: scmaster: web frontend

   scmaster: Web frontend

This document describes the difference between command-line and daemon modules.

SeisComP is not a single executable but it provides a set of :term:`trunk` and
:term:`standalone <standalone module>` :term:`modules <module>`. Trunk modules
can be

Modules are :ref:`configured by configuration files <concepts_modules_config>`
either to be used directly or to generate its native configuration. Modules that
need to convert the configuration or do not use the default configuration
options (see below) are called :term:`standalone modules <standalone module>`.
All other modules are called :term:`trunk` modules.

:ref:`configured by configuration files <concepts_modules_config>`

options (see below) are called 

Examples for standalone modules are :ref:`seedlink`, :ref:`slarchive` and :ref:`slmon`.

In order to start or execute modules without :command:`seiscomp exec`
(see below), the |scname| SHELL environment variables must be known to the
system. The variables and their values can be printed giving the full path to
the :ref:`seiscomp` tool. Example:

   /home/sysop/seiscomp/bin/seiscomp print env

 SHELL environment variables must be known to the
the 

Daemon tools are |scname| modules that can run automatically in the background
without user interaction, e.g., for automatic data acquisition or data
processing. The names of all daemon modules are listed when executing the
:ref:`seiscomp` tool with :command:`list modules`:

 modules that can run automatically in the background

When starting a daemon module, all verbosity output is logged to
:ref:`log files <concepts_modules_logging>`. Daemon modules can also be executed
as :ref:`command-line tools <concepts_modules_commandline>`.

All non-daemon modules are command-line modules. These command-line modules
and most :ref:`daemon modules <concepts_modules_daemon>` can be executed on
demand from the SHELL command-line. These modules can also be
utilities or :term:`graphical user interfaces (GUIs) <GUI>`.
For executing use the full path to the :ref:`seiscomp` tool or, when the
|scname| environment is known, just call the module name along with command-line
options, e.g.

and most 

 can be executed on
utilities or 

 environment is known, just call the module name along with command-line

Command-line modules are found in :file:`@ROOTDIR@/bin/` but they are **NOT**
listed when executing

Using options like :option:`-h` the list of available command-line options can
be learned.

In addition, any module configuration parameter can be specified on
the command line overriding the configured parameter. For indicating that a
module configuration parameter is set on the command line separate the value
from the parameter by '=' and provide the full set of sections separated by '.'.
Example:

from the parameter by ‘=’ and provide the full set of sections separated by ‘.’.
Example:

When executing a module, all verbosity output is logged to
:ref:`log files <concepts_modules_logging>`. The logging level can be controlled
by configuration or by the command-line option :option:`-v`.

. The logging level can be controlled
by configuration or by the command-line option 

Detailed debugging information can also be printed on the command line during
runtime using the :option:`--debug` option:

runtime using the 

When starting a daemon module all verbosity output is stored in :file:`@LOGDIR@`
or :file:`$SEISCOMP_ROOT/var/log`. Daemon modules can also be executed as
:ref:`command-line tools <concepts_modules_commandline>`.

When starting a daemon module all verbosity output is stored in 

Each :term:`standalone module` tries to read from three module configuration
files whereas :term:`trunk` modules try to read the six files. Note that
configuration parameters defined earlier are overwritten if defined in files
read in later:

 modules try to read the six files. Note that

In addition to the module configuration files some modules such as
:ref:`seedlink` or :ref:`scautopick` consider :term:`bindings <binding>`.
Bindings provide parameters specific to stations. They are configured as
per-station bindings or profiles used for multiple stations.

.

The :ref:`global configuration section <global-configuration>` describes all
available global configuration parameters for a trunk module. Modules typically
do not make use of all available global parameters because they may be disabled,
e.g., the messaging component. So the configuration of the messaging server is
disabled, too.

 describes all

The concept section :ref:`Configuration <concepts_configuration>` provides more
details about configurations.

Whenever operated, modules report the state of operation to log files. Trunk
modules report the module and the start up log to :file:`@LOGDIR@/[module].log` and
:file:`@ROOTDIR@/var/log/[module].log`, respectively. Standalone modules log to
:file:`@ROOTDIR@/var/log/[module].log` only. The log files are rotated and the
level of detail can be configured by :confval:`logging.level`. More parameters
in :confval:`logging.*` provide more control over logging, e.g., the log file
rotation.

modules report the module and the start up log to 

 only. The log files are rotated and the
level of detail can be configured by 

 provide more control over logging, e.g., the log file
rotation.

Many :term:`trunk` and :term:`standalone modules <standalone module>` allow
generating aliases as symbolic links to another module.
These aliases are useful for running multiple instances of the same module with
different configuration.

 allow

Alias modules can be created or removed using the :ref:`seiscomp` tool by
providing the commands :command:`alias create` or :command:`alias remove`,
respectively. Read the documentation of :ref:`seiscomp <sec_seiscomp_aliases>`

Hyperlink target "concepts-modules-commandline" is not referenced.

Plugins expand the functionality of :ref:`applications <concepts_modules>`.
They are C++ shared object libraries which are dynamically loaded at runtime
into an application.

.

The plugin files themselves are located in :file:`share/plugins`.

By just loading a plugin an application does not change
it's way to function magically. Common plugins just implement a certain
interface (see e.g. messaging or RecordStream) and exhibit that functionality
by adding a new entry to the internal interface factory. As an example an
application makes use of interface ``DatabaseInterface``. Technically it
creates a new object implementing a certain interface by calling the C++
method:

it’s way to function magically. Common plugins just implement a certain
application makes use of interface 

. Technically it
method:

Without having a plugin loaded the returned object will be NULL or to put it
in other words, there is not implementation for mysql available.

Once the plugin ``dbmysql`` is loaded into the application, an implementation
for type mysql is added and will be available to the application. It is
still required for the application to explicitly ask for a particular
interface. That is most likely left to the user by adding a corresponding
configuration option to the configuration file.

 is loaded into the application, an implementation

That means, if an application loads two plugins, e.g. ``dbmysql`` and
``dbpostgresql`` that does not mean that it will not read from two database
at a time. It means the user has now the option to either use a MySQL database
or a PostgreSQL database. He still needs to make his choice in the
configuration file.

 that does not mean that it will not read from two database

Trunk plugins are only supported as shared object libraries and therefore are
required to be written in C++. Implementations for all available interfaces
can be added. An incomplete list of SeisComP C++ interfaces:

This is just a subset of available extensible interface factories. The
emphasized entries refer to the factories which are most commonly extended.

Plugins are located in :file:`$SEISCOMP_ROOT/share/pugins`. In order to make a
plugins available for a module it must be added to the configuration of
:confval:`plugins` of the global parameters of a module or in
:ref:`global_configuration`.

. In order to make a

Configuring :confval:`plugins` with the name of a plugin will let the exclusively
use this plugin and no other ones, e.g. default plugins. Example: ::

 with the name of a plugin will let the exclusively
use this plugin and no other ones, e.g. default plugins. Example:

In order to add a plugin to the default plugins or plugins loaded by before, e.g.
by the global configuration, load these

This document describes the RecordStream interface for accessing waveform data.

A RecordStream refers to the interface which allows to retrieve records
(time series) from arbitrary sources. An implementation can either be real-time
and stream records continuously or time window based and just deliver what is
available at the time of requesting data.
A comprehensive list of RecordStream implementations is available in the
:ref:`technical documentation <global_recordstream>`.

RecordStream implementations have a name such as "slink", "fdsnws" or "file"
which is used as scheme in the configuration URL. The location part of the URL
is passed to the implementation. The scheme part is used to create the
implementation. As one might have noticed, that RecordStream
implementations can be added to existing applications with plugins.

RecordStream implementations have a name such as “slink”, “fdsnws” or “file”

Well, first of all they connect to or open the data source. If that fails, an
error is logged. Then they are configured with time windows and channel
identifieres. Once done, they are simply asked for new records in a loop. A
RecordStream implementation can run forever or finish after a short time.
The behavior depends on the implementation and configuration.

# The RecordStream URL passed is slink://localhost:18000
scheme = URL.scheme()     # scheme = 'slink'
location = URL.location() # location = 'localhost:18000'
rs = RecordStream.Create(scheme)
if not rs:
    throw Error()
if not rs.setSource(location):

rs.setStartTime(Time(2019,1,1))
rs.addStream('GE', 'UGM', '', 'BH?')
rs.addStream('GE', 'MORC', '', 'BH?')

while ( rec = rs.next() )
    do_something_with(rec)

In the example above the end time is not set, so actually an open time window
should be read. That works pretty well for the Seedlink implemtation but the
FDSNWS implementation would complain and issue an error because no end time
was set. So configuring a RecordStream for an application requires some
knowledge of the context and the supported features of the configured
implementation.

Although |scname| ships with the Seedlink server, the processing application
are not aware of the fact that they connect to Seedlink. All time series
retrieval is done with the RecordStream concept. There is no knowledge about
the underlying implementation. This leads to a high flexibility and
implementations can be added without the need to modify the base |scname|
sources.

 ships with the Seedlink server, the processing application
implementations can be added without the need to modify the base 

This chapter describes waveform archives for long-term storage of miniSEED data.

While real-time data sources provide data for a rather short amount of time,
long-term access to waveforms can be established through waveform archives.
The :ref:`RecordStream interface <concepts_RecordStream>` allows a combined access
to real-time data and data in :ref:`SDS <concepts_sds>` or other archives.

The 

It is assumed that instrument corrections applied to the recorded
waveform data result in data in units of the real observations and their unmodified value.
Therefore, it is recommended to store only unprocessed raw data in units of digital counts
in the waveform archives and to provide the complete :ref:`inventory <concepts_inventory>`
referring to input data given in counts.

in the waveform archives and to provide the complete 

SeisComP uses the SeisComP Data Structure (SDS) for archiving miniSEED waveform data.
It has the structure:

archive
  + year

SeisComP ships with :ref:`slarchive` to create SDS archives from a miniSEED waveform
buffer by :ref:`seedlink` in real time and with :ref:`scart` to intergrate miniSEED
records from files into an SDS archive. :ref:`scart` can also be used to retrieve
miniSEED records from an SDS archive.

 to intergrate miniSEED
records from files into an SDS archive. 

 can also be used to retrieve

Access from SeisComP processing and GUI modules to waveform archives is realized by
:ref:`RecordStream implementations <concepts_RecordStream>`.
The continuity of SDS archives can be monitored by :ref:`scardac` and exposed by
the :ref:`fdsnws availability feature <fdsnws>`.
miniSEED waveforms in SDS archives, can interactively retrieved using :ref:`scart`.
Waveforms stored in SDS archives can be served to clients, e.g. using :ref:`fdsnws`.

.
miniSEED waveforms in SDS archives, can interactively retrieved using 

.
Waveforms stored in SDS archives can be served to clients, e.g. using 

This is the documentation for the core processing elements and utilities that make up the |scname| system.
It aims to document the configuration and command line options for
|scname| in multiple formats (HTML, man, PDF, ePub etc) in a
consistent way. The functionality of |scname| differs between
versions so the documentation is versioned along with |scname|.
For more general topics and tutorials please refer to the
`SeisComP wiki`_.

This is the documentation for the core processing elements and utilities that make up the 

 system.

 in multiple formats (HTML, man, PDF, ePub etc) in a
consistent way. The functionality of 

 differs between
versions so the documentation is versioned along with 

The documentation is written in `reStructuredText`_ (reST) a
simple text mark up format. The documentation is generated using `Sphinx`_
which is used to create the `Python documentation`_.
The Sphinx website has a very good
`introduction to reST`_ and also covers the Sphinx specific
`directives`_.

 (reST) a
simple text mark up format. The documentation is generated using 

If you would like to add to this documentation or you find an error, then please
submit a patch to `SeisComP on GitHub`_ or report to the
SeisComP `discussion forum`_.

submit a patch to 

Please understand the :ref:`documentation style guide <documentation_style_guide>`
before contributing documentation.

If you view the HTML version of the documentation in a browser,
then you can use the *Show Source* link on each page to view the reST
source. The source and the documentation files for executables (see below) are
good starting points for a new patch.

then you can use the 

 link on each page to view the reST

The documentation for executables is generated from two sources:

'executable'.xml
An XML file that contains a brief description of the command,
markup describing the command line parameters, and any
configuration parameters for the executable. Each parameter should
have a brief description of the purpose of the parameter.

The description should be plain text and not contain reST markup. Where parameters are common across
a number of executables they should be placed in the appropriate common file and referred to using
their publicID.

All XML files live in the :file:`doc/apps` directory of the source
distribution or in :file:`etc/descriptions` of an installation.

'executable'.rst
This is a text file in reST markup that gives any more-detailed description and examples for the executable.
It is combined with the corresponding .xml to create the full documentation.
The first entry in the file should be a paragraph giving a more
detailed description of the executable.

These two files should be placed in a :file:`descriptions` sub-directory of the
respective module, e.g. :file:`src/seedlink/apps/seedlink/descriptions/seedlink.rst`.
The intention is that the documentation is close to the code to make it easier for developers to keep the
documentation up to date with code changes.

.

For a new executable an entry should also be made in the man section of :file:`conf.py`.
The man page is a short form of the documentation that is generated from only the .xml file.

For a new executable an entry should also be made in the man section of 

.

Any images should be placed in a suitable sub-directory of :file:`descriptions/media`.
Read the :ref:`documentation on image styles <documentation_style_guide_image>` for more details.
The images can then be referred to (in .rst) like::

:ref:`documentation on image styles <documentation_style_guide_image>`

 for more details.
The images can then be referred to (in .rst) like:

.. figure::  media/scolv/scolv-overview.png

   Overview of the defrobnicator switches in :ref:`scolv`.

The images will be moved to the correct location during the documentation build.

As mentioned before XML is used to generate brief descriptions of the configuration and command line parameters.
This section describes the XML format.

<seiscomp>
  ...

Three elements are used inside the root element: :ref:`module<xml-module>`, :ref:`plugin<xml-plugin>` and :ref:`binding<xml-binding>`.
Modules, plugins and bindings can be described in one XML or split up into one file per description. It is better to
have things as close as possible. A module and its binding should go into one module.XML whereas plugins should
go into separate XML files.

.

A template for a description XML file can be found in :file:`doc/templates/app.xml`.

The XML file describes the |scname| :term:`module` with the configuration and command-line parameters.

The name of the module. This name must be
unique among all available modules.

The category of the module. It is used by the
configurator to group modules and by the
documentation generator to create the final
document structure. The category can contain
slashes to introduce hierarchies.

The standalone attribute is also optional and
by default false. Standalone means that the
module does not take the global configuration
files (e.g. :file:`etc/global.cfg`) into
account.

files (e.g. 

If global bindings are inherited. The default
is 'false'. If 'yes', then all parameters of
the global binding are also available in
the module binding to allow overwriting them.
Standalone modules will never inherit global
bindings regardless the value of this
attribute.

is ‘false’. If ‘yes’, then all parameters of

The available configuration parameters. See
element
:ref:`configuration<xml-configuration>`.

The available command-line options. See
element
:ref:`command-line<xml-command-line>`.

It follows a simple example of how a module definition looks like.

  <module name="scevent" category="Modules/Processing">
    <description>
      Associates an Origin to an Event or forms a new Event if no match
      is found. Selects the preferred magnitude.
    </description>
    <configuration/>
    <command-line/>
  </module>

A template for a description XML file can be found in :file:`doc/templates/plugin.xml`.

The XML file describes the |scname| :term:`plugin` with the configuration and command-line parameters. This is most likely the
case when an application loads dynamically shared libraries also called plugins.

 with the configuration and command-line parameters. This is most likely the

The list of names of module names that
the plugin extends, separated by commas.

Below is a simple example of how a plugin definition appears in XML.

  <plugin name="NonLinLoc">
    <extends>global</extends>
      NonLinLoc locator wrapper plugin for SeisComP.
      NonLinLoc was written by Anthony Lomax (http://alomax.free.fr/nlloc).
  </plugin>

A binding template can be found in :file:`doc/templates/binding.xml`.

It describes the set of configuration parameters to configure a station for a module.

Below is an example of how a simple binding definition appears as XML.

  <binding module="seedlink">
      Configures sources and parameters of a SeedLink station.
  </binding>

This element is used to describe the configuration parameters (not command-line, just
configuration file) of a module, binding and plugin.

A top level parameter that does not contain
dots in the configuration file.

Here ``param`` is a top level parameter
whereas ``group.param`` is not. See
:ref:`parameter<xml-configuration-parameter>`.

A top level structure definition. Structures
are different from groups and parameters
as they can be instantiated by an arbitrary
name.

A parameter group that describes a logical
grouping of parameters also called "scope" or
"namespace". If a parameter in the
configuration file contains dots, then only
the last part is a parameter all others are
groups.

grouping of parameters also called “scope” or
“namespace”. If a parameter in the
groups.

The name of the parameter. This name must be
unique among all parameters of the same
level.

An optional description of the parameter
type which can be interpreted by a
configurator to provide specialized input
widgets. It is also important for the user
how the parameter is read by the module.

The default value the module uses if this
parameter is not configured.

The name of the struct type. This name is
used in a configurator to give a selection
of available types to be instantiated.

The absolute reference parameter as it would
appear in the configuration file which
holds all instantiated structures.

# 'link' parameter holding all available
# structures. "local" and "teleseismic"
# are instances of a structure defined
# below.
locator.profiles = local, teleseismic

# The structure defined in locator.profile
# would have "locator.profiles" as link
# attribute.
locator.profile.local.param = value
locator.profile.teleseismic.param = value

Describes a parameter in the struct. See

Describes a group part of this struct. See
:ref:`group<xml-configuration-group>`.

The name of the group. This name must be
unique among all groups of the same level.

Describes a parameter in the group. See

Describes a struct part of this group. See
:ref:`struct<xml-configuration-struct>`.

Below is an example of the plugin definition for the NonLinLoc plugin. It contains
groups, parameters and structures.

    <description>...</description>
    <configuration>
      <group name="NonLinLoc">
        <parameter name="publicID" type="string"
                   default="NLL.@time/%Y%m%d%H%M%S.%f@.@id@">
          <description>
            PublicID creation pattern for an origin created by NonLinLoc.
          </description>
        </parameter>

        <parameter name="outputPath" type="path" default="/tmp/sc3.nll">
            Defines the output path for all native NonLinLoc input and
            output files.

        <parameter name="profiles" type="list:string">
            Defines a list of active profiles to be used by the plugin.

        <group name="profile">
          <struct type="NonLinLoc profile" link = "NonLinLoc.profiles">
            <description>
              Defines a regional profile that is used if a prelocation falls
              inside the configured region.
            </description>
            <parameter name="earthModelID" type="string">
              <description>
                earthModelID that is stored in the created origin.
              </description>
            </parameter>
          </struct>
        </group>
      </group>
    </configuration>
  </plugin>

This element is used to describe the command-line options of a module. The element structure is
much simpler than the :ref:`configuration<xml-configuration>` element. The command-line only
contains group elements which in turn have either option or optionReference elements. Through
the optionReference element it is possible to refer to existing command-line options. This is
important for all modules that are using the |scname| libraries because they share a set of
basic command-line options inherited from the Application class.

much simpler than the 

 element. The command-line only
important for all modules that are using the 

 libraries because they share a set of

Optional description of the command-line
and non option parameters.

Describes an option group. See
:ref:`group<xml-command-line-group>`.

An option part of this group. See
:ref:`option<xml-command-line-option>`.

The short option flag. Either this attribute
or long-flag must be set.

The long option flag. Either this attribute
or flag must be set.

Refers to a configuration parameter name that
this parameter overrides. Name is the full
path, e.g. *connection.server* and not just
*server*.

path, e.g. 

The optional argument string. If argument is
not set, the option is a switch.

The option's default value used if the option
is not given though it is hard in most cases
because command-line options very often
redefine configuration parameters which is
then used as a default value for the option.

The option’s default value used if the option

The optional publicID of the option to be
able to reference it from an optionReference
element. The publicID must be unique among
all defined options.

Below is an example of the module definition for :program:`scautoloc` (extract).

  <module name="scautoloc" category="Modules/Processing">
    <description>Locates seismic events.</description>
      ...
    <command-line>
      <group name="Generic">
        <optionReference>generic#help</optionReference>
        <optionReference>generic#version</optionReference>
        <optionReference>generic#config-file</optionReference>
        <optionReference>generic#plugins</optionReference>
        <optionReference>generic#daemon</optionReference>
        <optionReference>generic#auto-shutdown</optionReference>
        <optionReference>generic#shutdown-master-module</optionReference>
        <optionReference>generic#shutdown-master-username</optionReference>
      </group>

      <group name="Mode">
        <option flag="" long-flag="test" argument="" default="">
          <description>Do not send any object</description>
        </option>

        <option flag="" long-flag="offline" argument="" default="">
            Do not connect to a messaging server. Instead a
            station-locations.conf file can be provided. This implies
            --test and --playback
        </option>

        <option flag="" long-flag="playback" argument="" default="">
          <description>Flush origins immediately without delay</description>
        </option>
      </group>
    </command-line>
  </module>

.. _`reStructuredText` : https://docutils.sourceforge.io/rst.html

.. _`introduction to reST` : https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html

.. _`directives` : https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html

Hyperlink target "contributing-documentation" is not referenced.

Hyperlink target "xml-configuration-parameter" is not referenced.

SeisComP supports string-based filter definitions. This section covers available
filters and their parameters.

The filter definitions support :ref:`SeisComP filters <sec-filters-list>` and
building filter chains (operator >> or ->) as well as combining them with basic
mathematical operators. Filter or the first filter in a filter chain
is always applied to the raw, uncorrected data.
Use brackets *()* to apply the operations within before the one outside.

 and
Use brackets 

A special mathematical operator is a negative value replacing a positive
frequency value, e.g., in Butterworth filters (see Section
:ref:`sec-filters-list`). The modulus of the frequency value is multiplied by
the sample rate of the waveforms to which it is applied. The resulting value
defines the frequency the filter is configured with. Note, -0.5 defines the
:term:`Nyquist frequency` of the data. Negative values can be applied for
defining frequencies dynamically based on sample rate.

). The modulus of the frequency value is multiplied by

 of the data. Negative values can be applied for

Data with a sample rate of 100 Hz shall be low-pass filtered at 80% of the
Nyquist frequency by a :py:func:`Butterworth low-pass filter, BW_LP<BW_LP()>`. A
value of -0.4 corresponds to 80% of the Nyquist frequency. The filter can be
specified as :py:func:`BW_LP(3,-0.4)<BW_LP()>`.

Nyquist frequency by a 

. A
specified as 

Filters in |scname| are recursive allowing real-time application. Therefore,
filter artefacts, e.g. ringing, are always visible at the beginning of the
traces or after data gaps.

 are recursive allowing real-time application. Therefore,

where A, B, C and D are different filters configured with different parameters.
In this example a sample *s* is filtered to get the final sample *sf* passing the following stages:

In this example a sample 

The default filter applied by :ref:`scautopick` for making detections is

:py:func:`RMHP(10)<RMHP()>` >> :py:func:`ITAPER(30)<ITAPER()>` >> :py:func:`BW(4,0.7,2)<BW()>` >> :py:func:`STALTA(2,80)<STALTA()>`

It first removes the offset. Then an ITAPER of 30 seconds is applied before the data
is filtered with a fourth order Butterworth bandpass with corner frequencies of 0.7 Hz and 2 Hz.
Finally an STA/LTA filter with a short-time time window of 2 seconds and a long-term time window of
80 seconds is applied.

To apply mathematical operations on original waveforms use :py:func:`self()`, e.g.:

Filters can be conveniently tested without much configuration. To perform such tests

Open waveforms in :ref:`scrttv` or the picker window of :ref:`scolv`.

Open a simple graphical text editor, e.g. gedit, pluma or kwrite and write down
the filter string.

Mark / highlight the filter string and use the mouse to drag the filter string
onto the waveforms.

Observe the differences between filtered and unfiltered waveforms.

.. figure:: media/scrttv-filter.png

   scrttv with raw (blue) and filtered (black) data. The applied filter string
   is shown in the lower left corner.

scrttv with raw (blue) and filtered (black) data. The applied filter string
is shown in the lower left corner.

Multiple filter functions are available. Filters may take parameters as
arguments. If a filter function has no parameter, it can be given either with
parentheses, e.g. :py:func:`DIFF()<DIFF()>`, or without, e.g.
:py:func:`DIFF<DIFF()>`.

parentheses, e.g. 

All frequencies passed by parameters to filters must be below the Nyquist
frequency of the original signal. Otherwise, filtering may result in undesired
behavior of modules, e.g., stopping or showing of empty traces.

This is a recursive approximation of the envelope. It depends on the bandpass center
frequency being also the dominant frequency of the signal. Hence it only makes sense for
bandpass filtered signals. Even though bandwidth and order may be changed it is
recommended to use the defaults.

center-freq -- The center frequency of the passband in Hz. Negative values define the frequency as -value * sample rate.

The center frequency of the passband in Hz. Negative values define the frequency as -value * sample rate.

bandwidth -- The filter bandwidth in octaves (default is 1 octave)

Alias for the :py:func:`Butterworth band-pass filter, BW_BP<BW_BP()>`.

Butterworth bandpass filter (BW) realized as a causal recursive IIR (infinite impulse response)
filter. An arbitrary bandpass filter can be created for given order and corner frequencies.

lo-freq -- The lower corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

The lower corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

hi-freq -- The upper corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

The upper corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

Butterworth band stop filter realized as a causal recursive IIR (infinite impulse response) filter
suppressing amplitudes at frequencies between *lo-freq* and *hi-freq*.

suppressing amplitudes at frequencies between 

Butterworth high-pass filter realized as a causal recursive IIR (infinite
impulse response) filter.

lo-freq -- The corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

The corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

Butterworth high-low-pass filter realized as a combination of
:py:func:`BW_HP` and :py:func:`BW_LP`.

Butterworth low-pass filter realized as a causal recursive IIR (infinite

hi-freq -- The corner frequency as 1/seconds. Negative values define the frequency as -value * sample rate.

Sets the value of the current sample to the mean of the current and the
previous sample when the difference between the two exceeds *delta*.
Otherwise, the original value is retained.

previous sample when the difference between the two exceeds 

Differentiation filter realized as a recursive IIR (infinite impulse
response) differentiation filter.

The differentiation loop calculates for each input sample `s` the output sample `s\'`:

Replaces each input sample with the sampling time of the current sample. This
is a shortcut for :code:`1/SR` but more efficient as the division has to be
done only once and not once per input sample.

is a shortcut for 

 but more efficient as the division has to be

Replaces the input samples with the trigger duration. The duration is computed as the
time between `trigger_on` and `trigger_off`. Outside the trigger, the filter outputs
zero.

time between 

Integration filter realized as a recursive IIR (infinite impulse response) integration
filter. The weights are calculated according to parameter `a` in the following way:

filter. The weights are calculated according to parameter 

a0 = ((3-a)/6) * dt
a1 = (2*(3+a)/6) * dt
a2 = ((3-a)/6) * dt

b0 = 1
b1 = 0
b2 = -1

The integration loop calculates for each input sample `s` the integrated output sample s\':

v0 = b0*s - b1*v1 - b2*v2
s' = a0*v0 + a1*v1 + a2*v2
v2 = v1
v1 = v0

A one-sided cosine taper applied when initializing the filter, e.g. at the
beginning of the data or after longer gaps.

Computes the median within the timespan preceding the sample. Useful, e.g.
for despiking. The delay due to the filter may be up to its timespan.

A running mean filter computing the mean value within *timespan*. For a given
time window in seconds the running mean is computed from the single amplitude
values and set as output. This computation is equal to :py:func:`RHMP<RMHP()>`
with the exception that the mean is not subtracted from single amplitudes but
replaces them.

. For a given
values and set as output. This computation is equal to 

A high-pass filter realized as running mean high-pass filter. For a given time window in
seconds the running mean is subtracted from the single amplitude values. This is equivalent
to high-pass filtering the data.

Running mean high-pass of e.g. 10 seconds calculates the difference to the running mean of 10 seconds.

A random signal generator with Gaussian normal distribution. It replaces
input samples with the new signal. Use RND() with the operator '+' for adding
the random signal to some data. Example: (BW(3,0.7,2) + RND(0,10))>>STALTA(2,80)

input samples with the new signal. Use RND() with the operator ‘+’ for adding

A random signal generator with uniform distribution. It replaces input
samples with the new signal. Use RUD() with the operator '+' for adding the
random signal to some data. Example: (BW(3,0.7,2) + RUD(-10,10))>>STALTA(2,80)

samples with the new signal. Use RUD() with the operator ‘+’ for adding the

type -- The data type: either 0 (displacement), 1 (velocity) or 2 (acceleration)

The data type: either 0 (displacement), 1 (velocity) or 2 (acceleration)

Replaces each input sample with the sampling rate of the current sample.

A STA/LTA filter is the ratio of a short-time amplitude average (STA) to a
long-time amplitude average (LTA) calculated continuously in two consecutive
time windows. This method is the basis for many trigger algorithm. The
short-time window is for detection of transient signal onsets whereas the
long-time window provides information about the actual seismic noise at the
station.

lta -- Length of long-term time window in seconds. The time window ends
with the same sample as sta.

Length of long-term time window in seconds. The time window ends

The :py:func:`STALTA` implementation where LTA time window is kept fixed
between the time the STA/LTA ratio exceeds *on* and falls below *off*.

 implementation where LTA time window is kept fixed
between the time the STA/LTA ratio exceeds 

on -- STA/LTA ratio defining the start of the time window for fixing LTA.

STA/LTA ratio defining the start of the time window for fixing LTA.

off -- STA/LTA ratio defining the end of the time window for fixing LTA.

STA/LTA ratio defining the end of the time window for fixing LTA.

Computes the amplitude sum of the timespan preceding the sample.

The simulation filter of a :term:`Wood-Anderson seismometer`. The data format
of the waveforms has to be given for applying the simulation filter
(displacement = 0, velocity = 1, acceleration = 2), e.g., WA(1) is the
simulation on velocity data.

. The data format

type -- The data type: 0 (displacement), 1 (velocity) or 2 (acceleration)

The data type: 0 (displacement), 1 (velocity) or 2 (acceleration)

The instrument simulation filter of a
:term:`World-Wide Standard Seismograph Network (WWSSN) long-period seismometer <WWSSN_LP>`.

:term:`World-Wide Standard Seismograph Network (WWSSN) long-period seismometer <WWSSN_LP>`

World-Wide Standard Seismograph Network (WWSSN) long-period seismometer

Analog to the :func:`WWSSN_LP`, the simulation filter of the
:term:`short-period seismometer of the WWSSN <WWSSN_SP>`.

Once the Linux system is installed the |scname| modules need to be configured including
the :ref:`initial configuration and the connection to the database <getting-started-initial>`.
The central tool to configure and control the system is :program:`seiscomp` which
is explained more deeply in the :ref:`next chapter<system-management>`. A user-friendly
graphical frontend to :program:`seiscomp` is :ref:`scconfig`.

:ref:`initial configuration and the connection to the database <getting-started-initial>`

Once the database server is defined and optimized as described in the section
:ref:`database_configuration` you may configure |scname| with the database.
Initially execute the steps listed in this section. You will need to consider
differences in databases:

 with the database.

The initial configuration by the :program:`seiscomp` script or the
wizard of :ref:`scconfig` allows to create and configure the MySQL database
for |scname|. If you want to use MySQL continue with the
:ref:`general setup <getting-started-setup>`.

* Using MySQL is currently not recommended. Preferably use MariaDB instead of MySQL
  as MariaDB is the default SQL flavor of most supported Linux systems!
* As of MySQL 8.0 the password encryption and policy has changed resulting in
  errors when connecting to a MySQL server. In 04/2021 this
  does not seem to be fully supported in **Ubuntu 20.04**. Therefore, you need
  to use a native password on the MySQL server.

     $ sudo mysql -u root -p

       ALTER USER 'sysop'@'%%' IDENTIFIED WITH mysql_native_password BY 'my_super_secret_password_matching_the_mysql_password_validation_policy';

Using MySQL is currently not recommended. Preferably use MariaDB instead of MySQL
as MariaDB is the default SQL flavor of most supported Linux systems!

As of MySQL 8.0 the password encryption and policy has changed resulting in
errors when connecting to a MySQL server. In 04/2021 this
does not seem to be fully supported in **Ubuntu 20.04**. Therefore, you need
to use a native password on the MySQL server.

   $ sudo mysql -u root -p

     ALTER USER 'sysop'@'%%' IDENTIFIED WITH mysql_native_password BY 'my_super_secret_password_matching_the_mysql_password_validation_policy';

does not seem to be fully supported in 

. Therefore, you need

$ sudo mysql -u root -p

  ALTER USER 'sysop'@'%%' IDENTIFIED WITH mysql_native_password BY 'my_super_secret_password_matching_the_mysql_password_validation_policy';

for |scname|.

For setting up the database manually with MariaDB follow the instructions
below.

With **Ubuntu 16.04** MariaDB has become the standard flavor of MySQL in
Ubuntu and either MariaDB or MySQL can be installed. The implementation
of MariaDB in Ubuntu requires additional steps. They must be taken
**before** the initial configuration in order to allow |scname| to make
use of MariaDB. Previously, the :ref:`scconfig` wizard and
:command:`seiscomp setup` could not be used to set up the MariaDB database.
**The option "Create database" had to be unchecked or answered with "no"**.
The issue is resolved in this release and both, :ref:`scconfig` wizard and
:command:`seiscomp setup` are now fully capable of the required actions.

 MariaDB has become the standard flavor of MySQL in

**The option "Create database" had to be unchecked or answered with "no"**

The option “Create database” had to be unchecked or answered with “no”

user@host:~$ sudo mysql -u root -p
     CREATE DATABASE seiscomp CHARACTER SET utf8mb4;
     grant usage on seiscomp.* to sysop@localhost identified by 'sysop';
     grant all privileges on seiscomp.* to sysop@localhost;
     grant usage on seiscomp.* to sysop@'%' identified by 'sysop';
     grant all privileges on seiscomp.* to sysop@'%';
     flush privileges;
     quit

user@host:~$ mysql -u sysop -p seiscomp < ~/seiscomp/share/db/mysql.sql

If character set 'utf8mb4' is not supported by your specific database server
version then use the old 'utf8' format. For historical reasons, SeisComP
would use then the 'utf8_bin' collation. The full statement looks as
follows: :code:`CREATE DATABASE seiscomp CHARACTER SET utf8 COLLATE utf8_bin`.

If character set ‘utf8mb4’ is not supported by your specific database server
version then use the old ‘utf8’ format. For historical reasons, SeisComP
would use then the ‘utf8_bin’ collation. The full statement looks as
follows: 

:code:`CREATE DATABASE seiscomp CHARACTER SET utf8 COLLATE utf8_bin`

The initial configuration allows configuring the PostgreSQL database parameters
It also allows :ref:`creating the database <database_configuration_postgresql>`
and the database tables.

for 

:ref:`creating the database <database_configuration_postgresql>`

For a manual setup of the PostgreSQL database first :ref:`setup the database
server<database_configuration_postgresql>`, then create the user, the database
and the tables.

:ref:`setup the database
server<database_configuration_postgresql>`

Create the user and the database

:program:`CentOS`:

   sudo@host:~$ sudo su
   root@host:~$ sudo -i -u postgres
   postgres@host:~$ psql

      postgres=# create database seiscomp;
      postgres=# create user sysop with encrypted password 'sysop';
      postgres=# grant all privileges on database seiscomp to sysop;
      postgres=# alter database seiscomp owner to sysop;
      postgres=# exit

   root@host:~$ exit

sudo@host:~$ sudo su
root@host:~$ sudo -i -u postgres
postgres@host:~$ psql

   postgres=# create database seiscomp;
   postgres=# create user sysop with encrypted password 'sysop';
   postgres=# grant all privileges on database seiscomp to sysop;
   postgres=# alter database seiscomp owner to sysop;
   postgres=# exit

root@host:~$ exit

Create the database tables

   user@host:~$ psql -f ~/seiscomp/share/db/postgres.sql -t seiscomp -U sysop

user@host:~$ psql -f ~/seiscomp/share/db/postgres.sql -t seiscomp -U sysop

Continue with the :ref:`general setup <getting-started-setup>` considering the
created database but **do not create the database again**.

Use :command:`seiscomp setup` or the wizard from within :ref:`scconfig` (:kbd:`Ctrl+N`) for the
initial configuration including the database parameters. :command:`seiscomp setup` is the
successor of the former :program:`./setup` script.

) for the
initial configuration including the database parameters. 

In :command:`seiscomp setup` default values are given in brackets []: ::

user@host:~$ seiscomp/bin/seiscomp setup

====================================================================

This initializes the configuration of your installation.
If you already made adjustments to the configuration files
be warned that this setup will overwrite existing parameters
with default values. This is not a configurator for all
options of your setup but helps to setup initial standard values.

--------------------------------------------------------------------
Hint: Entered values starting with a dot (.) are handled
      as commands. Available commands are:

      quit: Quit setup without modification to your configuration.
      back: Go back to the previous parameter.
      help: Show help about the current parameter (if available).

      If you need to enter a value with a leading dot, escape it
      with backslash, e.g. "\.value".

This will ask for initial settings as database (if package trunk is installed)
parameters and the logging backend.

Sets the organisation name printed e.g. when you say *hello* to Seedlink
or Arclink.

Enables or disables the database for the system. This option should be left
enabled unless all modules should connect to remote processing machine which
is already available. The database is required to store inventory information
as well as processing results. The database is the central storage for all
trunk modules and the default request handler of Arclink.

 0) mysql
      MySQL server.
 1) postgresql
      PostgreSQL server. There is currently no support in setup to create the
      database for you. You have to setup the database and user accounts on
      your own. The database schema is installed under share/db/postgresql.sql.
Database backend [0]:

If the database is enable the database backend can be selected. |scname|
supports two main backends: MySQL and PostgreSQL. Select the backend to be used
here but be prepared that only for the MySQL backend the setup can help to
create the database and tables for you. If you are using PostgreSQL you have
to provide a working database with the correct schema. The schema files are
part of the distribution and can be found in :file:`seiscomp/share/db/postgresql.sql`.

If the database is enable the database backend can be selected. 

part of the distribution and can be found in 

As of PostgreSQL version 9 the default output encoding has changed to hex.
In order to fix issues with seiscomp log in to your database and run the
following command.

.. code-block:: sql

   ALTER DATABASE seiscomp SET bytea_output TO 'escape';

If MySQL is selected it is possible to let :command:`seiscomp setup` to create
the database and all tables for you. Otherwise currently not and you need to set up the
database manually following the :ref:`given instructions <getting-started-mysql>`.
If the database has been created already, answer 'no' here.

 to create
database manually following the 

Give the MySQL root password for your database server to create the database
tables. This is only required if the last question has been answered with 'yes'.

tables. This is only required if the last question has been answered with ‘yes’.

If a database with the same name (to be selected later) exists already and the
database should be created for you, an error is raised. To delete an existing
database with the same name, say 'yes' here.

database with the same name, say ‘yes’ here.

Database name [seiscomp]:
Database hostname [localhost]:
Database read-write user [sysop]:
Database read-write password [sysop]:
Database public hostname [localhost]:
Database read-only user [sysop]:
Database read-only password [sysop]:

Setup the various database options valid for all database backends. Give
:command:`help` for more information.

If all question have been answered the final choice needs to be made to either
create the initial configuration, go back to the last question or to quit
without doing anything.

Finished setup
--------------

P) Proceed to apply configuration
B) Back to last parameter
Q) Quit without changes
Command? [P]:

Commands can be used along with the :program:`seiscomp` script located in *seiscomp/bin/seiscomp*.
Read the section :ref:`sec-management-commands` for more details on :program:`seiscomp`.
E.g. |scname| modules can be executed like ::

will load the full |scname| environment.
Providing the full path allows starting other |scname| modules in a specific
|scname| environment. Thus, multiple SeisComP installations can be maintained
and referred to on the same machine.

 environment. Thus, multiple SeisComP installations can be maintained

:program:`seiscomp` can also be used for printing the considered |scname| environment ::

export SEISCOMP_ROOT="/home/sysop/seiscomp"
export PATH="/home/sysop/seiscomp/bin:$PATH"
export LD_LIBRARY_PATH="/home/sysop/seiscomp/lib:$LD_LIBRARY_PATH"
export PYTHONPATH="/home/sysop/seiscomp/lib/python:$PYTHONPATH"
export MANPATH="/home/sysop/seiscomp/share/man:$MANPATH"
source "/home/sysop/seiscomp/share/shell-completion/seiscomp.bash"

For convenience, the default |scname| installation can be referred to, when defining
the required system variables, e.g. in :file:`~/.bashrc`. Then, the |scname| environment
is known to the logged in user and |scname| modules can be
executed without the :program:`seiscomp` script.

 installation can be referred to, when defining
the required system variables, e.g. in 

Use the :program:`seiscomp` script itself to generate the parameters and write
the parameters to :file:`~/.bashrc` ::

   user@host:~$ seiscomp/bin/seiscomp print env >> ~/.bashrc

 script itself to generate the parameters and write
the parameters to 

Load the environment or log out and in again ::

   user@host:~$ source ~/.bashrc

Thereafter, modules can be executed by their names without involving :program:`seiscomp`,
e.g. ::

Thereafter, modules can be executed by their names without involving 

After the installation all module are disabled for auto start. If :command:`seiscomp start`
is called, nothing will happen until modules are enabled. To enable a set of modules,
:command:`seiscomp enable` needs to be called with a list of modules.
For example, for a processing system with SeedLink for data acquisition,
you may use:

After the installation all module are disabled for auto start. If 

 needs to be called with a list of modules.

user@host:~$ seiscomp/bin/seiscomp enable seedlink slarchive scautopick scautoloc scamp scmag scevent
enabled seedlink
enabled slarchive
enabled scautopick
enabled scautoloc
enabled scamp
enabled scmag
enabled scevent

A successive call of :command:`seiscomp start` will then start all enabled
modules. This is also required to restart enabled modules with :command:`seiscomp check`.

 will then start all enabled
modules. This is also required to restart enabled modules with 

Alternatively, :ref:`scconfig<scconfig>` can be used to enable/disable
and to start/stop/restart modules.

 can be used to enable/disable

However, before starting seiscomp, station information (metadata) need to
be provided and the configuration needs to be updated.

|scname| requires the metadata from seismic network and stations including full responses
for data acquisition
and processing. The metadata can be obtained from network operators or
various other sources in different formats. The metadata include, e.g.:

 requires the metadata from seismic network and stations including full responses

Sensor and data logger specifications with full response information

|scname| comes with various importers to add metadata
for networks and stations including full response information.

 comes with various importers to add metadata

:ref:`import_inv` is the tool to import inventory data into |scname|.
Alternatively can be used.

user@host:~$ seiscomp/bin/seiscomp exec import_inv dlsv inventory.dataless

This will import a dataless SEED volume into `etc/inventory/inventory.dataless.xml`.

The configuration of modules and bindings is explained in :ref:`global`. To
add bindings in a more convenient way, start :ref:`scconfig`.

Typical binding profiles or station bindings involve bindings configurations for
data acquisition and processing modules:

:ref:`seedlink`: Configure the plugin for the real-time data acquisition.

:ref:`global <global>`: Configure :confval:`detecStream` and :confval:`detecLocid` to determine the
default streams for phase detection and for showing stations and streams in GUIs
like :ref:`scmv`, :ref:`scrttv` or :ref:`scolv`.

 to determine the
like 

:ref:`scautopick`: Configure the automatic phase detection. You may overwrite global
binding parameters.

: Configure the automatic phase detection. You may overwrite global

To update the configuration when new stations have been added or modified,
:command:`seiscomp update-config` needs to be run. This creates configuration
files of modules that do not use the configuration directly, writes the trunk
bindings to the database and synchronizes the inventory with the database.

 needs to be run. This creates configuration

After the configuration has been updated and the inventory has been synchronized,
call :command:`seiscomp start` to start all enabled modules:

call 

user@host:~$ seiscomp/bin/seiscomp start
starting seedlink
starting slarchive
starting scautopick
starting scautoloc
starting scamp
starting scmag
starting scevent

Now the system should run. To check everything again, :command:`seiscomp check`
can be run which should print *is running* for all started modules.
If everything is working, the analysis tools can be started, e.g. MapView.

 for all started modules.

Hyperlink target "getting-started-postgresql" is not referenced.

The glossary is partly extracted from New Manual of Observatory Practice and some information
is taken from Modern Global Seismology.

A binding is a set of configuration options to configure the connection between a
:term:`module` and a station. Bindings are located in ``etc/key/modulename/station_NET_STA``.
They are either written to the database or used to create native configuration files
for standalone modules. The concepts section on :ref:`configuration <concepts_configuration>`
provides more details.

.
for standalone modules. The concepts section on 

A module is usually a binary executable that does a certain job such as :ref:`seedlink`
or :ref:`scautopick`. The concepts section on :ref:`modules <concepts_modules>`

A module is usually a binary executable that does a certain job such as 

An extension to a module. The concepts section on :ref:`plugins <concepts_plugins>`

A profile is a special :term:`binding`. Instead of defining the same set of configuration
options again and again for many stations a profile can be used. Instead of configuring a
stations like:

. Instead of defining the same set of configuration

which refers to ``etc/key/seedlink/station_NET_STA`` and ``etc/key/scautopick/station_NET_STA``
a profile can be given:

which refers to :file:`etc/key/seedlink/profile_geofon` and
:file:`etc/key/scautopick/profile_teleseismic`.
Changing the profile changes the bindings of all stations that use this profile.

.

Interface to access data records from data processing modules.
:term:`SeisComP` applications access waveform data through the
:ref:`RecordStream interface <concepts_RecordStream>`.

A module that needs to convert the configuration or do not use the default
configuration options (see below) is called a standalone modules.
Examples for standalone modules are :ref:`seedlink`, :ref:`slarchive` or :ref:`slmon`.

Examples for standalone modules are 

The module and library collection which forms and uses the SeisComP
framework. The Application class is part of this framework. All trunk
modules share a common configuration schema and a database with
Inventory, EventParameters, Configuration, Routing and QC schemas.
Representatives are :ref:`scautoloc` and :ref:`scautopick` and the GUI
collection with :ref:`scolv`, :ref:`scmv`, :ref:`scrttv` and :ref:`scesv`.

Representatives are 

Aikaike Information Criterion used for refinement of phase picks.
Phase pickers for picking P and S phase arrivals based on AIC may reach
high accuracy if tuned well.

Earthquakes that follow a large earthquake in a sequence. They are smaller than the mainshock
and within 1-2 fault lengths distance from the mainshock fault. Aftershocks can continue over
a period of weeks, months, or years, decreasing in frequency with time. In general, the larger
the mainshock, the larger and more numerous the aftershocks, and the longer they will continue.

General term used for an observation of a wave at a particular time.

QuakeML object. Amplitudes are computed, e.g. for computing
:term:`magnitudes <magnitude>` of different types. Another type is the
:term:`SNR`. Amplitude computation depends on the type.

In |scname| amplitudes are computed automatically by :ref:`scautopick` and
:ref:`scamp` or interactively by :ref:`scolv`.

A set of observing sensors at which the observed and sought signal are mostly coherent.
If the sensors are seismometers or barometers measuring infrasound, the terms
:term:`seismic array` or :term:`infrasound array` are used, respectively.
Arrays are different from a :term:`network` by the applied methods, e.g.
:term:`F-K` analysis, :term:`beam` forming or :term:`vespagram` analysis.

The :term:`array transfer function` or :term:`array response function`
describes the sensitivity and resolution of an :term:`array` to signals
propagating through the array with a particular :term:`azimuth`, :term:`slowness`
and :term:`frequency`.

ArcLink complements :term:`SeedLink` by providing access to archived waveform
data. Arclink was distributed with :term:`SeisComP` until version 3.0.

 by providing access to archived waveform
data. Arclink was distributed with 

QuakeML object. The detected phase onset associated to an origin in |scname|.

QuakeML object. The detected phase onset associated to an origin in 

The time at which a particular phase of a seismic wave arrives at a station.

The ductile part of the Earth, just below the brittle :term:`lithosphere`,
in the upper mantle. The lithosphere/asthenosphere reaches down to about 200 km.

,

In general a direction measured clock-wise in degrees against north. In seismology used to
measure the direction from a seismic source to a seismic station recording this event.

The sum of signals observed at an :term:`array` shifted with respect
to the array reference coordinate assuming a particular :term:`slowness`
and :term:`azimuth`. Optimum values for slowness and azimuth can be
found, e.g. by :term:`F-K` analysis.

 shifted with respect
to the array reference coordinate assuming a particular 

. Optimum values for slowness and azimuth can be
found, e.g. by 

Equivalent to the :term:`F-K` analysis where the :term:`beam` and the related
parameters such as :term:`beam power` or :term:`semblance` are formed in the
time domain. Seismograms from the :term:`array` stations are shifted according
to the considered ranges of :term:`slowness` and :term:`backazimuth` or
:term:`wave number` and summed to form the beam.

The direction from the seismic station towards a seismic source, measured in degrees clock-wise
against north; sometimes also just called azimuth.

A seismic wave that propagates through the interior of the Earth, as opposed to
surface waves that propagate near the Earth's surface. :term:`P<P wave>` and :term:`S waves<S wave>`, which shake
the ground in different ways, are examples.

surface waves that propagate near the Earth’s surface. 

The process of determining the response function (distortion of the input signal) and
sensitivity of an instrument or its derived component.

Description of characteristics of data related to the recording sensor and
data logger as well as instrument responses, sampling frequencies, etc.
The standard codes are defined in the :cite:t:`seed-2012`.

The standard codes are defined in the 

The zone surrounding the Pacific Ocean that is characterized by frequent and strong
earthquakes and many volcanoes as well as high tsunami hazard. Also called the Ring of Fire.

The tail of a seismic signal, usually with exponentially decaying amplitudes, which
follow a strong wave arrival. Coda waves are due to scattering and superposition of multi-path arrivals.

A detection of a single phase of unknown path found within the coda signal envelope,
designated as tx, e.g. Px or Sx.

Seismic signals detected on various seismic sensors of a seismic array or network are said to
be coherent if they are related to each other in time, amplitude and/or waveform because they
come from the same seismic source.

Colors are given in hexadecimal representation or by :term:`color keyword names <color keyword name>`.

Color keyword names allow the specification of color values by names
representing color codes instead of RGB or hexadecimal representation. Find examples
on the `website of W3C <https://www.w3.org/TR/SVG11/types.html#ColorKeywords>`_.
Color keyword names have been introduced in SeisComP in version 4.4.0.

on the 

`website of W3C <https://www.w3.org/TR/SVG11/types.html#ColorKeywords>`_

.

A mathematically equivalent operation that describes the action of a linear (mechanical
and/or electronic) system on a signal, such as that of a filter on a seismic signal.

The innermost part of the Earth. The outer core extends from about 2900 to about 5120 km below
the Earth's surface and consists in its main components of a mixture of liquid iron and nickel.
The inner core is the central sphere of the Earth with a diameter of 1250 km and consists of solid metal.

the Earth’s surface and consists in its main components of a mixture of liquid iron and nickel.

The frequency at which the curve representing the Fourier amplitude spectrum of a recorded seismic
signal abruptly changes its slope. For earthquakes, this frequency is a property of the source and
related to fault size, rupture velocity, source duration and stress drop in the source. Also the
frequency at which the transfer function / magnification curve of a recording system changes its slope.

Slow, more or less continuous movement occurring on faults due to ongoing tectonic deformation.
Also applied to slow movement of landslide masses down a slope because of gravitational forces.
Faults that are creeping do not tend to have large earthquakes. This fault condition is commonly
referred to as unlocked.

The outermost major layer of the Earth, ranging from about 10 to 70 km in thickness worldwide.
The oceanic crust is thinner (about 10 to 15 km) than the continental crust (about 25 to 70 km).
The uppermost 15-35 km of the crust is brittle enough to produce earthquakes. The seismogenic crust
is separated from the lower crust by the brittle-ductile boundary. The crust is usually characterized
by P-wave velocities below 8 km/s (average velocity of about 6 km/s).

The time difference between the arrival time and the end time of the last record achieved plus
the half record length. The delay can be computed by :ref:`scqc`.

the half record length. The delay can be computed by 

Identification of an arrival of a seismic signal with amplitudes above and/or signal shape
(waveform) different from seismic noise.

An effect of a propagating fault rupture whereby the amplitudes of the generated ground motions
depend on the direction of wave propagation with respect to fault orientation and slip
direction (radiation pattern). The directivity and thus the radiation pattern is different for
:term:`P<P wave>` and :term:`S waves<S wave>`.

European Integrated Data Archive: http://www.orfeus-eu.org/data/eida/

General term used for a localized disturbance (earthquake, explosion, etc.) which generates seismic waves.

QuakeML object. The event is the parent object of several :term:`origins <origin>`.
Among these origins a preferred origin
and its :term:`preferred magnitude` is selected to represent the event.
An event can be seen as an earthquake folder
which contains information about earthquake parameters.

 is selected to represent the event.

Representation of the fault activated in an earthquake and the caused direction of slip on the fault by
a circle with two intersecting curves looking like a beach ball. A fault-plane solution is found by the
analysis of seismic records at many stations of an earthquake to obtain the radiation pattern. From the
radiation pattern the fault parameter and the slip direction are determined using a stereographic
projection or its mathematical equivalent. The most common analysis uses the direction of first motion
of P wave onsets and yields two possible orientations for the fault rupture and the direction of seismic
slip. Another technique is to use the polarization of teleseismic :term:`S waves<S wave>` and/or to measure amplitude
ratios between different phase types. Further inferences can be made from these data concerning the
principal axes of stress in the region of the earthquake. The principal stress axes determined by this
method are the compressional axis (also called the P-axis, i.e. the axis of greatest compression, or s1),
the tensional axis (also known as the T-axis, i.e., the axis of least compression, or s3), and the
intermediate axis (s2).

slip. Another technique is to use the polarization of teleseismic 

 and/or to measure amplitude

A filter attenuates certain frequencies of a (seismic) signal and amplifies others. The process of
filtering can be accomplished electronically while recording or numerically in a computer. Filtering also
occurs naturally as seismic energy passes through the Earth.

The available and integrated filters in |scname| are documented in :ref:`filter-grammar`.

The first noticeable displacement in a seismogram caused by the arrival of a P wave at the seismometer.
Upward motion of the ground at the seismometer indicates a dilatation at the source, downward motion
indicates a compression. Due to the presence of seismic noise the proper polarity of the first motion
may be difficult to recognize.

F-K refers to a 2-D :term:`Fourier analysis` where the base functions
are defined, e.g. by ranges of :term:`frequency` and :term:`wave number`.
F-K analysis is applied for signal detection by transforming time series
recorded at several sensors, e.g. seismic or infrasound :term:`array`
stations to the time and space domain.

.
recorded at several sensors, e.g. seismic or infrasound 

The equivalent to F-K analysis in the time domain is :term:`beam packing`.

Earthquakes that occur in a series of earthquakes before the largest earthquake, termed the mainshock.
Foreshocks may precede the mainshock by seconds to weeks and usually originate at or near the focus
of the larger earthquake. Not all mainshocks have foreshocks.

The relative amplitudes (and phase angles) at different frequencies that are derived from a time series
by Fourier analysis.

The mathematical operation that resolves a time series (for example, a recording of ground motion)
into a series of numbers that characterize the relative amplitude and phase components of the signal
as a function of frequency.

Number of cycles of a repeating signal per unit time, typically per second.

The transformation of a seismic signal from the time domain (as a seismogram) to the frequency
domain is conducted by a :term:`Fourier analysis`. The signal is represented in the frequency domain by
the amplitude and phase components as a function of frequency (see spectrum). The representations of
a seismic signal in the time and in the frequency domain are equivalent in a mathematical sense.
For some procedures of data analysis the time-domain representation of a seismic record is more
suitable while for others the frequency-domain approach is more appropriate and efficient.

domain is conducted by a 

. The signal is represented in the frequency domain by

`gempa GmbH <http://www.gempa.de/>`_ is a spin-off from :term:`GFZ`
offering a range of services and products to monitor, process and analyze
seismicity. It is the main development and service company for |scname|.

seismicity. It is the main development and service company for 

GEOFON (https://geofon.gfz-potsdam.de) is part of the Modular Earth Science
Infrastructure (MESI) at :term:`GFZ`.

) is part of the Modular Earth Science
Infrastructure (MESI) at 

The component of reduction in wave amplitude due to the radial spreading of seismic energy with
increasing distance from a given source.

Helmholtz Centre Potsdam `German Research Centre for Geosciences <http://www.gfz-potsdam.de/>`_.
|scname| was originally developed at GFZ.

`German Research Centre for Geosciences <http://www.gfz-potsdam.de/>`_

A mathematical representation that, in reference to earthquake shaking, is used to represent the
ground motion caused by instantaneous slip on a small part of a fault. Green’s functions can be
summed over a large fault surface to compute the ground shaking for a large earthquake rupturing
a fault of finite size. The fractional fault-slip events that are summed can be records from
small earthquakes on the fault or they can be theoretically computed small-earthquake records.

The seismic velocity discontinuity marking the core-mantle boundary (CMB) at which the velocity
of P waves drops from about 13.7 km/s to about 8.0 km/s and the velocity of :term:`S waves<S wave>` drops from
about 7.3 km/s to 0 km/s. The CMB reflects the change from the solid mantle material to the
fluid outer core.

of P waves drops from about 13.7 km/s to about 8.0 km/s and the velocity of 

 drops from

Coordinates of an earthquake point source. Hypocenters based on :term:`P<P wave>` and :term:`S wave`
first arrivals point to the place where the rupture process starts. For large earthquakes the
source location determined by :term:`P wave` first arrivals can differ significantly from the location of
maximum energy release.

Coordinates of an earthquake point source. Hypocenters based on 

source location determined by 

 first arrivals can differ significantly from the location of

A measure of the effects of an earthquake at a particular place at the Earth's surface on humans
and (or) structures. The intensity at a point depends not only upon the strength of the earthquake
(magnitude) but also upon the distance from the earthquake, the depth of the hypocenter and the
local geology at that point. Several scales exist, most of them giving the intensity in 12 degrees,
usually written as Roman numerals. Most frequently used are at present the European Macroseismic
Scale (EMS-98), and in the United States the Modified Mercalli scale and the Rossi-Forel scale.
There are many different intensity values for one earthquake, depending on how far you are away
from the epicenter; this is unlike the magnitude value, which is one number for each earthquake
as a measure of the amount of seismic wave energy released by it.

A measure of the effects of an earthquake at a particular place at the Earth’s surface on humans

Intraplate pertains to processes within the Earth's crustal plates. Interplate pertains to
processes between the plates.

Intraplate pertains to processes within the Earth’s crustal plates. Interplate pertains to

The qualitative ability of a subduction thrust fault to lock and accumulate stress. Strong
interplate coupling implies that the fault is locked and capable of accumulation stress whereas
weak coupling implies that the fault is unlocked or only capable of accumulating low stress.
A fault with weak interplate coupling could be aseismic or could slip by creep.

The inventory is the collection of all available meta data related to :term:`network`,
:term:`station`, :term:`location code`, station :term:`channel code`,
characteristics of sensors and data loggers, etc. More details are given in
the concepts section :ref:`concepts_inventory`.

The inventory is the collection of all available meta data related to 

,
the concepts section 

Time difference between the end times of consecutive records.
The latency can be computed by :ref:`scqc`.

The latency can be computed by 

The outer solid part of the Earth, including crust and uppermost mantle. The lithosphere is
about 100 km thick, although its thickness is age-dependent (older lithosphere is thicker).
At some locations the lithosphere below the crust is brittle enough to produce earthquakes by
faulting, such as within a subducted oceanic plate.

Description of particular sensor location associated to a station. The standard
location codes are defined in the :cite:t:`seed-2012`.

location codes are defined in the 

A major type of surface waves having a horizontal motion that is transverse (or perpendicular)
to the direction of propagation. It is named after A. E. H. Love, the English mathematician
who discovered it.

A seismic surface wave which is imperfectly trapped, e.g., within a low-velocity layer or a
sequence of layers, so that its energy leaks or escapes across a layer boundary causing some
attenuation.

Any layer in the Earth in which seismic wave velocities are lower than in the layers above and below.

A diagram showing the dependence of amplification, e.g. of the seismic ground motion by a
seismograph, as a function of frequency.

A number that characterizes the relative size of an earthquake. The magnitude is based on
:term:`amplitude` measurement of the maximum motion recorded by a seismograph
(sometimes for waves of a particular frequency),
corrected for the attenuation with distance. Several scales have been defined, but the most commonly used are:

 measurement of the maximum motion recorded by a seismograph

local magnitude (ML), commonly referred to as "Richter magnitude"

local magnitude (ML), commonly referred to as “Richter magnitude”

The magnitude scales 1-3 have limited range and applicability and do not
satisfactorily measure the
size of the largest earthquakes. The moment magnitude (Mw) scale, based on
the concept of seismic moment,
is uniformly applicable to all earthquake sizes but is more difficult to
compute than the other types. In
principal, all magnitude scales could be cross calibrated to yield the same
value for any given earthquake, but
this expectation has proven to be only approximately true, thus the
magnitude type as well as its value is needed to be specified.

Additional or modified magnitudes can be computed by providing plugins.

In |scname| magnitudes are computed automatically by :ref:`scmag` or interactively
by :ref:`scolv`.

Magnitude scale introduced by Richter in the early 1930s (:cite:t:`richter-1935`)
to have a common scale for the strength of earthquakes. The basic observation
is the systematic decay of the logarithm of the maximum
amplitudes with increasing distance for different earthquakes described by:

)

with A\ :sub:`0` as amplitude of a reference event. For the reference event
ML = 0 the formula can be rewritten to

 as amplitude of a reference event. For the reference event

with Δ being the distance of the station to the earthquake location. ML is a
magnitude scale for
recordings of earthquakes smaller than ML 7 at regional stations. It is
usually a measure of the
regional-distance S-wave on horizontal component records.
The original formula is only valid for records from a :term:`Wood-Anderson torsion
seismometer <Wood-Anderson seismometer>` with a natural period of
0.8 s and shallow earthquakes in California. Therefore calibration functions
for other regions and wider depth ranges are necessary.
A :term:`Wood-Anderson torsion seismometer <Wood-Anderson seismometer>` is
simulated when measuring amplitudes.

The original formula is only valid for records from a 

:term:`Wood-Anderson torsion
seismometer <Wood-Anderson seismometer>`

 with a natural period of
A 

:term:`Wood-Anderson torsion seismometer <Wood-Anderson seismometer>`

For amplitudes measured on the vertical component records, additional
correction factors have to be applied. ML saturates at
magnitudes around 7 because the maximum amplitudes of larger earthquakes
occur at longer periods than
the bandpass of 0.1 s and 3 s for the magnitude calculation.

In |scname| a modified local magnitude
:term:`MLv <magnitude, local vertical (MLv)>` is determined by simulation
of a Wood-Anderson instrument and then measuring the amplitude in a 150 s
time window on the vertical component of station with distances smaller than 8°.

 is determined by simulation

Read the :ref:`technical documentation <global_ml>` for more details and
the configuration.

The local magnitude measured on the horizontal components with
custom parametric or non-parametric function, configurable amplitude
filtering, :term:`Wood-Anderson torsion seismometer <Wood-Anderson
seismometer>` and distance measures.

filtering, 

:term:`Wood-Anderson torsion seismometer <Wood-Anderson
seismometer>`

Read the :ref:`technical documentation <global_mlc>` for more details and

The local magnitude computed from amplitudes measured on the horizontal
components with a modified parametric calibration function as compared to
:term:`ML <magnitude, local (ML)>`.

Read the :ref:`technical documentation <global_mlh>` for more details and

Local magnitude calculated from :term:`MLv <magnitude, local vertical (MLv)>`
amplitudes based on GNS/GEONET specifications for New Zealand.

Read the :ref:`technical documentation <global_mlr>` for more details and the configuration.

The :term:`ML <magnitude, local (ML)>` magnitude with amplitudes measured on
the vertical component instead of the horizontals.

 magnitude with amplitudes measured on

Read the :ref:`technical documentation <global_mlv>` for more details and the configuration.

Read the :ref:`technical documentation <global_mn>` for more details and the configuration.

Magnitude developed for teleseismic body waves. mb is defined on the amplitude
of the first few cycles of the P-wave restituted to :term:`WWSSN_SP`.

of the first few cycles of the P-wave restituted to 

Read the :ref:`technical documentation <global_mb>` for more details and the configuration.

mB_BB is the term recommended by the IASPEI commission for
:term:`magnitude, broadband body-wave (mB)` which is used in |scname|.

mB is a magnitude based on body waves like :term:`mb <magnitude, body-wave (mb)>`,
but with the amplitude measured in a broad frequency range and longer time windows.
mB is used as a synonym for :term:`mB_BB <magnitude, broadband body-wave (mB_BB)>`.

,
mB is used as a synonym for 

Read the :ref:`technical documentation <global_mb_bb>` for more details and the configuration.

mBc is the cumulative body-wave magnitude. See :cite:t:`bormann-2005`
and :cite:t:`bormann-2009` for details.

Ms is a magnitude scale based on teleseismic surface waves. Historically, Ms
is based on measurements of
the maximum horizontal true ground motion displacement amplitudes

in the total seismogram at periods around 20 s. For shallow earthquakes the dominant
long-period signals are the surface waves. The period of 20 s corresponds to the Airy
phase, a local minimum in the group velocity dispersion curve of Rayleigh surface waves.
For measuring amplitudes a correction for the WWSSN_LP instrument response is applied.

The Moscow-Prague equation for surface wave magnitude is given by

M_s = \log \left(\frac{A_{Hmax}}{T}\right) + 1.66 \log(\Delta) + 3.3

M_s = \log \left(\frac{A}{T}\right)max + 1.66 \log(\Delta) + 3.3

Here, the maximum ground particle velocity, (A/T)max, is used instead of the AHmax to
allow a broader spectrum of dominant periods. This formula is valid for distances of
2° to 160° and source depths smaller than 50 km.

Ms_20 is the :term:`Ms <magnitude, surface wave (Ms)>` surface-wave magnitude
at *T=20* s period based on the recommendations
by the IASPEI magnitude working group issued on 27 March, 2013.

 s period based on the recommendations

Read the :ref:`technical documentation <global_ms_20>` for more details and the configuration.

Ms(BB) is a broadband magnitude scale based on teleseismic surface waves.
In contrast to :term:`Ms <magnitude, surface wave (Ms)>`, amplitudes for Ms(BB)
are measured as the maximum on vertical true ground motion velocity seismograms without
instrument simulation or restitution.

In contrast to 

, amplitudes for Ms(BB)

The Moscow-Prague equation for surface wave magnitude is applied as given by

M_s = \log \left(\frac{A}{2\pi}\right) + 1.66 \log(\Delta) + 3.3

Read the :ref:`technical documentation <global_md>` for more details and the configuration.

M(JMA) is a magnitude similar to the Ms, but the formula is calibrated for instruments
with 5 s period at local distances. The data set for the calibration was gained by the
Japan Meteorological Agency (JMA).

This equation is valid for local (< 2000 km) and shallow (< 80 km)
earthquakes. For deeper earthquakes additional correction functions have
to be applied (:cite:t:`katsumata-1996`).

to be applied (

The moment magnitude is a magnitude scale related to the seismic moment M\ :sub:`0` and
thus to the released seismic energy.
To obtain Mw the seismic moment is first determined, e.g. by a moment tensor inversion.
Then the Mw is gained by the following standard relationship between seismic moment
and the moment magnitude (M\ :sub:`0` in cgs units of dyn*cm):

 and
and the moment magnitude (M 

This equation is analog to the relation between M\ :sub:`s` and M\ :sub:`0`.

Moment magnitude derived as a weighted average of other magnitudes.

The Mwp is a rapid estimate of the moment magnitude based on the
first-arrival P waves on broadband seismograph records. The displacement
seismograms of the P wave portion are considered as source time function
approximation. The seismic moment is estimated for each station by
integrating the displacement records. The combination of multiple records
results in an estimation of the moment magnitude without correction
for the source mechanism (:cite:t:`tsuboi-1995`).

for the source mechanism (

Moment magnitude derived from :term:`mB <magnitude, broadband body-wave (mB)>`
magnitudes using linear conversion:

Moment magnitude derived from :term:`Mwp <magnitude, broadband P-wave moment (Mwp)>`
magnitudes using linear conversion after :cite:t:`whitmore-2002`:

Summary magnitude derived from multiple other magnitudes by :ref:`scmag`.

The largest earthquake in a sequence, sometimes preceded by one or more foreshocks,
and almost always followed by many aftershocks.

The part of the Earth's interior between the core and the crust.

The part of the Earth’s interior between the core and the crust.

An earthquake that is not perceptible by man and can be recorded by seismographs only.
Typically, a microearthquake has a magnitude of 2 or less on the Richter scale.

In a broader sense: A more or less continuous motion in the Earth in a wide frequency
range that is unrelated to any earthquake and caused by a variety of usually uncorrelated
(incoherent) natural and artificial (man-made) sources.

In a more specific sense: That part of seismic noise that is generated by wave motions
on lakes and oceans and their interaction with shores, typically with periods between
about 2 to 9 s (the stronger secondary microseisms), and 11 to 18 s (the weaker
primary microseisms).

miniSEED is the
standard for the exchange of seismic time series. It uses a fixed record
length and applies data compression as defined in :cite:t:`seed-2012`.

length and applies data compression as defined in 

The discontinuity in seismic velocities that defines the boundary between crust and mantle
of the Earth. Named after the Croatian seismologist Andrija Mohorovičič (1857-1936) who
discovered it. The boundary is between 20 and 60 km deep beneath the continents and between
5 and 10 km deep beneath the ocean floor.

Moment tensors or seismic moment tensors describe the equivalent forces
due to seismic point sources, e.g. earthquakes with rupture dimensions
much smaller than the distance at which they are observed.

A set of stations typically maintained by one or more institutions and
tuned to record particular signals.

The network magnitude is a magnitude value summarizing several :term:`station magnitude` values
of one :term:`origin`. Read the documentation of :ref:`scmag` for the details.

Incoherent natural or artificial perturbations caused by a diversity of agents and
distributed sources. One usually differentiates between ambient background noise and
instrumental noise. The former is due to natural (ocean waves, wind, rushing waters,
animal migration, ice movement, etc.) and/or man-made sources (traffic, machinery, etc.),
whereas instrumental (internal) noise may be due to the flicker noise of electronic
components and/or even Brownian molecular motions in mechanical components. Digital
data acquisition systems may add digitization noise due to their finite discrete
resolution (least significant digit). Very sensitive seismic recordings may contain
all these different noise components, however, usually their resolution is tuned so
that only seismic signals and to a certain degree also the ambient noise are resolved.
Disturbing noise can be reduced by selecting recording sites remote from noise sources,
installation of seismic sensors underground (e.g., in boreholes, tunnels or abandoned
mines) or by suitable filter procedures (improvement of the signal-to-noise ratio).

Half of the digital sampling rate. It is the minimum number of counts per second
needed to define unambiguously a particular frequency. If the seismic signal contains
energy in a frequency range above the Nyquist frequency the signal distortions are
called aliasing.

Location (hypocenter), Time and strength estimation of an earthquake based on seismic
phases and amplitudes

Estimated source time of an event belonging to a certain origin; describes the
rupture start time. Attribute of the QuakeML object Origin, see :term:`origin`.

rupture start time. Attribute of the QuakeML object Origin, see 

A stage in periodic motion, such as wave motion or the motion of an oscillator,
measured with respect to a given initial point and expressed in angular measure.

A pulse of seismic energy arriving at a definite time, which passed the Earth
on a specific path.

The P phase is the arrival of the direct P wave that traveled through the Earth's
crust and mantle observed in epicentral distances up to 100°.

The P phase is the arrival of the direct P wave that traveled through the Earth’s

The long-period P-wave energy can be diffracted at the CMB forming at distances larger
than 100° the Pdiff phase. The reason for the diffraction is the large reduction of the
P wave velocity at the CMB from about 13.7 km/s to 8 km/s. The amplitude of Pdiff is
relatively small. Pdiff is observed at distances where the outer core forms the "core
shadow" (see also :term:`PKP phase`).

relatively small. Pdiff is observed at distances where the outer core forms the “core
shadow” (see also 

Pg is the direct P wave arriving first in local distances less than 100 km. For larger
distances Pn arrives first (see :term:`Pn phase` for details).

distances Pn arrives first (see 

Pn is the P head wave along the Moho arriving first at local distances larger than
100 km (depending on the crustal thickness). Pn has usually smaller amplitudes than Pg.

The P wave that is reflected at the CMB forms the PcP. At epicentral distances between
30° and 55° PcP is often recorded as sharp pulse.

A P wave that travels through the Earth's crust and mantle and is reflected at the
outer core-inner core boundary. At distances between 100° and 113° PKiKP can be the
first arrival if no Pdiff is observed.

A P wave that travels through the Earth’s crust and mantle and is reflected at the

The direct P waves traversing the Earth's crust, mantle and outer core without
reflection is called PKP. The outer core is a fluid causing a strong refraction at
the CMB into the outer core. The strong refraction of the seismic rays into the
core causes a “core shadow” that commences at epicentral distances of around 100° and
stretches to around 140°. Only Pdiff can be observed in this distance range. PKP is
the first arrival at distances larger than around 143°. At a distance of 144° P waves
with several paths through the Earth’s core arrive at the same time (caustic) and
form a strong arrival.

The direct P waves traversing the Earth’s crust, mantle and outer core without

PP is a reflected P wave at the Earth's surface traversing the Earth's crust and mantle.

PP is a reflected P wave at the Earth’s surface traversing the Earth’s crust and mantle.

A P wave that has a takeoff angle of greater than 90° at the source and therefore
is first reflected at the surface near the epicenter. The pP is a depth phase.
For shallow events and at teleseismic distances pP has nearly the same path as the P wave except
for the path from hypocenter of the earthquake to the reflection point at the surface.

Standard for the Exchange of Earthquake Data, a data format for seismological
data and metadata (:term:`inventory`).
It is controlled as a standard by the International Federation
of Digital Seismograph Networks (FDSN).
The current version is 2.4, updated August 2012.
Read :cite:t:`seed-2012` for details.

data and metadata (

).
Read 

The S phase is the arrival of the direct :term:`S wave` that traveled through the Earth's

 that traveled through the Earth’s

Sg is the direct :term:`S wave` arriving first in local distances less than 100 km. For larger
distances Sn arrives first (see :term:`Sn phase` for details).

 arriving first in local distances less than 100 km. For larger
distances Sn arrives first (see 

Sn is the S head wave along the Moho arriving first at local distances larger than
100 km (depending on the crustal thickness). Sn has usually smaller amplitudes than Sg.

A P wave starting as an :term:`S phase` at the source and arriving as P.
The S phase has a takeoff angle greater than 90° at the source and therefore
is first reflected at the surface near the epicenter and then converted into
a :term:`P wave` phase. The sP is therefore a depth phase. For shallow
events and at teleseismic distances sP has nearly the same path as the P
wave except for the path from hypocenter of the earthquake to the
reflection point at the surface.

 at the source and arriving as P.
a 

 phase. The sP is therefore a depth phase. For shallow

In seismology the direction of first motion on a seismogram, either up (positive, compression)
or down (negative, dilatation or relaxation).

The shape and orientation in space of the ground-motion particle trajectory. It differs
for different types of seismic waves such as P, S and surface waves and may be ± linear
or elliptical, prograde or retrograde. It is also influenced by heterogeneities and
anisotropy of the medium in which the seismic waves propagate and depends on their
frequency or wavelength, respectively. The polarization of ground motion may be reconstructed
by analyzing three-component seismic recordings.

The network magnitude representing the strength of an event best as
automatically selected by :ref:`scevent` or interactively.

automatically selected by 

The origin representing the location of an event best; generally, the location based
on the most picks or reviewed/revised by an operator. The preferred origins
is automatically selected by :ref:`scevent` or interactively.

is automatically selected by 

A XML scheme developed as an open standard for seismological meta data
exchange (http://www.quakeml.org).

exchange (

Dependence of the amplitudes of seismic :term:`P<P wave>` and :term:`S waves<S wave>` on the direction and take-off
angle under which their seismic rays have left the seismic source. It is controlled
by the type of source mechanism, e.g., the orientation of the earthquake fault plane
and slip direction in space.

 on the direction and take-off

A seismic surface wave causing a retrograde, elliptical motion of a particle at the free
surface, with no transverse motion. It is named after Lord Rayleigh (1842-1919), who
predicted its existence.

Theoretical approach, which treats wave propagation as the propagation of seismic rays.
It is an approximation, which yields good results for short wave length (high-frequency
approximation) and allows easy calculations of travel times.

Computational method of calculating ground-shaking estimates that assumes that the
ground motion is composed of multiple arrivals of seismic rays and related energy
bundles (Gauss beams) that leave the source and are reflected or refracted at velocity
boundaries according to Snell's Law. The amplitudes of reflected and refracted waves
at each boundary are recalculated according to the Law of Conservation of Energy.

boundaries according to Snell’s Law. The amplitudes of reflected and refracted waves

The average time span between large earthquakes at a particular site. Also
termed 'return period'.

termed ‘return period’.

The energy or wave from a seismic source that has been returned (reflected) from an
interface between materials of different elastic properties within the Earth, just
as a mirror reflects light.

The deflection, or bending, of the ray path of a seismic wave caused by its passage
from one material to another having different elastic properties.

Bending of a tsunami wave front owing to variations in the water depth along a coastline.

A concept in which radiated seismic energy is released from stored strain energy
during the slip along a fault until the adjacent fault blocks reach a new state of equilibrium.

The difference between the measured and predicted values of some quantity (e.g., theoretical
and measured phase arrival time).

The zone of volcanoes and earthquakes surrounding the Pacific Ocean which is called
the Circum-Pacific belt; about 90% of the world's earthquakes occur there. The next
most seismic region (5 - 6 % of earthquakes) is the Alpide belt.

the Circum-Pacific belt; about 90% of the world’s earthquakes occur there. The next

Abbreviation for :term:`root mean square <root mean square (RMS)>`

Also referred to as :term:`RMS`. A statistical measure of the magnitude of a varying quantity defined as

. A statistical measure of the magnitude of a varying quantity defined as

RMS = \sqrt{\frac{{x_1}^2 + {x_2}^2 + {x_3}^2 + ... + {x_n}^2}{N}}

for the time series with the N elements x\ :sub:`1` to x\ :sub:`n`.

The instantaneous boundary between the slipping and locked parts of a fault during
an earthquake. A rupture propagating in one direction on the fault is referred to
as unilateral. A rupture may radiate outward in a circular manner or it may radiate
towards the two ends of the fault from an interior point, behavior referred to as
bilateral.

The speed at which a rupture front moves across the surface of the fault during
an earthquake.

:term:`SeisComP` Markup Language. SCML is a flavor of `QuakeML
<https://quake.ethz.ch/quakeml/>`_  and is used by |scname| and by
products of :term:`gempa GmbH` for exchange. For details read the
`UML diagram <https://geofon.gfz-potsdam.de/_uml/>`_.

|scname| Data Structure which is used for archiving waveform data. Below the
base directory of the archive the SDS has the structure:

 Data Structure which is used for archiving waveform data. Below the

SeedLink :cite:p:`seedlink` is a
real-time data acquisition protocol and a client-server software that
implements this protocol

 is a

SeisComP is likely the most widely distributed software package for
seismological data acquisition and real-time data exchange over internet.
Its data transmission protocol SeedLink became a de facto world standard.
The first version of SeisComP was developed for the `GEOFON
<http://geofon.gfz-potsdam.de/geofon/>`_ network and further extended
within the MEREDIAN project under the lead of `GEOFON
<http://geofon.gfz-potsdam.de/geofon/>`_/`GFZ
<http://www.gfz-potsdam.de/>`_ Potsdam and `ORFEUS
<http://www.orfeus-eu.org/>`_. Originally SeisComP was designed as a high
standard fully automatic data acquisition and (near-)real-time data
processing tool including quality control, event detection and location as
well as dissemination of event alerts. In the context of the `GITEWS
<http://www.gitews.de/>`_ project (German Indian Ocean Tsunami Early
Warning System) additional functionality were implemented to fulfill the
requirements of 24/7 early warning control centers. Major changes in the
architecture of SeisComP were necessary and many new features result in
the upgrade of SeisComP to version 3. Important SeisComP releases are
shown below.  A first prototype of :term:`SeisComP3` developed by the
GITEWS/GEOFON development group was released in May 2007.

The first version of SeisComP was developed for the 

 network and further extended
within the MEREDIAN project under the lead of 

. Originally SeisComP was designed as a high
well as dissemination of event alerts. In the context of the 

 project (German Indian Ocean Tsunami Early
shown below.  A first prototype of 

 developed by the

An ordered arrangement of seismometers with central data acquisition specially
designed to analyze seismic signal based on coherent phases. A seismic array
differs from a local network of seismic stations mainly by the techniques
used for data analysis. Often, a seismic array are referred to as :term:`array`.

used for data analysis. Often, a seismic array are referred to as 

A section of a fault that has produced earthquakes in the past but is now quiet.
For some seismic gaps, no earthquakes have been observed historically, but it is
believed (based on some other methods, such as plate-motion information, strain
measurements or geological observations) that the fault segment is capable of
producing earthquakes. A long-term seismic gap may give hint to the most probable
location of a strong earthquake in the future.

with μ as rigidity of the rock at the fault, D as averaged displacement on the
fault and A as fault surface area. For pure shear sources, M\ :sub:`0` equals
the :term:`total seismic moment (MT)`.
The seismic moment can be related to the released seismic energy ES that is
proportional to the stress drop Δσ:

.

M\ :sub:`0` can be determined by the asymptote of the amplitude spectrum at
frequency = 0.
A common technique for determination of the seismic moment M\ :sub:`0` is the
moment tensor inversion. Assuming reasonable values for the rigidity of the
rock (3-6 x 104 MPa in crust and upper mantle) and the stress drop (2-6 MPa)
the seismic moment can be related to the surface wave magnitude Ms by the
empirical relationship found by :cite:t:`gutenberg-1956` (units in cgs):

 is the
empirical relationship found by 

Group of seismic stations that are deployed as single stations or arrays.

Vector perpendicular to the wave front pointing into the direction of wave
propagation and marking behind it the "ray trace". The propagation of seismic
waves can be easily modelled as the propagation of seismic rays following
Snell's Law. This assumption is a reasonable approximation for high frequency waves.

propagation and marking behind it the “ray trace”. The propagation of seismic
Snell’s Law. This assumption is a reasonable approximation for high frequency waves.

A coherent transient waveform radiated from a definite, localized seismic source
that is usually considered as an useful signal for the location of the source,
the analysis of the source process and/or of the propagation medium (in contrast to noise).

A localized area or volume generating coherent, usually transient seismic waveforms,
such as an earthquake, explosion, vibrator etc.

The comparison between the amplitude of the seismic signal and the amplitude of
the noise; abbreviated as :term:`SNR`.

the noise; abbreviated as 

Usually, the part of the :term:`lithospheric <lithosphere>`
plate that is underthrusting in a subduction zone and is
consumed by the Earth's mantle is called slab.

consumed by the Earth’s mantle is called slab.

The force of gravity causing the cooler and denser oceanic :term:`slab` to sink
into the
hotter and less dense mantle material. The downdip component of this force leads
to downdip extensional stress in the slab and may produce earthquakes within the
subducted slab. Slab pull may also contribute to stress on the subduction thrust
fault if the fault is locked.

 to sink
into the

The relative displacement of formerly adjacent points on opposite sides of a fault.

A kinematic model that describes the amount, distribution, and timing of a slip
associated with an earthquake.

How fast the two sides of a fault are slipping relative to one another, as
derived from seismic records in case of an earthquake or determined, as a
long-term average, from geodetic measurements, from offset man-made structures,
or from offset geologic features whose age can be estimated. It is measured
parallel to the predominant slip direction or estimated from the vertical or
horizontal offset of geologic markers.

The inverse of velocity, given in the unit seconds/degree or s/km; a large
slowness corresponds to a low velocity.

Location of an earthquake below the Earth's surface. Earthquakes can occur
between the surface and depths of about 700 km. Usually three classes of
earthquakes are separated according to the depth: Shallow earthquakes occur
in the depth range of 0 to 70 km; intermediate earthquakes between 70 and 300km
depth; and deep earthquakes between 300 and 700 km depth. Earthquakes at large
depths occur much less frequent than shallow earthquakes. Additionally, deep
earthquakes excite small surface waves compared to the body waves and relatively
simple P and S waveforms with more impulsive onsets. A more reliable way to
determine the depth of an earthquake is to identify depth phases (e.g. pP, sP)
in the waveforms. At stations with large distance to the epicenter the pP wave
follows the direct P wave by a time interval that slightly increases with distance
but rapidly with depth. The depth can be derived from this time interval by using
:term:`travel-time curves <travel-time curve>`.

Location of an earthquake below the Earth’s surface. Earthquakes can occur

The source time function describes the ground motion generated at the fault over
time. The function is predicted by a theoretical model.

Application which watches a directory for new bulletins and performs the
final and service specific dissemination operation. This may involve
talking to modem (for fax, SMS), connecting to a SMTP server (email) or
rendering a Web page.

Site of measurement typically consisting of one or more sensors and one or
more dataloggers.

The station magnitude is the magnitude value based on the amplitude measurements of a single station.
Due to radiation pattern, site and path effects and the calibration of the station the station magnitudes
of one event can scatter significantly.

The rapid displacement that occurs between two sides of a fault when the shear stress
on the fault exceeds the frictional stress. Also a jerky, sliding type of motion
associated with fault movement in laboratory experiments. It may be a mechanism
in shallow earthquakes. Stick -slip displacement on a fault radiates energy in the
form of seismic waves.

The difference between the stress across a fault before and after an earthquake.
A parameter in many models of the earthquake source that affects the level of
high-frequency shaking radiated by the earthquake. Commonly stated in units termed
bars or megapascals (1 bar equals 1 kg/cm², and 1 megapascal equals 10 bars).

The angle that a seismic ray makes with a downward vertical axis through the
source. Rays with takeoff angles less than 90° are labeled with capital letters
like P or S. If the takeoff angle is greater than 90° the ray is upgoing and is
labeled with lowercase letters (p or s). Such rays can be reflected at the
surface near the epicenter forming a depth phase (see :term:`pP phase` or :term:`sP phase`).

surface near the epicenter forming a depth phase (see 

Pertaining to a seismic source at distances greater than about 2000 km from the
measurement site.

The point where an arrival is expected to appear on a seismic record, based
on the known location and depth of the seismic source and according to a velocity
model.

A seismic record is usually presented in the time domain, i.e., as a display of
varying amplitudes of (filtered) ground motion as a function of time (in contrast
to the equivalent representation in the frequency domain) (see also Fourier analysis).

For pure shear sources M\ :sub:`T` equals :term:`seismic moment (M0)`.

The transfer function of a seismic sensor-recorder system (or of the Earth
medium through which seismic waves propagate) describes the frequency-dependent
amplification, damping and phase distortion of seismic signals by a specific
sensor-recorder (or medium). The modulus (real term = absolute value) of the
transfer function is termed the frequency response function or magnification
curve, e.g. of a seismograph.

The time required for a wave traveling from its source to a point of observation.

A graph of arrival times, commonly of direct as well as multiply reflected and
converted :term:`P<P wave>` or :term:`S waves<S wave>`, recorded at different
points as a function of distance
from the seismic source. Seismic velocities within the Earth can be computed
from the slopes of the resulting curves.

converted 

, recorded at different

Picks that have extraordinarily large amplitudes and large :term:`SNR<SNR>` and
that lie within a relatively small region.

Vespagrams are diagrams of :term:`beam` traces over time typically formed
for a particular :term:`azimuth` (or :term:`backazimuth`) and for
ranges of :term:`slowness` (slowness vespagram). When the slowness
is kept constant and the backazimuth is varied the term backazimuth
vespagram is used.

 (slowness vespagram). When the slowness

A dipping planar (flat) zone of earthquakes that is produced by the interaction
of a downgoing oceanic crustal plate with a continental plate. These earthquakes
can be produced by slip along the subduction thrust fault (thrust interface between
the continental and the oceanic plate) or by slip on faults within the downgoing
plate as a result of bending and extension as the plate is pulled into the mantle.
Slip may also initiate between adjacent segments of downgoing plates. Wadati-Benioff
zones are usually well-developed along the trenches of the Circum-Pacific belt,
dipping towards the continents.

Number of cycles of a repeating signal per unit length, typically per meter of kilometer.

P (primary) waves are compressional waves involving volumetric variations in the
media. The sense of particle motion is linear and parallel to the propagation
direction. P waves are body waves that traverse the interior of a body/Earth and
can propagate in fluids.

The general nomenclature for P waves: At local and
regional distances a special nomenclature is used to describe the travel path of
the first P and S arrivals. Pg, Pb/P* and Pn phases are separated. Pg is the direct
P wave arriving first in distances less than around 100 km. Pn is the head wave
along the Moho arriving first at larger distances than 100 km (depending on the
crustal thickness). Pn has usually smaller amplitudes than Pg. Pb or P* is the
rarely observed head wave travelling along the midcrustal velocity discontinuity.
The general nomenclature of P waves entitles reflections at the topside of boundaries
with lowercase letters (m – Moho reflection; c - CMB reflection; i - inner core-outer
core boundary reflection), e.g. PmP is a reflected P wave at the Moho. Reflections
at the bottom side of boundaries get no additional letter, e.g. PP is a reflected
P wave at the Earth's surface. Refracted rays get capital letters (K - through
the outer core; I - through the inner core), e.g. PKIKP is a P wave traversing
the crust/mantle, the outer core, the inner core, again the outer core and again
the mantle/crust.

P wave at the Earth’s surface. Refracted rays get capital letters (K - through

S (secondary) waves are shear waves without any volumetric variation in the media.
The sense of particle motion is perpendicular to the propagation direction. S waves
are body waves that traverse the interior of a body but can not propagate in fluids.

Analog to the P arrivals Sg, Sb/S\ :sup:`*` and Sn arrivals are distinguished in local
and regional distances. The general nomenclature of S waves is analog to the P waves.
The reflections at the topside of boundaries have lowercase letters (m - Moho
reflection; c - CMB reflection), e.g. SmS is a reflected S wave at the Moho.
Reflections at the bottom side of boundaries get no additional letter, e.g. SS is a
reflected S wave at the Earth's surface. Refracted rays get capital letters (J - through
the inner core), e.g. SKJKS is a S wave traversing the crust/mantle, the outer core
as a :term:`P wave`, the inner core as a :term:`S wave`, again the outer core as a P wave and again
the mantle/crust as S wave. S waves can not travel through the outer core because
the outer core consists of a fluid.

 and Sn arrivals are distinguished in local
reflected S wave at the Earth’s surface. Refracted rays get capital letters (J - through
as a 

, again the outer core as a P wave and again

Surface waves are seismic waves observed only at the free surface of the media.
Two types of surface waves are distinguished: :term:`Love waves<Love wave>` (L)
and :term:`Rayleigh waves<Rayleigh wave>` (R).
Both result from the interaction of P and S waves near the free surface.

Two types of surface waves are distinguished: 

 (R).

The complete analog or sufficiently dense sampled digital representation of a
continuous wave group (e.g., of a seismic phase) or of a whole wave train
(seismogram). Accordingly, waveform data allow to reconstruct and analyze the
whole seismic phase or earthquake record both in the time and frequency domain
whereas parameter data describe the signal only by a very limited number of more
or less representative measurements such as onset time, maximum signal amplitude
and related period.

Attribute of the QuakeML objects Pick, !StationAmplitude and !StationMagnitude
describing the source of the underlying waveform source. The WaveformID contains
information about the !NetworkCode, !StationCode, !LocationCode and !ChannelCode

The surface formed by all elements of a propagating wave, which swing in phase;
the wave front is perpendicular to the seismic rays, which are oriented in
direction of wave propagation.

The distance between successive points of equal amplitude and phase on a
wave (for example, crest to crest or trough to trough).

Attribute of the QuakeML objects Arrival and !MagnitudeReferences defining the
effect of the referenced object (e.g. Pick).

Torsion seismometer recording horizontal displacement
:term:`amplitudes <amplitude>` described in :cite:t:`richter-1935` and
:cite:t:`uhrhammer-1990`. Simulation of the Wood-Anderson seismometer is
used for measuring amplitudes for selected :term:`magnitudes <magnitude>`.
SeisComP3 and SeisComP in versions 4 and 5 have considered Wood-Anderson
instrument parameters originally published by :cite:t:`richter-1935` with
gain = 2800, T0 = 0.8 s, h = 0.8. However, updated parameters where
published by :cite:t:`uhrhammer-1990` with gain = 2080, T0 = 0.8 s,
h = 0.7. These values were part of the IASPEI Magnitude Working Group
recommendations of 2011 September 9 and therefore apply by default in later
versions of SeisComP. With the original set of values
:cite:p:`richter-1935`, magnitudes are systematically overestimated by 0.13.
Wood-Anderson seismometers can be simulated by filtering waveforms with
:func:`WA`.

. Simulation of the Wood-Anderson seismometer is
used for measuring amplitudes for selected 

.
instrument parameters originally published by 

 with
published by 

 with gain = 2080, T0 = 0.8 s,

, magnitudes are systematically overestimated by 0.13.

Short period seismograph with a dominant period of 1 s of the World-Wide
Standard Seismograph Network (WWSSN). WWSSN_SP instruments can be simulated
by filtering waveforms with :func:`WWSSN_SP`.

by filtering waveforms with 

Long period seismograph with a dominant period of 20 s of the World-Wide
Standard Seismograph Network (WWSSN). WWSSN_LP instruments can be simulated
by filtering waveforms with :func:`WWSSN_LP`.

The epicentral distance is defined as the shortest distance from a seismic
station or any other site to the epicentre of the seismic event.

The hypocentral distance is defined as the shortest distance from a
seismic station or any other site to the hypocentre of the seismic event.

The first version of SeisComP was developed for the
:term:`GEOFON` program operated by :term:`GFZ`.

Originally, |scname| was designed as a high-standard, fully automatic data
acquisition and (near-)real-time data processing tool including quality control,
event detection and location as well as dissemination of event alerts.

 was designed as a high-standard, fully automatic data

SeisComP was further extended within the MEREDIAN project under the lead of
GEOFON and :cite:t:`orfeus`.

GEOFON and 

Following the devastating 2004 Indian Ocean earthquake and tsunami, the
:cite:t:`gitews` (German Indian Ocean Tsunami Early Warning System) project led
to additional functionality being implemented to fulfill the requirements of
24/7 early warning control centers. Major changes in the architecture of SeisComP
were necessary and many new features resulted in the upgrade of SeisComP to
version 3.

 (German Indian Ocean Tsunami Early Warning System) project led
version 3.

Since 2008 SeisComP has been jointly developed by :term:`gempa GmbH`, a spin-off
company of GFZ and GFZ. Nowadays, gempa GmbH is the main SeisComP developing and
service company.

, a spin-off

Major SeisComP releases are shown below. The important changes as of version 4.0
are documented in the :ref:`changelog <sc-changelog>`.

are documented in the 

SeedLink 2.0 (plugin interface) Plugins for
EarthData PS2400 and Lennartz M24

SeedLink 2.1 (streams.xml, improved buffer
structure); make conf/make key scripts LISS
plugin, SeedLink-Antelope connectivity

SeedLink 3.0 (INFO request, time window extraction)
libslink, chain plugin, Comserv-independence

Python add-on package (SeisPy) incl. AutoLoc2 chain
plugin extension interface, triggered streams

Stability and performance improvements, improved
GUI functionality

New Earthquake Schema and performance improvements,
improved GUI functionality

New Inventory Schema and performance improvements,

Adopts the GNU Affero General Public License v. 3.0,
(AGPL), support for Python3 and QT5

|scname| requires a modern Linux operating system as it is developed and tested
only under Linux. For production systems we recommend Linux distributions with
long-term support (LTS). The Linux flavors under which |scname| has been tested
are given along with the |scname| package names on the download sites of
:cite:t:`seiscomp` and :cite:t:`gempa`.

 requires a modern Linux operating system as it is developed and tested
long-term support (LTS). The Linux flavors under which 

Officially released packages (TAR files) for different release versions,
Linux systems and architectures,

Software for data acquisition, processing and :term:`GUIs <GUI>` for each
supported platform,

Maps. Maps from the |scname| releases Seattle and Zurich also work
in later releases

Download these packages from :cite:t:`seiscomp` or :cite:t:`gempa-download`.

The next sections describe the installation of the binary packages of |scname|
on

The next sections describe the installation of the binary packages of 

The hardware requirements for a seismic system depend on the size of the
station network to be operated.

Ubuntu last 3 major LTS versions, 64bit, Debian 8.0 64bit, RHEL 7, CentOS 7 64bit

In case large networks (>100 stations) are operated, a distributed system is
recommended. Normally a |scname| system is separated in several subsystems.
A separation of data acquisition, processing and graphical user interfaces (GUI) is
useful to permit stable performance.

recommended. Normally a 

 system is separated in several subsystems.

The minimum specifications of |scname| systems depend on the setup and the

This section describes the installation of |scname| from compiled |scname|
packages which ship as :file:`*.tar.gz` files.

Simply follow a few steps to complete your installation of |scname|:

Log in to your Linux system as user, e.g. sysop, the standard user in this

Download the installation packages, e.g. from :cite:t:`seiscomp` or
:cite:t:`gempa-download`:

* :file:`seiscomp-[version]-[OS]-[arch].tar.gz`: main |scname| package with binaries, etc.
  Ensure to download the right package matching your operating system (OS) and
  hardware architecture (arch: 32 or 64-bit).
* :file:`seiscomp-[version]-doc.tar.gz`: |scname| documentation.

  .. note::

     When receiving the packages from :cite:t:`gempa-download`, the documentation is already
     included in the main |scname| package to match the installed version. In this
     case, the documentation does not need to be downloaded and installed separately.

* :file:`seiscomp-maps.tar.gz`: standard |scname| maps available on the
  download site of :cite:t:`seiscomp`.

:file:`seiscomp-[version]-[OS]-[arch].tar.gz`: main |scname| package with binaries, etc.
Ensure to download the right package matching your operating system (OS) and
hardware architecture (arch: 32 or 64-bit).

 package with binaries, etc.

:file:`seiscomp-[version]-doc.tar.gz`: |scname| documentation.

.. note::

   When receiving the packages from :cite:t:`gempa-download`, the documentation is already
   included in the main |scname| package to match the installed version. In this
   case, the documentation does not need to be downloaded and installed separately.

When receiving the packages from :cite:t:`gempa-download`, the documentation is already
included in the main |scname| package to match the installed version. In this
case, the documentation does not need to be downloaded and installed separately.

 package to match the installed version. In this

:file:`seiscomp-maps.tar.gz`: standard |scname| maps available on the
download site of :cite:t:`seiscomp`.

Navigate to the $HOME directory or any other place where to install |scname|

   user@host:$ cd

Navigate to the $HOME directory or any other place where to install 

Install the main |scname| package into :file:`seiscomp`

   user@host:~$ tar xzf seiscomp-[version]-[OS]-[arch].tar.gz

Install the |scname| map package into :file:`seiscomp/share/maps`

   user@host:~$ tar xzf seiscomp-[release]-maps.tar.gz

Optional: Install the documentation package into :file:`seiscomp/share/doc`

   user@host:~$ tar xzf seiscomp-[version]-doc.tar.gz

Unpacking these files creates the |scname| :ref:`directory structure<directory_structure>`.

All installed files and directories are found below the *seiscomp* directory.
The directory structure of the installed system is described the table below.

 directory.

Log files of started modules. Usually modules log either to syslog or ~/.seiscomp/log. This directory contains the logs of the start of each module.

Default directory for files created by modules such as the waveform ringbuffer of :ref:`seedlink` or the waveform archive created by :ref:`slarchive`.

Default directory for files created by modules such as the waveform ringbuffer of 

Contains the .run and .pid files of modules started by :program:`seiscomp`.

Template files used by e.g. :ref:`seedlink` to create its native configuration.

The default configuration files. This directory is read as first when a module starts.

|scname| depends on a number of additional software packages shipped with each
Linux distribution.
After installation of |scname| these packages can be installed using the
:program:`seiscomp`.
The :program:`seiscomp` tool comes with
the command :command:`install-deps` which installs required packages.
Read the section :ref:`System management<system-management>` for more detailed
instructions. For example, to install the dependencies for using the MariaDB
database, give 'mariadb-server' as parameter.

 depends on a number of additional software packages shipped with each
After installation of 

 for more detailed
database, give ‘mariadb-server’ as parameter.

user@host:~$ seiscomp/bin/seiscomp install-deps base mariadb-server
Distribution: Ubuntu 18.04
[sudo] password for sysop:
Reading package lists... Done
Building dependency tree
Reading state information... Done
...

If your distribution is not supported by :command:`install-deps`,
install the above packages manually:

su root
bash install-mariadb-server.sh
bash install-postgresql-server.sh
bash install-base.sh
bash install-gui.sh
bash install-fdsnws.sh
...

or contact the |scname| developers to add support for your distribution.

Either the MariaDB **or** the MySQL server can be installed; not both at the
same time. When replacing on by the other, ensure that all related files are
removed before installing the alternative server. For MySQL instead of MariaDB
use: ::

   root@host:~$ sh install-mysql-server.sh

Preferably use MariaDB instead of MySQL as MariaDB is the default for the
supported Linux distributions!

use: ::

 the MySQL server can be installed; not both at the
use:

Linux systems develop dynamically and the installation of the dependencies
may be incomplete. |scname| modules will stop and indicate the missing software.
They can be installed manually.

may be incomplete. 

 modules will stop and indicate the missing software.

|scname| is typically operated with a :ref:`database <concepts_database>` which
should be optimized. This section describes how to setup and optimize the
database server. For the setup of the database itself read the section
:ref:`getting-started`.

 which

For better performance with a MariaDB/MySQL database, adjust the memory pool size. Test
the default of the **buffer\_pool_size** before making the change:

  $ mysql -u root -p
  show variables like 'innodb_buffer_pool_size';

The optimum **buffer\_pool_size** depends on your system (RAM size) and only needs
to be set if required. Choose your preferred value:

* Recommended value: 512M or more
* Minimum value: 64M

Additionally, reduce the database hard drive synchronization and make both adjustments
in the section [mysqld]:

  [mysqld]
  innodb_buffer_pool_size = <your value>
  innodb_flush_log_at_trx_commit = 2

.. note ::

   The location of the configuration file can differ between distributions.

   :program:`Ubuntu`:

   :file:`/etc/mysql/mariadb.conf.d/50-server.cnf`

   :program:`CentOS`:

   :file:`/etc/my.cnf`

Please read the documentation of your distribution. root privileges may
be required to make the changes.

the default of the 

$ mysql -u root -p
show variables like 'innodb_buffer_pool_size';

 depends on your system (RAM size) and only needs

[mysqld]
innodb_buffer_pool_size = <your value>
innodb_flush_log_at_trx_commit = 2

The location of the configuration file can differ between distributions.

:program:`Ubuntu`:

:file:`/etc/mysql/mariadb.conf.d/50-server.cnf`

:file:`/etc/my.cnf`

To start MariaDB automatically during boot set

:program:`Ubuntu`

   user@host:~$ sudo systemctl enable mariadb

:program:`CentOS`

   user@host:~$ su root
   root@host:~$ systemctl enable mariadb

If you make a fresh installation of MariaDB/MySQL, secure the database and set
a password for the root user

:program:`Ubuntu` ::

   user@host:~$ sudo mysql_secure_installation

:program:`CentOS` ::

   root@host:~$ mysql_secure_installation

   This step overrides database settings. Only execute the command

   * After a fresh installation or
   * If you are sure about the procedure.

This step overrides database settings. Only execute the command

* After a fresh installation or
* If you are sure about the procedure.

After adjusting the parameters, MariaDB needs to be restarted. One can run

   user@host:~$ sudo systemctl restart mariadb

   root@host:~$ systemctl restart mariadb

When using PostgreSQL, the database server must be initialized and secured.

By default PostgresSQL does not allow to login with username and password which
leads to the fact that :program:`scmaster` can not connect to the database
after |scname| database initialization. Here an example how to enable
user/password authentication for local and remote connections.

leads to the fact that 

 database initialization. Here an example how to enable

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 # IPv4 local connections:
 host    seiscomp        sysop           0.0.0.0/0               md5
 host    all             all             127.0.0.1/32            ident

The order of the rules matters and the location of the configuration file
can differ between distributions.

:file:`/etc/postgresql/10/main/pg_hba.conf`

:file:`/var/lib/pgsql/data/pg_hba.conf`

By default PostgresSQL accepts local connections only. If the database server
and clients are on different machines please change the listen address as
follows.

   listen_addresses = 0.0.0.0/0

.. note ::

   :file:`/etc/postgresql/10/main/postgresql.conf`

   :file:`/var/lib/pgsql/data/postgresql.conf`

follows.

:file:`/etc/postgresql/10/main/postgresql.conf`

:file:`/var/lib/pgsql/data/postgresql.conf`

Now everything is installed and the system can be configured. The
:ref:`next chapter<getting-started>` chapter explains the first steps.

Hyperlink target "database-configuration-mysql" is not referenced.

Hyperlink target "database-configuration-postgresql" is not referenced.

SeisComP is likely the most widely distributed software package for real-time monitoring
of earthquakes and other seismic events. It provides automatic and interactive
seismological data acquisition, processing and data exchange over the internet. Its
data transmission protocol SeedLink has become a de facto world standard.

|scname| convinces many seismologists and earthquake specialists at data and
research centers, companies and governmental agencies world-wide by:

 convinces many seismologists and earthquake specialists at data and

Powerful and reliable automatic data processing in real time or during post-processing

Modern and well-maintained OpenSource software on GitHub
:cite:p:`seiscomp-github` welcoming community contributions.

The first work on what became |scname| today began nearly two decades ago
with developments at :term:`GFZ` of plugins for digitizers.
It is now continued by :term:`gempa GmbH` and GFZ.
The :ref:`section on historical information <history>` provides details on the past
and current releases.

Easy access to relevant information about stations, waveforms and recent
earthquakes through graphical user interface and command-line tools

Implementation of critical functions as standalone modules to guarantee the
independence from other functions (e.g. picker, magnitude calculation,
interactive analysis)

Ability of data exchange between different automatic real-time systems

Robust system for rapid and reliable earthquake solutions (especially during
seismic crises)

These design principles have given |scname| much robustness and flexibility
to respond to new developments. The |scname| community is encouraged to contribute
their |scname| source code on GitHub :cite:p:`seiscomp-github`. Examples and
guidelines for generating
code are given in the :ref:`developer section <sec_index_developers>`.

 much robustness and flexibility
to respond to new developments. The 

This documentation begins with an :ref:`overview` and a :ref:`concepts` section
necessary for understanding and using |scname| successfully.
The :ref:`Glossary section <glossary>` introduces technical terms.
All important code changes are listed in the :ref:`change log <sc-changelog>`.
When using |scname| or contributing source code, you should understand the
:ref:`license terms <license>`.
If you actually make use of |scname| and publish the results, we ask you to give
appropriate reference as set out on the :ref:`Citation section <citation>`.

 introduces technical terms.
All important code changes are listed in the 

 and publish the results, we ask you to give
appropriate reference as set out on the 

In the following section the documentation covers the :ref:`installation <installation>`
and how to configure and operate a working |scname| system.
A few :ref:`tutorials` will guide you through a first example set up and further
operations.

 will guide you through a first example set up and further

The tutorials are followed by :ref:`detailed technical descriptions <sec_index_modules>`
of each individual |scname| module, grouped by their general functionality:

and many more :ref:`extensions <sec_index_extensions>` like descriptions of the
:term:`RecordStream`, magnitude types, locators, GUI customizations, waveform
filters or plugins.

, magnitude types, locators, GUI customizations, waveform

The final part of the documentation relates to
:ref:`contributing your own source code <sec_index_developers>` to |scname|.
This requires a deeper knowledge of the |scname| :ref:`data model<api-datamodel-python>`
and other details.
This part also includes guidelines for developers such as
:ref:`coding conventions <coding_conventions>`, :ref:`unit tests <unittests>`
and a :ref:`guide for contributing documentation <contributing_documentation>`.
:ref:`Some Python examples <sdk-python-examples>` help you to get started
quickly with programming for |scname|.

:ref:`guide for contributing documentation <contributing_documentation>`

|scname| is developed and distributed under the terms of the GNU
:cite:t:`agpl`, as set out in the :ref:`license` section.

You can use the entire SeisComP software collection under
the terms of the GNU AGPL, non-commercially or commercially. You can talk
about the software, you can give training sessions with the software, you
can install the software wherever you like regardless of whether
you are doing it for profit or not.
You can operate the software and do your business with it.

If you want to modify the software then you must publish all the changes
you made. Even if you only run it on your servers and expose it to the public.
If you build software applications linking against SeisComP libraries you have
to publish them under the GNU AGPL/GPL if they are for use by others.

If you want to write closed-source software with SeisComP you can apply for
a Commercial License. It is your decision whether you want to use the
libraries under the GNU AGPL or the Commercial License. You can't do both!

libraries under the GNU AGPL or the Commercial License. You can’t do both!

This Software may be used under the terms of the GNU
Affero General Public License version 3.0 as published by the Free Software
Foundation. Please review the following information to ensure the
GNU Affero General Public License version 3.0 requirements will be met.

The SeisComP application package is licensed exclusively under the GNU AGPL.

Licensees holding valid commercial SeisComP licenses may use the Software in
accordance with the commercial license agreement between you and gempa GmbH.
For further information use the contact form at https://www.gempa.de/contact.

For further information use the contact form at 

Copyright (C) 2007 Free Software Foundation, Inc.
`<https://fsf.org/>`_

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.

The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains
free software for all its users.

share and change all versions of a program–to make sure it remains

When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

A secondary benefit of defending all users’ freedom is that

The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing
under this license.

The precise terms and conditions for copying, distribution and
modification follow.

"This License" refers to version 3 of the GNU Affero General Public
License.

“This License” refers to version 3 of the GNU Affero General Public
License.

"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.

“Copyright” also means copyright-like laws that apply to other kinds

"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.

“The Program” refers to any copyrightable work licensed under this
License. Each licensee is addressed as “you”. “Licensees” and
“recipients” may be individuals or organizations.

To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.

To “modify” a work means to copy from or adapt all or part of the work
an exact copy. The resulting work is called a “modified version” of
the earlier work or a work “based on” the earlier work.

A "covered work" means either the unmodified Program or a work based
on the Program.

A “covered work” means either the unmodified Program or a work based

To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

To “propagate” a work means to do anything with it that, without

To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.

To “convey” a work means any kind of propagation that enables other

An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

An interactive user interface displays “Appropriate Legal Notices” to

The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.

The “source code” for a work means the preferred form of the work for
making modifications to it. “Object code” means any non-source form of
a work.

A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

A “Standard Interface” means an interface that either is an official

The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

The “System Libraries” of an executable work include anything, other
“Major Component”, in this context, means a major essential component

The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

The “Corresponding Source” for a work in object code form means all
control those activities. However, it does not include the work’s

The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.

The Corresponding Source for a work in source code form is that same
work.

All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.

Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.

No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.

the work’s users, your or third parties’ legal rights to forbid

You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

You may convey verbatim copies of the Program’s source code as you

You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:

a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.

b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".

to “keep intact all notices”.

c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.

d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.

A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

“aggregate” if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation’s users

You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:

a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.

b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.

c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.

d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.

e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.

A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.

A “User Product” is either (1) a “consumer product”, which means any
“normally used” refers to a typical or common use of that class of

"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.

“Installation Information” for a User Product means any methods,

If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.

Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

“Additional permissions” are terms that supplement the terms of this

When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:

a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or

b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or

c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or

d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or

e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or

f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.

All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

All other non-permissive additional terms are considered “further
restrictions” within the meaning of section 10. If the Program as you

If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.

You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.

Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.

An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

An “entity transaction” is a transaction transferring control of an
licenses to the work the party’s predecessor in interest had or could

You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".

A “contributor” is a copyright holder who authorizes use under this
work thus licensed is called the contributor’s “contributor version”.

A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

A contributor’s “essential patent claims” are all patent claims owned
purposes of this definition, “control” includes the right to grant

Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

patent license under the contributor’s essential patent claims, to

In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

In the following three paragraphs, a “patent license” is any express
sue for patent infringement). To “grant” such a patent license to a

If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

license to downstream recipients. “Knowingly relying” means you have
covered work in a country, or your recipient’s use of the covered work

If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.

A patent license is “discriminatory” if it does not include within the

Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.

13. Remote Network Interaction; Use with the GNU General Public License.

Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your
version supports such interaction) an opportunity to receive the
Corresponding Source of your version by providing access to the
Corresponding Source from a network server at no charge, through some
standard or customary means of facilitating copying of software. This
Corresponding Source shall include the Corresponding Source for any
work covered by version 3 of the GNU General Public License that is
incorporated pursuant to the following paragraph.

Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

13. remote network interaction; use with the gnu general public license.

The Free Software Foundation may publish revised and/or new versions
of the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever
published by the Free Software Foundation.

Public License “or any later version” applies to it, you have the

If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

of the GNU Affero General Public License can be used, that proxy’s

Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.

HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.

To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.

“copyright” line and a pointer to where the full notice is found.

<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see `<https://www.gnu.org/licenses/>`_.

<one line to give the program’s name and a brief idea of what it does.>

along with this program.  If not, see 

Also add information on how to contact you by electronic and paper
mail.

If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for
the specific requirements.

interface could display a “Source” link that leads users to an archive

You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU AGPL, see `<https://www.gnu.org/licenses/>`_.

school, if any, to sign a “copyright disclaimer” for the program, if
the GNU AGPL, see 

Duplicate explicit target name: "https://www.gnu.org/licenses/".

Duplicate explicit target name: “https://www.gnu.org/licenses/”.

The installation contains modules for data acquisition, data
archiving, processing, distribution and much more. To control all these
modules and to update their configuration the central program :program:`seiscomp`
is used with commands and options.

modules and to update their configuration the central program 

:program:`seiscomp` is a Python script installed in
:file:`seiscomp/bin/seiscomp`.
The graphical tool :ref:`scconfig<scconfig>` is a user-friendly wrapper
tool for many commands in :program:`seiscomp`.

The entire management framework is built upon Python which is portable to different
platforms. To make :program:`seiscomp` work, ensure that Python is installed on
your system.

platforms. To make 

:program:`seiscomp` of a particular installation can be called from anywhere in
the file system with its full path. It will source the environment of the
installation automatically. Thus, it is possible to control different
installations on one computer.

 of a particular installation can be called from anywhere in

seiscomp should never run with root privileges unless you know exactly what
you are doing.

:program:`seiscomp` refuses to work when run with root privileges and issues
an error. To run it with root privileges the command-line option
``--asroot`` must be given as first parameter, e.g.: ::

   seiscomp --asroot start seedlink

 refuses to work when run with root privileges and issues

This will print all commands. To get help for a particular command, append
it to the ``help`` command.

it to the 

**alias** create|remove [new-name] [module name]

Manages module aliases.

**check** [module list]

Checks if all passed modules are still running if they have been started.
If no modules are listed, all modules are checked.

**disable** [module list]

The opposite of enable. Removes the file :file:`etc/init/[module].auto` for
each module passed.

**enable** [module list]

Enables a module to be started and checked automatically when either :command:`start`
or :command:`check` is called without arguments. This creates a file :file:`etc/init/[module].auto`
for each module passed.

Enables a module to be started and checked automatically when either 

**install-deps** [packages]

Installs 3rd party packages on which |scname| depends such as MariaDB or MySQL.
This is currently only supported for major Linux distributions. A list of packages
needs to be given. Available packages are: **base**, **GUI**,
**mariadb-server**, **postgresql-server**, **fdsnws**.

#. Install only base system dependencies:

      seiscomp install-deps base

#. Install base system dependencies and MariaDB/MySQL/PostgreSQL server:

   MariaDB ::

      seiscomp install-deps base mariadb-server

   MySQL. Install either MariaDB or MySQL, not both at the same time! ::

      seiscomp install-deps base mysql-server

   PostgreSQL::

      seiscomp install-deps base postgresql-server

#. Install also gui and fdsnws dependencies:

      seiscomp install-deps gui fdsnws

 depends such as MariaDB or MySQL.
needs to be given. Available packages are: 

Install only base system dependencies:

   seiscomp install-deps base

Install base system dependencies and MariaDB/MySQL/PostgreSQL server:

MariaDB ::

   seiscomp install-deps base mariadb-server

MySQL. Install either MariaDB or MySQL, not both at the same time! ::

   seiscomp install-deps base mysql-server

PostgreSQL::

   seiscomp install-deps base postgresql-server

MySQL. Install either MariaDB or MySQL, not both at the same time!

Install also gui and fdsnws dependencies:

   seiscomp install-deps gui fdsnws

**restart** [module list]

Restarts all the given modules. If no module is passed, all running and enabled modules
are first stopped and then restarted.

**setup**

Initializes the configuration of all available modules. Each module implements
its own setup handler which is called at this point. The initialization takes
the installation directory into account and should be repeated when copying
the system to another directory.

   setup might overwrite previous settings with default values.

**shell**

Starts the interactive |scname| :ref:`shell <system-management-shell>`, an
approach to make configuration and manipulation of bindings more easy on the
command line.

, an

**start** [module list]

Starts all modules in [module list]. If no module is named, all enabled modules are
started.

started.

**status** [module list]

Prints the status of some, started, enabled or all modules.

**stop** [module list]

Stops all modules in [module list]. If no module name is given, all running modules are
stopped.

stopped.

**update-config** [module list]

Updates the configuration. Modules should be able to read the configuration
files in :file:`etc` directly, but some modules such as Seedlink need an additional
step to convert the configuration to their native format. Furthermore all
trunk station bindings and the inventory need to be synchronized with the
database. If no module list is given, update-config is called for all available
modules. Otherwise only the modules passed are updated.

files in 

 directly, but some modules such as Seedlink need an additional

which will open a command prompt. The shell is a helper to manage module station
bindings. Instead of manipulating hundreds of files using difficult commands
such as :command:`sed` in Bash scripts, shell can be used. It supports:

such as 

$

Enter :command:`help` to get a list of supported commands. The results of all
commands issued are written to disk immediately and **not buffered**.

 to get a list of supported commands. The results of all
commands issued are written to disk immediately and 

Assigning the scautopick global profile to all GE stations

   $ set profile scautopick global GE.*

Replace all profiles with station configuration for scautopick from GE
network

   $ remove profile scautopick global GE.*

network

Show bindings for station GE.MORC

   $ print station GE.MORC
   [global]
   /home/sysop/seiscomp/etc/key/global/profile_BH
   --------------------------------------------------------------------------------
   detecStream = BH

   [seedlink]
   /home/sysop/seiscomp/etc/key/seedlink/profile_geofon
   sources = chain
   sources.chain.address = geofon.gfz-potsdam.de
   sources.chain.port = 18000

   [scautopick]
   /home/sysop/seiscomp/etc/key/scautopick/profile_default
   detecEnable = true
   detecFilter = "RMHP(10)>>ITAPER(30)>>BW(4,0.7,2)>>STALTA(2,80)"
   trigOn = 3
   trigOff = 1.5
   timeCorr = -0.8

   [slarchive]
   /home/sysop/seiscomp/etc/key/slarchive/profile_1day
   selectors = BHZ.D
   keep = 1

This helps to see immediately in which file a certain parameter is
defined and what module the station is bound to.

$ print station GE.MORC
[global]
/home/sysop/seiscomp/etc/key/global/profile_BH
--------------------------------------------------------------------------------
detecStream = BH

[seedlink]
/home/sysop/seiscomp/etc/key/seedlink/profile_geofon
sources = chain
sources.chain.address = geofon.gfz-potsdam.de
sources.chain.port = 18000

[scautopick]
/home/sysop/seiscomp/etc/key/scautopick/profile_default
detecEnable = true
detecFilter = "RMHP(10)>>ITAPER(30)>>BW(4,0.7,2)>>STALTA(2,80)"
trigOn = 3
trigOff = 1.5
timeCorr = -0.8

[slarchive]
/home/sysop/seiscomp/etc/key/slarchive/profile_1day
selectors = BHZ.D
keep = 1

All modules which can run in the background as daemon modules have init scripts.
The init scripts are placed in :file:`etc/init`. :program:`seiscomp`
loads all .py files and tries to find a class called Module. This class is
then instantiated with the environment object passed as only parameter
to the constructor. If no error occurred then the module is registered.

The init scripts are placed in 

The name of the init script is ignored and not used furthermore. Only the
name in the Module object is important. It is important to note that only
one module can be placed in one init script.

The Module class must implement the interface used by :program:`seiscomp`.
See :py:class:`seiscomp.Kernel.Module` for more details.

A simple default implementation looks like this which is available as a
template and can be used directly by using the same name as the module's
name. The module's name in this template is derived from the filename, but this
isn't a general rule as stated before.

template and can be used directly by using the same name as the module’s
name. The module’s name in this template is derived from the filename, but this
isn’t a general rule as stated before.

import seiscomp.Kernel

class Module(seiscomp.Kernel.Module):
  def __init__(self, env):
    seiscomp.Kernel.Module.__init__(self, env, env.moduleName(__file__))

|scname| provides a Python module (:py:mod:`seiscomp.Kernel`) that allows to
write init scripts in an easy way.

The |scname| setup kernel module provides interfaces to write init handlers
for modules used by :program:`seiscomp` in Python.

 setup kernel module provides interfaces to write init handlers
for modules used by 

env -- The passes environment from seiscomp which is
stored in self.env.

name -- The module name which must be passed by derived classes.
It is stored in self.name.

The module name which must be passed by derived classes.

The module interface which implements the basic default operations.
Each script can define its own handlers to customize the behaviour.

py:attribute: name

The module's unique name. This name is used for run/pid and log files.

py:attribute: order

The module's start order. The default value is 100 and modules with
the same value are ordered alphabetically.

Checks if a module is running. The default implementation returns True
if the lockfile if not locked.

Starts a module and returns 0 if no error occured and 1 otherwise. This
method is called from :program:`seiscomp start`.

method is called from 

Stops a module and returns 0 if no error occured and 1 otherwise. This
method is called from :program:`seiscomp stop`.

Check is the same as start. The decision whether to check a module
or not is made :program:`seiscomp` which check the existence
of the corresponding run file. Returns 1 is case of error, 0 otherwise.

or not is made 

 which check the existence

shouldRun -- Boolean parameter that indicates if the module should
run or not. This is evaluated by seiscomp.

Boolean parameter that indicates if the module should
run or not. This is evaluated by 

Prints the status of the module to stdout. Either is CSV format or as free
text. This depends on self.env._csv. The default implementations calls

self.env.logStatus(self.name, self, self.isRunning(), shouldRun,\
                   self.env.isModuleEnabled(self.name) or \
                   isinstance(self, CoreModule))

Updates the configuration and bindings based on the module's .cfg files
and :file:`etc/key/[modname]`. A :term:`trunk` module does not need to
do anything here. Stand-alone modules need to implement this method to
convert the configuration to their native format.

Updates the configuration and bindings based on the module’s .cfg files
and 

 module does not need to

Prints crontab entries to stdout. The default implementation does not
print anything.

The core module interface. A core module is a normal module but is started
before all modules and stopped afterwards. Core modules are always enabled
and will be started with :program:`seiscomp start` unless a CoreModule
implementation applies additional checks in :py:meth:`Module.start`.

and will be started with 

 unless a CoreModule
implementation applies additional checks in 

:ref:`scmaster` is a core module which is a requirement for all :term:`trunk`
modules.

This overview section is intended to quickly introduce the reader into
key aspect of |scname| and to provide the access points for further reading.

key aspect of 

A |scname| system is not a single piece of software but it involves automatic and
interactive modules working
separately to process data and to analyze seismicity.
Read the :ref:`concepts section on modules <concepts_modules>` for more conceptional details.

 system is not a single piece of software but it involves automatic and
Read the 

Processing of phase picks to detect events and compute locations

and many more. Key features are summarized in the :ref:`introduction <introduction>`.

.. figure::  media/sc-interaction.png

   Real-time data acquisition, archiving and automatic processing combined with manual analysis.

Real-time data acquisition, archiving and automatic processing combined with manual analysis.

Data acquisition modules allow to provide and store waveform data in real-time.
They are described in the acquisition section of the modules documentation.

Automatic processing modules allow real-time or offline processing of waveforms and event parameters.
They are described in the processing section of the modules documentation.

Interactive :term:`GUI` modules show waveforms and processing results and allow user interactions:

 modules show waveforms and processing results and allow user interactions:

:ref:`scolv`: processing waveforms, locating events and determining magnitudes and focal mechnisms

: processing waveforms, locating events and determining magnitudes and focal mechnisms

:ref:`scrttv`: view waveforms and phase picks, select events for processing in scolv, enable or disable stations
 for automatic processing

for automatic processing

: view waveforms and phase picks, select events for processing in scolv, enable or disable stations

:ref:`scmv`: view station locations on a map with status information and waveforms, select events for processing in scolv

: view station locations on a map with status information and waveforms, select events for processing in scolv

:ref:`scesv`: view the latest events on a map and relevant event parameters

:ref:`scheli`: view the seismogram of a station in a helicorder plot, save images automatically

: view the seismogram of a station in a helicorder plot, save images automatically

:ref:`scqcv`: view waveform quality control (QC) parameters, enable or disable stations

: view waveform quality control (QC) parameters, enable or disable stations

The GUI modules are described in the Interactive analysis section of this documentation.

Inventory modules allow to manipulate inventories, e.g. to convert different formats
or to write information to the database.
They are described in the inventory section of the modules documentation.

Utility modules provide access to waveforms, the data base and much more.
They are described in the utilities section of the modules documentation.

As modules run, they produce objects corresponding to geophysical concepts
such as :term:`picks <pick>` and :term:`origins <origin>`.
These objects are exchanged with, and stored for later use by, other modules.
Communication between these modules happens in two ways:

such as 

.

Managing the communication between the modules in |scname| is the job of the :ref:`messaging
system <concepts_messaging>`.
The messaging system is controlled by :ref:`scmaster`. It acts as gatekeeper to the database,
and only the module :ref:`scmaster` is allowed
write access to the database.
Additional details are found under :ref:`concepts_messaging` in the :ref:`concepts` chapter.

 is allowed
Additional details are found under 

.. figure::  media/sc_system_standard.jpg

   Modular organization of |scname| with messaging system, RecordStream interface and database.

Modular organization of |scname| with messaging system, RecordStream interface and database.

Internally in |scname|. most waveform data is currently handled as :term:`miniSEED` data (Data Only
:term:`SEED` records).
A time series of records is identified by its stream identifier,
following the SEED naming convention, ::

 records).
following the SEED naming convention,

NET - two or three letter alphanumeric network code
STA - 1-5 letter alphanumeric station code
LOC - 0 or 2-letter alphanumeric location code
CHA - 3-letter channel or stream code

Here *alphanumeric* means the digits 0 to 9, and uppercase letters A-Z.

For publicly-available seismic stations these are typically supplied
by external servers such as :ref:`seedlink` or :cite:t:`caps` servers.
For example, the :cite:t:`geofon` seismic network makes data available at port 18000
at geofon.gfz-potsdam.de which you may query and test using :ref:`slinktool`.

by external servers such as 

 seismic network makes data available at port 18000
at geofon.gfz-potsdam.de which you may query and test using 

If you operate your own seismic network, you may collect data directly
from your station's digitizer using one of the many plugins included with
the :ref:`seedlink` module.
You can configure |scname| to obtain data for each station via :term:`bindings <binding>`.
This configuration is described in the :ref:`tutorial on seedlink <tutorials_geofon_waveforms>`.

from your station’s digitizer using one of the many plugins included with
the 

Waveform data can be saved locally, using |scname|'s :ref:`slarchive` module.
The waveform archive is organized in a structured way on your local file system,
with one file for each channel and day, known as the :term:`SDS` archive.
Thanks to |scname|'s :ref:`concepts_recordstream` concept, its modules
can be reconfigured to use the local data from an archive, a server or from files, allowing *playbacks*.
This ability to replay old waveforms and re-analyze them, is very
important for exploring your system configuration, and developing
|scname|.

 module.
with one file for each channel and day, known as the 

 concept, its modules
can be reconfigured to use the local data from an archive, a server or from files, allowing 

.

Finally, being both a collector and a server of waveform data,
:ref:`seedlink` allows you to chain |scname| installations together to
obtain waveform data from upstream sources and relay it to other data users.

 installations together to

.. figure::  media/sc-acquisition-server.png

   Data flow from data centers and stations via plugins to seedlink and the waveform archive
   both providing the data to local or remote |scname| modules or other clients.

Data flow from data centers and stations via plugins to seedlink and the waveform archive
both providing the data to local or remote |scname| modules or other clients.

both providing the data to local or remote 

|scname| modules can access waveform data from many difference sources,
such as a Seedlink server or an FDSN web service.

 modules can access waveform data from many difference sources,

In |scname| terminology, the data from these sources are *record streams*.
Access to the waveform data can be configured by setting an appropriate :term:`RecordStream`.
Read the :ref:`concept description of the RecordStream<concepts_recordstream>`
and :ref:`technical documentation of the various implementations <global_recordstream>` for many more details.

.
Access to the waveform data can be configured by setting an appropriate 

:ref:`concept description of the RecordStream<concepts_recordstream>`

:ref:`technical documentation of the various implementations <global_recordstream>`

.. figure::  media/recordstream.png

   The RecordStream interface provides flexible access to waveform data.

The RecordStream interface provides flexible access to waveform data.

Taken together, this design gives |scname| operators much flexibility.
Since messages can be exchanged between different computers, and
waveform data can be obtained from many sources, the different modules
do not all have to be on a single computer.
Multiple operators can connect to a single |scname| installation from their own computers.

 operators much flexibility.
Multiple operators can connect to a single 

By :term:`inventory` we mean all information about seismic streams and stations
that is needed for processing the raw data obtained from sensors.
They are therefore also referred to as *station metadata*.
Read the :ref:`concepts section on inventory <concepts_inventory>` for more details
on formats and configuration in |scname|.

 we mean all information about seismic streams and stations
They are therefore also referred to as 

Names and time periods of networks, stations, locations and streams (epochs)

and other essential information.
Today there are some common formats to store metadata:

Dataless SEED can be imported to, and exported from, |scname| if needed.

You can get inventory information from various public sources including
:cite:t:`eida` or :cite:t:`iris` and many more. :cite:t:`smp` allows you to
create and share meta data from your own
station network and to export an inventory in :term:`SCML` format.

 allows you to
station network and to export an inventory in 

Inventories for all considered recording stations need to be imported
into |scname|. and loaded into its database, before data can be processed.
There are various tools to do this.
The tools are described in the inventory section of this documentation.

into 

. and loaded into its database, before data can be processed.

In order to process data streams, the inventory must provide complete response information
for all the streams AND must match the :term:`bindings <binding>` configuration.

for all the streams AND must match the 

The basics of configuring a |scname| system are described in the
:ref:`concepts section <concepts_configuration>`. The :ref:`tutorials` of this
documentation provide step-by-step recipes. The modules documentation explains
the modules functioning, their configuration and command-line parameters and
give additional examples and links to related topics.

 of this

The following :ref:`installation` section of this manual will help you install |scname|.
You will then need to obtain some inventory and a source of waveform data.
Configure bindings, enable the processing modules, and restart |scname|.
If all has gone well, you should see some stations as colorful triangles in
:ref:`scmv`,
and their traces in
:ref:`scrttv`.

.
Configure bindings, enable the processing modules, and restart 

.

Eventually, your new |scname| system will pick and create origins,
should a locatable :term:`seismic event <event>` take place while it
is running.

The :ref:`tutorial on help<tutorials_help>` provides comprehensive list of options
to get help on |scname|.
Most |scname| modules have built-in help messages and descriptive HTML
documentation. Read the :ref:`tutorial on help <tutorials_help>` for a neat
introduction.

 modules have built-in help messages and descriptive HTML
documentation. Read the 

There are other sources of information beyond this documentation. The
:cite:t:`seiscomp-forum` has many useful contributions from the community.
You are encouraged to register and post your own questions and comments there.

 has many useful contributions from the community.

Professional support including installation, training courses, maintenance,
module development and modification is provided world-wide by
`gempa GmbH <https://www.gempa.de/>`_ :cite:p:`gempa`, a
software company out-sourced from GFZ and founded by the main |scname|
developers.

, a
software company out-sourced from GFZ and founded by the main 

Potentially uncited but relevant sources of information include:

Bondár, I., K. McLaughlin and H. Israelsson, Improved event location uncertainty
estimates, Science Applications International Corp., Final Report,
AFRL-RV-HA-TR-2008-1074, 2008.

Bondár, I. and K. McLaughlin, Seismic location bias and uncertainty in the presence
of correlated and non-Gaussian travel-time errors, Bull. Seism. Soc. Am., 99,
172-193, doi:10.1785/0120080922, 2009.

Bondár, I., E.R. Engdahl, A. Villasenor, J.Harris and D. Storchak, ISC-GEM:
Global instrumental earthquake catalogue (1900-2009), II. Location and seismicity
patterns, Phys. Earth. Planet. Int., doi: 10.1016/j.pepi.2014.06.002, 239, 2-13, 2015.

Buland, R. and C.H. Chapman, 1983. The computation of seismic travel times,
Bull. Seism. Soc. Am., 73, 1271-1302.

Dziewonski, A.M. and F. Gilbert, 1976, The effect of small, aspherical perturbations
on travel times and a re-examination of the correction for ellipticity,
Geophys., J. R. Astr. Soc., 44, 7-17.

Engdahl, E.R., R. van der Hilst, and R. Buland, 1998. Global teleseismic earthquake
relocation with improved travel times and procedures for depth determination,
Bull. Seism. Soc. Am., 88, 722-743.

Kennett, B. and Engdahl, E.R., 1991. Travel times for global earthquake location
and phase identification, Geophys. J. Int., 105, 429–465.

Kennett, B.L.N., E.R. Engdahl, and R. Buland,  1995. Constraints on seismic velocities
in the Earth from traveltimes, Geophys. J. Int., 122, 108-124.

Kennett, B.L.N. and O. Gudmundsson, 1996, Ellipticity corrections for seismic
phases, Geophys. J. Int., 127, 40-48.

Myers, S.C, M.L. Begnaud, S. Ballard, M.E. Pasyanos, W.S. Phillips, A.L. Ramirez,
M.S. Antolik, K.D. Hutchenson, J. Dwyer, C. A. Rowe, and G. S. Wagner, 2010,
A crust and upper mantle model of Eurasia and North Africa for Pn travel time
calculation, Bull. Seism. Soc. Am., 100, 640-656.

Weber, B., Bondár, I., Roessler, D., Becker, J., SeisComP3 iLoc Integration
Applied to Array Processing, SnT conference, Abstract: T3.5-P54, Vienna/Austria,
2019,
`abstract: T3.5-P54 <https://events.ctbto.org/sites/default/files/2020-05/20190614-2019%20Book%20Of%20Abstracts%20Web%20Version%20with%20front%20cover%20-%20edited.pdf>`_

2019,

2019,

R. Le Bras, J. Wuster (2002). IDC Processing of Seismic, Hydroacoustic,
and Infrasonic Data [IDC5.2.1Rev1]. Angewandte Wissenschaft, Software und
Technologie GmbH.

J.F. Evernden (1969). Precision of epicenters obtained by small numbers of
world-wide stations. Bull. Seism. Soc. Am., 59(3), 1365-1398.

E.A. Flinn (1965). Confidence regions and error determinations for seismic
event location. Rev. Geophys., 3(1), 157-185.

Example client that connects to the messaging, listens for event
objects and dumps the event IDs.

This script was demonstrated at the |scname| workshop in Erice. It should be
relatively self-explanatory, but full understanding does require certain knowlege
of Python.

 workshop in Erice. It should be
of Python.

No actual real-world use case but a truly minimum example for a |scname| application.

No actual real-world use case but a truly minimum example for a 

# -*- coding: utf-8 -*-

import sys
import traceback
from seiscomp import client, datamodel
from seiscomp.client import Protocol

class EventListener(client.Application):

        client.Application.__init__(self, argc, argv)
        self.setMessagingEnabled(True)
        self.setPrimaryMessagingGroup(Protocol.LISTENER_GROUP)
        self.addMessagingSubscription("EVENT")
        self.setLoggingToStdErr(True)

    def doSomethingWithEvent(self, event):
        try:
            #################################
            # Include your custom code here #
            print("event.publicID = {}".format(event.publicID()))
        except Exception:
            traceback.print_exc()

    def updateObject(self, parentID, scobject):
        # called if an updated object is received
        event = datamodel.Event.Cast(scobject)
        if event:
            print("received update for event {}".format(event.publicID()))
            self.doSomethingWithEvent(event)

    def addObject(self, parentID, scobject):
        # called if a new object is received
        if event:
            print("received new event {}".format(event.publicID()))

    def run(self):
        # does not need to be reimplemented. it is just done to illustrate
        # how to override methods
        print("Hi! The EventListener is now running.")
        return client.Application.run(self)

    app = EventListener(len(sys.argv), sys.argv)

Note that the EventListener class is derived from the application class
seiscomp.client.Application from which it inherits most of the functionality.
For instance the ability to connect to the messaging and to the database are
both provided by seiscomp.client.Application; the EventListener only has to
enable messaging and database usage in the __init__ routine. The real action
takes place in the doSomethingWithEvent routine, which is called by both
updateObject and addObject, depending on whether the event object received is a
newly added or just and updated event.

Various Python example scripts that retrieve inventory information from the
database.

Illustrate the usefulness of simple Python scripts to retrieve inventory

The scripts in this section all deal with inventory access. All need to be
invoked with the command-line ``-d`` option to specify the |scname| database
from which the information is to be read. For example:

invoked with the command-line 

 database

import sys
from seiscomp import core, client, datamodel

class ListStreamsApp(client.Application):

        self.setDatabaseEnabled(True, False)
#       self.setLoadInventoryEnabled(True)

    def validateParameters(self):
        try:
            if not client.Application.validateParameters(self):
                return False
            return True
            sys.exit(-1)

        try:
            dbr = datamodel.DatabaseReader(self.database())
            now = core.Time.GMT()
            inv = datamodel.Inventory()
            dbr.loadNetworks(inv)

            result = []

            for inet in range(inv.networkCount()):
                network = inv.network(inet)
                dbr.load(network)
                for ista in range(network.stationCount()):
                    station = network.station(ista)
                    try:
                        start = station.start()
                    except Exception:
                        continue

                    try:
                        end = station.end()
                        if not start <= now <= end:
                            continue
                        pass

                    for iloc in range(station.sensorLocationCount()):
                        location = station.sensorLocation(iloc)
                        for istr in range(location.streamCount()):
                            stream = location.stream(istr)
                            result.append((network.code(), station.code(),
                                           location.code(), stream.code()))

            for net, sta, loc, cha in result:
                print("{:2} {:5} {:2} {:3}".format(net, sta, loc, cha))

    app = ListStreamsApp(len(sys.argv), sys.argv)

Print the coordinates of all stations configured on a |scname| system.

import sys

class InvApp(client.Application):

        try:
            if client.Application.validateParameters(self) is False:

        now = core.Time.GMT()
        try:
            lines = []
            nnet = inv.networkCount()
            for inet in range(nnet):
                net = inv.network(inet)
                dbr.load(net)
                nsta = net.stationCount()
                for ista in range(nsta):
                    sta = net.station(ista)
                    try:
                        elev = sta.elevation()
                        elev = float("NaN")
                    line = "{:2} {:5} {:9.4f} {:9.4f} {:6.1f}".format(
                        net.code(), sta.code(), sta.latitude(), sta.longitude(), elev)

                    try:
                        start = sta.start()
                        continue
                    try:
                        end = sta.end()
                            continue
                        pass

                    lines.append(line)

            lines.sort()
            for i, line in enumerate(lines):
                print(i, line)

    app = InvApp(len(sys.argv), sys.argv)

Print channel gains for all streams configured on a |scname| system.

import sys

        self.setDatabaseEnabled(True, True)

        try:

        try:
            lines = []
            dbq = datamodel.DatabaseQuery(self.database())
            dbq.loadNetworks(inv)
                sys.stderr.write("\rworking on network {:2}".format(network.code()))
                dbq.load(network)
                nsta = network.stationCount()
                    try:
                        continue

                    try:
                            continue
                        pass

                    # now we know that this is an operational station
                            line = "{:2} {:5} {:2} {:3} {:g}".format(
                                network.code(), station.code(), location.code(),
                                stream.code(), stream.gain())
                            lines.append(line)

            for line in lines:
                print(line)

Example client that connects to a RecordStream service and dumps the content
to stdout.

import sys
from seiscomp import core, client

class App(client.StreamApplication):

        client.StreamApplication.__init__(self, argc, argv)
        # Do not connect to messaging and do not use database at all

    def init(self):
        if not client.StreamApplication.init(self):
            return False

        # For testing purposes we subscribe to the last 5 minutes of data.
        # To use real-time data, do not define an end time and configure
        # a real-time capable backend such as Seedlink.

        # First, query now
        # Substract 5 minutes for the start time
        start = now - core.TimeSpan(300, 0)
        # Set the start time in our RecordStream
        self.recordStream().setStartTime(start)
        # And the end time
        self.recordStream().setEndTime(now)

        # Now add some streams to fetch
        self.recordStream().addStream("GE", "MORC", "", "BHZ")
        self.recordStream().addStream("GE", "MORC", "", "BHN")

        return True

    # handleRecord is called when a new record is being read from the
    # RecordStream
    def handleRecord(self, rec):
        # Print the streamID which is a join of NSLC separated with '.'
        print(rec.streamID())
        # Print the records start time in ISO format
        print("{:s}".format(rec.startTime().iso()))
        # Print the sampling frequency
        print("{:f} Hz".format(rec.samplingFrequency()))
        # If data is available
        if rec.data():
            # Print the number of samples
            print("  {:d} samples".format(rec.data().size()))
            # Try to extract a float array. If the samples are of other
            # data types, use rec.dataType() to query the type and use
            # the appropriate array classes.
            data = core.FloatArray.Cast(rec.data())
            # Print the samples
            if data:
                print("  data: {:s}".format(str([data.get(i) for i in range(data.size())])))
            else:
                print("  no data")

    app = App(len(sys.argv), sys.argv)

The command-line option ``-I`` can be used to configure the record
stream backend when running the test application.

 can be used to configure the record

Example client that connects to a RecordStream service, filters the records
with a given |scname| filter and dumps the content to stdout.

with a given 

import sys
from seiscomp import core, client, io, math, logging

        # Create IIR filter instance that deals with data (samples)
        filterIIR = math.InPlaceFilterF.Create("BW(4,1,10")
        if not filterIIR:
            logging.error("Failed to create filter")

        # Create a record filter that applies the given IIR filter to
        # each record fed. Deals with gaps and sps changes on record basis.
        self.recordFilter = io.RecordIIRFilterF(filterIIR)

        # Demultiplexes record volumes and runs the passed filter
        # on each stream.
        self.demuxer = io.RecordDemuxFilter(self.recordFilter)

    def handleRecord(self, raw_rec):
        # Feed the raw record into the demuxer and filter it
        rec = self.demuxer.feed(raw_rec)
        if not rec:
            return

        print("  {:s}".format(rec.startTime().iso()))
        print("  {:f} Hz".format(rec.samplingFrequency()))
            if data:
            else:

The documentation of an executable module comes as a pair of source files:

A description XML file (.xml) giving command details, command-line and configuration parameters,

A documentation reST text file (.rst) gives a more-detailed module description and examples.

Any other documentation, e.g. this style guide, tutorials, etc. only require the
documentation reST text file.

The reST text file should follow the guidelines in this style guide.

The :ref:`contributing_documentation` section details
the documentation requirements for executables including the structure of description XML files.

 section details

A template for a typical application or module in reST is in :file:`doc/templates/app.rst`.
An introductory paragraph should describe the purpose of the executable.
The introduction is followed be any additional information needed to understand
the command, introduced with one or more headings.
Add information about testing and examples into their own sections.

.

It eases later editing if sentences in the raw RST start on a new
line, even though they will flow together in the finished document.

It is helpful if long text objects such as HTML link text each
appear on their own line.

.. _documentation_style_guide_headings:

Module description files do *not* require top-level headings, as the
build script will take this text and assemble it with other
description information in the appropriate part of the documentation.

 require top-level headings, as the

While RST doesn't care too much about what syntax is used for
headings, it is best to stick to one style consistently.
Thus, you will generally need only two levels of headings but you can add more.

While RST doesn’t care too much about what syntax is used for

Use Title Case for headings within a section, and make only the first letter uppercase for subheadings.
Higher levels, marked up with asterisks, are used for sections of the documentation.

Level 1 Title
=============

Some text.

Level 2 title
-------------

Some text

However notes and figures should use the appropriate RST directive, and don't require their own headings.

However notes and figures should use the appropriate RST directive, and don’t require their own headings.

Two lines above are often used, and this looks better than one.

Start list items at the first level with a capital letter. End them with a full stop.

Use lower-case letters for all other levels. End them with a full stop.

#. Item 1.
#. Item 2.
   * subitem 1.
     #. subsubitem 1.
   * subitem 2.

Item 2.

* subitem 1.

  a. subsubitem 1.
  #. subsubitem 2.

* subitem 2.

**Code fragments:** Use the reST code-block syntax for code fragments, with
flavors like "c", "python", "sh", "bash", "properties´" or "xml" as appropriate:

.. code-block:: rst

      #!/bin/bash
      echo $SEISCOMP_ROOT

Result:

   #!/bin/bash

 Use the reST code-block syntax for code fragments, with
flavors like “c”, “python”, “sh”, “bash”, “properties´” or “xml” as appropriate:

**Configuration parameters:** Configuration values have a special
syntax. Use the ':confval:' indicator for referencing a module configuration
parameter:

   :confval:`logging.level`

Using this tag allows a link to be made within the documentation of that module
to the given configuration of the same module. The parameter must be defined
in the description XML file of the module.

 Configuration values have a special
syntax. Use the ‘:confval:’ indicator for referencing a module configuration

**Command-line options:** Command-line options have a special
syntax. Use the ':option:' indicator for referencing an option:

   :option:`--help`

The option must be defined in the description XML file of the module.

 Command-line options have a special
syntax. Use the ‘:option:’ indicator for referencing an option:

**Configuration files:** Use the reST ':file:' indicator to refer to files such
as configuration files:

   :file:`$SEISCOMP_ROOT/etc/scautopick.cfg`

Result: :file:`$SEISCOMP_ROOT/etc/scautopick.cfg`

 Use the reST ‘:file:’ indicator to refer to files such

**Programs:** Use the reST ':program:' indicator for |scname| programs:

   :program:`scautopick`

Result: :program:`scautopick`

**References:** Use the reST ':ref:' indicator for cross referencing |scname|
module documentation pages:

   :ref:`scautopick`

Result: :ref:`scautopick`

**Glossary:** Use the reST ':term:' indicator for referencing terms in the
|scname| :ref:`glossary`:

   :term:`magnitude`

Result: :term:`magnitude`

Create links to sections and subsections within and to figures  the text which can be referenced.
Use unique link names, e.g. including the upper-level section name or the module name.
Use appropriate short names to fit within the texts.

Preferably you do not show full citations or URLs for literature or
external web sites within the text but make references which
are listed in the section :ref:`sec-references`. Procedure:

are listed in the section 

Add publications, external URLs, etc. as complete citation
entries to the reference list :file:`doc/base/references.bib`
in the base |scname| :ref:`repository on Github <build>`.

entries to the reference list 

Cite documents within the RST file using the *cite*
directive

   :cite:p:`seiscomp`
   :cite:t:`seiscomp`

which results in :cite:p:`seiscomp` and
:cite:t:`seiscomp` within the documentation HTML text.

If you really cannot avoid URLs in RST files, then you may link them to some
text like

Alternatively you may generate reference in a *Reference* sections as

References
==========

.. target-notes::

.. _`discussion` : https://english.stackexchange.com/questions/65630/you-should-be-well-organised-or-you-should-be-well-organised

You may emphasize information within the text as text boxes to stand out at different levels.
Make sensible use of it!

Hints

   .. hint::

      This adds a useful hint.

Result:

.. hint::

   This adds a useful hint.

Notes

   .. note::

      This adds an extra note.

Result:

.. note::

   This adds an extra note.

Alerts

   .. caution::

      This adds a heads-up alert.

Result:

.. caution::

   This adds a heads-up alert.

Warnings

   .. warning::

      This adds an important warning.

Result:

   This adds an important warning.

|scname| module names are proper nouns, even though written with lower case.
Thus they do not need an article.

* Correct: "Although :program:`scmaster` receives a message"
* Incorrect: "Although the scmaster receives a message..."

 module names are proper nouns, even though written with lower case.

A sentence may begin with a lower case module name e.g. "scmaster has five modes..."
avoiding this: "The :program:`scmaster` module has..."

A sentence may begin with a lower case module name e.g. “scmaster has five modes…”
avoiding this: “The 

Word separation:

- Separate words:
  base class, wave number, time span
- One word:
  aftershock, foreshock, *and mainshock too*,
  bandpass, eigenperiod etc., metadata, standalone, username, workflow, waveform
- Difficult:
  high-pass filter; command line; command-line parameter

One word:
aftershock, foreshock, *and mainshock too*,
bandpass, eigenperiod etc., metadata, standalone, username, workflow, waveform

,

Difficult:
high-pass filter; command line; command-line parameter

Hyphenation for compound adjectives: yes, before a noun; after verb to be is harder.
See the `discussion`_, e.g.:

- Use command-line parameters
- Type on the command line

See the 

Spelling:

Use American English:

- With 'z': digitizer, realize, visualize, synchronize, behavior, color.
- With 's': license.
- Center, data center.

With 'z': digitizer, realize, visualize, synchronize, behavior, color.

With ‘z’: digitizer, realize, visualize, synchronize, behavior, color.

Case:

- SEED, miniSEED (miniSEED in :cite:t:`libmseed-github`, or MiniSEED,
  but Mini-SEED appears in Appendix G of the :cite:t:`seed-2012`.)
- Ctrl+S for 'control' key plus 's'.
- MySQL, PostgreSQL, MariaDB

SEED, miniSEED (miniSEED in :cite:t:`libmseed-github`, or MiniSEED,
but Mini-SEED appears in Appendix G of the :cite:t:`seed-2012`.)

Abbreviations:

- e.g., i.e.
- STA, LTA, STA/LTA detector
- TAR file

Store images in a separate directory of below the directory where the
documentation is kept.

.. figure::  media/image.png
   :alt: image one

   Image one.

Example for images in two columns which cannot be enlarged. Up to 4 columns are possible.
Compare with the :ref:`concept section on configuration<concepts_configuration-configs>`:

Compare with the 

:ref:`concept section on configuration<concepts_configuration-configs>`

.. raw:: html

<div class="two column layout">

   :alt: scconfig: bindings configurations

 .. figure:: ../media/scconfig_has_bindings.png
    :alt: scconfig: no bindings configurations

    scconfig modules panel indicating that bindings can be configured.

 .. raw:: html

 </div>

Make the important image details readable at the normal image size without enlargement.

Do not create screenshots from applications started remotely with X-forwarding.
X-forwarding may distort the application features.

Hyperlink target "documentation-style-guide-headings" is not referenced.

Hyperlink target "documentation-style-guide-links" is not referenced.

Hyperlink target "documentation-style-guide-images" is not referenced.

In computer programming, unit testing is a software testing method by which
individual units of source code, sets of one or more computer program modules
together with associated control data, usage procedures, and operating
procedures, are tested to determine whether they are fit for use. [#WPUT]_

procedures, are tested to determine whether they are fit for use. 

This chapter targets programmers, either ones contributing to |scname| or
adding their extended set of modules / libraries.

Since most of the |scname| code is written in C++, this chapter focuses on
C++ unit tests. For C++, we have evaluated three unit test frameworks:

 code is written in C++, this chapter focuses on

We found that Boost Test is the most appropriate, flexible and easy to
understand unit test framework. Another important fact was the availability of
Boost Test on all major Linux distributions via their package managers. That
|scname| makes already use of other Boost libraries was the icing on the cake.

 makes already use of other Boost libraries was the icing on the cake.

So this chapter is about integrating unit tests into |scname| with the Boost Test
library.

Apart from the availability of the Boost test libraries, cmake with version
2.8.0 or greater is also required.

With CMake it is easy to setup arbitrary tests. To make it even easier, we
added a shortcut to the CMake macro :code:`SC_ADD_LIBRARY`. It collects all .cpp
files in the directory :code:`${CMAKE_CURRENT_SOURCE_DIR}/test/{libraryname}`
and creates tests from them.

added a shortcut to the CMake macro 

An example is the |scname| core library. It is located at
:code:`src/base/common/libs/seiscomp`. Following the above rule, the test files
shall be located in :code:`src/base/common/libs/seiscomp/test/core/*.cpp`. For each
found source file, the macro will create a test with the same name and link
its executable against the library the tests are built for.

. For each

The recommend test file naming is :code:`{class}_{function}.cpp`.

The following section shows an example of a simple but in many cases sufficient
test module. This example can be used as a template for an |scname| unit test.

test module. This example can be used as a template for an 

#define SEISCOMP_TEST_MODULE [TestModuleName]
#include <seiscomp/unittest/unittests.h>
#include <seiscomp/core/datetime.h>

BOOST_AUTO_TEST_SUITE([domain]_[namespace]_[module])

BOOST_AUTO_TEST_CASE(addition) {
    Seiscomp::Core::TimeSpan k = 5, l = 7;
    BOOST_CHECK(k + l  == Seiscomp::Core::TimeSpan(12));
}

BOOST_AUTO_TEST_CASE(dummy_warning) {
    Seiscomp::Core::Time tNegativeUsec(3000, -789);
    BOOST_WARN_EQUAL(tNegativeUsec.seconds(), 3000);
    BOOST_WARN_EQUAL(tNegativeUsec.microseconds(), -789);
}

BOOST_AUTO_TEXT_SUITE_END()

That was simple, wasn't it? For more complex examples and usages, visit the
Boost Unit Test Framework documentation [#b1]_. Furthermore you have to link
your test executable against :code:`${Boost_unit_test_framework_LIBRARY}` and
:code:`seiscomp_unittest`. A simple CMakeLists.txt file looks as follows:

That was simple, wasn’t it? For more complex examples and usages, visit the
Boost Unit Test Framework documentation 

ADD_EXECUTABLE(test_mylib_myfeature feature.cpp)
SC_LINK_LIBRARIES_INTERNAL(test_mylib_myfeature unittest)
SC_LINK_LIBRARIES(test_mylib_myfeature ${Boost_unit_test_framework_LIBRARY})

ADD_TEST(
    NAME test_mylib_myfeature
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMAND test_mylib_myfeature
)

In Boost Test there are **3 different levels** to handle the results.

Warning: WARN [#b2]_
The error is printed and the error counter **is not** increased.
The test execution will not be interrupted and will continue to execute other
test cases.

 increased.

Error: CHECK
The error is printed and the error counter **is** increased.

Fatal error: REQUIRE
The test execution will be aborted.

The error is printed and the error counter 

For more tools and information about the Boost unit test tools see [#b4]_.

For more tools and information about the Boost unit test tools see 

The test binary will exit with an error code of 0 if no errors were detected
and the tests finished successfully. Any other result code represents failed
tests.

Running tests...
Test project /home/sysop/seiscomp/build
    Start 1: stringtoxml
1/4 Test #1: stringtoxml ......................***Failed    0.03 sec
    Start 2: datetime_time
2/4 Test #2: datetime_time ....................   Passed    0.03 sec
    Start 3: xml_test
3/4 Test #3: xml_test .........................   Passed    0.03 sec
    Start 4: datetime_timespan
4/4 Test #4: datetime_timespan ................   Passed    0.03 sec

75% tests passed, 1 tests failed out of 4

Total Test time (real) =   0.17 sec

The following tests FAILED:
          1 - stringtoxml (Failed)
Errors while running CTest
Makefile:61: recipe for target 'test' failed
make: *** [test] Error 8

As of Boost version 1.46, it is located at http://www.boost.org/doc/libs/1_46_0/libs/test/doc/html/index.html

*to see the warnings use the instruction:* **boost::unit_test::unit_test_log.set_threshold_level(boost::unit_test::log_warnings);**

*to see the messages use the instruction:* **boost::unit_test::unit_test_log.set_threshold_level(boost::unit_test::log_messages);**

As of Boost version 1.46, it is located at http://www.boost.org/doc/libs/1_46_0/libs/test/doc/html/utf.html

In |scname| all absolute times of raw :term:`miniSEED` waveforms and
:ref:`SeisComP objects <api-datamodel-python>` like event parameters, inventory,
etc. are natively given and assumed in UTC. For reading and writing absolute
times a range of formats are supported.

 like event parameters, inventory,

As a consequence of the space between *DD* and *hh* this time string needs
to be enclosed by quotes or double quotes. Otherwise, the time string meant to
be a single string only would be interpreted as two strings. Example:

 this time string needs

Depending on the module, trailing parameters could be omitted or not for
shortening the arguments but the general rules were initially unclear.

More flexibility has been introduced with SeisComP in version 6.4.0 with the
new C++ and Python function:

In adaptation to the norm :cite:t:`iso_8601` a subset of strings is now
available. Supported formats are

Times (24-hour clock system) in combination with calender or ordinal dates.

(*): Time strings with spaces must be enclosed by quotes or double quotes for
protecting the space.

Durations can be formed from start and end dates and times combined by tilde(~).
Example:

Amplitudes are measured on waveforms by modules such as :ref:`scautopick`,
:ref:`scamp` or :ref:`scolv` for computing magnitudes, e.g., by :ref:`scmag` or
:ref:`scolv`. The principles are outlined in the concepts section
:ref:`concepts_magnitudes`.

The time windows for measuring noise and signal amplitudes are given by their
respective begin and end values. These window parameters are configured as
global binding parameters specifically for a particular amplitude type, let's
say :ref:`ML <global_ml>`:

global binding parameters specifically for a particular amplitude type, let’s
say 

amplitudes.ML.noiseBegin
amplitudes.ML.noiseEnd
amplitudes.ML.signalBegin
amplitudes.ML.signalEnd

**The configured values are added to trigger time**, *triggerTime*, which
corresponds to the arrival of P waves for most applications. *triggerTime* is
hence the sum of *originTime* and *relativeTriggerTime*.

, which
corresponds to the arrival of P waves for most applications. 

absoluteSignalEnd =\ &originTime + relativeTriggerTime + amplitudes.ML.signalEnd \\
                  =\ &originTime - relativeOriginTime + amplitudes.ML.signalEnd \\
                  =\ &triggerTime + amplitudes.ML.signalEnd

Where values of time-window parameter values shall be estimated from distance
measures such as :envvar:`D` or :envvar:`h`, the relative origin time,
:envvar:`OT`, must be added to get the actual difference to *triggerTime*. In
contrast, :py:func:`tt()` returns the time difference to :envvar:`OT`.
Therefore, :py:func:`tt()` does not need to be corrected for origin time.

measures such as 

In |scname| the configuration of the begin and end values is supported in the
Bindings Panel of :ref:`scconfig`: For global bindings parameters you may create
an amplitude-type profile with the name of the amplitude type, e.g., ML. The
profile allows you to configure the parameters.
You may set the values as a combination of :ref:`functions <sec-time-functions>`,
:ref:`operators <sec-time-operators>`, :ref:`variables <sec-time-variables>` and
constant values. The combination of them allows setting up a flexible time
grammar for time windows. You may further use parentheses *()* to apply
operations within the parentheses before operations outside of parentheses.

 the configuration of the begin and end values is supported in the
Bindings Panel of 

: For global bindings parameters you may create
You may set the values as a combination of 

 and
grammar for time windows. You may further use parentheses 

 to apply

If the result of the final evaluation of the parameter value is *unset*, e.g.,
because required information are not available, then the processing receives an
error and the amplitude will not be computed.

If the result of the final evaluation of the parameter value is 

, e.g.,

The details of the grammar elements used in the following examples are
described :ref:`below <sec-time-details>`.

described 

Return the signal end time to measure :term:`mB amplitudes <magnitude,
broadband body-wave (mB_BB)>`:

   min(D * 11.5, 60)

where function :py:func:`min()` returns the minium from two parameters to,
epicentral distance, :envvar:`D`, is a variable and '\*' and '\+' are
operators.

In this example, the minimum time from either epicentral distance in degree
times 11.5 s/deg or 60 s is returned if epicentral distance is available. If
epicentral distance is not available, 60 s is returned hence being the default.

 returns the minium from two parameters to,
epicentral distance, 

Return the signal end time to measure amplitudes ending before the arrival of
surface waves or 150 s:

   min(OT + D * 35, 150)

where the epicentral distance, :py:envvar:`D`, is multiplied by 35 s/deg. The
relative origin time, :py:envvar:`OT`, is either added in order to obtain the
time relative to trigger time.
The minimum of this value and 150 s is returned by :py:func:`min()`. This
means that 150 s it the default in case epicentral distance is not available.

, is either added in order to obtain the
The minimum of this value and 150 s is returned by 

. This

Return the time difference as the minimum of predicted arrivals of S-waves
adding 10 s or 150 s:

   min(tt(S) + 10, 150)

where the function :py:func:`tt()` returns the relative travel time of the
argument, here the S phase, and '\+' is an operator.

In this example the minimum time from either the relative arrival time of S
phase plus 10 s or 150 s is returned.

Similar to the statements above, the time windows for measuring amplitudes can
be configured, e.g., for overriding default time for :term:`MLv amplitudes
<magnitude, local vertical (MLv)>`:

be configured, e.g., for overriding default time for 

amplitudes.MLv.noiseBegin=-10
amplitudes.MLv.noiseEnd=-1
amplitudes.MLv.signalBegin=-1
amplitudes.MLv.signalEnd=tt(S)+10

Variables, operators and functions are available. Variables define standard
values and function provide values based on a parameter given within
parentheses like :py:func:`tt()`. Find below their individual descriptions.

parentheses like 

Calculates the maximum of two values. If one value is unset then the other
value is returned. If both values are unset then the result is unset, too.

Calculates the minimum of two values. If one value is unset then the other

Calculates the travel-time of the given phase **w.r.t. relative origin
time, :py:envvar:`OT`**. The result is unset if the travel time cannot be
computed. The travel times are computed based on the travel-time interface
and model defined in :confval:`amplitudes.ttt.interface` and
:confval:`amplitudes.ttt.model`, respectively.

. The result is unset if the travel time cannot be
and model defined in 

phase -- Phase name available with the defined travel-time interface
and model.

Phase name available with the defined travel-time interface
and model.

Extracts the travel times of actually used arrivals **relative to the trigger
time**. The arrivals with the given phase code must exist.

phase -- Phase code of the arrival. The arrival must exist and the
sensor location of the associated pick must match the sensor
location of the target object.

Phase code of the arrival. The arrival must exist and the

acceptAll -- Whether to accept all arrivals or only manually
revised arrivals. The default is 'true' if not
given. Allowed is either 'true' or 'false'. If
'true' is given, then either the evaluation mode
of the origin or the evaluation mode of the pick
must be 'manual'.

Whether to accept all arrivals or only manually
revised arrivals. The default is ‘true’ if not
given. Allowed is either ‘true’ or ‘false’. If
‘true’ is given, then either the evaluation mode
must be ‘manual’.

If either of the operands is unset then the result will be also unset.

Variables can take the value *unset* when required information is not available.
The behaviour of :ref:`operators <sec-time-operators>` and
:ref:`functions <sec-time-functions>` with variables of value *unset* depends
on the operator and function itself.

Relative origin time as difference from origin to trigger
(originTime - triggerTime). For most amplitude types, the
trigger is the measured or the predicted arrival time of the P phase.

This chapter provides some tutorials to help you get started with |scname|.

This chapter provides some tutorials to help you get started with 

The material here is not the primary documentation.
Rather, it attempts to explain what is to be done in a step-by-step way.
For details, see the other chapters of this manual.

This tutorial guides you through the most common activities
involved in configuring a single new station in your existing SeisComP system.
Depending on your needs, you will use parts of other tutorials to do this.

Optionally, data for the new station are acquired and archived in real time.

Optionally, the new station is used for automatic real-time data processing.

if you want to process data locally, where will you get inventory?

For this example, we'll add the GRSN Station Collm (CLL)
from the GR network.

For this example, we’ll add the GRSN Station Collm (CLL)

If you want to process data on this system, you will need
inventory (metadata).
Metadata can be obtained from many different sources or created from scratch.

If you don't want to process on this system, you won't need inventory,
but you will have to create key file by hand for acquisition and archiving.

If you don’t want to process on this system, you won’t need inventory,

For processing, you will need inventory for the new station.
How to obtain this will vary.
You can fetch inventory from:

Other SeisComP systems. Use :ref:`scxmldump` to fetch inventories.

EIDA nodes :cite:p:`eida`. Use web interfaces such as web browsers or `wget`
to fetch an inventory.

Data centers providing :cite:t:`fdsn`. Use web interfaces such as web browsers
or `wget` to fetch an inventory.

Create and share inventories

gempa's :cite:t:`smp` is a tool for creating inventory from scratch and
community sharing. Create inventories for new or old networks and stations
from permanent or temporary deployments.
SMP provides inventories in :term:`SCML` format in multiple versions
which can be used without modification.

 is a tool for creating inventory from scratch and
SMP provides inventories in 

 format in multiple versions

Suppose that, by one of the methods above,
we have it in a single file, :file:`inventory_CLL.xml`.
This must be converted from StationXML to SeisComP XML.
The resulting file goes into
:file:`~/seiscomp/etc/inventory`.
See the chapter on :ref:`concepts_inventory`.

we have it in a single file, 

.

~/seiscomp/bin/seiscomp exec import_inv  fdsnxml ~/inventory_CLL.xml
Generating output to /home/user/seiscomp/etc/inventory/inventory_CLL.xml
No inventory read from inventory db
Create empty one
Processing /home/user/inventory_CLL.xml
 - parsing StationXML
 - converting into SeisComP-XML
Finished processing
Writing inventory to /home/user/seiscomp/etc/inventory/inventory_CLL.xml

When inventory is loaded, you will see your station in the results
of :ref:`scinv` with the `ls` option:

of 

$ ~/seiscomp/bin/seiscomp exec scinv ls
WARNING: /home/user/seiscomp/etc/inventory/README ignored: wrong extension
[..]
Parsing /home/user/seiscomp/etc/inventory/MY.xml ... done
Parsing /home/user/seiscomp/etc/inventory/GE.xml ... done
[..]
Merging inventory ... done
  network GR       German Regional Seismic Network, BGR Hannover
    epoch 1976-02-17
    station CLL    GRSN Station Collm
      epoch 1993-04-01
        epoch 2007-02-07
          epoch 2007-02-07

This shows the networks, stations, and channels, and the time spans for
which they are known.
For active stations, there must be an epoch (time span) with a start date
but no end date shown for the desired channel.

The inventory is not yet synchronized with the database. To finalize
inventory configuration, run::

inventory configuration, run:

If you get an error, make sure that MySQL/MariaDB is running and the
database has been created correctly (see :ref:`tutorials_postinstall`).

database has been created correctly (see 

If you've configured inventory above, you'll already have a top-level
key file for the station in the :file:`~/seiscomp/etc/key` directory.

If you’ve configured inventory above, you’ll already have a top-level
key file for the station in the 

You will need to know the waveform source, channels to be acquired,
location code used, if any.
See :ref:`tutorials_waveforms` for the remaining details.

See 

Now you can enable the station for processing.
Follow the :ref:`tutorials_processing` tutorial.

If you want to archive waveforms, consider how long they should be retained.
See :ref:`tutorials_archiving` for how to do this.

See 

Tutorial on :ref:`real-time data acquisition<tutorials_geofon_waveforms>`
so that you have local data for GE stations.
Alternatively you may already obtain real-time waveform data from
somewhere else (see :ref:`tutorials_waveforms`).

somewhere else (see 

See :term:`miniSEED` day files for GE stations in your local :ref:`waveform archive <concepts_waveformarchives>`.

**Motivation**:
Without activating archiving, your local Seedlink server
will only keep waveforms for a short time.
This makes it hard to review old events, for example.

:

In this example, we'll arrange for keeping waveforms for one week.
Before starting, you'll need bindings for your stations;
see the tutorials :ref:`tutorials_geofon_waveforms`
or :ref:`tutorials_waveforms`.

In this example, we’ll arrange for keeping waveforms for one week.
Before starting, you’ll need bindings for your stations;
see the tutorials 

The :program:`slarchive` collects data and archives it
locally using a :term:`SDS` file system structure of
nested subdirectories and systematically named files.

 file system structure of

Under the Modules tab, go to Acquisition, and select :program:`slarchive`.
Here you can see the default parameters used.
By default, :program:`slarchive` connects to your local Seedlink server,
and archives to your local disk.

 connects to your local Seedlink server,

Under the System tab, select the line for :program:`slarchive`, and click
"Enable module(s)" button at the top.

Under Bindings:
On RHS right-click "slarchive" to add an slarchive profile.
Name it 'week', to keep waveforms for 7 days, and click 'Ok'.
The new profile appears in the (bottom right corner of :program:`scconfig`.
Double click on the profile to open its settings.
Unlock the box labeled "keep", and change the default from 30 to 7.

Once you have a binding profile, drag it over all the stations it
should apply to, under "Networks" on the left-hand side of the
bindings tool.

On RHS right-click “slarchive” to add an slarchive profile.
Name it ‘week’, to keep waveforms for 7 days, and click ‘Ok’.
The new profile appears in the (bottom right corner of 

.
Unlock the box labeled “keep”, and change the default from 30 to 7.

should apply to, under “Networks” on the left-hand side of the

The name 'week' is just a label.
Its functionality comes from changing the value of the `keep` parameter.
Changing the *name* of a binding profile does not change its function.

The name ‘week’ is just a label.
Its functionality comes from changing the value of the 

You can also choose which channels should be archived,
using the ":confval:`selectors`" box.
For instance, you may collect data at several sample rates,
and only wish to archive the highest rate.
If you collect LH, BH, HH streams at 0.1, 20, and 100 samples
per second, respectively, you might retain only the HH streams,
by setting ":confval:`selectors`" to "HH".

using the “

” box.
by setting “

Then return to System, and click 'Update configuration'.
Make sure the :program:`slarchive` module, or no module, is selected.

Then return to System, and click ‘Update configuration’.
Make sure the 

Adjust the :ref:`concepts_RecordStream` for making use of the archived waveforms
from within a :term:`GUI` or automatic data processing modules.

You will need to edit each of your top-level key files to refer to
a new binding profile.
e.g.::

e.g.:

Add the line `slarchive:week` to whatever lines are already there.
Afterwards it will look something like this::

 to whatever lines are already there.
Afterwards it will look something like this:

global:BH
slarchive:week

Repeat this for the top-level key file of each station
you wish this binding to apply to.
Now create the binding profile in the key directory.
This is a file with a name corresponding to the binding profile name; here: 'week' ::

This is a file with a name corresponding to the binding profile name; here: ‘week’

$ cd ~/seiscomp/etc/key
$ mkdir slarchive
$ vi slarchive/profile_week
# Number of days the data is kept in the archive. This requires purge_datafile
# to be run as cronjob.
keep = 7

$ seiscomp enable slarchive
$ seiscomp update-config slarchive
$ seiscomp restart slarchive
slarchive is not running

Left unattended, your disk will eventually fill up with archived data.
To prevent this you will need a script like `purge_database`,
which is provided with SeisComP.
This can be run once per day using the `cron` feature of your system.
The command::

   $ seiscomp print crontab

will print a number of lines to the terminal.
Type `crontab -e` and insert these lines into the crontab file for your
user (typically `sysop`).
Exit your crontab editor.
Displaying your crontab should now show a line for `purge_database`.::

  $ crontab -l
  20 3 * * * /home/sysop/seiscomp/var/lib/slarchive/purge_datafiles >/dev/null 2>&1
  [There may be other lines too.]

This shows you that the `purge_datafiles` script
will run every day at 3:20 a.m.

To prevent this you will need a script like 

,
This can be run once per day using the 

 and insert these lines into the crontab file for your
user (typically 

).
Displaying your crontab should now show a line for 

$ crontab -l
[There may be other lines too.]

If you examine the `purge_datafiles` script, you will see that all it does
is look for files with a last modified time older than a certain number
of days ago.
The number of days to keep can be set station-by-station using the
ARCH_KEEP feature.
A convenient way to do this for many stations is with
multiple binding profiles, one for each length of time desired.

 script, you will see that all it does

If :program:`seedlink` is configured correctly, a new station's streams
appears in output from :program:`slinktool`::

  $ slinktool -Q : | grep CLL
  GR CLL      HHZ D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:49.0299
  GR CLL      HHE D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:45.0299
  GR CLL      HHN D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:39.2299

This shows three streams being acquired from station 'CLL'.
The second time shown is the time of the most recent data for each stream.

 is configured correctly, a new station’s streams
appears in output from 

$ slinktool -Q : | grep CLL
GR CLL      HHZ D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:49.0299
GR CLL      HHE D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:45.0299
GR CLL      HHN D 2020/04/01 01:11:57.6649  -  2020/04/01 07:28:39.2299

This shows three streams being acquired from station ‘CLL’.

If :program:`slarchive` is configured correctly, waveform data for the
station appears in :program:`slarchive`'s SDS archive directory:

 .. code-block:: sh

    $ ls -l seiscomp/var/lib/archive/2020/GR/CLL
    total 12
    drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHE.D
    drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHN.D
    drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHZ.D

    $ ls -l seiscomp/var/lib/archive/2020/GR/CLL/HHZ.D/
    total 12728
    -rw-r--r-- 1 user user 5492224 Mar 31 00:04 GR.CLL..BHZ.D.2020.090
    -rw-r--r-- 1 user user 7531008 Apr  1 00:03 GR.CLL..BHZ.D.2020.091

 is configured correctly, waveform data for the
station appears in 

   $ ls -l seiscomp/var/lib/archive/2020/GR/CLL
   total 12
   drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHE.D
   drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHN.D
   drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHZ.D

   $ ls -l seiscomp/var/lib/archive/2020/GR/CLL/HHZ.D/
   total 12728
   -rw-r--r-- 1 user user 5492224 Mar 31 00:04 GR.CLL..BHZ.D.2020.090
   -rw-r--r-- 1 user user 7531008 Apr  1 00:03 GR.CLL..BHZ.D.2020.091

$ ls -l seiscomp/var/lib/archive/2020/GR/CLL
total 12
drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHE.D
drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHN.D
drwxr-xr-x 2 user user 4096 Apr  1 06:30 HHZ.D

$ ls -l seiscomp/var/lib/archive/2020/GR/CLL/HHZ.D/
total 12728
-rw-r--r-- 1 user user 5492224 Mar 31 00:04 GR.CLL..BHZ.D.2020.090
-rw-r--r-- 1 user user 7531008 Apr  1 00:03 GR.CLL..BHZ.D.2020.091

Add stations of the GEOFON seismic network, obtained from GEOFON,
as a source of data.

GEOFON operates a global broadband seismic network jointly with many
partner institutions with focus on EuroMed and Indian Ocean regions.
As of 2020, the network consists presently of 78 high-quality active stations,
for which data is acquired in real-time.
This network has been assigned the network code *GE* by the
International Federation of Digital Seismograph Networks (FDSN).

This network has been assigned the network code 

 by the

The GEOFON data centre in Potsdam provides real-time data feeds for these
stations.
This tutorial demonstrates how to use this data in your own SeisComP system.

First, we'll query the upstream Seedlink server, which runs on
host `geofon.gfz-potsdam.de` at port 18000.
We do this with SeisComP's :ref:`slinktool` command, giving the ``-L`` option
to :ref:`slinktool`

First, we’ll query the upstream Seedlink server, which runs on
host 

$ slinktool -L geofon.gfz-potsdam.de
6C GF01  GF01
6C GF02  GF02
6C GF03  GF03
[..]
ZB URD20 URD20
ZB VAL41 VAL41
ZB VOS   VOS

This is a long list.
It shows the network code and station code of each
of the stations for which data is available from this Seedlink server.
We'll just be interested in a few stations, namely those corresponding
to broadband 20 sps vertical channels - with channel code BHZ, and with network
code GE

We’ll just be interested in a few stations, namely those corresponding
code GE

$ slinktool -Q geofon.gfz-potsdam.de | grep ^GE.*BHZ
GE ACRG     BHZ D 2019/11/28 06:51:48.7500  -  2019/11/28 09:18:32.1000
GE APE      BHZ D 2019/11/28 07:40:52.0400  -  2019/11/28 12:22:00.3950
GE ARPR     BHZ D 2019/11/27 23:23:27.4400  -  2019/11/28 09:41:22.1500
GE ARPR     BHZ E 2019/11/27 23:23:27.4400  -  2019/11/28 09:16:25.0400
[..]
GE KBS   00 BHZ D 2019/11/24 13:22:12.9695  -  2019/11/24 22:46:17.4195
GE KBS   10 BHZ D 2019/11/24 13:22:12.9695  -  2019/11/24 22:46:19.5945
GE KBU      BHZ D 2019/11/28 06:53:21.8450  -  2019/11/28 12:22:18.2450
[..]

The '-Q' option provides a formatted stream list,
with one line for each stream available from the server.
The columns are described in :ref:`tutorials_waveforms`;
the `grep` command here limits output to just those GE stations;
without it, this server provides over 16000 lines of output.)

The ‘-Q’ option provides a formatted stream list,
The columns are described in 

 command here limits output to just those GE stations;

For an active station, with low latency, the last data time (on the
right) will typically be just a few seconds in the past.
If a station or its network connection to the GEOFON server is down,
then it will be a longer time ago.

Use WebDC3 [#WebDC]_ or network pages [#NETPAGES]_
to obtain metadata for existing seismic networks.

Other sources of inventory, like a dataless SEED file, can also be used.

The Gempa Station Management Portal, :cite:t:`smp`,
is another important source of station metadata.
If you would like to create your own inventory you may use this online tool.
Before doing so, you will need to create an account on SMP.

,

The FDSN web services :cite:p:`fdsn` are the standard adopted by the FDSN and have been
deployed at almost every data centre.
One of them is called  *fdsnws-station* and
is the service to contact to get all information related to stations, sensors,
responses, etc.

 are the standard adopted by the FDSN and have been
One of them is called  

 and

To get data from the *fdsnws-station* web service you can use any web client (browser or command
line). For instance, the *wget* command. The file you will receive will be in
StationXML format.

 web service you can use any web client (browser or command
line). For instance, the 

 command. The file you will receive will be in

$ wget "http://geofon.gfz-potsdam.de/fdsnws/station/1/query?net=GE&level=response" -O ge.xml

WebDC3 is a graphical interface which allows you not only to send requests to
FDSN webservice servers, but also to explore available stations
and query event catalogs
from different data centres among other possibilities.

You can find detailed information about WebDC3 in the on-line documentation at
:cite:t:`webdc3-documentation`.

Click on "Explore stations" and move the slider to select only the current year
and only "Public permanent nets" on the Network type list.
Select the GE network, "All Stations", BH channels, and click "Search".

Click on “Explore stations” and move the slider to select only the current year
and only “Public permanent nets” on the Network type list.
Select the GE network, “All Stations”, BH channels, and click “Search”.

About 80 stations should appear on the map, and on the list below it.

.. figure:: media/geofon_webdc_stations.png

   Stations of the GE network shown in WebDC, ready for a metadata request.

Stations of the GE network shown in WebDC, ready for a metadata request.

Click on "Absolute Mode" for the "Time Window Selection" and select time
window from some time ago to the present.

Click on “Absolute Mode” for the “Time Window Selection” and select time

In the "Request type" section, click on "Metadata (StationXML)".
Set "Metadata level" to "Response".
**Response-level inventory is essential for SeisComP configuration**.

In the “Request type” section, click on “Metadata (StationXML)”.
Set “Metadata level” to “Response”.

**Response-level inventory is essential for SeisComP configuration**

Response-level inventory is essential for SeisComP configuration

For metadata requests, no token should be required.
(This is only used for requests for restricted waveform data.)

In the "FDSNWS Requests" block, click on "Save" to mkae your request
to the GEOFON fdsnws-station web service.

In the “FDSNWS Requests” block, click on “Save” to mkae your request

When it's ready, you will be prompted to save an XML file to your local computer.

When it’s ready, you will be prompted to save an XML file to your local computer.

It is easiest to use the import function of the :ref:`scconfig` GUI.
Alternatively, you can import from the command line:

From FDSN StationXML:

   $ fdsnxml2inv -f station.xml > etc/inventory/mynetwork.xml

From SeisComP XML with filtering:

   $ invextr -f --chans 'NE.STA.*' mynetwork.xml > etc/inventory/mynetwork.xml

$ invextr -f --chans 'NE.STA.*' mynetwork.xml > etc/inventory/mynetwork.xml

Either way, afterwards, inventory is in :file:`~/seiscomp/etc/inventory`.
It now needs to be loaded in to the SeisComP database.

Open :ref:`scconfig` from the terminal.
Click on the "Inventory" tab on the left side bar.

 from the terminal.
Click on the “Inventory” tab on the left side bar.

Select "Import" and at "Source:", browse to the file with the inventory
(e.g. ~/Downloads/inventory.xml).
For "format", select "fdsnxml".

.. figure:: media/geofon_waveforms_old_fig5.png

   The Inventory tab of :ref:`scconfig`, during import of FDSN Station XML.
   *TODO* Update this figure.

Select “Import” and at “Source:”, browse to the file with the inventory
For “format”, select “fdsnxml”.

The Inventory tab of :ref:`scconfig`, during import of FDSN Station XML.
*TODO* Update this figure.

Click on OK, wait a couple of seconds, check that the process was successful -
it should display
"Writing inventory to /home/sysop/seiscomp/etc/inventory/{PACKAGE NAME}.xml"
and "Program exited normally" at the bottom.
Close the modal window.

“Writing inventory to /home/sysop/seiscomp/etc/inventory/{PACKAGE NAME}.xml”
and “Program exited normally” at the bottom.

Sync or Sync keys.
Make sure :ref:`scmaster` and Spread are running.
SeisComP reads the inventory files in :file:`~/seiscomp/etc/inventory`
and loads them into the database.
You will see messages like "Sending notifiers: 2%" as this occurs.
Eventually you should see "Program exited normally" again.

You will see messages like “Sending notifiers: 2%” as this occurs.
Eventually you should see “Program exited normally” again.

Alternatively, go to "System" (second icon in the left column),
click on "Update configuration" and restart SeisComP (Stop and Start buttons).

Alternatively, go to “System” (second icon in the left column),
click on “Update configuration” and restart SeisComP (Stop and Start buttons).

As for individual stations (see the :ref:`processing tutoriual <tutorials_processing>`),
we will need to create bindings for every GE station to the
"global", "scautopick" and "seedlink" applications, as follows:

),
“global”, “scautopick” and “seedlink” applications, as follows:

Create a global profile named "BH" by clicking with the right button on "global"
in the top right panel. Double click on it and set BH as *detectStream* and
empty location code as *detecLocID* information.

.. figure:: media/geofon_waveforms_old_fig6.png

   The "Bindings" tab in :ref:`scconfig`.
   A profile for global, called "BH" is being created.

   *TODO* CX stations are visible too.

Create a global profile named “BH” by clicking with the right button on “global”
in the top right panel. Double click on it and set BH as 

The "Bindings" tab in :ref:`scconfig`.
A profile for global, called "BH" is being created.

Create a *scautopick* profile named "default" (no changes necessary).

Create a *seedlink* profile named "geofon". Double click on the profile.
Add a chain source with the green plus button on the left
(no other changes are necessary for data from GEOFON's server,
as it is the default).

 profile named “geofon”. Double click on the profile.
(no other changes are necessary for data from GEOFON’s server,

Drag and drop all profiles from the right side to the network icon on the
left side (you may do that also at the station level).

Press Ctrl+S to save the configuration.
This writes configuration files in :file:`~/seiscomp/etc/key`.

This writes configuration files in 

A few GEOFON stations (including KBS, LVC, SUMG) are distributed
with a non-blank location code, typically either "00" or "10".
Configuring these requires additional work.
You can create a profile setting :confval:`detecLocID` to "10",
called "10BHZ", and apply this to the appropriate stations.
Repeat this for stations where location code "00" is desired (e.g. SFJD).

with a non-blank location code, typically either “00” or “10”.
You can create a profile setting 

 to “10”,
called “10BHZ”, and apply this to the appropriate stations.
Repeat this for stations where location code “00” is desired (e.g. SFJD).

The SeisComP database must be updated with the inventory and bindings.
SeisComP's modules then require restarting to load the updated information.

SeisComP’s modules then require restarting to load the updated information.

Go to the System tab and press ESC (the Escape key, to de-select all modules).

#. Click on "Update configuration", at the right of the window.
   (**Not** "Update", - that just refreshes :ref:`scconfig`'s
   display of what is running!)
#. Press *Start* to start acquiring data from the already configured stations.

Click on "Update configuration", at the right of the window.
(**Not** "Update", - that just refreshes :ref:`scconfig`'s
display of what is running!)

Press *Start* to start acquiring data from the already configured stations.

Alternatively, on the command line

   $ seiscomp restart

To confirm that you have waveform data for the station locally,
run :ref:`slinktool`.

   $ slinktool -Q

run 

If you see colored triangles and traces incoming it means that
you have configured your system properly.
With this last step the configuration of these stations is considered to be finished.

At this point,
you can follow the same procedure for other networks/stations, provided you

Know the location of a Seedlink server for, and have access to, the waveforms.

The WebDC3 service is available at http://eida.gfz-potsdam.de.
See also
M. Bianchi, *et al.* (2015): WebDC3 Web Interface. GFZ Data Services.
doi:`10.5880/GFZ.2.4/2016.001 <http://dx.doi.org/10.5880/GFZ.2.4/2016.001>`_

See also

For instance that of the GEOFON Program, at
https://geofon.gfz-potsdam.de/waveform/archive/network.php?ncode=GE.

Hyperlink target "tutorials-geofon-waveforms" is not referenced.

Improved understanding of ways to solve issues when operating SeisComP

Inevitably you will encounter difficulties using SeisComP.
This tutorial reviews a few ways to diagnose your problems and
get help to resolve them:

Detailed :ref:`HTML documentation <sec_tutorial_help_documentation>`

Most modules have HTML documentation. When installed, it can be found in :ref:`scconfig`
under *Docs*. The HTML documentation can also be reached from the *Help*  menu of all GUIs.
It contains the description of configuration and command-line parameters along with
an overview with many detailed information.

Most modules have HTML documentation. When installed, it can be found in 

  menu of all GUIs.

.. figure:: media/gui_help.png

   :ref:`scmv` with access to the HTML documentation.

The description of most configuration parameters is also available from
within :ref:`scconfig`.
Look under *Modules*, and choose the relevant module.
For each parameter, the first few lines of description are shown;
hovering over these reveals the full text.

within 

, and choose the relevant module.

The HTML documentation is built regularly and available online, e.g.
`gempa's documentation <https://docs.gempa.de>`_.

In addition to the HTML documentation, many SeisComP commands have manual
pages which can be read on the command line:

The command-line option *-h* can be used with almost all modules. No matter how many
other command-line parameters were given, *-h* will stop the module and print
the help on the command-line.

 can be used with almost all modules. No matter how many
other command-line parameters were given, 

The :ref:`scconfig` GUI tool can be conveniently used to adjust the :term:`module`
and :term:`bindings <binding>` configuration. It also displays help on each individual
configuration parameter for every module. Read the :ref:`concepts
section on configuration <concepts_configuration>` for a comprehensive overview.

 configuration. It also displays help on each individual
configuration parameter for every module. Read the 

:ref:`concepts
section on configuration <concepts_configuration>`

.. figure:: media/scconfig-tooltips.png
  :alt: scconfig: tool tips

  Tool tips provide information on parameters.

.. figure:: media/scconfig-evaluation.png
  :alt: scconfig: parameter evaluation

  scconfig evaluates the syntax of input values.

Command-line parameters provide additional flexibility when executing modules.
To learn about them read the :ref:`sec_tutorial_help_documentation` or execute

To learn about them read the 

.. figure:: media/help_forum.png

   The :cite:t:`seiscomp-forum`.

The :cite:t:`seiscomp-forum` is the place to discuss |scname|.
Announcements about updates, training courses and more are posted
here by the developers, and users can post questions or discuss
new developments.
Anyone can browse the forum, while registration is required to post there.

.

If you have specific technical problems, it helps to have tried
some of the ideas below.
Please include version information (the '-V' option described below)
if you report a problem.

Please include version information (the ‘-V’ option described below)

Most SeisComP applications use a standard logging approach.
By default, they log to files in your :file:`~/.seiscomp/log` directory,
such as :file:`scamp.log`.
Further options for logging are described in
:ref:`concepts_configuration`.

By default, they log to files in your 

You can control how often these are rotated
(old log files are closed, and moved to a new file name, such as scamp.log.1, e.g. daily).
Alternatively you can use the system-wide logging facility `syslog`
and send logs to /var/log or another "standard" place.

Alternatively you can use the system-wide logging facility 

There are four levels of severity of SeisComP log messages,
and applications can be configured to show only those which
are more severe than a given threshold.

Default is 2.
Setting `logging.level = 4` results in the most messages.

For other modules such as :ref:`seedlink`, the log files are written to
:file:`seiscomp/var/log/`

Most SeisComP applications support two important command line options:

Use `--console` to send output to the terminal instead of the usual
log location.

 to send output to the terminal instead of the usual

`-v` for increased verbosity, or use `--verbosity=` *n* where *n*
is one of the four severity levels above.

`--debug` sets logging.level (see above) to 4 (DEBUG),
and sends logging output to the console (terminal) instead of the usual
(This is just an easier way of specifying `--verbosity=4 --console=1`.)
For example:

   $ ~/seiscomp/bin/seiscomp exec scmag --debug
   11:47:50 [debug] Adding plugin path: .
   11:47:50 [debug] Adding plugin path: /home/user/.seiscomp/plugins
   11:47:50 [debug] Adding plugin path: /home/user/seiscomp/lib/plugins
   11:47:50 [debug] Adding plugin path: /home/user/seiscomp/lib
   11:47:50 [debug] Adding plugin path: /home/user/seiscomp/share/plugins
   11:47:50 [debug] Adding plugin path: /home/user/seiscomp/share/plugins/scmag
   11:47:50 [debug] Trying to open plugin at /home/user/seiscomp/share/plugins/dbmysql.so
   11:47:50 [info] Plugin dbmysql registered
   11:47:50 [info]
   Plugins:
   --------
    [1]
     description: MySQL database driver
          author: GFZ Potsdam <seiscomp-devel@gfz-potsdam.de>
         version: 0.9.2
             API: 12.1.0

   11:47:50 [info] Connect to messaging
   11:47:50 [debug] Trying to connect to scmag@localhost with primary group = MAGNITUDE
   11:47:50 [info] Connecting to server: localhost
   11:47:50 [info] Connected to message server: localhost
   11:47:50 [info] Joining MASTER_GROUP group
   11:47:50 [info] Sending connect message to server: localhost
   11:47:51 [info] Server version is 'Jakarta 2018.327.p15'
   11:47:51 [info] Outgoing messages are encoded to match schema version 0.11
   11:47:51 [info] user "scmag" connected successfully to localhost

The above reveals that :program:`scmag` was able to load, and connect to the
messaging system.
Note that the *verbosity* of each message ("info", "debug", etc) is also
shown.
However a moment later we see:

   11:47:51 [info] Connect to database
   11:47:51 [debug] skipping unknown network message
   11:47:56 [error] Timeout while waiting for database provide message
   11:47:56 [debug] Leaving ::done
   11:47:56 [info] Shutting down MagTool
   - database accesses while runtime: 0

This suggests that :ref:`scmaster` was not running to provide a
connection to the database.
To resolve this, you could next check that :ref:`scmaster` is
running as expected.

 sets logging.level (see above) to 4 (DEBUG),
(This is just an easier way of specifying 

$ ~/seiscomp/bin/seiscomp exec scmag --debug
11:47:50 [debug] Adding plugin path: .
11:47:50 [debug] Adding plugin path: /home/user/.seiscomp/plugins
11:47:50 [debug] Adding plugin path: /home/user/seiscomp/lib/plugins
11:47:50 [debug] Adding plugin path: /home/user/seiscomp/lib
11:47:50 [debug] Adding plugin path: /home/user/seiscomp/share/plugins
11:47:50 [debug] Adding plugin path: /home/user/seiscomp/share/plugins/scmag
11:47:50 [debug] Trying to open plugin at /home/user/seiscomp/share/plugins/dbmysql.so
11:47:50 [info] Plugin dbmysql registered
11:47:50 [info]
Plugins:
--------
 [1]
  description: MySQL database driver
       author: GFZ Potsdam <seiscomp-devel@gfz-potsdam.de>
      version: 0.9.2
          API: 12.1.0

11:47:50 [info] Connect to messaging
11:47:50 [debug] Trying to connect to scmag@localhost with primary group = MAGNITUDE
11:47:50 [info] Connecting to server: localhost
11:47:50 [info] Connected to message server: localhost
11:47:50 [info] Joining MASTER_GROUP group
11:47:50 [info] Sending connect message to server: localhost
11:47:51 [info] Server version is 'Jakarta 2018.327.p15'
11:47:51 [info] Outgoing messages are encoded to match schema version 0.11
11:47:51 [info] user "scmag" connected successfully to localhost

shown.

 was able to load, and connect to the
Note that the 

 of each message (“info”, “debug”, etc) is also
shown.

11:47:51 [info] Connect to database
11:47:51 [debug] skipping unknown network message
11:47:56 [error] Timeout while waiting for database provide message
11:47:56 [debug] Leaving ::done
11:47:56 [info] Shutting down MagTool
- database accesses while runtime: 0

 was not running to provide a
To resolve this, you could next check that 

Instead of `--debug` in the example above, you could run

   $ ~/seiscomp/bin/seiscomp exec scmag -vvvv

The output is the same, but it is sent to your normal logging file,
typically `~/.seiscomp/log/scmag.log`.

typically 

In :ref:`scconfig`, logging can be set globally.
Go to the Modules tab, then System > global (see "logging")
or per module.

, logging can be set globally.
Go to the Modules tab, then System > global (see “logging”)

e.g. set "logging.level = 3" in $SEISCOMP_ROOT/etc/scamp.log
to set level to *INFO* only for :ref:`scamp`.

e.g. set “logging.level = 3” in $SEISCOMP_ROOT/etc/scamp.log
to set level to 

You should also be aware of the version of SeisComP that you are running.
The '-V' or '--version' option provides this for many SeisComP modules.

The ‘-V’ or ‘–version’ option provides this for many SeisComP modules.

$ ~/seiscomp3/bin/seiscomp exec scmag -V
scmag: Jakarta 2018.327.p15
API version: 12.1.0
GIT HEAD:
Compiler: c++ (Ubuntu 7.3.0-16ubuntu3) 7.3.0
Build system: Linux 4.15.0-20-generic
OS: Ubuntu 18.04 LTS / Linux

Professional commercial support to SeisComP users is available from
:cite:t:`gempa`.

If you find a solution, don't forget to share it at the :cite:t:`seiscomp-forum`.

Hyperlink target "sec-tutorial-help-documentation" is not referenced.

Hyperlink target "sec-tutorial-help-commandline" is not referenced.

Hyperlink target "sec-tutorial-help-config-params" is not referenced.

Hyperlink target "sec-tutorial-help-cmdline-params" is not referenced.

Hyperlink target "sec-tutorial-help-debugging" is not referenced.

Hyperlink target "sec-tutorial-help-commercial" is not referenced.

Create new magnitude types as aliases from other magnitudes and amplitudes.

* Read the :ref:`concepts section on magnitudes <concepts_magnitudes>`.
* Real-time data for the station must be available locally.
  See :ref:`tutorials_waveforms` or :ref:`tutorials_geofon_waveforms`.
* Inventory must be loaded locally.

Read the :ref:`concepts section on magnitudes <concepts_magnitudes>`.

Real-time data for the station must be available locally.
See :ref:`tutorials_waveforms` or :ref:`tutorials_geofon_waveforms`.

* Regionalized magnitudes,
* New magnitude types as aliases.
* Moment magnitudes

By regionalization, magnitudes can be computed with region-dependent properties.
The procedure to set up magnitude regionalization is:

Create one file which contains the polygons surrounding the regions within
which magnitude parameters shall apply. The polygon files are provided in
:ref:`BNA <sec-gui_layers-vector-format-bna>` or
:ref:`GeoJSON format <sec-gui_layers-vector-format-geojson>` and located as
set out in the :ref:`documentation of map layers <sec-gui_layers>`. The file
can be created from any |scname| GUI application providing maps, e.g.,
:ref:`scmv`.

For the desired magnitude type create a magnitude-type profile in global
module configuration. The name of the profile matches the name of the
magnitude, e.g., *MLc* for the :ref:`MLc magnitude <global_mlc>`.

magnitude, e.g., 

Configure the :confval:`magnitudes.MLc.regionFile` parameter with the full
path and name of the polygon file created above.

 parameter with the full

Within the magnitude-type profile create one or more magnitude-region
profile(s) for defining the regionalized parameters applied to the region(s).
The name of a profile corresponds to the name of the polygon contained in the
polygon file to which the parameters shall apply. Use *world* for all regions
not covered by any polygon.

polygon file to which the parameters shall apply. Use 

Configure the regionalized magnitude parameters of the magnitude-region
profile. Activate the *enable* parameter if you wish to apply this profile.

profile. Activate the 

Restart the data processing:

   seiscomp restart

or execute a GUI module.

* Parameters which can be configured along with regionalization assume
  defaults from global binding parameters but override global bindings
  parameters when configured.
* Once regionalization is active, magnitudes for events outside the
  defined region(s) will not be computed. For considering such events add
  another magnitude-region profile with the name "*world*".
  Magnitudes for events outside any other magnitude-region profile will then
  be computed according to this profile.

Parameters which can be configured along with regionalization assume
defaults from global binding parameters but override global bindings
parameters when configured.

Once regionalization is active, magnitudes for events outside the
defined region(s) will not be computed. For considering such events add
another magnitude-region profile with the name "*world*".
Magnitudes for events outside any other magnitude-region profile will then
be computed according to this profile.

another magnitude-region profile with the name “

”.

:ref:`Magnitude station corrections <concepts-magnitudes-correction>` can also
be applied in case of regionalization. Simply add the names of the
magnitude-region profile along with the correction parameter to the original
parameter in global module configuration, :file:`global.cfg`, for the respective
magnitude type and station. Use comma separation for multiple regions and colon
for separating the region name from the value.

:ref:`Magnitude station corrections <concepts-magnitudes-correction>`

 can also
parameter in global module configuration, 

, for the respective

module.trunk.GE.UGM.magnitudes.MLv.offset = 0.1, europe:0.2, asia:-0.1

by directly editing the configuration file, e.g.,

Create a magnitude alias in :file:`global.cfg` by configuring
:confval:`magnitudes.aliases`. Example:

   magnitudes.aliases = MLc1:MLc:MLc

Configure the alias magnitudes in either way:

* Write bindings parameters to global module configuration or
* Set up :ref:`regionalization <tutorials_magnitude-region>`:

**Binding parameters in global module configuration:**

#. Read the relevant parameter names of the original magnitude from global
   binding, e.g., in :ref:`scconfig`. The names must include the full
   hierarchy including all sections. Example:

   .. code-block:: properties

      magnitudes.MLc01.parametric.c1

#. Open the module configuration file, e.g.,
   :file:`seiscomp/etc/global.cfg` in a text editor.

#. Prepend *module.trunk.global.* to the parameter name and add it along with
   its value to the configuration file. Example:

      module.trunk.global.magnitudes.MLc01.parametric.c1 = 0.7

#. Add the new magnitude name to the configuration of all relevant modules,
   e.g., :ref:`scamp`, :ref:`scmag`, :ref:`scevent`, :ref:`scolv`.

.. note::

   The parameters starting with *module.trunk.* are not available for
   configuration in :ref:`scconfig`.

   Binding parameters configured in global module configuration should only
   be considered exceptionally. These parameters will

   * Override the corresponding parameters configured by regionalization
     using the region *world*.
   * Not be written to the database and cannot be accessed by SeisComP
     modules running on other computers.

**Regionalization:**

* Consider the tutorial on
  :ref:`magnitude regionalization <tutorials_magnitude-region>` above.
* For the name of the new magnitude-type profile now use the alias name.

  .. hint::

     When adding the magnitude-region profile in
     :ref:`scconfig`, scconfig does not know about the referenced original
     magnitude. Therefore, not all possible configuration parameters may be
     listed depending on the magnitude, e.g. for MLc. For getting the full
     list, first create and configure a magnitude-region profile for the
     referenced magnitude.

     #. Close scconfig
     #. Open the configuration file :file:`global.cfg`
     #. Rename the name of the referenced magnitude in the parameters to the
        name of the alias.

Read the relevant parameter names of the original magnitude from global
binding, e.g., in :ref:`scconfig`. The names must include the full
hierarchy including all sections. Example:

   magnitudes.MLc01.parametric.c1

binding, e.g., in 

. The names must include the full

Open the module configuration file, e.g.,
:file:`seiscomp/etc/global.cfg` in a text editor.

Prepend *module.trunk.global.* to the parameter name and add it along with
its value to the configuration file. Example:

   module.trunk.global.magnitudes.MLc01.parametric.c1 = 0.7

 to the parameter name and add it along with

Add the new magnitude name to the configuration of all relevant modules,
e.g., :ref:`scamp`, :ref:`scmag`, :ref:`scevent`, :ref:`scolv`.

e.g., 

The parameters starting with *module.trunk.* are not available for
configuration in :ref:`scconfig`.

Binding parameters configured in global module configuration should only
be considered exceptionally. These parameters will

* Override the corresponding parameters configured by regionalization
  using the region *world*.
* Not be written to the database and cannot be accessed by SeisComP
  modules running on other computers.

Override the corresponding parameters configured by regionalization
using the region *world*.

using the region 

Not be written to the database and cannot be accessed by SeisComP
modules running on other computers.

Consider the tutorial on
:ref:`magnitude regionalization <tutorials_magnitude-region>` above.

For the name of the new magnitude-type profile now use the alias name.

.. hint::

   When adding the magnitude-region profile in
   :ref:`scconfig`, scconfig does not know about the referenced original
   magnitude. Therefore, not all possible configuration parameters may be
   listed depending on the magnitude, e.g. for MLc. For getting the full
   list, first create and configure a magnitude-region profile for the
   referenced magnitude.

   #. Close scconfig
   #. Open the configuration file :file:`global.cfg`
   #. Rename the name of the referenced magnitude in the parameters to the
      name of the alias.

When adding the magnitude-region profile in
:ref:`scconfig`, scconfig does not know about the referenced original
magnitude. Therefore, not all possible configuration parameters may be
listed depending on the magnitude, e.g. for MLc. For getting the full
list, first create and configure a magnitude-region profile for the
referenced magnitude.

#. Close scconfig
#. Open the configuration file :file:`global.cfg`
#. Rename the name of the referenced magnitude in the parameters to the
   name of the alias.

, scconfig does not know about the referenced original

Rename the name of the referenced magnitude in the parameters to the
name of the alias.

All magnitudes, Mx, can be mapped to a moment magnitude, Mw(Mx).
The configuration procedure is:

Set up a magnitude-type profile for the original magnitude type in global
module configuration. Use :ref:`scconfig` for creating the profile.

module configuration. Use 

Configure the parameter *MwMapping*, which will become available along with
the new profile, e.g., :confval:`magnitudes.MLc.MwMapping`. Alternatively,
add the parameter to :file:`seiscomp/etc/global.cfg`. The parameter is
configured as a list of sample points of a piecewise linear function mapping
from the original magnitude, Mx, to Mw(Mx).
Example for Mw(MLc) based on MLc:

   magnitudes.MLc.MwMapping = MLc_0:Mw(MLc)_0,MLc_1:Mw(MLc)_1,...,MLc_N:Mw(MLc)_N

Any magnitude value outside the configured range is ignored.

   Do not map the magnitudes :term:`mB <magnitude, broadband body-wave (mB)>`
   and :term:`Mwp <magnitude, broadband P-wave moment (Mwp)>` to Mw since
   this is hardcoded already and done automatically by :ref:`scmag`.

, which will become available along with
the new profile, e.g., 

. The parameter is

magnitudes.MLc.MwMapping = MLc_0:Mw(MLc)_0,MLc_1:Mw(MLc)_1,...,MLc_N:Mw(MLc)_N

Do not map the magnitudes :term:`mB <magnitude, broadband body-wave (mB)>`
and :term:`Mwp <magnitude, broadband P-wave moment (Mwp)>` to Mw since
this is hardcoded already and done automatically by :ref:`scmag`.

 to Mw since
this is hardcoded already and done automatically by 

The new moment magnitudes will be available along with the original magnitudes
and can be viewed in :ref:`scolv`or :ref:`scesv` and considered by :ref:`scmag`
or :ref:`scevent`.

and can be viewed in 

In order to avoid that :ref:`summary magnitudes <concepts-magnitudes-summary>`
are computed from original magnitudes and mapped Mw together and biased to both,
the original magnitudes can be blocklisted in :ref:`scmag`
(:confval:`summaryMagnitude.blacklist`).

the original magnitudes can be blocklisted in 

Regionalization:

#. Start :ref:`scolv` with the option :option:`--debug` and load an event of
   interest

      scolv --debug

#. Relocate the event for generating a new origin.
#. Compute magnitudes selecting the magnitude of interest.
#. Inspect the computed magnitudes in the
   :ref:`Magnitude tab of scolv <scolv-sec-magnitude-tab>` or read the
   debug output listing the considered magnitudes and stations along with
   the regionalized parameters.

Start :ref:`scolv` with the option :option:`--debug` and load an event of
interest

interest

Inspect the computed magnitudes in the
:ref:`Magnitude tab of scolv <scolv-sec-magnitude-tab>` or read the
debug output listing the considered magnitudes and stations along with
the regionalized parameters.

 or read the

Magnitude aliases:

   interest

#. Compute magnitudes selecting the magnitude of interest including the new
   alias.
   debug output listing the considered magnitude names and aliases along with
   the considered parameters and their values. Example where MLc1 is derived
   from MLc with a modified maximum depth:

      ...
      13:30:46 [debug] GE.UGM: MLc1: effective correction (no locale) = 1.00:0.00
      13:30:46 [debug] Parameters for magnitude MLc1
      13:30:46 [debug]   + maximum depth: 50.000 km
      13:30:46 [debug]   + distance mode: hypocentral
      13:30:46 [debug]   + minimum distance: -1.000 km
      13:30:46 [debug]   + maximum distance: 889.561 km
      ...

Compute magnitudes selecting the magnitude of interest including the new
alias.

debug output listing the considered magnitude names and aliases along with
the considered parameters and their values. Example where MLc1 is derived
from MLc with a modified maximum depth:

   ...
   13:30:46 [debug] GE.UGM: MLc1: effective correction (no locale) = 1.00:0.00
   13:30:46 [debug] Parameters for magnitude MLc1
   13:30:46 [debug]   + maximum depth: 50.000 km
   13:30:46 [debug]   + distance mode: hypocentral
   13:30:46 [debug]   + minimum distance: -1.000 km
   13:30:46 [debug]   + maximum distance: 889.561 km
   ...

 or read the

...
13:30:46 [debug] GE.UGM: MLc1: effective correction (no locale) = 1.00:0.00
13:30:46 [debug] Parameters for magnitude MLc1
13:30:46 [debug]   + maximum depth: 50.000 km
13:30:46 [debug]   + distance mode: hypocentral
13:30:46 [debug]   + minimum distance: -1.000 km
13:30:46 [debug]   + maximum distance: 889.561 km
...

Hyperlink target "tutorials-magnitude-region-aliases" is not referenced.

Hyperlink target "tutorials-magnitude-region" is not referenced.

Hyperlink target "tutorials-magnitude-aliases" is not referenced.

Hyperlink target "tutorials-mags-regionalize-testing" is not referenced.

:ref:`Compiling the source code <tutorials_postinstall_compile>`,

:ref:`Compiling the source code <tutorials_postinstall_compile>`

:ref:`Installing pre-compiled release packages <tutorials_postinstall_package>`
including binaries, maps and documentation.

First you need to get your Linux system ready.
The following documentation refers to Ubuntu 20.04,
but the steps for other Ubuntu versions are similar.

Add a new user. Throughout our documentation, this user is called `sysop`.

   $ sudo adduser sysop
   $ sudo addgroup admin
   $ sudo usermod -a -G admin,adm,audio sysop

.. note:

   Adding a new user is not mandatory. You can install under an existing user
   directory. Creating a new user is recommended as it allows an easy cleanup
   of the system later simply by removing the new user if needed.

Add a new user. Throughout our documentation, this user is called 

$ sudo adduser sysop
$ sudo addgroup admin
$ sudo usermod -a -G admin,adm,audio sysop

note:

Adding a new user is not mandatory. You can install under an existing user
directory. Creating a new user is recommended as it allows an easy cleanup
of the system later simply by removing the new user if needed.

Check the size and the architecture. This is espcially required when installing
:ref:`pre-compiled packages<tutorials_postinstall_package>`: ::

  $ df -h
  $ cat /etc/issue
  $ uname -m

Compare the available disk space with the requirements given in
the :ref:`installation` section.
If 'uname' shows 'i686', you have a 32-bit system;
if you see 'x86_64', you have 64-bit.

the 

 section.
If ‘uname’ shows ‘i686’, you have a 32-bit system;
if you see ‘x86_64’, you have 64-bit.

To compile SeisComP from the source code follow the
:ref:`instructions in the development section <build>`. You may later download and add
maps as described below in the :ref:`package section <tutorials_postinstall_package>`.

. You may later download and add
maps as described below in the 

You may download and installed pre-compile SeisComP binary package, maps and documentation.

Download the appropriate |scname| binary package taking into
account your Linux distribution and the architecture.
Get the package from the download site of |scname| :cite:p:`seiscomp` or from
:cite:t:`gempa-download`. Packages are available for Ubuntu and other Linux
flavors such as RHEL/CentOS and Debian.

 binary package taking into
Get the package from the download site of 

. Packages are available for Ubuntu and other Linux

When downloading the |scname| binary packages you should also download

* maps for |scname|

     wget "https://www.seiscomp.de/downloader/seiscomp-maps.tar.gz"

* the documentation package. Make sure, the documentation matches your
  SeisComP version.

  .. note::

     The |scname| packages received from gempa GmbH contain the documentation
     for the respective version and no separate download is required.

maps for |scname|

   wget "https://www.seiscomp.de/downloader/seiscomp-maps.tar.gz"

the documentation package. Make sure, the documentation matches your
SeisComP version.

.. note::

   The |scname| packages received from gempa GmbH contain the documentation
   for the respective version and no separate download is required.

The |scname| packages received from gempa GmbH contain the documentation
for the respective version and no separate download is required.

 packages received from gempa GmbH contain the documentation

Untar the :file:`seiscomp*` files (binary package, maps and documentation)
you will find in your home or downloads directory. For SeisComP in version
4.0.0 this is:

   $ cd
   $ tar xzf seiscomp-4.0.0-ubuntu20.04-x86_64.tar.gz
   $ tar xzf seiscomp-maps.tar.gz
   $ tar xzf seiscomp-4.0.0-doc.tar.gz
   $ ls seiscomp
   bin  etc  include  lib  man  sbin  share

 files (binary package, maps and documentation)

$ cd
$ tar xzf seiscomp-4.0.0-ubuntu20.04-x86_64.tar.gz
$ tar xzf seiscomp-maps.tar.gz
$ tar xzf seiscomp-4.0.0-doc.tar.gz
$ ls seiscomp
bin  etc  include  lib  man  sbin  share

Install all dependencies needed and prepare the environment.

* This should be automatic for most distributions.
  Simply run the install script

     $ ~/seiscomp/bin/seiscomp install-deps base
     Distribution: Ubuntu 20.04

  This will generally prompt for your user's password to allow `sudo` to
  install packages on your system.

* On Ubuntu 18, Python 3 is installed, but not Python.
  Get it first

     $ sudo apt-get install python libqtgui4

* On Ubuntu 20 and newer, you may need libpython3-dev before you can use
  "install-deps"

     $ sudo apt-get install libpython3-dev

* Alternatively, for Mint 18 (Ubuntu 16.04):

  .. code-block:: bash

     $ sudo apt-get update
     $ sudo apt-get install libxml2 libboost-filesystem1.58.0
     libboost-iostreams1.58.0 libboost-thread1.58.0 libboost-program-options1.58.0
     libboost-regex1.58.0 libboost-signals1.58.0 libboost-system1.58.0 libssl1.0.0
     libncurses5 libmysqlclient20 libpq5 libpython2.7 python-numpy mysql-server
     mysql-client libqtgui4 libqt4-xml libqt4-opengl libqt4-sql-sqlite

This should be automatic for most distributions.
Simply run the install script

   $ ~/seiscomp/bin/seiscomp install-deps base
   Distribution: Ubuntu 20.04

This will generally prompt for your user's password to allow `sudo` to
install packages on your system.

$ ~/seiscomp/bin/seiscomp install-deps base
Distribution: Ubuntu 20.04

On Ubuntu 18, Python 3 is installed, but not Python.
Get it first

   $ sudo apt-get install python libqtgui4

On Ubuntu 20 and newer, you may need libpython3-dev before you can use
"install-deps"

   $ sudo apt-get install libpython3-dev

“install-deps”

Alternatively, for Mint 18 (Ubuntu 16.04):

.. code-block:: bash

   $ sudo apt-get update
   $ sudo apt-get install libxml2 libboost-filesystem1.58.0
   libboost-iostreams1.58.0 libboost-thread1.58.0 libboost-program-options1.58.0
   libboost-regex1.58.0 libboost-signals1.58.0 libboost-system1.58.0 libssl1.0.0
   libncurses5 libmysqlclient20 libpq5 libpython2.7 python-numpy mysql-server
   mysql-client libqtgui4 libqt4-xml libqt4-opengl libqt4-sql-sqlite

$ sudo apt-get update
$ sudo apt-get install libxml2 libboost-filesystem1.58.0
libboost-iostreams1.58.0 libboost-thread1.58.0 libboost-program-options1.58.0
libboost-regex1.58.0 libboost-signals1.58.0 libboost-system1.58.0 libssl1.0.0
libncurses5 libmysqlclient20 libpq5 libpython2.7 python-numpy mysql-server
mysql-client libqtgui4 libqt4-xml libqt4-opengl libqt4-sql-sqlite

Database. For a MariaDB installation:

   $ seiscomp install-deps mariadb-server

or a MySQL installation:

   $ seiscomp install-deps mysql-server

Also, for better performance with a MariaDB/MySQL database,
adjust the memory pool size and the restart MariaDB/MySQL server, as described
in the :ref:`database_configuration` section.

For PostgreSQL, also see the detailed :ref:`installation` instructions.

   For Ubuntu 18.04 and newer, take care with MariaDB/MySQL installation.
   Before the next step, you must set a root password *for MariaDB/MySQL*
   (not the Linux root password!).

   MariaDB:

      $ sudo mysql -e "SET old_passwords=0; ALTER USER root@localhost IDENTIFIED BY 'MyNewPassword'; FLUSH PRIVILEGES;"

   MySQL:

      $ sudo mysql -e "ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'MyNewPassword'; FLUSH PRIVILEGES;"

   Substitute *MyNewPassword* by your own password and remember it --
   you will need it in the next step.
   In case of problems, search the Internet, or the
   `SeisComP forum thread <https://forum.seiscomp.de/t/upgraded-to-ubuntu-18-04-and-i-broke-my-seiscomp3/1139>`_
   (for logged-in forum members).

in the 

For Ubuntu 18.04 and newer, take care with MariaDB/MySQL installation.
Before the next step, you must set a root password *for MariaDB/MySQL*
(not the Linux root password!).

MariaDB:

   $ sudo mysql -e "SET old_passwords=0; ALTER USER root@localhost IDENTIFIED BY 'MyNewPassword'; FLUSH PRIVILEGES;"

MySQL:

   $ sudo mysql -e "ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'MyNewPassword'; FLUSH PRIVILEGES;"

Substitute *MyNewPassword* by your own password and remember it --
you will need it in the next step.
In case of problems, search the Internet, or the
`SeisComP forum thread <https://forum.seiscomp.de/t/upgraded-to-ubuntu-18-04-and-i-broke-my-seiscomp3/1139>`_
(for logged-in forum members).

Before the next step, you must set a root password 

$ sudo mysql -e "SET old_passwords=0; ALTER USER root@localhost IDENTIFIED BY 'MyNewPassword'; FLUSH PRIVILEGES;"

$ sudo mysql -e "ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'MyNewPassword'; FLUSH PRIVILEGES;"

 by your own password and remember it –

Find a detailed description in section :ref:`getting-started` and short guide below.

You may set some system environment variables.
For bash users, print the environment variables and copy them to your
:file:`.bashrc`

   $ ~/seiscomp/bin/seiscomp print env
   export SEISCOMP_ROOT=/home/sysop/seiscomp
   export PATH=/home/sysop/seiscomp/bin:$PATH
   export LD_LIBRARY_PATH=/home/sysop/seiscomp/lib:$LD_LIBRARY_PATH
   export PYTHONPATH=/home/sysop/seiscomp/lib/python:$PYTHONPATH
   export MANPATH=/home/sysop/seiscomp/share/man:$MANPATH
   export LC_ALL=C
   source /home/sysop/seiscomp/share/shell-completion/seiscomp.bash

The path to your home directory will likely differ from `/home/sysop` as shown above.
Therefore, do not copy and paste what you see here but use for your own
system the output from the command

   ~/seiscomp/bin/seiscomp print env

Add the output from the command to your file :file:`~/.bashrc`

   $ vi ~/.bashrc

Then reload the content of :file:`~/.bashrc` in your current environment

   $ source ~/.bashrc

After this, you won't have to type `~/seiscomp/bin/seiscomp` as
the :ref:`seiscomp` command will be added to your shell's path.

.. hint::

   If, when you attempt to run a SeisComP command such as :ref:`scconfig` or
   :ref:`scolv`, you receive an error message like

      scconfig: command not found

   then the most likely explanation is that you have not set your SeisComP
   environment variables correctly.

   Run the `seiscomp` command with the full path to
   where you installed.
   The seven lines of output are not actually run by the 'seiscomp print env'
   command; you need to cut and paste them into your shell to run them.
   You can also add these to your :file:`~/.bashrc`, :file:`~/.profile`,
   or equivalent file with commands to be run every time you log in.

$ ~/seiscomp/bin/seiscomp print env
export SEISCOMP_ROOT=/home/sysop/seiscomp
export PATH=/home/sysop/seiscomp/bin:$PATH
export LD_LIBRARY_PATH=/home/sysop/seiscomp/lib:$LD_LIBRARY_PATH
export PYTHONPATH=/home/sysop/seiscomp/lib/python:$PYTHONPATH
export MANPATH=/home/sysop/seiscomp/share/man:$MANPATH
export LC_ALL=C
source /home/sysop/seiscomp/share/shell-completion/seiscomp.bash

 as shown above.

If, when you attempt to run a SeisComP command such as :ref:`scconfig` or
:ref:`scolv`, you receive an error message like

   scconfig: command not found

then the most likely explanation is that you have not set your SeisComP
environment variables correctly.

Run the `seiscomp` command with the full path to
where you installed.
The seven lines of output are not actually run by the 'seiscomp print env'
command; you need to cut and paste them into your shell to run them.
You can also add these to your :file:`~/.bashrc`, :file:`~/.profile`,
or equivalent file with commands to be run every time you log in.

 command with the full path to
The seven lines of output are not actually run by the ‘seiscomp print env’
You can also add these to your 

,

Run `seiscomp setup` and enter your preferred IDs and password. For the other
fields, you can always accept the default values.

   $ seiscomp setup

You should enter an appropriate short name (without spaces) for Agency ID and
Datacenter ID. These are used for Arclink and Seedlink, and in the information
describing data model objects such as origins and events.

 and enter your preferred IDs and password. For the other

The `seiscomp` command is a wrapper, which controls the SeisComP modules.
See :ref:`system-management`.
Run something by typing seiscomp followed by a command

   $ seiscomp help
   Available commands:
    install-deps
    setup
    shell
    enable
    disable
    print
    help

  Use 'help [command]' to get more help about a command

 command is a wrapper, which controls the SeisComP modules.
See 

 $ seiscomp help
 Available commands:
  install-deps
  setup
  shell
  enable
  disable
  print
  help

Use 'help [command]' to get more help about a command

Start :ref:`scmaster`.
As described in the :ref:`overview`, these are needed for
communication between the SeisComP database and the individual
SeisComP modules.

   $ seiscomp start scmaster
   starting scmaster

, these are needed for

Install all dependencies needed for the GUI

   $ seiscomp install-deps gui

Start the :ref:`scconfig` GUI

   $ seiscomp exec scconfig

Learn more about :ref:`scconfig` in this documentation.
You should see a screen/window like this.

.. figure:: media/postinstall_scconfig.png

   First view of :ref:`scconfig` configurator.

 in this documentation.

Run :ref:`scrttv`

   $ seiscomp exec scrttv

After seeing the SeisComP splash screen,
you'll likely get an error message "Could not read inventory (NULL)".
After a new installation, that's okay.
Click that box away, and you'll see a screen with
"Enabled", and "Disabled" tabs, and time along bottom axis as in the figure below.
To see stations and data you will later need to
:ref:`add inventory <tutorials_addstation>` and
:ref:`waveforms <tutorials_geofon_waveforms>` to your system.

.. figure:: media/postinstall_scrttv.png
   :width: 14.6cm

   First view of the :ref:`scconfig` configuration tool.

you’ll likely get an error message “Could not read inventory (NULL)”.
After a new installation, that’s okay.
Click that box away, and you’ll see a screen with
“Enabled”, and “Disabled” tabs, and time along bottom axis as in the figure below.

Hyperlink target "tutorials-postinstall-compile" is not referenced.

Hyperlink target "tutorials-postinstall-package" is not referenced.

You will enable processing by your existing local SeisComP system.

* The new station is available for visualization and general data processing.
* The new station is used for automatic real-time phase picking.

The new station is available for visualization and general data processing.

In SeisComP terminology, *bindings* are the connection between modules
and individual stations.
See the "Bindings" section of :ref:`concepts_configuration` for full details.

 are the connection between modules
See the “Bindings” section of 

You can create the necessary bindings for your new station
using :ref:`scconfig`.
Go to the "Bindings" tab on the left side bar of :ref:`scconfig`.

using 

You will need to add  "global" and "scautopick" bindings.

* Create a global profile named "BH" by clicking with the right button on "global"
  in the top right panel. Double click on it and set BH as *detectStream* and
  empty location code as *detecLocID* information.
  Adjust these as appropriate for your station.

* Create a *scautopick* profile named "default" (no changes necessary).

* Drag and drop all profiles from the right side to the network icon on the
  left side (you may do that also at the station level).

* Press :kbd:`Ctrl`+:kbd:`S` to save the configuration.
  This writes configuration files in :file:`~/seiscomp/etc/key`.

Adjust these as appropriate for your station.

Press :kbd:`Ctrl`+:kbd:`S` to save the configuration.

Alternatively, you can add the scautopick and global bindings
by editing the relevant top-level key file.
(For station CLL of the GR network, this would be :file:`etc/key/station_GR_CLL`.)
It would contain:

.. code::

    # Binding references
    global
    scautopick:default

in addition to any other bindings that might be defined for this station.

(For station CLL of the GR network, this would be 

* Station inventory must be available at least on channel level and the global
  bindings must match the inventory and the available waveforms.
* Global bindings are required for data visualization and general data
  processing.
* Enable :ref:`scautopick` for running it by default.
* Generated picks may be used by other modules, such as :ref:`scautoloc`
  which must be set up independently.
* The default parameters for :ref:`scautopick` have been optimized for
  monitoring earthquakes at teleseismic distances and the must be adjusted
  for other types.

Station inventory must be available at least on channel level and the global
bindings must match the inventory and the available waveforms.

Global bindings are required for data visualization and general data

Generated picks may be used by other modules, such as :ref:`scautoloc`
which must be set up independently.

The default parameters for :ref:`scautopick` have been optimized for
monitoring earthquakes at teleseismic distances and the must be adjusted
for other types.

 have been optimized for

If you have correctly configured the station for processing, then:

On restarting :program:`scautopick`, the station appears in the
:file:`scautopick.log` log
file in :file:`~/.seiscomp/log`::

  2020/03/01 18:01:00 [info/Autopick] Adding detection channel GR.CLL..BHZ

After some time, a nearby event will occur and phases recorded on this station
should be picked. If :ref:`scautoloc` was running at the time and
:confval:`autoloc.pickLogEnable` was activated, the pick should appear in the
latest :file:`autoloc-picklog` file in :file:`~/.seiscomp/log`:

   $ grep "CLL" .seiscomp/log/autoloc-picklog.2020-03-01
   2020-03-01 18:31:47.1 GR CLL    BHZ __   40.9    177.433  1.1 A 20200301.183147.13-AIC-GR.CLL..BHZ

2020/03/01 18:01:00 [info/Autopick] Adding detection channel GR.CLL..BHZ

should be picked. If 

$ grep "CLL" .seiscomp/log/autoloc-picklog.2020-03-01
2020-03-01 18:31:47.1 GR CLL    BHZ __   40.9    177.433  1.1 A 20200301.183147.13-AIC-GR.CLL..BHZ

The station should now also appear in the GUIs.
After reopening them,

* The station should now show up in :program:`scmv`
  (as a new triangle at the expected location on the map,
  which is not black if the station is active).

* In :program:`scrttv` a trace or at least the line for the configured stream
  should be visible.

* In :program:`scolv`, the new station is either already included
  in automatic locations, or can be added manually.

The station should now show up in :program:`scmv`
(as a new triangle at the expected location on the map,
which is not black if the station is active).

In :program:`scrttv` a trace or at least the line for the configured stream
should be visible.

 a trace or at least the line for the configured stream

In :program:`scolv`, the new station is either already included
in automatic locations, or can be added manually.

, the new station is either already included

In case of problems, check that :confval:`detecStream` and
:confval:`detecLocid` are set correctly.
They must match both what is in inventory and the waveforms provided
from the upstream server.

 are set correctly.

Enable FDSN web service by :ref:`fdsnws` to serve waveforms and inventory for
a configured station

The station meta data and waveforms are available from a local web server

By default, :ref:`fdsnws` will serve the three FDSN web services

The additional *availability* feature allows users to obtain information
on continuous data segments in the waveform archive.
This information is written to the
:ref:`database <concepts_database>` by :ref:`scardac`.
To active the availability feature set :confval:`serveAvailability` and
:confval:`dataAvailability.enable` to true.
The availability information can be retrieved using :ref:`scxmldump` or :ref:`fdsnws`.

 feature allows users to obtain information

Configure :ref:`fdsnws`:

* set the :ref:`RecordStream <concepts_RecordStream>` to point to archived data.
* configured and enable the desired services.

set the :ref:`RecordStream <concepts_RecordStream>` to point to archived data.

Enable and start fdsnws locally:

* in :ref:`scconfig`, go to the System tab.
  Click on the line for the "fdsnws" module, and press "Enable module(s)".
  Then restart SeisComP.

* or from the command line

     $ seiscomp enable fdsnws
     $ seiscomp start fdsnws

in :ref:`scconfig`, go to the System tab.
Click on the line for the "fdsnws" module, and press "Enable module(s)".
Then restart SeisComP.

, go to the System tab.
Click on the line for the “fdsnws” module, and press “Enable module(s)”.

or from the command line

   $ seiscomp enable fdsnws
   $ seiscomp start fdsnws

Test by :ref:`visiting the locally started fdsnws <tutorials_servefdsnws-visit>`.

:ref:`visiting the locally started fdsnws <tutorials_servefdsnws-visit>`

Logging information goes to :file:`~/.seiscomp/log/fdsnws.log` by default.
Information about requests handled goes to the file named in `accessLog`,
if you set this.

 by default.
Information about requests handled goes to the file named in 

To see the available configuration options, go to the Modules tab in
:ref:`scconfig`.
Under Utilities open "fdsnws" to reveal the options.
To disable fdsnws-event, for instance, unlock the "serveEvent" area
and uncheck this parameter.

.
Under Utilities open “fdsnws” to reveal the options.
To disable fdsnws-event, for instance, unlock the “serveEvent” area

You can limit the choice of stations shared to be less than what is in your
SeisComP :ref:`inventory <concepts_inventory>` using the `allowRestricted`,
`dataSelectFilter` and `stationFilter` options.

SeisComP 

Once :ref:`fdsnws` is running, you can visit the local web server
that it runs.
In your browser, visit http://localhost:8080/fdsnws/dataselect/1/

 is running, you can visit the local web server
In your browser, visit 

.. figure:: media/servefdsnws_dataselect.png

   Information screen shown by fdsnws-dataselect at
   http://localhost:8080/fdsnws/dataselect/1/

Information screen shown by fdsnws-dataselect at
http://localhost:8080/fdsnws/dataselect/1/

If you visit the URL http://localhost:8080/fdsnws/dataselect/1/version
you should receive a version number string - currently `1.1.0`.

To view all activated services visit http://localhost:8080/fdsnws/

The fdsnws-station service should give a list of networks configured
and served by the service, e.g. visiting
http://localhost:8080/fdsnws/station/1/query?level=network&format=text
produces

   #Network|Description|StartTime|EndTime|TotalStations
   GE|GEOFON Program, GFZ Potsdam, Germany|1993-01-01T00:00:00||84

Omitting the `format=text` argument in the query string of the above URL
results in the service returning a StationXML file.

produces

#Network|Description|StartTime|EndTime|TotalStations
GE|GEOFON Program, GFZ Potsdam, Germany|1993-01-01T00:00:00||84

 argument in the query string of the above URL

.. figure:: media/servefdsnws_stationxml.png

   Example of StationXML returned by the fdsnws-station service at

   http://localhost:8080/fdsnws/station/1/query?level=network

The `URL Builder at GEOFON <https://geofon.gfz-potsdam.de/waveform/builder.php>`_
lets you fill out a form to tailor your request.
The URL to use to make your request is displayed at the bottom of that page.

`URL Builder at GEOFON <https://geofon.gfz-potsdam.de/waveform/builder.php>`_

More example requests are at the
`FDSNWS description at GEOFON <https://geofon.gfz-potsdam.de/waveform/webservices.php>`_

The FDSN Web Services specification document :cite:p:`fdsn-specs` provides the
technical documentation and examples.

The station should now be visible when you query your local fdsnws instance.
In your browser, visit
http://localhost:8080/fdsnws/station/1/query?format=text
to see a list of all channels available from your fdsnws server.

Request waveform data like this:

http://localhost:8080/fdsnws/dataselect/1/query?start=2020-01-01T01:01:01&end=2020-01-01T02:00:00

Don't forget to adjust your start and end times to match the data
actually present in your archive.
The above example is just for the first hour of 2020.

Don’t forget to adjust your start and end times to match the data

Hyperlink target "tutorials-servefdsnws-visit" is not referenced.

Get the source code of the SeisComP documentation, e.g. from
:cite:t:`seiscomp-github`

Copy this tutorial file (:file:`doc/base/tutorials/template.rst`) to the tutorials directory
with a new name, :file:`doc/base/tutorials/{nn}_{something}.rst`.

Change the reference at the top (first line); it must be
*.. _tutorials_{something}*.

Change the title: start with a verb, describe what the student is
trying to do.

Set the tutorial task and a final confirmation action for the student
to verify check that it worked correctly.

Add the file name without the ending *.rst* to the table of contents in :file:`doc/base/tutorials.rst`
assigning a position for your new tutorial within the sequence of
existing tutorials.

Build the HTML documentation for viewing and :ref:`testing <tutorials_template_testing>`.

Optionally, provide your new tutorial to the public repository:

* Create a new git branch
* Push the new branch to GitHub
* Create a merge request to get your branch merged into the master branch

Create a merge request to get your branch merged into the master branch

If you've applied this template,

   ls doc/base/tutorials

will show your new tutorial.

Rebuild the documentation

   $ cd doc
   $ python3 build-doc.py

View the new files in `build-doc/base/html/tutorials` using a web browser, e.g. firefox:

   $ firefox build-doc/html/basetutorials.html

Hyperlink target "tutorials-template-testing" is not referenced.

Tutorial on :ref:`installation <tutorials_postinstall>` and SeisComP previously installed

Installing a new SeisComP :ref:`release version <tutorials_upgrade_versions>`
is typically simple and the step described in :ref:`tutorials_upgrade-normal`
can be applied. **More actions** are required when

Upgrading the major version of SeisComP as described in :ref:`tutorials_upgrade-normal`.

Upgrading :ref:`from SeisComP3 to SeisComP in version 4.0.0. or higher <tutorials_upgrade_v4>`.

:ref:`from SeisComP3 to SeisComP in version 4.0.0. or higher <tutorials_upgrade_v4>`

Upgrading :ref:`from SeisComP3 Jakarta-2018.327 or older to Jakarta-2020.330 or
SeisComP in version 4 or higher <tutorials_upgrade_seedlink>`.

:ref:`from SeisComP3 Jakarta-2018.327 or older to Jakarta-2020.330 or
SeisComP in version 4 or higher <tutorials_upgrade_seedlink>`

from SeisComP3 Jakarta-2018.327 or older to Jakarta-2020.330 or
SeisComP in version 4 or higher

SeisComP has :ref:`developed over time <history>`. The versions can be distinguished
by the name of the release:

**SeisComP since version 4.0.0** uses release version numbers such as *5.2.1*
where

* 5: major version with changes in API and database schema version, new features,
  bug fixed, optimizations,
* 2: minor version with new features, bug fixed, optimizations,
* 1: patch number with bug fixes, optimizations.

.. note ::

   When increasing the major version number, an upgrade of
   the database is required.

where

5: major version with changes in API and database schema version, new features,
bug fixed, optimizations,

When increasing the major version number, an upgrade of
the database is required.

**SeisComP3** uses release versions, names, numbers and patch numbers.

Full example:  *SeisComP3-jakarta-2020.330.02*

* 3: release version
* jakarta: release name
* 2020.330: release number
* 02: patch number

Names are adjusted depending on changes in source code:

* **Release version:** major changes in module groups, functionality, concepts, data model.
  Example: SeisComp3 is SeisComP in version 3.0
  in comparison to version 2.5 the GUIs were introduced.
* **Release name:** major changes in functionality, concepts, data model.
  Example: with SeisComP3-Seattle the new user friendly configuration GUI :ref:`scconfig`
  was introduced.
* **Release number:** changes in data model version and/or major changes in applications and optimizations.
  The numbers include the year and the day of the year of the software release.
  Example: Jakarta-2018.327
* **Patch number:** optimizations of applications without changes in the data model version.

**Release version:** major changes in module groups, functionality, concepts, data model.
Example: SeisComp3 is SeisComP in version 3.0
in comparison to version 2.5 the GUIs were introduced.

 major changes in module groups, functionality, concepts, data model.

**Release name:** major changes in functionality, concepts, data model.
Example: with SeisComP3-Seattle the new user friendly configuration GUI :ref:`scconfig`
was introduced.

 major changes in functionality, concepts, data model.
Example: with SeisComP3-Seattle the new user friendly configuration GUI 

**Release number:** changes in data model version and/or major changes in applications and optimizations.
The numbers include the year and the day of the year of the software release.
Example: Jakarta-2018.327

 changes in data model version and/or major changes in applications and optimizations.

**Patch number:** optimizations of applications without changes in the data model version.

 optimizations of applications without changes in the data model version.

Applications can only connect to a messaging system that runs with a database
in an equal or lower data base schema version. In distributed |scname| systems
one machine host the messaging system and the database and all other machines
are connected to this messaging or are running independently, the |scname|
installation on the machine operating the messaging is always updated last.

in an equal or lower data base schema version. In distributed 

 systems
are connected to this messaging or are running independently, the 

**Example:** A distributed system includes a processing system with the
messaging system and database and a GUI work station connected to the processing
system:

 A distributed system includes a processing system with the
system:

Upgrade the processing system, take actions to
:ref:`upgrade the database version <tutorials_upgrade-db>`.

Always stop all SeisComP modules before upgrading:

Get the SeisComP package in the latest version or older ones from gempa GmbH or
from the download website of :cite:t:`seiscomp`.

from the download website of 

gempa provides :cite:t:`gsm` for convenient and consistent download and
installation of SeisComP and other packages.

 for convenient and consistent download and

The important novelties, optimizations and changes that are available after upgrading
are documented in the change log which can be read
`online <https://www.seiscomp.de/doc/base/changelog.html>`_.
It is recommend to read the change log before taking further actions.

.

which is integrated in the :ref:`documentation <sc-changelog>` or accessible
from the *Docs* panel in :ref:`scconfig`.

New features are regularly advertised and described in detail on the
`News website of gempa GmbH <https://www.gempa.de/news/>`_ and on the
:cite:t:`seiscomp-forum`.

The normal upgrade including upgrading the major version of SeisComP takes only
a few steps:

:ref:`Download <tutorials_upgrade_download>` the SeisComP package.

Stop all SeisComP modules:

Install the new packages.

.. note::

   Users of external, e.g., |gempa| modules must ensure that these external
   modules match the SeisComP release version if they depend on SeisComP
   libraries.

Users of external, e.g., |gempa| modules must ensure that these external
modules match the SeisComP release version if they depend on SeisComP
libraries.

 modules must ensure that these external

Test the database schema version and update bindings

   seiscomp update-config

:ref:`Upgrade the database schema version <tutorials_upgrade-db>` if
mismatches are reported.

:ref:`Upgrade the database schema version <tutorials_upgrade-db>`

After a successful upgrade, start all modules again and observe the status:

   seiscomp status started

When installing a new SeisComP release with a higher major version number,
upgrading the database may be required. The database version will be tested and
the required actions will be shown when executing:

or when pressing the Update Configuration button in scconfig.
An upgrade from version SeisComP3 jakarta-2017.334 to SeisComP in version 5.1.0
will give, e.g.:

seiscomp update-config
* starting kernel modules
starting scmaster
* configure kernel
* configure scmaster
INFO: checking DB schema version of queue: production
  * check database write access ... OK
  * database schema version is 0.10
  * last migration version is 0.12
  * migration to the current version is required. apply the following
    scripts in exactly the given order:
    * mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_10_to_0_11.sql
    * mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_11_to_0_12.sql
error: updating configuration for scmaster failed

The shown migration scripts can be used directly as given and in the given order:

MySQL / MariaDB:

   mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_10_to_0_11.sql
   mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_11_to_0_12.sql

mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_10_to_0_11.sql
mysql -u sysop -p -D seiscomp -h localhost < /home/sysop/seiscomp/share/db/migrations/mysql/0_11_to_0_12.sql

PostgreSQL:

   psql -U sysop -d seiscomp -h localhost -W -f /home/sysop/seiscomp/share/db/migrations/postgresql/0_10_to_0_11.sql
   psql -U sysop -d seiscomp -h localhost -W -f /home/sysop/seiscomp/share/db/migrations/postgresql/0_11_to_0_12.sql

psql -U sysop -d seiscomp -h localhost -W -f /home/sysop/seiscomp/share/db/migrations/postgresql/0_10_to_0_11.sql
psql -U sysop -d seiscomp -h localhost -W -f /home/sysop/seiscomp/share/db/migrations/postgresql/0_11_to_0_12.sql

Using the migration scripts provides a more user friendly way than copying the
lines of MySQL code from the changelog. In future versions we might add the option
to automatically run the migrations.

Upgrading the database make take some time. Do no interrupt the process!
During this time, the |scname| messaging system is unavailable causing a downtime of the system.

During this time, the 

 messaging system is unavailable causing a downtime of the system.

After applying the migration scripts the database should be at the correct version.
Test again with:

After successfully upgrading the database continue your previous upgrade procedure.

SeisComP in version 4 has some major differences to SeisComP3 which require adjustments.
The main differences are in the :ref:`directories of the SeisComP installation <sec-tutorials_upgrading_path>`
and the :ref:`messaging system <sec-tutorials_upgrading_messaging>`.
The changes and the required actions are explained below. They must be considered
in addition to the steps set out in section :ref:`tutorials_upgrade-normal`.

The main differences are in the 

:ref:`directories of the SeisComP installation <sec-tutorials_upgrading_path>`

.
in addition to the steps set out in section 

With **SeisComP3** all the default installation typically required all modules and configurations
in the directories

 all the default installation typically required all modules and configurations

**All configuration files** must be migrated to the new structures. This
includes:

Configurations and inventory in seiscomp3/:

* seiscomp3/etc/\*.cfg
* seiscomp3/etc/inventory/
* seiscomp3/etc/keys/

All user-defined :ref:`seedlink` and other templates in seiscomp3/share/templates/

The waveform archive and other archives typically in seiscomp3/var/lib/

User-defined files and directories in other places.

   Some configuration default and description files have changed. Spread, arclink
   and arclinkproxy are not part of |scname| anymore. **Therefore, do not migrate:**

   * any default configuration, description and init files. Better enable the desired
     daemon modules again:

     .. code-block:: sh

        seiscomp/bin/seiscomp enable [module]

   *   any file related to spread or the arclink and arclinkproxy servers.

Some configuration default and description files have changed. Spread, arclink
and arclinkproxy are not part of |scname| anymore. **Therefore, do not migrate:**

* any default configuration, description and init files. Better enable the desired
  daemon modules again:

     seiscomp/bin/seiscomp enable [module]

*   any file related to spread or the arclink and arclinkproxy servers.

and arclinkproxy are not part of 

any default configuration, description and init files. Better enable the desired
daemon modules again:

   seiscomp/bin/seiscomp enable [module]

any file related to spread or the arclink and arclinkproxy servers.

Configurations containing absolute paths, e.g. :file:`/home/sysop/seiscomp3/share/scautoloc/grid_custom.conf`,
must be adjusted. Better use :ref:`internal SeisComP variables <concepts_configuration_variables>`
such as *@DATADIR@* instead of *seiscomp3/share* or *seiscomp/share*.

:ref:`internal SeisComP variables <concepts_configuration_variables>`

The software dependencies may have changed.
:ref:`Install the missing ones <software_dependencies>`.

The system environment variables must be updated, e.g. in :file:`$HOME/.bashrc`.
Remove or uncomment the lines  :file:`$HOME/.bashrc` referring to the depreciated SeisComP3
version. Then execute

seiscomp/bin/seiscomp print env >> $HOME/.bashrc
source $HOME/.bashrc

When using pipelines or alias modules, create and enable the alias module names again, e.g.

Migrate the module and bindings configurations of the alias modules including all related additional files which are referred to
in the configurations.

One of the main changes SeisComP3 to SeisComP in version 4.0 is the :ref:`messaging system <concepts_messaging>`.
Spread does not exist anymore and only :ref:`scmaster` is started initially for
the messaging system. :ref:`scmaster` allows to operate several queues in parallel with
different databases. This flexibility comes with additional parameters which require
configuration. Migrate the legacy database parameters and configure the new one:

One of the main changes SeisComP3 to SeisComP in version 4.0 is the 

 allows to operate several queues in parallel with

Remove or comment the obsolete *dbplugin* plugin manually from
:file:`scmaster.cfg` and :file:`global.cfg` ::

# plugins = dbplugin

Set up the messaging queues in the configuration of :ref:`scmaster` in
:file:`scmaster.cfg`.

* Add and configure a new queue or stay with the default ones.

  * *production* considers a database by default.
  * *playback* considers no database by default. Here, parameters can be
    exchanged through the messaging without storing in the database.

  In the following examples, the *production* queue shall be assumed.

  .. note::

     The *production* queue is used by default by all modules connected
     to the messaging system. When removing this queue and a database shall be
     used, another queue must exist
     and the queue name must be configured for all modules in the global
     :confval:`connection.server` parameter. See below for an example.

  * Add the required plugins per queue. Currently only *dbstore* is supported.
    Example for the *production* queue:

    .. code-block:: properties

       queues.production.plugins = dbstore

  * Add non-default message groups, e.g. *L1PICK* and *L1LOCATION* to the list
    of groups **in one of the ways**:

    * **Recommended:** Add groups per queues to defaults in
      :confval:`queues.$name.groups`, e.g. for the *production* group.
      This convenient configuration per queue
      considers the default groups in :confval:`defaultGroups` and simply adds
      new groups in the configuration of queues

      .. code-block:: properties

         queues.production.groups = ${defaultGroups}, L1PICK, L1LOCATION

    * Set groups per queue in :confval:`queues.$name.groups`,
      ignoring groups in :confval:`defaultGroups`

         queues.production.groups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

    * Set groups in :confval:`defaultGroups`

         defaultGroups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

    .. warning::

       When setting groups in the queues all groups configured in
       :confval:`defaultGroups` will be ignored unless `${defaultGroups}` is used.
       Add all groups from :confval:`defaultGroups` to the queues to keep the
       default groups.

  * Add the interface name, currently only *dbstore* is supported. Example for
    a queue names *production*

       queues.production.processors.messages = dbstore

  * Add the database parameters which can be used from the legacy configuration

       queues.production.processors.messages.dbstore.driver = mysql
       queues.production.processors.messages.dbstore.read = sysop:sysop@localhost/seiscomp3
       queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp3

    .. note::

       The name of the database can be freely chosen. The example assumes that
       the database named *seiscomp3* exists already and that it shall be continued
       to be used with the new SeisComP in version 4.x.x.

* Add one or more of the queues to the :confval:`queues` parameter to register
  them by their names

  .. code-block:: properties

     queues = production, playback

Add and configure a new queue or stay with the default ones.

* *production* considers a database by default.
* *playback* considers no database by default. Here, parameters can be
  exchanged through the messaging without storing in the database.

In the following examples, the *production* queue shall be assumed.

.. note::

   The *production* queue is used by default by all modules connected
   to the messaging system. When removing this queue and a database shall be
   used, another queue must exist
   and the queue name must be configured for all modules in the global
   :confval:`connection.server` parameter. See below for an example.

* Add the required plugins per queue. Currently only *dbstore* is supported.
  Example for the *production* queue:

     queues.production.plugins = dbstore

* Add non-default message groups, e.g. *L1PICK* and *L1LOCATION* to the list
  of groups **in one of the ways**:

  * **Recommended:** Add groups per queues to defaults in
    :confval:`queues.$name.groups`, e.g. for the *production* group.
    This convenient configuration per queue
    considers the default groups in :confval:`defaultGroups` and simply adds
    new groups in the configuration of queues

       queues.production.groups = ${defaultGroups}, L1PICK, L1LOCATION

  * Set groups per queue in :confval:`queues.$name.groups`,
    ignoring groups in :confval:`defaultGroups`

       queues.production.groups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

  * Set groups in :confval:`defaultGroups`

       defaultGroups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

  .. warning::

     When setting groups in the queues all groups configured in
     :confval:`defaultGroups` will be ignored unless `${defaultGroups}` is used.
     Add all groups from :confval:`defaultGroups` to the queues to keep the
     default groups.

* Add the interface name, currently only *dbstore* is supported. Example for
  a queue names *production*

     queues.production.processors.messages = dbstore

* Add the database parameters which can be used from the legacy configuration

     queues.production.processors.messages.dbstore.driver = mysql
     queues.production.processors.messages.dbstore.read = sysop:sysop@localhost/seiscomp3
     queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp3

  .. note::

     The name of the database can be freely chosen. The example assumes that
     the database named *seiscomp3* exists already and that it shall be continued
     to be used with the new SeisComP in version 4.x.x.

*playback* considers no database by default. Here, parameters can be
exchanged through the messaging without storing in the database.

 considers no database by default. Here, parameters can be

The *production* queue is used by default by all modules connected
to the messaging system. When removing this queue and a database shall be
used, another queue must exist
and the queue name must be configured for all modules in the global
:confval:`connection.server` parameter. See below for an example.

 queue is used by default by all modules connected

Add the required plugins per queue. Currently only *dbstore* is supported.
Example for the *production* queue:

   queues.production.plugins = dbstore

Add non-default message groups, e.g. *L1PICK* and *L1LOCATION* to the list
of groups **in one of the ways**:

* **Recommended:** Add groups per queues to defaults in
  :confval:`queues.$name.groups`, e.g. for the *production* group.
  This convenient configuration per queue
  considers the default groups in :confval:`defaultGroups` and simply adds
  new groups in the configuration of queues

     queues.production.groups = ${defaultGroups}, L1PICK, L1LOCATION

* Set groups per queue in :confval:`queues.$name.groups`,
  ignoring groups in :confval:`defaultGroups`

     queues.production.groups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

* Set groups in :confval:`defaultGroups`

     defaultGroups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

   When setting groups in the queues all groups configured in
   :confval:`defaultGroups` will be ignored unless `${defaultGroups}` is used.
   Add all groups from :confval:`defaultGroups` to the queues to keep the
   default groups.

**Recommended:** Add groups per queues to defaults in
:confval:`queues.$name.groups`, e.g. for the *production* group.
This convenient configuration per queue
considers the default groups in :confval:`defaultGroups` and simply adds
new groups in the configuration of queues

   queues.production.groups = ${defaultGroups}, L1PICK, L1LOCATION

 group.
considers the default groups in 

Set groups per queue in :confval:`queues.$name.groups`,
ignoring groups in :confval:`defaultGroups`

   queues.production.groups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

queues.production.groups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

Set groups in :confval:`defaultGroups`

   defaultGroups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

defaultGroups = L1PICK, L1LOCATION, AMPLITUDE, PICK, LOCATION, MAGNITUDE, FOCMECH, EVENT, QC, PUBLICATION, GUI, INVENTORY, ROUTING, CONFIG, LOGGING, IMPORT_GROUP, SERVICE_REQUEST, SERVICE_PROVIDE

When setting groups in the queues all groups configured in
:confval:`defaultGroups` will be ignored unless `${defaultGroups}` is used.
Add all groups from :confval:`defaultGroups` to the queues to keep the
default groups.

Add the interface name, currently only *dbstore* is supported. Example for
a queue names *production*

   queues.production.processors.messages = dbstore

Add the database parameters which can be used from the legacy configuration

   queues.production.processors.messages.dbstore.driver = mysql
   queues.production.processors.messages.dbstore.read = sysop:sysop@localhost/seiscomp3
   queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp3

.. note::

   The name of the database can be freely chosen. The example assumes that
   the database named *seiscomp3* exists already and that it shall be continued
   to be used with the new SeisComP in version 4.x.x.

queues.production.processors.messages.dbstore.driver = mysql
queues.production.processors.messages.dbstore.read = sysop:sysop@localhost/seiscomp3
queues.production.processors.messages.dbstore.write = sysop:sysop@localhost/seiscomp3

The name of the database can be freely chosen. The example assumes that
the database named *seiscomp3* exists already and that it shall be continued
to be used with the new SeisComP in version 4.x.x.

the database named 

 exists already and that it shall be continued

Add one or more of the queues to the :confval:`queues` parameter to register
them by their names

   queues = production, playback

Configure the connection parameters of all modules connecting to the messaging
system in the global configuration, e.g. in :file:`global.cfg`.
As in SeisComP3 the connection server is
localhost. The queue name is added to the host by "/". The default queue
is *production*, e.g.

.. note::

   If *production* shall be used, then no additional configuration is required.

system in the global configuration, e.g. in 

.
localhost. The queue name is added to the host by “/”. The default queue
is 

If *production* shall be used, then no additional configuration is required.

After adjusting the structure, variables and configuration parameters, check if the
:ref:`database requires an upgrade <tutorials_upgrade-db>` as well.

When upgrading from SeisComp3 Jakrata-2018.327 or older and using :ref:`seedlink`,
consider the sections :ref:`tutorials_upgrade_seedlink` and
:ref:`tutorials_proc_seedlink`.

When upgrading from SeisComp3 Jakrata-2018.327 or older and using 

If applied, adjust the settings for automatic module status check, e.g. crontab entries.
For crontab use:

If |scname| is controlled by the system daemon, e.g. to start enabled |scname|
modules automatically during computer startup, then the startup script must be
adjusted.

adjusted.

In SeisComP3 prior to Jakarta-2020.330 two stations with the same
station but different network code were mixed in one buffer directory.
As of  Jakarta-2020.330 and SeisComP in version 4 the buffer directories are now
unique!
Before upgrading :ref:`seedlink`, you should therefore rename the buffer directories

unique!
Before upgrading 

, you should therefore rename the buffer directories

You may discover data gaps if you do not rename the buffer directories.

Check the current situation:

   sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ ls
     PB02

Rename the directories properly:

#. Stop seedlink:

      sysop@host:seiscomp stop seedlink

#. Upgrade to SeisComP3-jakarta-2020.330 or SeisComP in version 4 or higher.
#. Rename all seedlink buffer directories to NET.STA, e.g.

   .. code-block:: bash

      sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ mv PB02 CX.PB02
      sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ ls
        CX.PB02

   .. note:

      The :ref:`script below <seedlink-buffer-script>` can be used for renaming the seedlink buffer directories.
#. Update configuration:

      sysop@host:seiscomp update-config

#. Start SeedLink

      sysop@host:seiscomp start seedlink

Stop seedlink:

   sysop@host:seiscomp stop seedlink

Upgrade to SeisComP3-jakarta-2020.330 or SeisComP in version 4 or higher.

Rename all seedlink buffer directories to NET.STA, e.g.

   sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ mv PB02 CX.PB02
     CX.PB02

.. note:

   The :ref:`script below <seedlink-buffer-script>` can be used for renaming the seedlink buffer directories.

sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ mv PB02 CX.PB02
sysop@host:~/seiscomp3/var/lib/seedlink/buffer$ ls
  CX.PB02

note:

The :ref:`script below <seedlink-buffer-script>` can be used for renaming the seedlink buffer directories.

Update configuration:

   sysop@host:seiscomp update-config

Start SeedLink

   sysop@host:seiscomp start seedlink

if [ -z ${SEISCOMP_ROOT+x} ]; then
        echo "Environment variable SEISCOMP_ROOT is not set."
        echo "Either use 'seiscomp exec [script]' or set SEISCOMP_ROOT to the installation "
     exit 1
     echo "path of your SeisComP installation."
fi

grep -A 2 ^station $SEISCOMP_ROOT/var/lib/seedlink/seedlink.ini | while read a b c; do
    if [ "$a" = station -a "$b" != .dummy ]; then
             id=$b
             sta=""
             net=""
             while read a b c; do
                     case $a in
                             --) break;;
                             name) eval sta=$c;;
                             network) eval net=$c;;
                     esac
             done
             if [ -z "$id" -o -z "$sta" -o -z "$net" ]; then
                     echo "Error parsing seedlink.ini"
                     break
             fi

             if [ "$id" != "$net.$sta" ]; then
                     mv -v "$SEISCOMP_ROOT/var/lib/seedlink/buffer/$id" "$SEISCOMP_ROOT/var/lib/seedlink/buffer/$net.$sta"
             else
                     echo "$id: No renaming required"
             fi
     fi
done

Since SeisComP3 in version Jakarta-2020.030 and SeisComP in version 4.0.0,
SeedLink stream processors (``proc`` parameter) can be attached to both, stations
and plugin instances. In order to distinguish between the two cases, either
``proc`` (attach to station) or ``sources.*.proc`` (attach to plugin instance)
parameter (or both) can be used in SeedLink bindings.

SeedLink stream processors (

 parameter) can be attached to both, stations

 (attach to plugin instance)

In case of the :ref:`chain plugin <seedlink-sources-chain-label>` for
:ref:`seedlink`, there is
normally just one instance, so stream processors attached to this instance apply
to all stations. **This is normally not what we want.** Therefore the
chain plugin does not support the ``sources.*.proc`` option.

, there is
to all stations. 

Before SeisComP3 in version Jakarta-2020.030 and SeisComP in version 4.0.0,
stream processors were always attached to stations, even when ``sources.*.proc``
was used. This means when upgrading:

stream processors were always attached to stations, even when 

streams\_\*.tpl templates must be moved one level up, from
:file:`$SEISCOMP_ROOT/seiscomp/share/templates/seedlink/chain/` to
:file:`$SEISCOMP_ROOT/seiscomp/share/templates/seedlink/`.

Using a stream processor with chain_plugin makes only sense when raw
data is generated (:confval:`sources.chain.channels.unpack`).

data is generated (

A stream processor is an object defined in XML, which is used to create MiniSEED
from raw data and optionally downsample the data. What is the difference between
attaching a stream processor to station and plugin instance?

Let's take a look at the following stream processor definition in
:file:`$SEISCOMP_ROOT/share/templates/seedlink/streams_stream100.tpl`:

Let’s take a look at the following stream processor definition in

<proc name="stream100">
  <tree>
    <input name="Z" channel="Z" location="" rate="100"/>
    <input name="N" channel="N" location="" rate="100"/>
    <input name="E" channel="E" location="" rate="100"/>
    <node filter="FS2D5" stream="BH">
      <node filter="F96C">
        <node filter="ULP" stream="LH">
          <node filter="VLP" stream="VH"/>
        </node>
      </node>
    </node>
  </tree>
</proc>

This creates 20Hz BH\*, 1Hz LH\* and 0.1Hz VH\* streams from 100Hz Z, N, E raw
data. If one plugin instance is used for the station, it does not make a
difference whether this is attached to station or plugin instance. But suppose
the station is using two plugin instances—one for broad-band and the other for
strong-motion data—, both sending Z, N and E channels. Now if the stream processor
is attached to station, data from both plugin instances would mixed up. We must
attach a different stream processor to each plugin instance—one producing BH\*,
LH\* and VH\* and the other one producing BN\* and so on.

Hyperlink target "tutorials-upgrade-versions" is not referenced.

Hyperlink target "tutorials-upgrade-download" is not referenced.

Hyperlink target "tutorials-upgrade-changelog" is not referenced.

Hyperlink target "sec-tutorials-upgrading-path" is not referenced.

Hyperlink target "sec-tutorials-upgrading-messaging" is not referenced.

Hyperlink target "tutorials-upgrade-seedlink" is not referenced.

Use previously recorded waveform files to re-run the analysis
of an old event using SeisComP. This is known as a *waveform playback*.

of an old event using SeisComP. This is known as a 

Insert results into your current SeisComP database for later processing.

The results from the playback are in your SeisComP system, e.g. :term:`picks <pick>`,
:term:`origins <origin>`, :term:`amplitudes <amplitude>`, :term:`events <event>`

The results from the playback are in your SeisComP system, e.g. 

Playbacks are an important way of testing module and whole-system configurations,
operator trainings, system demonstrations and validations and tuning of the SeisComP modules
used for detecting and locating events, e.g. involving

Playbacks rely on miniSEED data which are obtained from the :term:`SDS` archive or
other sources. The miniSEED data records in the data files must be sorted by end time!

 archive or

First extract the data. Make sure the miniSEED records are sorted by end time.
The data extraction depends on the data source.

**SDS archive:** Extract the data from your own SDS archive using :ref:`scart`
and save it in a new miniSEED file :file:`[your miniSEED file]`, sorted by
end time of the records.

Examples:

   scart -dsE -l [list file] $SEISCOMP_ROOT/var/lib/archive > [your miniSEED file]

scart -dsE -l [list file] $SEISCOMP_ROOT/var/lib/archive > [your miniSEED file]

**FDSNWS:** Get the miniSEED data from an external FDSNWS server. The obtained
data are initially sorted by station and must therefore be sorted by end time
using :ref:`scmssort`. Use the resulting file :file:`[your miniSEED file]`
for your playback.

Example for one hour of data from the GE network from
`FDSNWS at GEOFON <https://geofon.gfz-potsdam.de/waveform/webservices/fdsnws.php>`_:

   wget -O data.mseed "http://geofon.gfz-potsdam.de/fdsnws/dataselect/1/query?net=GE&cha=BH*&starttime=2021-04-01T06:00:00Z&endtime=2021-04-01T07:00:00Z"
   scmssort -u -E data.mseed > [your miniSEED file]

 Get the miniSEED data from an external FDSNWS server. The obtained
using 

`FDSNWS at GEOFON <https://geofon.gfz-potsdam.de/waveform/webservices/fdsnws.php>`_

wget -O data.mseed "http://geofon.gfz-potsdam.de/fdsnws/dataselect/1/query?net=GE&cha=BH*&starttime=2021-04-01T06:00:00Z&endtime=2021-04-01T07:00:00Z"
scmssort -u -E data.mseed > [your miniSEED file]

**CAPS server:** Extract the data from gempa's CAPS server :cite:p:`caps`
using :cite:t:`capstool`:

   capstool -H [host]:[port] [request file] > data.mseed

or :ref:`scart` with the *caps* :term:`recordstream`:

   scart -I caps://[host]:[port] -l [list file] --stdout > data.mseed

Eventually, sort the downloaded data by end time with :ref:`scmssort` creating
a new file, :file:`[your miniSEED file]`:

scart -I caps://[host]:[port] -l [list file] --stdout > data.mseed

Use the resulting file :file:`[your miniSEED file]` for your playback.

In a real-time playback data are injected into the seedlink buffer from a file
using the command-line tool :ref:`msrtsimul`. Therefore, seedlink requires a configuration.

using the command-line tool 

Prepare :ref:`seedlink` to except data from msrtsimul:

* In the :ref:`module configuration <concepts_configuration>`
  of seedlink set

     msrtsimul = true

* Save the configuration, update the configuration and restart seedlink:

     seiscomp update-config
     seiscomp restart seedlink

  Open :scrttv: to verify the success of this re-configuration. No new data must arrive.

In the :ref:`module configuration <concepts_configuration>`
of seedlink set

   msrtsimul = true

Save the configuration, update the configuration and restart seedlink:

   seiscomp restart seedlink

Open :scrttv: to verify the success of this re-configuration. No new data must arrive.

Restart all automatic data processing modules you wish to involve. Additionally start
:ref:`slarchive` to archive the miniSEED data in the SDS archive for post-processing.

   seiscomp restart scmaster scautopick scautoloc scamp scmag scevent slarchive

 to archive the miniSEED data in the SDS archive for post-processing.

seiscomp restart scmaster scautopick scautoloc scamp scmag scevent slarchive

Start all desired :term:`GUI` modules to observe the data acquisition and processing
and the event results, e.g.:

   scrttv & scmv & scesv & scolv

 modules to observe the data acquisition and processing

Start the playback using msrtsimul:

   msrtsimul -v [your miniSEED file]

This will play back the data as if they where perfectly recorded and received now.
To preserve the time of the records use :program:`msrtsimul` with the historic
mode:

   msrtsimul -v -m historic [your miniSEED file]

.. note::

   Using :program:`msrtsimul` with the historic mode requires to reset the
   seedlink buffer and the buffer of other processing modules by removing
   the buffer files and restarting the modules. This mode may
   therefore be exclusively used by experienced users.

mode:

To preserve the time of the records use 

Using :program:`msrtsimul` with the historic mode requires to reset the
seedlink buffer and the buffer of other processing modules by removing
the buffer files and restarting the modules. This mode may
therefore be exclusively used by experienced users.

 with the historic mode requires to reset the

Revert the seedlink configuration after the playback to return to the original real-time
data acquisition.

Be careful with executing real-time playbacks on production SeisComP systems:

* You potentially disrupt the real-time data acquisition
* You potentially add data at wrong times to seedlink and your SDS waveform archive
* You modify the history of the created events
* You potentially add events at wrong origin times to your database.

Better use separate test systems for real-time playbacks.

You potentially add data at wrong times to seedlink and your SDS waveform archive

You potentially add events at wrong origin times to your database.

In non-real-time playbacks, also referred to as offline playbacks, data are processed
by each module as fast as possible. The results can be communicated by

XML files in :term:`SCML` format: XML playback. They require the processing
modules to provide the *- -ep* option.

 format: XML playback. They require the processing
modules to provide the 

In non-real-time playbacks scheduling and the creation history are not representative of
real-time situations.

Use :ref:`scolv` or other :term:`GUIs <GUI>` to review the results:

Event parameters are in the default database. Configure :ref:`concepts_RecordStream`
if the waveforms are in the seedlink or in the :term:`SDS` archive:

   scolv -d mysql://sysop:sysop@localhost/seiscomp

Event parameters are in the default database but the waveforms are read from the miniSEED file:

   scolv -d mysql://sysop:sysop@localhost/seiscomp -I file://[your file]

.. note::

   Reading from the original file will only work if the actual times of the data
   are preserved during the playback. This is **not** the case when starting
   :program:`msrtsimul` without the historic mode.

scolv -d mysql://sysop:sysop@localhost/seiscomp -I file://[your file]

Reading from the original file will only work if the actual times of the data
are preserved during the playback. This is **not** the case when starting
:program:`msrtsimul` without the historic mode.

are preserved during the playback. This is 

Event parameters are available in one XML file and the waveforms are read from the miniSEED file:

   scolv --offline -d mysql://sysop:sysop@localhost/seiscomp -I file://[your miniSEED file]

To open the XML file click on the *File* menu of scolv. When results are available in several
XML files, the files can be merged beforehand using :ref:`scxmlmerge`.

scolv --offline -d mysql://sysop:sysop@localhost/seiscomp -I file://[your miniSEED file]

 menu of scolv. When results are available in several
XML files, the files can be merged beforehand using 

Adjust the arguments to match your configuration. Use your own values for arguments enclosed by
brackets, e.g. [your file]

Hyperlink target "tutorials-waveformplayback" is not referenced.

Get real-time data from a remote Seedlink server (single station)

You will use :program:`scconfig` to add waveforms for a single station
which is already in inventory.

 to add waveforms for a single station

:program:`slinktool -Q` locally shows the station's streams are available.

We suppose there is an upstream Seedlink server, such as that
from GEOFON, IRIS, or some other public source.

First, we'll query the upstream Seedlink server,
to confirm that it has current data.
We do this with SeisComP's :program:`slinktool` command,
giving it the '-L' option to list the available stations.
For this example, we'll use the server at host `geofon.gfz-potsdam.de`
on port 18000 (the default) ::

First, we’ll query the upstream Seedlink server,
We do this with SeisComP’s 

 command,
giving it the ‘-L’ option to list the available stations.
For this example, we’ll use the server at host 

AW VNA1  VNA1
AW VNA2  VNA2
[..]
GR BSEG  BSEG
GR BUG   BUG
GR CLL   CLL
GR CLZ   CLZ
[..]

This can be a long list. It shows the network code and station code of each
We can restrict the output to our station of interest using `grep`. ::

We can restrict the output to our station of interest using 

$ slinktool -Q geofon.gfz-potsdam.de | grep GR.CLL
GR CLL      LHN D 2020/05/06 15:13:41.2249  -  2020/05/06 21:15:28.0299
GR CLL      BHZ D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:13.1300
GR CLL      BHN D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:15.4300
GR CLL      HHE D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:50.3450
GR CLL      HHN D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:52.4650
GR CLL      HHZ D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:53.6850
GR CLL      LOG L 2020/05/06 15:13:41.2249  -  2020/05/06 19:59:53.3850
GR CLL      BHE D 2020/05/06 15:13:41.2249  -  2020/05/06 21:22:08.9300
[..]

The columns are: network code, station code, location code (which may
be empty) and channel code, a flag, and then the (UTC) time of the
first and last data available at the server.
(The `grep` command here is used to limit output to just those CLL streams;
without it, this server provides thousands of lines of output.)

(The 

 command here is used to limit output to just those CLL streams;

For an active station the last data time (shown on the
right) will be very recent.

**(Advanced)**
You can restrict who has access to a station's data (from your server)
in your Seedlink bindings.
This sets the :confval:`access` variable in your :file:`seedlink.ini` file.
This can be done for all stations, or per station.
The documentation for :program:`seedlink` gives details.

You can restrict who has access to a station’s data (from your server)
This sets the 

 file.
The documentation for 

Create a *seedlink* profile named "geofon", named after the upstream server.

* Double click on the profile.
* Select the 'chain' plugin for the souce from the drop-down menu
* To add the plugin click on the green "plus" button on the left. Name it anything or even leave the name blank.
* Open this and set the name of the server (:confval:`address`)
  and its TCP port, :confval:`port`. Normally you leave the port at 18000 which is the default.
* If you wish to limit the data requested to particular channels,
  based on channel or location code,
  set Seedlink's :confval:`selectors <sources.chain.selectors>` to "BH?.D" say
  for fetch all BH stream and no auxiliary streams. Add the location code without
  a space to limit by location as well, e.g. 00BH?.D. You may add a comma-separated
  list of streams, e.g. "00BH?.D, 10BH?.D".
  Otherwise you will be requesting all streams available for this
  station, potentially wasting bandwidth and slowing your system.
  No other changes are normally necessary.

To add the plugin click on the green "plus" button on the left. Name it anything or even leave the name blank.

To add the plugin click on the green “plus” button on the left. Name it anything or even leave the name blank.

Open this and set the name of the server (:confval:`address`)
and its TCP port, :confval:`port`. Normally you leave the port at 18000 which is the default.

If you wish to limit the data requested to particular channels,
based on channel or location code,
set Seedlink's :confval:`selectors <sources.chain.selectors>` to "BH?.D" say
for fetch all BH stream and no auxiliary streams. Add the location code without
a space to limit by location as well, e.g. 00BH?.D. You may add a comma-separated
list of streams, e.g. "00BH?.D, 10BH?.D".
Otherwise you will be requesting all streams available for this
station, potentially wasting bandwidth and slowing your system.
No other changes are normally necessary.

set Seedlink’s 

 to “BH?.D” say
list of streams, e.g. “00BH?.D, 10BH?.D”.

Drag and drop this profile from the right side to the network icon on the
left side (you may do that also at the station level)
to apply it to your station.

The SeisComP database must already be updated with the inventory
(see Tutorial :ref:`tutorials_addstation`).

(see Tutorial 

).

   (**Not** "Refresh", - that just refreshes :program:`scconfig`'s

(**Not** "Refresh", - that just refreshes :program:`scconfig`'s

Alternatively, at the command line::

  $ seiscomp update-config seedlink
  $ seiscomp restart seedlink

run ::

   slinktool -Q localhost

run ::

run

Have metadata available. You may follow the tutorial :ref:`tutorials_addstation`.

get real-time data from a remote seedlink server (single station)

This is the documentation for the |scname| version |version| |release|.

Please consider :doc:`contributing</base/contributing-docs>` to this documentation.

.. figure:: base/media/apps/scmv.png
   :alt: scmv

   scmv: MapView with sensor stations and detected events

.. figure:: base/media/apps/scrttv.png
   :alt: scrttv

   scrttv: TraceView with filtered data from configured streams

.. figure:: base/media/apps/scolv-location.png

   scolv: OriginLocatorView with event and phase information

.. figure:: base/media/apps/scolv-picker.png

   scolv: OriginLocatorView phase picker with waveforms and phase information

scolv: OriginLocatorView phase picker with waveforms and phase information

This section of the documentation brings together specific documentation for
each individual module. These are grouped into categories.

delay or latency.
t_{now} may be measured differently depending on the QC parameter.

is derived from streams.group.$name.title.

Example of a website with a per-station channel view created by slmon.

Empirical Equations for the Prediction of PGA, PGV, and Spectral Accelerations in Europe, the Mediterranean Region, and the Middle East

Empirical Ground-Motion Models for Point- and Extended- Source Crustal Earthquake Scenarios in Europe and the Middle East

Evaluation of Real-Time Performance of the Virtual Seismologist Earthquake Early Warning Algorithm in Switzerland and California

Anatomy of an Earthquake Early Warning (EEW) Alert: Predicting Time Delays for an End‐to‐End EEW System

The Virtual Seismologist in SeisComP: A New Implementation Strategy for Earthquake Early Warning Algorithms

Pan-European ground-motion prediction equations for the average horizontal component of PGA, PGV, and 5 %-damped PSA at spectral periods up to 3.0 s using the RESORCE dataset

Seismic response of an 8-story RC-building from ambient vibration analysis

Extending ground-motion prediction equations for spectral accelerations to higher response frequencies

Seismic location bias and uncertainty in the presence of correlated and non-Gaussian travel-time errors

{Improved location procedures at the International Seismological Centre}

ISC-GEM: Global Instrumental Earthquake Catalogue (1900–2009), II. Location and seismicity patterns

{Relocation of Seismicity in the Pannonian Basin Using a Global 3D Velocity Model}

{A Fast, Non-saturating Magnitude Estimator for Great Earthquakes}

Science Applications International Corporation (SAIC), San Diego

{Infrasonic Signal Detection and Source Location at the Prototype International Data Centre}

{An automatic seismic event processing for detection and location: The PMCC method}

Updated predictive equations for broadband (0.01–10 s) horizontal response spectra and peak ground motions, based on a global dataset of digital acceleration records

{Creating the Virtual Seismologist: developments in ground motion characterization and seismic early warning}

PhD thesis, California Institute of Technology, Pasadena, California

{The Virtual Seismologist (VS) Method: a Bayesian Approach to Earthquake Early Warning. In: Gasparini P., Manfredi G., Zschau J. (eds) Earthquake Early Warning Systems}

{Real-time performance of the Virtual Seismologist earthquake early warning algorithm in southern California}

{Scaling of peak ground acceleration and peak ground velocity recorded in the Netherlands}

The effect of small, aspherical perturbations on travel times and a re-examination of the correction for ellipticity

Global teleseismic earthquake relocation with improved travel times and procedures for depth determination

Precision of epicenters obtained by small numbers of world-wide stations

Confidence regions and error determinations for seismic event location

Real-time earthquake monitoring for tsunami warning in the Indian Ocean and beyond

{Monitoring the West Bohemian earthquake swarm in 2008/2009 by a temporary small-aperture seismic array.}

Summary of Magnitude Working Group recommendations on standard procedures for determining earthquake magnitudes from digital data

Teleseismic location techniques and their application to earthquake clusters in the South-Central Pacific

{Comparison of Magnitudes Estimated by the Japan Meteorological Agency with Moment Magnitudes for Intermediate and Deep Earthquakes}

Travel times for global earthquake location and phase identification

{User’s guide to HYPOINVERSE-2000, a Fortran program to solve for earthquake locations and magnitudes}

The compensated linear‐vector dipole: A possible mechanism for deep earthquakes

Bayesian inference of empirical ground motion models to pseudo-spectral accelerations of south Iceland seismic zone earthquakes based on informative priors

Hypo71 (revised): a computer program for determining local earthquake hypocentral parameters, magnitude, and first motion pattern of local earthquakes

A crust and upper mantle model of Eurasia and North Africa for Pn travel time calculation

{P Wave Coupling of Underground Explosions in Various Geologic Media.}

{Identification of Seismic Sources — Earthquake or Underground Explosion. NATO Advanced Study Institutes Series (Series C — Mathematical and Physical Sciences)}

Seismic wave attenuation and magnitude relations for eastern North America

LSQR: An Algorithm for Sparse Linear Equations and Sparse Least Squares

Attenuation relations for near- and far-field peak ground motion (PGV, PGA) and new magnitude estimates for large earthquakes in SW-Iceland

{Seismic yield determinationof Soviet underground nuclear explosions at the Shagan River test site}

{A Revised Local Magnitude (ML) Scale for New Zealand Earthquakes}

Rapid characterisation of large earthquakes by multiple seismic broadband arrays

Evaluierung der Qualität und Geschwindigkeit von Erdbebendetektionen in SeisComP3

EVALUATION OF EARTHQUAKE DETECTION PERFORMANCE IN TERMS OF QUALITY AND SPEED IN SeisComP3 USING THE NEW MODULES QCEVAL, NPEVAL AND SCEVAL

Array analysis for monitoring micro-seismicity and teleseismic earthquakes in SeisComP3

Monitoring of earthquakes and tsunamis at the National Tsunami Warning Center of DGMET, Oman

Comparing location estimators: Trimmed means, medians, and trimean

{A Depth‐Dependent Local Magnitude Scale for New Zealand Earthquakes Consistent with Moment Magnitude}

{Geophysical inversion with a neighbourhood algorithm. I. Searching the parameter space}

Seismic event location: non-linear inversion using a neighbourhood algorithm

{ML determination for local and regional events using a sparse network in Southwestern Germany}

{A FORTRAN Code for the Sensitivity Estimate of a Seismic Network: An Application to Campi Flegrei}

{Synthesis of Wood-Anderson seismograms from broadband digital records}

{Relationships between Peak Ground Acceleration, Peak Ground Velocity, and Modified Mercalli Intensity in California}

German-Indonesian Tsunami Early Warning System for the Indian Ocean

{The SeisComP seismological software package. GFZ Data Services.}

{Helmholtz-Centre Potsdam - GFZ German Research Centre for Geosciences and gempa GmbH}

German-Indonesian Tsunami Early Warning System for the Indian Ocean.

Seismic location bias and uncertainty in the presence of correlated and non-gaussian travel-time errors.

Relocation of Seismicity in the Pannonian Basin Using a Global 3D Velocity Model

Improved location procedures at the International Seismological Centre

A Fast, Non-saturating Magnitude Estimator for Great Earthquakes

Monitoring the West Bohemian earthquake swarm in 2008/2009 by a temporary small-aperture seismic array.

Summary of magnitude working group recommendations on standard procedures for determining earthquake magnitudes from digital data.

Teleseismic location techniques and their application to earthquake clusters in the south-central pacific.

Comparison of Magnitudes Estimated by the Japan Meteorological Agency with Moment Magnitudes for Intermediate and Deep Earthquakes

User’s guide to HYPOINVERSE-2000, a Fortran program to solve for earthquake locations and magnitudes

Hypo71 (revised): a computer program for determining local earthquake hypocentral parameters, magnitude, and first motion pattern of local earthquakes.

Seismic wave attenuation and magnitude relations for eastern north america.

Lsqr: an algorithm for sparse linear equations and sparse least squares.

A Depth‐Dependent Local Magnitude Scale for New Zealand Earthquakes Consistent with Moment Magnitude

A Revised Local Magnitude (ML) Scale for New Zealand Earthquakes

Comparing location estimators: trimmed means, medians, and trimean.

Geophysical inversion with a neighbourhood algorithm. I. Searching the parameter space

Seismic event location: non-linear inversion using a neighbourhood algorithm.

ML determination for local and regional events using a sparse network in Southwestern Germany

Synthesis of Wood-Anderson seismograms from broadband digital records

Helmholtz-Centre Potsdam - GFZ German Research Centre for Geosciences and gempa GmbH